Why a graph, not a folder
Three things a folder full of files can't give you — plus the exports and integrations that make the graph part of your daily loop.
Deterministic AST extraction
Tree-sitter grammars in a native Rust core — no regex guessing. Every node is anchored at file:line and every edge carries its provenance.
Structure that survives the session
Hub files, god nodes, communities, and blast radius stored in SQLite — rebuilt incrementally in seconds as your code changes.
An honest audit trail
Every edge is labeled EXTRACTED, INFERRED or AMBIGUOUS with a numeric confidence score. --detail high shows declared facts only.
Answers for agents and humans
Query from the CLI, point any MCP-capable agent at the built-in stdio server, or ask for an Aider-style repo map ranked by PageRank.
Wiki & Obsidian export
An agent-crawlable markdown wiki, or a full Obsidian vault with [[wikilinks]] and a canvas of your communities. Regenerated on every update.
Local semantic layer
Optional local embeddings add similar_to edges and semantic query recall — no API key, offline after a one-time download. Or bring your own LLM.
One pipeline, pure stages
Each stage is a pure function in its own Rust crate. SQLite persists; petgraph computes.
Put your codebase on the graph
One command, one local directory, no cloud. See worked examples — including what the graph got wrong.