A local map for the agent you already use
Before changing a shared function, a coding agent needs to find its callers. Graft builds a local source map and exposes queries through its CLI and MCP interface. Consider it when you want code navigation added to an existing assistant and can check the returned relationships against the source.
The map lives in a local graft/ directory. At the measured revision, structural parsing uses tree-sitter; an optional deeper pass uses a model to write summaries. Finding a function and explaining its behavior are different jobs. Check both the relationships and any generated explanation before relying on them for a patch.
What happened when we ran it
Our sandbox installed Graft commit 80692e5 in 42 seconds, built it in 8 seconds and passed all 1,266 node:test cases in 135 seconds. The run took place on September 27, 2026, with 3 CPUs and 8 GB of RAM. The recorded image label was lab-node:22; it does not establish the actual Node.js or operating-system version.
Installation recorded 88 dependencies and occupied 443 MB on disk. The checkout occupied 44.7 MB and contained 343 files and about 60,638 source lines. Npm audit reported 1 high-severity vulnerability. The supplied summary does not identify the affected package or establish whether Graft exposes a reachable attack path. Review the advisory before adoption.
The scan also recorded 6 CI workflow files, a Dockerfile and a tests directory. These observations and the passing suite describe the repository checks we ran. They do not measure graph accuracy, agent task completion, patch quality, model spending or time saved. The README's performance figures are project claims, not results from this sandbox.
Graft is now Trail-Code
The current README says, "Graft is now Trail-code." It documents the trail command and @trailhq/trail-code package while retaining the older names. Our measured result belongs to commit 80692e5; it does not establish the behavior of today's package.
The current documentation also describes learnings: files that preserve decisions and preferences for later agent sessions. That serves a different purpose from locating callers. The September run did not assess whether an agent retrieves or follows those learnings. Evaluate that behavior separately if preserving team decisions is your main reason to adopt Trail-Code.
Structural parsing and model summaries have different boundaries
The measured revision documents a structural graph that does not call a model. Its optional --deep pass uses the provider you select for file summaries, concept nodes and per-symbol summaries. Where source material goes therefore depends on the selected endpoint.
For an initial evaluation, use structural queries on a repository whose relationships you already understand. Ask about a shared function and inspect its actual callers. Add summaries only if they answer a question the structural map leaves open. This is a suggested evaluation workflow; the supplied lab run did not reproduce it.
Review today's initialization before trying it
Initialization deserves a separate review from graph construction. At the measured revision, graft init can write agent instructions, register MCP and install hooks. Selecting the generic agents host can also change user-level Codex configuration, affecting other repositories. The documented --dry-run lists proposed writes, and --no-global skips writes outside the repository. These are documented controls, not initialization behavior independently tested by our sandbox.
Today's Trail-Code initializer also processes material beyond source files. The current README says trail init reads the user's own messages from prior Claude Code sessions for the repository. The user's Claude Code performs that reading with Claude Sonnet under the user's login, so those messages go to Anthropic and count toward Claude usage. The README says they do not go to Trail.
When gh is installed and signed in, the current initializer also retrieves review comments from the repository's last 50 merged PRs under the user's GitHub login. The README says material that looks like a secret is removed, then the user's Claude Code reads those comments in the same way. These are documented data flows, not behavior assessed in the September run. They are additional to the optional deep-summary pass.
Inspect proposed configuration writes and decide whether this model processing fits your repository policy before running today's initializer. A structural parser that needs no model does not make every initialization step local to your machine.
Choose the tool for the job
ast-grep provides structural code search, linting and rewriting. Pick it when you need to find a syntax pattern or repeat a code transformation. Graft is the relevant trial when your goal is to make a repository map available to an assistant you already use. This is a comparison of documented purposes, not a performance comparison.
Aider is a terminal coding assistant with its own codebase map. Consider it when you are choosing the assistant as well as its context mechanism. If you intend to keep your existing agent, evaluate Graft's structural answers on a familiar change before adopting wider integration.

