用途
Graft(现已更名为 Trail-code)是一个自学习的上下文层,面向编码智能体。它让 Claude Code、Cursor、Codex、Gemini 等编码智能体获得一份代码地图,以及团队关于这份代码已经积累的认识,从而更快、更省地完成任务。
Trail-code 由两部分组成,二者都运行在用户本地机器上:
- graft map(代码图谱):通过
trail init用 tree-sitter 解析仓库,生成每个文件、函数以及调用关系的图谱。不需要模型,也不需要 API 密钥。代码变化时(包括未提交的修改)会自动刷新。智能体在每次提示时会拿到匹配的文件与函数指针,并在编辑后立即看到哪些内容依赖于该文件。 - Learnings(经验):当一次会话得出某个结论,或用户纠正了某项做法时,智能体会将其保存为一条 learning。下一次会话(无论是本人还是团队成员)就以此为起点,而不必重新摸索。关于代码的 learning 随代码一起提交;关于个人的 learning 留在本机。
trail init还会读取过去 Claude Code 会话中反复出现的信息作为初始 learnings。
主要能力
- 代码图谱:tree-sitter 解析生成符号与调用关系图,确定性、无模型、无网络,支持 23 种语言。
- 随提示提供相关代码:在 Claude Code 中通过 hooks 把匹配文件和函数加入每次提示,并在编辑后展示依赖该文件的“爆炸半径”。Cursor、Codex 等通过 MCP 工具和指令文件获得同一份图谱。
- 始终保持最新:每次查询先检查工作树,仅重建变化部分,未提交的编辑也包含在内。
- 纯文件形式:链接的 markdown 节点,智能体可像普通文件一样打开和检索,不使用向量嵌入。
- 可选摘要:
trail build --deep会使用用户自己选择的模型提供商与密钥,生成系统中各部分的白话摘要。 - Learnings:分为 personal 与 repo 两类存放位置,以及 decision 与 preference 两类内容类型;以
.trail/learnings/下的短 markdown 文件保存,随 PR 一起评审。 - 团队共享:learnings 通过 git 传播,无需服务器。
trail team展示最近 7 天团队学到什么、工作在哪里重叠。trail check在提交、推送或开 PR 前,将改动与团队已有学习内容比对。 - 不重写历史:智能体不会编辑已有 learning,若与之冲突会在提交中说明原因并保存新的 learning。
使用方式
只需运行 trail init。它会询问要为哪些编码智能体接线,根据代码构建 graft map,创建 .trail/ 存放仓库的 learnings,并为 Claude Code 添加状态行和 hooks。它还会一次性读取该仓库中过去的 Claude Code 会话,找出你重复说过两次以上的内容并保存为 learnings;这一读取由本机 Claude Code 完成,约需一分钟。之后按原有方式工作即可,没有守护进程、没有服务器,全部是文件。
建议提交该配置以便团队成员也能使用。graft map 本身位于 graft/,属于类似 node_modules 的本地缓存,应加入 .gitignore。
相关命令:
trail init --dry-run:显示将要写入的智能体接线。trail init --agents claude:仅接线 Claude Code。graft grep、graft map、graft viz:原有 graft 命令仍然可用。trail build --deep:生成深度摘要。trail check:提交前的检查。trail team:查看团队近 7 天动态。trail telemetry disable或环境变量DO_NOT_TRACK=1:关闭匿名使用统计。
从 graft 迁移:代码图谱现称为 graft map;graft 与 @nanonets/graft 运行与 trail 相同的代码,输出保持不变。已有 graft 的用户运行 graft upgrade 会在其旁边添加 trail 命令。由 graft 配置过的仓库会在安装 trail 命令后,首次在该仓库打开 Claude Code 时自动迁移;也可立即运行 trail init 迁移。
效果数据(官方提供)
- 在 SWE-bench Verified 上,同一模型(Claude Sonnet 5)对比:接入 graft map 解决 50 个问题中的 33 个,未接入解决 27 个,工具调用减少 25%,token 减少 23%,耗时减少 32%。文中提到 Claude Sonnet 5 在接入 graft map 时解决 33/50、不接入时 27/50,并使用少 23% 的 token。
- 在 162 次相同任务、相同智能体的运行中:成本降低 32%,未缓存输入 token 减少 42%,时间减少 60%,正确比例相同。文中另提到 46% 更少工具调用、42% 的 token 节省、60% 更少时间,以及针对 cold Claude Code 的正确率提升。
- 在 PocketBase 上,15 个真实任务的成本低 21%,速度快 14%。
- 在 hashicorp/go-retryablehttp 的示例中,一个学习可让队友的智能体获得约 27k token 的“领先量”。
注意:不同段落中的对比数字表述不完全一致(例如 23% 与 42% 的 token 节省、不同基准),均按原文列出。
隐私与数据边界
- 代码:graft map 在本机用 tree-sitter 构建,无模型、无网络。可选的
trail build --deep摘要会发送到用户自选的模型提供商,使用用户自己的密钥。 - 个人 learnings:保存在
~/.trail,永不提交、永不上传。 - 仓库 learnings:位于仓库中的文件,通过 git 像其他文件一样共享。
- 历史会话:
trail init在本机读取你本人在该仓库 Claude Code 记录中的消息,由本机 Claude Code(Claude Sonnet,你的登录)完成,消息只发给 Anthropic,并计入你的 Claude 用量,不会发送给 Trail。 - 若连接 Trail workspace:在连接前不会有 learning 上传;连接后,所选仓库中的 learnings 会上传至 Trail,包括队友已推送分支上的内容,以及每次搜索与检查的记录(搜索文本、文件、展示了谁的 learnings)。
- 匿名使用统计:仅使用分桶与固定标签,绝不包含 learning 的标题、文本或路径;
TELEMETRY.md列出每个字段,可用trail telemetry disable或DO_NOT_TRACK=1关闭。
适用场景
- 在大型或陌生代码库中使用编码智能体,希望减少反复探索。
- 团队协作:希望成员的智能体能共享关于代码的决策与约定,且这些内容随 PR 评审、随 git 传播。
- monorepo 场景(文中提到支持 monorepo,具体细节见官方参考)。
- 需要了解改动影响范围(爆炸半径)时。
限制与暂未提供的信息
- 各基准测试的具体配置、任务清单与完整结果见官方仓库中的基准说明。
- Trail workspace 的团队页面(跨仓库视图、谁在学什么、learning 复用频率、工作重叠)标注为“即将推出”,尚未提供。
- 官方资料未说明价格、收费方式与商业授权模式。
- 未提供的安装命令细节、具体 MCP 配置示例、支持的 23 种语言完整列表、节点具体内容、各部分运行位置等,均需参见官方参考文档。
- 并非所有功能都对所有智能体生效:Claude Code 通过 hooks 集成,Cursor、Codex 等通过 MCP 工具与指令文件集成。
- 匿名统计可通过配置关闭。