mrkeyoor.com_
Tue 01 Sept 17:43 UTC
AI Toolsevaluationupdated 26 Aug 2026

Graft review

Graft builds a local graph of a codebase so coding agents can find systems, symbols, callers, and change impact without rereading the repository from scratch. Its structural layer uses tree-sitter, while an optional model-backed pass adds summaries and concept nodes for Claude Code, Codex, Cursor, Gemini, and other agent hosts.

+345stars / 7d
Verdict

Our Graft run built in 7 seconds and passed all 836 tests, but npm audit found 1 high-severity vulnerability, so the code earns a serious trial with a dependency review attached. Use it when coding agents repeatedly lose time mapping the same large repository and your team can inspect the generated context and configuration changes. Skip the deep layer if structural search is enough, and verify Node support before standardizing on Node 20.

We ran it

Lab card: what happened when we ran GraftScreenshot of Graft (graft.nanonets.ai)
Install✓ · 16s50 packages · 301 MB
Build✓ · 7s
Tests✓ · 69s836 passed · 0 failed of 836 (node:test)
Known vulns10 critical · 1 high · 0 moderate · 0 low (npm audit)
Repo255 files~38,337 lines of source · 43.7 MB · 6 CI workflows · tests dir

Answers from our run

Does Graft build from source?

Dependencies installed in 16 seconds (50 packages), and the build succeeded in 7 seconds. We cloned commit 65a76e5 into a clean Debian container with 3 CPUs and no project-specific setup.

Do Graft's tests pass?

Yes: 836 of 836 passed when we ran the project's own test command (node:test). Some failures need services or credentials a bare container does not have.

Does Graft have known vulnerabilities in its dependencies?

npm audit flagged 1 known advisory in the dependency tree at the time of our run.

Who should not use Graft?

Teams that prohibit tools from editing agent instructions or user-level configuration: graft init can write repo files plus Codex MCP and hook settings under ~/.codex/, unless scoped with its flags.

What are the alternatives to Graft?

Repomix, Aider, Zoekt. Our Graft run built in 7 seconds and passed all 836 tests, but npm audit found 1 high-severity vulnerability, so the code earns a serious trial with a dependency review attached.

Setup4/516-second install and 7-second build; init can edit global config
Docs5/5Commands, file writes, telemetry, providers, and graph layers are detailed
Community4/54,896 stars and a push on August 25, 2026, with 79 issues and PRs
Maturity3/5836 tests pass, but one high advisory and a Node engine mismatch remain

Discussed on

  1. hnShow HN: Graft – Claude Code hooks that cut grep tokens by 42%39 points
  2. hnGraft6 points
  3. hnShow HN: Graft – Give coding agents a semantic map instead of grep3 points
  4. hnShow HN: Claude Code kept ignoring our MCP tools, so we used hooks instead3 points

Who it’s for

Teams using coding agents across a large repository where repeated code exploration consumes time and context.
Claude Code users who want automatic repo maps, freshness checks, and post-edit blast-radius hints.
MCP clients that can use Graft's code search, file API, call tracing, map, and freshness tools.
Developers who prefer a local file graph over a hosted embedding index.

Who it’s NOT for

Teams that prohibit tools from editing agent instructions or user-level configuration: graft init can write repo files plus Codex MCP and hook settings under ~/.codex/, unless scoped with its flags.
Node 20 users who need the manifest guarantee to be exact: open issue 234 says Graft declares Node 20 support while direct dependency Commander 15 requires Node 22.12 or newer.
Security gates that require a clean dependency audit: our npm audit found 1 known high-severity vulnerability.
Repositories centered on an unsupported language: the README says unlisted languages are skipped, and full call resolution is available for fewer languages than broad symbol extraction.
Teams unwilling to inspect agent-context claims themselves: the headline efficiency and SWE-bench figures come from Graft's own published harness, not our sandbox run.

Setup reality

Our sandbox installed 50 npm packages in 16 seconds and used 301 MB. The build succeeded in 7 seconds, then all 836 node:test cases passed in 69 seconds. Npm audit reported 1 known high-severity vulnerability, with none critical, moderate, or low.

The structural build and local queries need no model key. The optional deep graph needs a provider, API key, and model ID, with an optional base URL for an OpenAI-compatible service. Graft can also register an MCP server and agent-specific instructions.

graft init may write inside the repository and to user-level Codex configuration. Use its dry-run, agent selection, no-global, no-MCP, and no-hooks controls before accepting those changes. Node support also needs checking because open issue 234 identifies a mismatch between the package manifest and Commander 15.

Graft gives agents a local symbol graph they can query

Graft parses a repository into linked local files and a per-symbol wiring graph. An agent can ask for likely code, list a file's public surface, trace callers, search every indexed symbol, map directories, or estimate the blast radius of a diff. The structural path uses tree-sitter and needs no model account. This is useful when an agent repeatedly opens the same entry points and import chains at the start of each task.

Our checkout contained 255 files, about 38,337 source lines, and 43.7 MB before dependencies. That is a moderate tool codebase rather than a thin wrapper around an API. Graft supports 22 languages at two parsing levels, with richer cross-file resolution for TypeScript, JavaScript, Python, Go, Java, and R. Files in unlisted languages are skipped, so mixed-language teams should measure how much of their repository the graph can see.

The structural graph works without sending source to a model

Plain graft build, freshness checks, queries, maps, and call traversal run locally through deterministic parsers. The generated graph is a cache under the repository and is added to .gitignore. Each query checks the working tree first, so staged and unstaged edits can affect the result. A team can use that layer without supplying a model key, and it can inspect the markdown and JSON artifacts directly.

The optional deep pass has a different trust boundary. It sends file material through the provider chosen with GRAFT_PROVIDER, GRAFT_API_KEY, and GRAFT_MODEL. OpenAI-compatible endpoints can use a custom base URL, while Anthropic has a native path. Our 301 MB installed footprint does not include provider usage or model charges. Teams with sensitive source should decide which layer is allowed before running graft build --deep.

What happened when we ran it

Our run at commit 65a76e5 installed 50 npm packages in 16 seconds. The dependency tree occupied 301 MB in an unprivileged Node 22 Debian container with 3 CPUs and 8 GB of RAM. The TypeScript and viewer build completed successfully in 7 seconds. No provider key or external service was present, so these results cover repository mechanics rather than deep graph quality.

The test command succeeded after 69 seconds. Node's test runner reported 836 passed and 0 failed out of 836. Our scan found a tests directory and 6 CI workflow files, which matches the amount of exercised behavior better than a project with only a compile check. Npm audit still reported 1 known high-severity vulnerability, with 0 critical, 0 moderate, and 0 low findings.

Agent setup can touch repository and machine-wide files

graft init detects supported agents and offers to add their native instruction files. Claude Code receives a skill, project MCP registration, statusline, and hooks. Codex can receive an AGENTS.md section, an MCP server entry in ~/.codex/config.toml, and a post-edit hook under ~/.codex/. The README labels those Codex writes as machine-wide because they affect every repository opened by that user.

Those changes are controllable, but they should be reviewed. --dry-run prints the targets, while --agents, --no-global, --no-mcp, and --no-hooks narrow the installation. With 50 installed packages and no daemon required for the default graph, runtime maintenance is modest. Configuration scope is the sharper concern: a local context helper should not gain global hooks merely because a user accepted defaults without reading the file list.

Six MCP tools cover search, maps, calls, and freshness

The MCP server exposes 6 tools for ranked code lookup, file signatures, call tracing, exhaustive pattern search, a repository map, and graph freshness. These are sensible primitives for agents because each returns a bounded view instead of pasting an entire repository into context. Claude Code has deeper hook integration, while Codex and other MCP clients can call the same server through their own configuration.

Deep integration also changes how prompts are prepared after edits. Graft can refresh structural data, surface dependents, and insert matching nodes into later work. That may save exploration, but generated context can still omit a relevant edge or overstate a model-written summary. The 836 passing project tests establish that its own tested functions worked in our sandbox. They do not establish accuracy for every language, framework convention, or repository layout.

Graft's benchmark is useful evidence that still needs local replication

The README reports a 50-instance SWE-bench Verified comparison using Claude Sonnet 5: its Graft arm resolved 33 instances and the cold arm resolved 27. It also reports fewer tokens, tool calls, API requests, and wall-clock time for the resolved cases. The project describes the images, grader, model, and arm difference, which makes the claim more inspectable than an unexplained speed multiplier.

Those benchmark results belong to Graft's maintainers, while our lab measured install, build, tests, and audit only. A team's own task mix may have shorter discovery paths, unsupported languages, or repository conventions that change the result. Trial it on repeated bug-localization and cross-file tasks, record answer accuracy as well as cost, and keep a cold control. Our 7-second build makes such an evaluation cheap to start.

Current activity is high, with two maintenance warnings

GitHub redirected the requested NanoNets path to the current trailhq/Graft repository. It recorded a push on August 25, 2026, 4,896 stars, and 79 combined issues and pull requests. GitHub returned no latest release, although the checked-out package manifest says 0.12.0. The push date and open discussion show current activity; the combined count does not distinguish defects from proposed changes.

Open issue 234 identifies a concrete support mismatch: Graft declares Node 20 or newer, while direct dependency Commander 15 declares Node 22.12 or newer. That matters for teams following the manifest or CI matrix literally. Alongside the 1 high-severity audit finding, it keeps maturity below the test count alone. Graft is worth testing for agent-heavy work, provided the team pins a revision, reviews init's writes, and clears its dependency policy first.

Alternatives

ProjectWhat it isPick it when
Repomix gh↗Packs selected repository contents into one AI-friendly file with filtering and token counts.pick this instead when a portable context bundle is enough and you do not need a live symbol graph or agent hooks.
Aider gh↗A terminal coding agent with its own repository map and edit workflow.pick this instead when you want the coding agent and repository mapping in one application rather than a context layer for other agents.
ZoektA fast trigram code-search engine designed for indexed search across repositories.pick this instead when exact large-scale code search matters more than model-written summaries or agent wiring.

Sources

  1. Graft README
  2. Graft telemetry contract
  3. Node engine mismatch issue 234
  4. Graft package manifest at measured commit

More ai tools reviews

claudian · SkillSpector · robin · mjlab · MoGe · awesome-design-md · the whole board →