Back
Kevin Riedl

12 min read Β· 18 Aug 2026
Last reviewed

Next
Made on your device, with no Instagram connection. We copy the post link for Instagram’s Link sticker.

Graft Review: Can an Agent Repo Map Be a Team Asset?

Graft solves a real problem, and the viral version of its pitch is wrong about the part engineering leaders care about most. The problem is genuine: a coding agent starts most tasks blind, greps its way through your repository, rebuilds a picture it already built yesterday, and bills you for the rediscovery. Graft writes that picture down as linked markdown nodes so the next task starts oriented.

The claim circulating in feeds is that the map then travels through git and the whole team inherits it. Graft's own documentation says the opposite. In the official Graft repository, the README states that "the graph is a local, regenerable cache (like node_modules), not something you commit". graft build adds graft/ to your .gitignore automatically, and each teammate runs graft build to generate their own copy.

That is not a flaw. It is the correct default, and it changes what you are actually rolling out: a shared convention and a cheap rebuild, not a shared document. Our verdict after reviewing the project on 18 August 2026: wire Graft into one repository and measure it, but plan the team story around what genuinely belongs in version control. This page owns the product-specific "Graft review" and "agent repo map in git" question. Our Graphify review owns the queryable codebase knowledge graph decision, and the graph engineering guide owns when a graph earns its cost at all.

Want your coding agents measured on your repository instead of a vendor benchmark?

 Plan the Agent Tooling Pilot

What is Graft?

Graft is an MIT-licensed TypeScript CLI that turns a repository into a folder of linked markdown nodes plus a per-symbol code graph, then wires that output into the agents you already use. Installation is two commands, npm install -g @nanonets/graft and graft init. It builds in two tiers, and the difference between them decides both your cost and your privacy review.

LayerWhat it producesModel and key
Structural tierPer-symbol wiring graph, per-file cards, call and reference edges across 21 languagesDeterministic tree-sitter. No model, no key, no network
Concept tier (graft build --deep)Plain-language file summaries, synthesized concept nodes, per-symbol summary and cruxYour provider, your key, your model. Cached by body hash
Query surfaceask, grep, callers, skeleton, map, check, plus six MCP toolsStructural queries run with no model and no key
Agent wiringA Claude Code skill file, a marker-fenced section in AGENTS.md, Cursor, Copilot, Gemini, Kiro, Windsurf rule filesWritten by graft init, merged rather than clobbered

Two design choices are worth naming, because they are what makes the tool interesting rather than the benchmark table. First, there is no vector store: the project's own description is files your agent reads, with no server, database or embeddings. Second, freshness is a loop rather than an index: every query stats the working tree against the last build's fingerprint and rebuilds only what moved, structurally and at zero token cost, so answers describe uncommitted edits too.

That second choice is the substantive engineering. A stale map is worse than no map, because the agent trusts it. Prior art matters here: Aider shipped a tree-sitter repository map ranked by PageRank in October 2023. The ranked repo map is not new. The refresh loop and the multi-agent wiring are the contribution.

Does Graft commit the repo map to git?

No, and you should not want it to. What travels through version control is the wiring: the files graft init drops into .claude/, the marker-fenced Graft section in AGENTS.md, and the MCP configuration. The generated graph under graft/ is gitignored and rebuilt per clone.

ArtifactTravels through gitWho regenerates itFailure mode if you get this wrong
Agent wiring and skill filesYes, committed and reviewedHumans, in a pull requestHalf the team runs a different agent contract
Hand-written conventions in AGENTS.mdYes, committed and reviewedHumans, deliberatelyEvery prompt restates the build and test rules
Structural graph under graft/No, gitignored by defaultEach clone, in seconds, for freeMerge conflicts in generated files, and a map that lies on a branch
Concept summaries from --deepNo, same cacheWhoever holds the provider keyUnreviewed prose about your system that nobody owns
Session scratch contextNoNobody, it is discardedTreating a transcript as documentation

We reached the same conclusion the hard way on this site's own repository. We run coding agents in parallel git worktrees, and generated graph output is deliberately excluded from version control there, because the generated filenames collide across concurrent branches and a conflict in a machine-written file costs review time while producing no review value. A committed map also goes stale at the speed of whichever branch you are on, which is exactly when an agent is most likely to act on it.

So the honest framing of the team benefit is narrower than the viral one, and more useful. Graft does not give your teammate the knowledge your agent built. It gives your teammate a two-second command that rebuilds an equivalent map from the same source of truth: the code. That is a better guarantee than a shared file, because it cannot drift. It is also a rollout task, not a documentation task.

What should live in git, then?

The useful rule is short: commit what a human is accountable for, and regenerate what a parser can rederive. Generated structure is cheap and self-correcting. Intent is neither.

  1. Decisions and constraints. Build and test commands, boundaries the agent must not cross, why the ugly module stays ugly, which interface is a contract. This is what AGENTS.md exists for, a format used by more than 60,000 open-source projects and now stewarded by the Agentic AI Foundation under the Linux Foundation. It is hand-written, reviewed in pull requests, and worth the maintenance.
  2. Derived structure. Call graphs, symbol maps, ranked file lists. Rebuildable, so gitignore it and make the rebuild fast and automatic.
  3. Institutional knowledge that is not code. Runbooks, domain rules, decisions with an owner and a review date. That belongs in a governed store, which is a different build with different rules. Our AI-ready company wiki architecture covers it.

Teams that get this wrong usually fail in one of two directions. They commit generated output and inherit merge noise plus confident stale answers. Or they write nothing down at all and expect the tool to infer intent that was never recorded anywhere. A repo map cannot tell an agent that a table is being migrated and must not gain columns. Only a human can. The same discipline shows up in our software handover checklist, which was written for the human version of the identical problem: what has to be written down before the person who knows it leaves.

Production AI help

Building an AI product and worried about inference cost, architecture, or production readiness? Wavect helps founders turn AI prototypes into reliable production systems.

Explore the service path:

How strong is the evidence behind Graft's numbers?

The mechanism is credible and every published number is vendor-run. That combination deserves a pilot, not a procurement decision. Graft publishes three separate measurement efforts, and they are not equally strong.

MeasurementReported resultWhat it supportsWhere it stops
162-run controlled sweep, Claude Sonnet 5, two repositories, three trials per taskTokens 8,070 to 4,650, tool calls 4.2 to 2.3, latency 39.8s to 15.8s, cost 0.0429 to 0.0292, correctness 93% in both armsThe efficiency mechanism: an oriented agent does less searchingTasks are questions, not changes; one of the two repositories is Graft itself; correctness came from an Opus 4.8 judge with a keyword floor
SWE-bench Verified, 50 instances, official swebench 4.1.0 grader33 of 50 resolved against 27 of 50, with 23% fewer tokens and 32% less wall-clock timeReal correctness, graded by the maintainers' own tests rather than a model50 of the 500 verified instances, a six-instance margin, single run, no variance reported
PocketBase, 15 tasks, Claude Opus, headless, two clones at the same commitCost $13.91 to $11.02, wall-clock 2,044s to 1,762s, 5 of 5 merged pull requests reproducedBehaviour on a real third-party codebase the vendor does not controlPull requests were scored on touching the same files as the maintainers, which is not the same as passing their tests

The SWE-bench arm is the strongest because grading is deterministic. It is also the one to read most carefully. Full SWE-bench Verified contains 500 human-validated instances; 50 is a tenth of it, and the write-up does not say which tenth. The two instances it discusses by name are Django, and one widely used 50-instance subset, SWE-bench-verified-mini, draws only from Django and Sphinx. Neither fact tells you what Graft actually sampled, and that gap is the limitation worth naming: without the instance list, the project and language coverage behind the number is unknown. Six extra instances on an undisclosed sample of 50, run once, is a directional signal. It is not a leaderboard position, and it is not evidence about your Kotlin service.

The most actionable finding is one the marketing does not lead with. The sweep ran a third variant: pull, where the agent gets Graft's tools but nothing is injected up front, so context is paid for only when asked. Pull gave up most of the speed gain and reached 98% correctness against 93% for a cold agent. If being right matters more than being fast, that is the configuration to test first, and it is the opposite of the "push the bundle up front" default that produces the headline latency figure.

What does Graft actually cost?

There is no licence fee. That is where the free part ends, and the real budget has four lines.

  • Structural builds are genuinely free. Tree-sitter parsing, the refresh loop and the structural queries never call a model. For a large repository this is the majority of the value at zero marginal cost.
  • The concept tier is a token line item. graft build --deep summarizes files and symbols under your key, cached by body hash, so the cost lands on churn. Budget it per active developer per clone, not once per repository.
  • Maturity is a cost. The project was created on 3 July 2026 and its latest tag is v0.9.0, with roughly 3,500 stars and dozens of open issues at the time of writing. A pre-1.0 dependency sitting in your agent's context path deserves a pinned version and a tested upgrade path, the same as any other build tool.
  • Reviewer time is the line people forget. Machine-written summaries are unreviewed prose about your architecture. When an agent acts on a wrong summary, a senior engineer pays for it in review. Our cost-per-action framework gives the right denominator: cost per accepted change, including review minutes and rework, not tokens saved per query.

Tokens are the easiest thing to measure and the least interesting thing to optimize. If you want the systematic version of that argument, our token budget playbook covers caching, routing and compression in the order that protects quality.

What do EU teams need to check before rolling this out?

The split between tiers maps neatly onto the compliance question, which is unusually convenient.

A plain graft build is local and deterministic, and the project states it ships no telemetry, with the only network calls being the model requests you configure yourself. For regulated work that is a strong position: you get orientation, symbol maps and call graphs without any code leaving the machine.

graft build --deep is a different decision. It sends file and symbol content to whichever provider you point it at, which makes that provider a processor for your source code. Settle the DPA, the region, the retention window and the training-use terms before the first deep build, not after someone runs it on the payments service. Our EU data residency guide covers the provider side, and redaction before prompting covers repositories where fixtures and logs carry personal data.

One more control worth setting early: the generated graph is a compact, readable description of how your system fits together. Treat it as source code. It should not end up in a support bundle, a public CI artifact or a screenshot in a ticket.

Graft, a repo map, or a knowledge graph: which problem are you solving?

Most teams reaching for a tool like this have one of five different problems, and only two of them are solved by a repo map.

Your actual problemWhere to startWhy
The agent re-explores the same repository on every taskA repo map such as GraftOrientation is precomputed and refreshed structurally, so search stops being the main cost
You need typed, queryable relationships across code, schemas, infrastructure and docsCodebase knowledge graph reviewMulti-hop questions over mixed sources are a graph workload, not a file map
The token bill is the problem, not the retrievalTool-output compressionOversized tool output and retry loops often dominate spend before context design does
Company knowledge outside the codebase is missingAI-ready company wikiPermissions, provenance and review loops are the hard part, and no code parser supplies them
The agent ignores your conventionsAgent skills and instructionsIntent has to be written by a human; no map can infer a rule that was never recorded

If you are still deciding whether any of this pays for itself, start one level up. Our analysis of context as the real bottleneck explains why the category exists, and the context-compression field report shows what measured savings look like in our own delivery work rather than in a vendor table.

A two-week Graft pilot that produces a decision

  1. Pick one repository that hurts. Large, multi-language, poorly documented, actively worked on. A clean 40-file service will not show a difference.
  2. Freeze the task set before you install anything. Ten real orientation and localization questions plus five changes you have already merged, reset to their base commits.
  3. Run three arms, not two. Cold, push (a bundle up front) and pull (tools available on demand). The vendor's own data says these behave differently on correctness.
  4. Grade changes with tests, not file overlap. Touching the right files is a weak proxy. Your test suite is the grader you already trust.
  5. Count cost per accepted change. Tokens, wall-clock, retries and reviewer minutes, divided by changes that survived review.
  6. Attack freshness. Run queries on a dirty tree, mid-rebase, after a large rename and on a branch that deleted a subsystem. A map that lies confidently is the main risk in this category.
  7. Decide the deep-build provider deliberately. Route it through your existing approved model path, or leave the concept tier off for the pilot and measure the free structural tier alone.
  8. Check what lands in git. Review the wiring diff, confirm graft/ is ignored and confirm nothing generated slipped into a commit.
  9. Pin the version. Then upgrade once during the pilot on purpose, and see what the upgrade costs.
  10. Set the scale gate in advance. Adopt only if verified correctness or cost per accepted change improves enough to pay for the rebuild, the review and a pre-1.0 dependency.

Two weeks is enough because the measurement is mechanical, provided somebody owns it. Wavect's AI enablement service runs this comparison inside your repository and hands over the harness, so the result survives the consultant. The Twinsoft AI case study shows how we handle traceable AI output and reviewer control on production work. If you are weighing implementation against a strategy document, compare AI enablement with generic AI consulting first, then tell us which repository is the painful one.

Frequently asked questions

Does Graft commit the repo map to git?
No. The README states the graph is a local, regenerable cache like node_modules and not something you commit, and graft build adds graft/ to .gitignore automatically. What you commit is the wiring that graft init writes into .claude/, a marker-fenced section in AGENTS.md and the MCP configuration. Each teammate runs graft build to generate their own graph.
Is Graft free?
The software is MIT licensed, so there is no licence fee. The structural build, the refresh loop and the structural queries never call a model, so they cost nothing per run. The optional concept tier, graft build --deep, spends tokens under your own provider key.
Does Graft need an API key?
Not for the structural graph. graft build, graft check, graft ask, graft grep, graft callers, graft skeleton and graft map are deterministic tree-sitter operations that need no key and no network. Only graft build --deep, which writes the plain-language summaries and concept nodes, requires a provider key.
Does Graft use embeddings or a vector database?
No. The project explicitly describes itself as files your agent reads, with no server, no database and no embeddings. Retrieval is ranking and link traversal over markdown nodes and a per-symbol code graph rather than similarity search.
Does Graft work with agents other than Claude Code?
Yes. graft init detects and wires Claude Code, Cursor, GitHub Copilot, Codex through AGENTS.md, Gemini, Kiro, Windsurf and others, and it also exposes an MCP server with six tools. Claude Code gets the deepest integration through hooks, a statusline and auto-sync.
Is Graft's 66% SWE-bench Verified result comparable to leaderboard numbers?
Treat it as a directional in-house comparison. It covers 50 of the 500 verified instances, the write-up does not identify which 50, so the project and language coverage behind the number is unknown, and the margin is six instances in a single run with no variance reported. The grading itself is trustworthy because it uses the official swebench harness rather than a model judge.
Should one developer use Graft or the whole team?
Wire it for the whole team or not at all. Because the graph is rebuilt per clone, a single developer using it privately produces no shared benefit and no comparable data. Commit the wiring, agree on whether the deep tier is allowed, and measure cost per accepted change across the team.

Research boundary

Status checked 18 August 2026 against Graft's public repository and project site. This is an independent architecture and buyer review, not a sponsored post, a security audit or our own controlled benchmark of the tool. Every performance figure quoted here is published by the vendor and graded by the vendor's harness, with the SWE-bench arm using the official grader. The project is pre-1.0 and moving fast, so pin a version and re-read the current documentation before you standardize on it.

Final thoughts

Graft is a good answer to a badly framed question. Coding agents really do throw away expensive understanding after every task, and writing that understanding to disk with a cheap structural refresh loop is a sound fix. The published numbers point the right way, and the strongest of them, run under the official SWE-bench grader, is still 50 instances graded once.

The team story is where the popular version of the pitch breaks. The map is a rebuildable cache, not a shared artifact, and that is the right design. What your team actually inherits through git is the wiring plus whatever your engineers were disciplined enough to write down about intent. Adopt the tool for the rebuild loop, keep accountability in reviewed files, and grade the whole thing on cost per accepted change rather than on tokens saved.

Production AI help

Building an AI product and worried about inference cost, architecture, or production readiness? Wavect helps founders turn AI prototypes into reliable production systems.

Explore the service path:

Inbox, without the noise

Follow the work that matters to you

Get a short email when we publish something new. Follow the whole blog or only the problems you care about.

What would you like to receive?
Choose your topics

Free, double opt-in, no tracking pixels.

Back
Kevin Riedl

12 min read Β· 18 Aug 2026
Last reviewed

Next

Get new posts by email

A short email when we publish. Free, no tracking.

Free, double opt-in, no tracking pixels.