Mode d’emploi
- Copiez la commande et examinez le paquet avant de l’installer dans votre environnement agent.
- Consultez le document original pour les outils, identifiants et environnements requis.
- Décrivez les entrées et le livrable souhaité ; comparez la sortie aux sources.
npx skills add https://github.com/onsager-ai/dev-skills --skill codegraphAvant de commencer
- L’installation n’inclut ni abonnement au modèle, ni quota API, ni accès aux fichiers.
- Étoiles et installations reflètent l’activité, pas un test indépendant de qualité ou de sécurité.
Rendu depuis le dépôt source en conservant titres, exemples, code, tableaux, liens et images.
codegraph
Local code graph exposed as 8 MCP tools. Accelerates exploration with O(1) SQLite lookups and FTS5 search — slashing the grep + Read loops needed to orient in a codebase.
It does not replace grep. Codegraph is a tree-sitter approximation of the call graph, not a compiler-grade one: it is fast and low-token but unsound (it has false negatives). Treat it as the accelerator for orientation and traversal, and keep grep as the source of truth for completeness. See Soundness & limits below — this distinction is load-bearing, not a footnote.
When to use
- Brownfield repo where structure is non-obvious
- Task involves: "where is X used", "what breaks if I change Y", "trace flow from A to B"
- Long-running session — cold-start cost amortizes over multiple queries
When NOT to use
- Single-file edits or trivial lookups
- Session likely shorter than cold-start cost (see
references/spike.mdfor per-repo numbers) - Repo not initialized AND no cached
.codegraph/AND short session
Soundness & limits — read before trusting a result
Codegraph is built on tree-sitter, not the compiler, so its call/reference edges are an approximation. It fails in three confirmed ways. The governing rule falls out of them:
Grep is the source of truth for completeness. Codegraph is the accelerator for orientation and traversal. Never invert these.
The asymmetry is the whole argument: for a refactor, a false negative is dangerous (you miss a caller, ship a break); a false positive is merely annoying (you glance and discard). Codegraph has false negatives; grep does not. So codegraph may propose and rank, but grep confirms whenever the answer must be exhaustive.
The three failure modes (measured on a ~580-file Rust+TS repo):
- Unsound edges → false negatives.
callers/callees/impactmiss real call sites when the receiver type can't be resolved from syntax alone (calls on locals, generics, trait objects). Measured: a method with 8 real callers returned 2 — the 5 dropped werelocal.method()and generic-dispatch sites, with no warning. Exact on unique free-functions + direct calls (verified 1/1, 2/2); unreliable on method dispatch. - Name resolution is fuzzy and overload-blind. Bare-name queries prefix-match (
useWorkspaceanswered foruseWorkspacesQuery— a different symbol) and conflate overloads (execute, with 19 definitions, returnedsqlx's.execute()DB calls, not the trait method). For any name with multiple definitions, drop tocodegraph_nodeon a specific symbol id; barecallers/calleesare unattributable. - The index lags the disk. CLI sees nothing until
codegraph sync(~0.3s); the MCP file-watcher closes the gap to ~1–2s. Right after an edit, the index is wrong — grep/Read is ground truth until it catches up.
Decision matrix
| Task | Tool | Why |
|---|---|---|
| Orient / "explain subsystem X" / first survey | codegraph `explore` | One call, ranked, verbatim source — far less context than grep+Read |
| Callers of a uniquely-named free function | codegraph `callers` (trust it) | Exact on unique names + direct calls |
| Find ALL callers before a signature change / rename | grep authoritative; codegraph only to pre-rank | Codegraph is unsound here — completeness can't depend on it |
Anything with an overloaded name (execute, lookup, run, new) | grep, or codegraph node on a specific id | Bare-name codegraph conflates / under-resolves unpredictably |
| Impact of a core type | codegraph `impact --depth 1` to pre-rank, then grep to confirm | Default depth-2 inflates (test fns + one file entry per file) and isn't depth-ranked |
| Just-edited code | grep (or codegraph sync first) | Index is stale until reindex |
| Trait-dispatch / generic call sites | grep + reading | Both weak; codegraph silently drops them, grep at least surfaces the text |
Workflow: start with explore for the map and callers/impact for direction — but the moment the answer must be complete (a rename, "did I get everyone?"), confirm with grep and treat any codegraph-vs-grep delta as "codegraph missed it," not "grep over-matched."
Prerequisites
- Node 18+ on PATH
- Project has
.codegraph/(runcodegraph initif not) - For cloud sessions: cold-start cost verified via
references/spike.mdfor the target repo
Files
references/install.md— installation for local / Claude Code Cloud / devcontainerreferences/usage.md— which of the 8 MCP tools to use when, with main-session vs subagent rulesreferences/spike.md— cold-start measurement protocol; run once per new target repo before relying on codegraph in cloud sessions
Known integration targets
Cold-start measured locally (Node 22, 4 cores). Cloud cold-start still pending — re-run references/spike.md in a cloud session before relying on these numbers there.
| Repo | Indexed files | Nodes / edges | DB size | Cold init+index | Query wall |
|---|---|---|---|---|---|
| onsager-ai/onsager | 578 (rust + tsx/ts) | 8.6k / 20k | 24 MB | 12s | ~0.9s |
| crawlab-team/crawlab | 644 (go) | 6.8k / 15k | 11 MB | 6s | ~0.9s |
| codervisor/leanspec | 695 (tsx/rust/ts) | 8.9k / 21k | 23 MB | 10s | ~0.9s |
Per-query wall is dominated by Node startup — the SQLite work itself is milliseconds. End-to-end cold-start including one-shot npx install is ~13–19s for repos in this size class.


