SuperAPI AI 工具集

agentdiff

agentdiff 是一个开源的、Git 原生的 AI 代码溯源工具。它通过钩子接入主流 AI 编程智能体,包括 Claude Code、Cursor、Copilot、Codex、Windsurf、OpenCode 和 Gemini,记录是哪一款 AI 智能体、哪个模型、针对哪段提示词写了哪几行代码,并将每条归属记录以 ed25519 签名后存入开发者自己的 Git 仓库。归属记录保存在仓库自身的 git refs 命名空间下,无需额外服务器,可通过 CLI 查询。当 AI 智能体编辑文件时,其钩子被触发并写入会话日志;提交时由 pre-commit 与 post-commit 钩子将记录与暂存差异匹配并生成带签名的 trace 条目;推送时 pre-push 钩子将 trace 缓冲上传到远端的 refs/agentdiff/* 引用下。该项目使用 Rust 编写,采用 MIT 与 Apache-2.0 双许可。

访问官网

工具介绍

定位与用途

agentdiff 是一个开源、Git 原生的 AI 代码溯源(provenance)工具。它接入主流 AI 编程智能体——Claude Code、Cursor、Copilot、Codex、Windsurf、OpenCode、Gemini——并向仓库写入永久、按提交范围(commit-scoped)的归属记录。每条记录捕获智能体名称、模型、提示词摘录和精确行范围,并使用 ed25519 签名。全部内容可通过 CLI 查询,无需服务器。

该工具定位于“源代码行归属层”——记录哪个智能体写了哪一行,作为已签名的证据。归属在编写时即被记录并签名,因此是持久证据,而非事后估计。

主要能力

  • 跨智能体采集:通过钩子接入 Claude Code、Cursor、Codex、Copilot、Windsurf、OpenCode、Gemini。
  • 记录内容:每次 AI 辅助编辑生成一条 trace 条目,包含智能体名称与模型(如 claude-code、claude-sonnet-4-6)、提示词简短摘录(向 AI 请求的前约 100 个字符)、来自 MCP 或 record-context.py 的可选结构化上下文(intent、files_read、flags、信任分)、受影响的文件路径与行范围、时间戳与会话 ID。
  • 签名与验证:可用 ed25519 密钥对每条 trace 条目签名,使篡改可被检测。签名密钥按开发者注册在 refs/agentdiff/keys/{key_id}:pub.key 中,agentdiff verify 会在密钥注册表中查找签名的 key_id,因此无需手动交换公钥即可验证任意团队成员密钥签名的 trace。
  • 三层存储:refs/agentdiff/* 命名空间位于 refs/heads/* 之外,因此分支保护规则不会阻止它。UUID 在 squash/rebase/cherry-pick 后依然保留,trace 不会因 SHA 重写而丢失。
  • 策略执行:可在 .agentdiff/policy.toml 中定义 AI 归属规则,agentdiff policy check 通过时退出码为 0,违反时为 1,可用 --since <sha> 限定范围。
  • GitHub 工作流:一条命令可写入两个工作流文件——agentdiff-consolidate.yml(PR 合并时触发:将各分支 trace 合并入永久存储并向 PR 发布归属评论)、agentdiff-policy.yml(每个 PR 触发:运行策略检查,若违反规则则发布 GitHub check 注解)。
  • MCP 上下文服务:agentdiff-mcp 是一个 stdio MCP 服务器,暴露 record_context 工具,可在提交前写入结构化元数据;当智能体调用 record_context 时,提示词、模型、会话 ID、读取的文件、intent 和信任分会被存储并附加到下一个 ledger 条目。

使用方式

环境要求:PATH 中的 Python 3.7+、Git 2.20+、Rust 1.85+(缺失时自动安装)。

初始配置:

  1. agentdiff configure —— 一次性全局设置。将 Python 采集脚本安装到 ~/.agentdiff/scripts/,并向所选智能体注册钩子。在交互式终端中会显示 Space/Enter 多选器;在脚本中可用 --all 或 --agents cursor,codex 避免提示。仅当选择 Claude Code 时才注册 Claude MCP 服务器。可使用 agentdiff configure --all 直接安装所有受支持集成。configure 还会在当前目录的 AGENTS.md 中写入(或更新)一个 ## AgentDiff 章节,该章节是幂等的,可用 --no-agents-md 跳过。
  2. agentdiff init —— 按仓库设置。安装 git pre-commit、post-commit 和 pre-push 钩子,并配置 refs/agentdiff/* fetch refspec,使队友的 trace 在 git fetch 后可见。

注意:configure 会全局安装采集脚本,但采集只在已运行 agentdiff init 的仓库中触发(必须存在 .git/agentdiff/ 目录)。单独运行 configure 不会跟踪任何仓库,必须在每个要跟踪的仓库内运行 agentdiff init。

采集流程:AI 智能体做出编辑时,其钩子触发并向 <repo>/.git/agentdiff/session.jsonl 写入一条 JSON 条目。提交时:pre-commit 钩子将会话条目与暂存差异匹配,写入 pending-ledger.json;post-commit 钩子将一条 trace 条目(UUID 键,Agent Trace v0.1 格式)最终写入本地缓冲区 .git/agentdiff/traces/{branch}.jsonl,附加 intent、files_read、flags、trust 等结构化上下文,若已配置密钥则用 ed25519 签名;pre-push 钩子将本地 trace 缓冲通过 GitHub Git Database API 上传到远端的 refs/agentdiff/traces/{branch},直接推送到 main/master 时自动合并。

存储位置:本地为 .git/agentdiff/session.jsonl(不提交,留在 .git/ 目录内);GitHub 上为 refs/agentdiff/traces/{branch},由 agentdiff push 或 pre-push 钩子推送。

上下文工作流:agentdiff install-skill --scope project 会在当前仓库写入 .cursor/skills/agentdiff-context/SKILL.md;使用 --scope global 作为个人默认,--force 覆盖已有 skill 文件。配合 --post-pr-comment 时,上下文报告会被过滤为当前 PR 分支的提交,并尽可能更新已有的 AgentDiff 评论。

隐私:一旦推送,提示词摘录对任何有仓库读取权限的人可见。若提示词包含敏感业务上下文、IP 或凭据,可通过设置 capture_prompts = false 关闭提示词采集,此时所有 trace 条目中都会省略 prompt 字段。agentdiff 不向自建 GitHub 仓库之外的任何服务器发送数据,无外部遥测。

配置位置:~/.agentdiff/config.toml。

适用场景

  • 需要审计团队中 AI 生成代码来源与责任的仓库。
  • 多智能体协作环境,希望了解每行代码由哪个智能体、哪个模型、基于何种意图编写。
  • 需要在 PR 流程中强制 AI 归属策略的团队。

限制

  • 采集仅在已运行 agentdiff init 的仓库中生效,必须存在 .git/agentdiff/ 目录。
  • 需在 PATH 中提供 Python 3.7+,Git 2.20+,Rust 1.85+(缺失时自动安装)。
  • 推送后的提示词摘录对仓库读取者可见,需通过 capture_prompts = false 关闭。

许可

采用 MIT 与 Apache-2.0 双许可。