Sno Station
Sno Station은 AI 에이전트를 하나의 팀으로 묶는 오픈소스 워크스테이션으로, 로컬 머신에서 에이전트 협업을 가능하게 함
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Fast, accurate C/C++ code navigation for VS Code: call graph, callers/callees through macros and function pointers, symbol search, #if-aware indexing without a build or compile_commands.json. Indexes the Linux kernel in about a minute. Also a CLI and language server.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Language servers built on a compiler, such as clangd, need to know exactly how
every file is compiled. A great deal of real C cannot tell them: firmware built
with a proprietary toolchain, SDKs with a header per chip, vendor trees that only
build on one machine, code too large or too old to have a working compilation
database. Text indexers such as ctags and cscope work anywhere, but they find
names, not calls, and they cannot tell which #if branch is compiled.
Norn reads the sources the way a person would, and the build's own description where there is one:
compile_commands.json files and works out which #if branches are compiled.| Norn | clangd | ctags / cscope / GNU Global | |
|---|---|---|---|
| Works without a compilation database | ✅ | ⚠️ less accurate | ✅ |
Knows which #if branches the build compiles | ✅ | ✅ with a database | ❌ |
| Call graph (callers and callees) | ✅ | ✅ | ⚠️ cscope, by name |
| Calls through function pointers | ✅ | ❌ | ❌ |
| Calls generated by macros | ✅ | ✅ with a database | ❌ |
| Index updated as you save | ✅ | ✅ | ❌ re-run |
| Source Insight-style views (Relation, Context) | ✅ | ❌ | ❌ |
Measured on public projects against clang's own view of a real build of each.
Each tool's cold index of the whole project is timed, and every call it reports
is checked against the call clang compiles. clangd is measured twice: given each
build's own compilation database (clangd at its best, the reference for an index
that is told exactly how every file is compiled) and given none, as a project
without a working compile_commands.json leaves it. Norn is given nothing. ctags, cscope and GNU Global
index fastest because they record names and places, not a call graph.
| Project | Language | Files | Norn | clangd + build database | clangd | codebase-memory-mcp | cscope | GNU Global | Universal Ctags |
|---|---|---|---|---|---|---|---|---|---|
| Redis | C | 801 | 100.0%0.33 s | 100.0%2.71 s | 95.8%15 s | 97.1%15 s | 96.9%0.28 s | n/a0.20 s | n/a0.18 s |
| git | C | 919 | 99.9%0.26 s | 99.9%2.42 s | 64.2%34 s | 85.9%12 s | 87.9%0.28 s | n/a0.21 s | n/a0.17 s |
| binutils | C | 1,622 | 99.6%2.56 s | 92.7%9.65 s | 32.3%22 s | 81.0%38 s | 70.6%1.40 s | n/a0.87 s | n/a1.03 s |
| STM32F4 HAL | C | 253 | 96.5%0.67 s | 95.0%2.82 s | 0.0%1.86 s | 85.8%10 s | 75.7%0.46 s | n/a0.72 s | n/a0.63 s |
| nrfx | C | 535 | 99.4%0.58 s | 100.0%1.12 s | 14.1%1.59 s | 94.2%8.65 s | 12.0%0.31 s | n/a0.41 s | n/a0.36 s |
| curl | C | 1,067 | 89.6%0.34 s | 100.0%1.12 s |
Each cell: the share of calls found (checked against clang), and below it the time to index.
clangd on binutils, STM32F4 HAL, nrfx, curl, Mbed TLS, FreeRTOS, lwIP, U-Boot, Linux, LevelDB, Bitcoin Core, Ninja, GoogleTest, Abseil, yaml-cpp, spdlog: given no include paths and no -D, as a project without a compilation database would, most of the code that needs the build's include paths or definitions does not parse for it. With a real build's database it does far better; that is not what is measured here.
How the numbers are made, every figure for every project, and the versions of
the tools: docs/benchmarks. Every number there is
produced by bench/compare.py; none is typed in. To measure it
again from nothing, on EC2 or any Ubuntu 24.04: bench/ec2.
Norn is a complete language server: Go to Definition, Find References, Call Hierarchy, signature help, rename, folding, formatting and quick fixes too. Alongside Microsoft's C/C++ extension it becomes IntelliSense's configuration provider instead of competing with it. The full list is on the extension's page.
.vsix from the
releases. From the command
line: code --install-extension humphrey0925.norn-c.That is all. The server is included for Windows, Linux and macOS, on x64 and Arm64. The user guide covers every view and setting.
Without VS Code, the same indexer is a command of its own, norn, for the
terminal, scripts, CI, other editors (as a language server) and AI agents
such as Claude Code, Codex, OpenCode and Copilot (as an MCP server, norn mcp;
norn setup sets the agents up, Norn for AI agents says how): see
the command line.
sources ─► tree-sitter parse ─► facts per file ─► link ─► call graph (CSR) ─► language server
▲ ▲
#if worked out from the build's calls through macros and
own configuration and the sources function pointers resolved
Norn is written in Rust. Each file is parsed once with tree-sitter after its preprocessor conditions are worked out, from the build's configuration and from what the sources themselves define. The facts of each file are cached by content hash, and a folder opened inside or around one already indexed takes those facts for every file it reads the same way; linking them into a call graph takes milliseconds, so saving a file updates the index almost at once. The graph is kept in compressed sparse rows, which answer a callers query in well under a microsecond.
Requires Rust (stable) and Node.js 20.
cargo build --release
cd vscode && npm ci && npm run compile
| Path | |
|---|---|
crates/si-core | The index: parsing, preprocessor conditions, linking, the stored graph |
crates/si-cli | The norn executable: norn lsp (the language server), norn mcp (for AI agents), norn index, norn query |
vscode | The VS Code extension |
bench | Accuracy and speed measurements against clang and other indexers |
Releases are built and tested on Windows, Linux and macOS by GitHub Actions; see docs/releasing.md.
Issues and pull requests are welcome; see CONTRIBUTING.md. Contributions are accepted under the Contributor License Agreement, which the CLA check asks you to sign on your first pull request.
Copyright 2026 humphrey0925 and the Norn contributors. Licensed under the Apache License, Version 2.0.
Source Insight is a trademark of Source Dynamics, Inc. Norn is not affiliated with, or endorsed by, Source Dynamics; the name is used only to describe the style of navigation. Other names are trademarks of their owners.
| 45.4%22 s |
| 78.5%9.74 s |
| 78.7%0.20 s |
| n/a0.15 s |
| n/a0.12 s |
| SQLite | C | 360 | 93.9%0.26 s | 99.2%0.64 s | 74.5%15 s | 90.8%12 s | 83.6%0.29 s | n/a0.19 s | n/a0.19 s |
| Mbed TLS | C | 131 | 89.8%0.11 s | 99.3%0.40 s | 0.0%1.54 s | 68.1%5.43 s | 69.0%0.06 s | n/a0.05 s | n/a0.04 s |
| FreeRTOS | C | 655 | 98.6%0.34 s | 100.0%0.11 s | 9.1%5.57 s | 48.1%9.17 s | 50.6%0.21 s | n/a0.18 s | n/a0.19 s |
| lwIP | C | 480 | 80.5%0.16 s | 96.6%0.48 s | 0.8%4.44 s | 68.8%6.20 s | 75.1%0.11 s | n/a0.09 s | n/a0.07 s |
| U-Boot | C | 13,352 | 94.9%5.54 s | 96.4%4.09 s | 19.9%150 s | 65.5%65 s | 76.2%3.22 s | n/a1.98 s | n/a2.02 s |
| Linux | C | 64,574 | 91.1%64 s | 99.6%113 s | 18.8%1026 s | – | 63.9%56 s | n/a23 s | n/a26 s |
| fmt | C++ | 72 | 89.9%0.20 s | 91.6%3.88 s | 68.1%13 s | 9.2%6.24 s | 4.8%0.06 s | n/a0.04 s | n/a0.04 s |
| LevelDB | C++ | 366 | 96.1%0.27 s | 98.8%2.45 s | 6.3%17 s | 9.2%7.52 s | 4.3%0.09 s | n/a0.08 s | n/a0.07 s |
| Bitcoin Core | C++ | 1,498 | 94.0%3.62 s | 86.8%72 s | 15.2%45 s | 12.3%18 s | 25.9%0.43 s | n/a0.42 s | n/a0.27 s |
| Ninja | C++ | 258 | 99.1%0.31 s | 100.0%2.47 s | 40.7%26 s | 7.6%6.79 s | 15.1%0.08 s | n/a0.07 s | n/a0.06 s |
| GoogleTest | C++ | 155 | 85.3%0.31 s | 92.0%6.92 s | 5.3%10 s | 6.3%5.99 s | 4.1%0.07 s | n/a0.07 s | n/a0.05 s |
| Abseil | C++ | 837 | 78.8%0.28 s | 96.3%22 s | 10.8%27 s | 5.7%8.61 s | 0.8%0.18 s | n/a0.13 s | n/a0.13 s |
| yaml-cpp | C++ | 259 | 86.7%0.36 s | 99.0%2.51 s | 22.4%12 s | 9.2%6.44 s | 2.5%0.08 s | n/a0.06 s | n/a0.06 s |
| spdlog | C++ | 542 | 77.1%0.36 s | 92.3%4.14 s | 2.5%17 s | 4.3%7.30 s | 1.3%0.08 s | n/a0.08 s | n/a0.07 s |
| Cppcheck | C++ | 554 | 84.3%0.29 s | 99.7%8.33 s | 83.4%47 s | 3.3%19 s | 49.7%0.21 s | n/a0.15 s | n/a0.14 s |