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

Graft review

Graft builds a local map of a codebase so coding agents can find symbols, relationships, and likely files without rereading the repository from scratch. Its structural graph works without a model key, while an optional deep pass asks your chosen model provider to write richer explanations.

+286stars / 7d
Verdict

Our Graft run installed 86 packages, passed all 938 tests, and reported 0 known vulnerabilities, making it an unusually low-friction trial for teams whose coding agents keep rediscovering the same code. Use the structural graph first, inspect graft init --dry-run, and add the model-backed deep pass only if its extra explanations justify sending source-derived content to your provider. Vue projects, Node 20 environments, and monorepos near several thousand files should reproduce the current open reports before putting Graft in CI.

We ran it

Lab card: what happened when we ran GraftScreenshot of Graft (graft.nanonets.ai)
Install✓ · 20s86 packages · 349 MB
Build✓ · 8s
Tests✓ · 73s938 passed · 0 failed of 938 (node:test)
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo283 files~44,181 lines of source · 43.9 MB · 6 CI workflows · Dockerfile · tests dir

Answers from our run

Does Graft build from source?

Dependencies installed in 20 seconds (86 packages), and the build succeeded in 8 seconds. We cloned commit d92f856 into a clean Debian container with 3 CPUs and no project-specific setup.

Do Graft's tests pass?

Yes: 938 of 938 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 found none in the dependency tree at the time of our run.

Who should not use Graft?

Teams that cannot send source-derived content to an outside model provider: the structural graph stays local, but graft build --deep sends files through the provider and model you configure.

What are the alternatives to Graft?

Aider, Repomix, Continue. Our Graft run installed 86 packages, passed all 938 tests, and reported 0 known vulnerabilities, making it an unusually low-friction trial for teams whose coding agents keep rediscovering the same code.

Setup4/520-second install; init can write repo and user-level agent files
Docs4/5Commands, data flow, languages, telemetry, and write scope are explicit
Community4/54,948 stars and current issue activity, with 81 issues and PRs
Maturity3/5938 tests pass, but current runtime and integration reports remain

Who it’s for

Developers using Claude Code, Codex, Cursor, Gemini, or another supported coding agent on a codebase large enough that repeated exploration wastes time.
Teams that want a readable, file-based code graph instead of a hosted index or vector database.
Maintainers who need call tracing, change blast radius, repository maps, or MCP tools alongside ordinary agent prompts.
Polyglot teams whose source is covered by Graft's 22 documented languages.

Who it’s NOT for

Teams that cannot send source-derived content to an outside model provider: the structural graph stays local, but graft build --deep sends files through the provider and model you configure.
Vue teams relying on graft check as a CI freshness gate today: open issue 236 reproduces a clean build being reported as stale for every .vue node.
Node 20 users who need a supported dependency chain: open issue 234 says Graft declares Node 20 support while its direct Commander 15 dependency requires Node 22.12 or newer.
Owners of very large monorepos who cannot test on a copy first: open issue 122 reports a v0.10.1 build exhausting memory near 2,900 of 3,294 parseable files.
Repositories centered on an undocumented language: the README says unsupported files are skipped rather than indexed.

Setup reality

Our sandbox installed 86 npm packages in 20 seconds and used 349 MB on disk. The build passed in 8 seconds, then all 938 node:test cases passed in 73 seconds. Npm audit found 0 known vulnerabilities.

The structural build, search, and freshness check need no model key. The optional deep pass needs a provider, API key, and model; Graft supports Anthropic or an OpenAI-compatible endpoint. graft init can edit repository instructions and user-level Codex configuration, so use --dry-run and --no-global when that scope matters.

Graft documents 22 languages, with different extraction depth by language. A current issue also flags a mismatch between the declared Node 20 floor and Commander 15's Node 22.12 requirement. Vue freshness checks and very large monorepos have open failure reports that deserve a trial on your own tree.

The useful part is a local code graph your agent can query

Graft parses a repository into linked files that describe symbols, imports, calls, directories, and likely areas of impact. The structural layer uses tree-sitter and stays on the machine. Commands such as graft ask, graft callers, graft skeleton, graft grep, and graft map let an agent request a narrow slice instead of opening files until it stumbles onto the right subsystem. The generated graph is a cache under graft/, and the tool adds that directory to .gitignore by default.

The pitch is credible because the output is ordinary data rather than a service you must keep running. There is no vector database or daemon for the default path. A query checks the working tree and refreshes changed structural data before answering. Graft also exposes 6 MCP tools for finding code, reading a file's API, tracing calls, searching all matches, mapping a repository, and checking freshness. That makes it useful beside an existing coding agent without forcing a replacement editor.

Twenty-two languages get unequal levels of code understanding

The README lists 22 languages, but support has tiers. TypeScript, JavaScript, Python, Go, Java, and R receive hand-written extraction with cross-file call and import resolution. Rust, C, C++, C#, Ruby, PHP, Kotlin, Scala, Swift, Elixir, Solidity, OCaml, Zig, Dart, Clojure, and Lua use a broader generic extractor. Optional language servers can add more precise edges for Rust, C and C++, Go, Python, and TypeScript or JavaScript.

That distinction matters more than the total. A symbol appearing in the graph does not prove every call edge is resolved with compiler accuracy. Unsupported files are skipped, according to the README. Open issue 236 also shows a narrower integration defect: with Graft 0.13.0, a clean Vue build was followed by graft check reporting every .vue node as removed. Retrieval still worked in the report, but the freshness command could not serve as a reliable CI gate for that repository.

What happened when we ran it

Our sandbox installed Graft at commit d92f856 in 20 seconds. Npm added 86 packages, and the installed tree occupied 349 MB. The source checkout itself contained 283 files, about 44,181 lines of source, and used 43.9 MB. Installation completed without an error, which is a better first impression than many tools that expect a globally prepared developer machine.

The build passed in 8 seconds. Node's test runner then completed in 73 seconds with 938 passed and 0 failed out of 938. Npm audit reported 0 known vulnerabilities across critical, high, moderate, and low severities. The repository also contained 6 CI workflow files, a Dockerfile, and a tests directory. These results cover the supplied commit in our fresh Debian container with 3 CPUs, 8 GB of RAM, no secrets, and no privileged access.

Deep explanations require a provider key and expose more code

A plain structural build costs no model tokens and needs no network call. graft build --deep changes that boundary. It sends file content through the provider and model you select, then caches model-written summaries, concept nodes, and per-symbol explanations. Supported routes include Anthropic and OpenAI-compatible services such as OpenRouter, Fireworks, Groq, a LiteLLM proxy, or a local endpoint. Teams with confidential code need to judge the chosen provider's terms and deployment before enabling this layer.

Provider compatibility is still a practical fault line. Open issue 235 reports that version 0.13.0 repeatedly stopped a deep build against DeepSeek V4 Flash through Together after reaching 2,047 of 2,133 symbol summaries. The structural graph remained clean in that report. This is a good reason to treat deep enrichment as optional: the local map can still be useful when a model returns an empty or unusable response.

Init can write outside the repository, so preview it first

graft init detects supported agents and offers to write their native instruction files. Claude Code receives a project skill, MCP registration, status line, and hooks. Codex integration may edit AGENTS.md, ~/.codex/config.toml, ~/.codex/hooks.json, and a hook shim under the user's Codex directory. Those user-level settings apply beyond the current repository. The README documents --dry-run to list changes and --no-global to keep writes inside the project.

Noninteractive use is safer by default: without a terminal prompt, init writes nothing unless you pass an explicit agent list or --yes. Even so, a team should review the generated instructions before committing them. Graft's local cache stays ignored, while selected wiring files are meant to be shared. That separation is sensible, but it adds agent policy to the repository and can affect every developer after checkout.

Current issues put Node 20 and huge monorepos on the trial list

GitHub showed 4,948 stars, 81 combined issues and pull requests, and a last push on August 25, 2026. The repository has no GitHub release returned by the latest-release endpoint, though its tags include v0.13.0. Activity is plainly current. The size of the open queue and the project's July 2026 creation date also suggest fast change, so pin the npm version and read upgrade notes before putting generated context into a required workflow.

Open issue 234 says the package declares Node 20 or newer while direct dependency Commander 15 requires Node 22.12 or newer. Issue 122 documents a Graft 0.10.1 run that exhausted memory near 2,900 of 3,294 parseable files, although smaller scoped builds succeeded. Neither report cancels our clean 938-test result. They define where that result stops answering the adoption question: older runtimes, Vue checks, provider-specific deep builds, and very large repositories need their own proof.

Graft earns a trial because the structural path is local, inspectable, and useful before any model call. Start with one representative repository, compare agent file reads on real work, and keep the graph advisory until freshness checks pass in CI. If the map saves repeated exploration without confusing the agent, the 20-second install was cheap evidence. If it does not, removing a generated cache and a small set of reviewed wiring files is a manageable exit.

Alternatives

ProjectWhat it isPick it when
Aider gh↗A terminal coding assistant with its own repository-map approach.pick this instead when you want the coding agent and codebase navigation in one terminal application.
Repomix gh↗A tool that packs repository contents into an AI-friendly file.pick this instead when a portable snapshot for many models is enough and you do not need a persistent call graph.
Continue gh↗An open-source coding agent with editor and automation workflows.pick this instead when you need a full coding-agent platform rather than a context layer for agents you already use.

Sources

  1. Graft README
  2. Graft repository facts
  3. Vue freshness check issue 236
  4. Deep build provider issue 235
  5. Node engine mismatch issue 234
  6. Large monorepo memory issue 122

More ai tools reviews

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