AI Agent 改了代码但查不到来源?Causari 用内容寻址账本追踪每一行代码的前世今生
问题现象:Agent 改完代码,你什么都不知道
昨天还在正常跑的项目,今天 CI 红了。你打开 Git 日志,看到 Cursor 最后提交了 30 个文件改动。但哪个 Prompt 引发了这次重构?改 auth.ts:42 的那个模型是 GPT 还是 Claude?它的 reasoning chain 说了什么?这些问题,Git blame 一个都答不上来。
这就是所有重度使用 AI 编码 Agent 的团队共同面对的「因果失忆」问题——Agent 写代码的速度远超人类追踪代码的能力。传统的版本控制系统(Git)能跟踪字节级别的变更,但不能回答这些变更背后的意图是什么。
为什么这是个真问题
三个具体场景,每个都是日常:
- 黑盒编辑:Cursor 在 4 分钟内改了 30 个文件。第 84 行那个可疑的正则表达式是哪个 Prompt 写出来的?你不知道,没人知道。
- 静默回退:你回退了昨天的一个 Agent 改动,但另外三个依赖它的 Agent 决策在静默中丢失了上下文。CI 全绿,生产挂了。
- 因果断链:一个测试在 200 个 Prompt 之后突然失败。你去翻聊天记录 bisect,读了一个小时,最后放弃了,把整个功能重写了一遍。
传统方案为什么不够
| 方案 | 追踪什么 | 缺失了什么 |
|---|---|---|
| Git blame | 最后一次修改的人 | 不知道是 Agent 改的,不知道是哪个 Prompt |
| LangSmith | LLM 调用日志 | 不看文件系统,不关联代码变更 |
| IDE Checkpoints | 文件快照 | 不记录意图,无法跨会话查询 |
| ChatGPT 聊天记录 | 聊天内容 | 不自动关联到具体代码行 |
根本原因在于:这些工具各自追踪一个维度,但没有谁能把 Prompt → 代码变更 → 文件依赖关系串起来。
Causari:内容寻址账本方案
Causari(拉丁语:辩护、论证原因)是一个源码可用的 AI Agent 代码溯源工具(BSL 1.1),由 Croviatrust 构建。它用内容寻址账本记录 Agent 对代码库的每一次操作——不只是哪些字节被改了,还包括哪个 Prompt 要求改的、哪个模型回答的、读了哪些文件、以及背后的 reasoning。
关键创新在于:它不需要 Agent 主动配合。Capture Engine 通过两个独立的观察流——LLM 代理和文件系统监控——然后用内容匹配(completion 中出现的代码行与写入文件的代码行做交叉比对)来自动建立因果关系。
安装(一行命令):
curl -sSf https://causari.dev/install.sh | sh
Windows(PowerShell):
iwr -useb https://causari.dev/install.ps1 | iex
安装后得到一个 re 命令。Linux、macOS、Windows 三平台原生支持,二进制文件约 2 MB,无运行时依赖。
核心功能
1. Capture Engine:零集成的自动捕获
这是 Causari 的核心。两个独立的观察流,一个因果连接:
re proxy # 终端 1:启动 LLM 捕获代理(监听 127.0.0.1:4242)
re watch # 终端 2:启动文件系统变更被动记录器
re proxy 捕获每一个 Prompt、Completion、Token 和花费到本地账本。re watch 捕获每一个文件变更(快照 + diff)。然后 Causari 自动将磁盘上出现的代码行——与几秒前 Completion 中的代码行做内容匹配——找到因果关系。
指向任意 Agent 到代理即可生效:
OPENAI_BASE_URL=http://127.0.0.1:4242/openai/v1 ANTHROPIC_BASE_URL=http://127.0.0.1:4242/anthropic
对于暴露了生命周期 hooks 的 Agent(如 Claude Code),可以直接用原生捕获:
re hook claude-code # 自动配置 .claude/settings.json
所有数据留在本地:.causari/capture/ 是一个只增账本。无云端、无遥测、无需 API 密钥。
2. 因果查询:追溯每一行代码的来源
一旦因果数据被捕获,你可以问 Git 永远不会回答的问题:
re why src/auth.ts:42 # 这一行是谁、用什么模型、基于什么 Prompt 写的? re trace src/auth.ts:42 # 上游因果锥:它依赖了哪些事件(通过读/写) re impact 0d47599550 # 下游因果锥:这个操作影响了哪些后来的操作 re lens src/auth.ts # 行级来源批注渲染
实际输出示例:
$ re why auth.py:2
auth.py:2
token = issue_token(user, scope="session")
introduced by 0d47599550
agent: cursor
model: gpt-4o
prompt: Add JWT refresh logic that rotates every 24h
re trace 更进一步,构建了一个完整的智力谱系树——不仅告诉你谁写的这一行,还告诉你这个 Prompt 又是因为读了哪个文件才产生的:
calc.js:2
export function sum(a, b) { return a - b; }
trace: 3 causal contributors found
● 0b8424ee83 align calc.js with updated spec
agent: gpt-4o
prompt: the spec was updated, make calc.js match
└─ 45230e9cda update spec to redefine sum
agent: gpt-4o
prompt: the team decided sum should compute a-b, update the spec
└─ 55a6dd9392 implement calc per spec
agent: claude-3.5
prompt: implement sum() following the spec in spec.md
那个 bug 行不是根因——要求 Agent 重新定义 spec 的 Prompt 才是。Causari 让你能调试 Prompt,不只是调试代码。
3. Bisect:找到第一个搞坏构建的 Agent 操作
re bisect --test "npm test" # 在因果 DAG 上执行二分查找
当测试失败时,传统 bisect 在 Git 提交上二分。Causari 在因果事件 DAG 上二分,找到的是第一个输出导致测试失败的 Agent 操作——这个操作可能发生在连续的多个 Prompt 中的任何一个,而不仅仅是单独的 Git 提交。
4. AI Waste Score(AI 浪费评分)
re churn 统计每个 Agent 的代码存活率:
AGENT INTRO SURVIVED WASTE WASTED $ claude-3.5 8,210 6,012 26.8% $164.10 gpt-4o 3,400 1,510 55.6% $116.90 cursor 1,120 980 12.5% $5.50 AI survival 66.8% · AI Waste Score 33.2% $286.50 of $866.90 spent on code that did not survive
这个数据直击痛点——你不仅能看到每个模型写了多少代码,还能看到花了多少钱写的代码被后续重写了。对于预算管控和模型选型,这是非常有价值的参考指标。
生成一个自包含的 HTML 仪表盘:
re report --open # 生成 HTML 报告并打开浏览器
5. 经验层:可验证的 Agent Skills
re skill distill 从账本中提取已完成的任务——触发它的 Prompt、执行的步骤、改动的文件——压缩为一个 Skill(技能)。每个 Skill 用仓库的 Ed25519 密钥签名,修改一个字节后验证即失败。
Skills 通过信任阶梯组织:
- ● recorded:从账本蒸馏——尚无成功信号
- ◆ verified:有证据(exit code 0,或工作仍在 timeline 顶部存活)
- ★ proven:verified 并且被 Agent 在新的工作中调用了 3 次以上
Skills 可以在团队之间共享:
re skill export 2ce0c7bbda --output jwt-fix.json # 可移植 bundle re skill import jwt-fix.json # 验证签名 + 接受 re skill pull ~/Dropbox/causari-skills/ # 同步整个团队文件夹
未知签名的 Skills 被拒绝。信任通过 Dropbox、git、NFS 等共享文件夹网格传播——无需中央服务器。
6. MCP 集成
Causari 自带 MCP Server,任何支持 MCP 的 Agent 运行时(Claude Code、Cursor、Cline、Windsurf 等)都可以注册:
re mcp --install
注册后获得三个 MCP 工具:
| 工具 | 作用 |
|---|---|
causari_record | Agent 主动记录自己的操作到账本 |
causari_recall | 在行动之前搜索过去相似的事件(避免重复错误) |
causari_why | 在修改代码之前检查一行的来源 |
7. CI GitHub Action
在 PR 中自动生成风险摘要:
name: Causari Guard
on:
pull_request:
jobs:
guard:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: croviatrust/causari-guard-action@v1
预防策略:如何不再追查来源
使用 Causari 的过程本身就是一种工作流改进:
- 所有 Agent 操作通过代理捕获:指向
re proxy成为默认配置 - CI 中集成 Guard:每个 PR 附上 Agent 改动风险摘要
- 团队 Skill 网格:修复经验以 Ed25519 签名 Skill 的形式在团队中传播
- 定期查看 AI Waste Score:
re churn为模型选型和 Agent 行为调整提供数据支撑
总结
Causari 解决了一个 Git 从来就没有设计过的问题:AI 编码 Agent 时代,代码变更的意图追踪。它的 Capture Engine 设计巧妙(双观察流 + 内容匹配因果连接),不需要 Agent 主动配合就能建立完整的因果链。经验层(Skills)还让已经被验证的经验在团队中可验证地传播——这是传统 Git 完全无法提供的维度。
BSL 1.1 许可证(4 年后自动转为 Apache 2.0),个人使用和内部开发免费。项目地址:github.com/croviatrust/causari | 官网:causari.dev