Build the map before asking the question
Graft parses a repository into a symbol and call graph that coding agents can query. Its local commands can show a repository map, signatures, callers, references, and ranked files for a question. The graph is stored as files in the project instead of a hosted vector database.
The structural path uses tree-sitter and needs no model or API key. An optional deep build sends code through a model provider you configure to add summaries and concept nodes. This lets you choose between a local code map and a richer, model-generated layer.
We ran the published 0.9.1 package against a disposable copy of Swipe. It parsed
230 files into 2,522 symbols and 4,505 connections. graft map separated the
site, newsletter, and operator packages clearly. A natural-language architecture
query returned relevant code, although an unrelated tool-index result ranked
first, so the ranking still needs human inspection.
Start with build and map
Use graft build and graft map before connecting it to an agent. Ask a
question whose answer you already know and verify the cited files. That checks
whether its parser understands the languages and monorepo shape that matter to
you.
Treat graft init as a separate installation decision. It can write agent
instructions, MCP configuration, hooks, and user-level Codex files. The command
has a dry-run mode, but open issues currently document an unanchored ignore rule
that can hide more than intended and defects in generated configuration. We did
not run it during the Swipe test.
Privacy and limitations
The structural build and queries run locally with no telemetry. Deep builds send selected source to the model endpoint configured by the user. Generated graph files can contain code summaries and excerpts, so review them before committing them to a public repository.
Graft is a young project with no tagged GitHub release at the time of review. Its map can reduce blind exploration, but it is not a correctness oracle. Query ranking can surface irrelevant results, parsers can miss dynamic relationships, and generated explanations can go stale or be wrong. Keep source inspection and tests in the loop.