关于 CompareGraph
CompareGraph 将本地克隆的多个代码仓库映射到自定义特征分类表,生成带代码位置引用的比较矩阵,供团队和编码 Agent 核验项目能力。它不运行仓库或调用模型,并通过证据要求、可追溯声明和追加式记录约束结论。
主要功能
- 01构建多个仓库的代码图
- 02按特征分类表生成比较矩阵
- 03声明附带可解析的代码引用
- 04检查过期引用与变更
- 05追加保存声明和决策记录
- 06注册 MCP 服务并配置 Agent
适用场景
- 01比较竞品或同领域项目的功能
- 02对一组项目开展技术尽调
- 03为新领域整理特征分类表
- 04向编码 Agent 提供可引用的项目事实
MCP 相关
CompareGraph 提供 MCP 服务,让 Agent 查询仓库比较数据。`setup` 可将服务注册到已发现的 Agent,并写入工作区规则。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
18收录的工具列表 · 更新于 3 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 页大小,默认值为 50 |
| cursor | string | 否 | 上一页返回的不透明游标 |
详细介绍
CompareGraph
逐项对比多个代码仓库的功能:哪个仓库具备哪些功能,以及能证明这一点的文件和代码行。
快速开始 · 用法 · 命令 · MCP 工具 · 常见问题 · 故障排除 · 报告
你会保留自己和他人的项目克隆,并记下想要对比的功能。CompareGraph 会将每个克隆读入同一张图中,帮助你或编码 Agent 填写一张对比各个仓库功能的表格。每项结果为 has、partial 或 none,并且都指向相关代码,或者指向未找到结果的搜索。它免费且开源(Apache-2.0),是运行在你电脑上的单个程序;它会读取克隆,但不会运行它们,而且引擎绝不会调用 AI 模型或访问网络。
**十分钟后你将看到:**安装并运行六条命令后,屏幕上会显示一张小型样例的同类表格。在自己的克隆上构建:在我们的主机上,处理 85 个文件耗时 0.82 s,处理 797 个文件耗时 6.20 s(计时报告)。
快速开始
单个二进制文件,无需运行时环境。支持 Linux x64 和 arm64、macOS arm64 和 x64、Windows x64;其他平台请从源代码构建。
1. 安装二进制文件
安装脚本会下载一个文件,即适用于你平台的 comparegraph 二进制文件,将其与此版本的 SHA256SUMS 校验,并复制到 ~/.local/bin。它不会使用 sudo,也不会更改其他内容。你可以先阅读脚本:
# macOS / Linux: fetch the script from the v0.1.3 tag, read it, then run it
curl -fsSLO https://raw.githubusercontent.com/MassRelayAI/comparegraph/v0.1.3/scripts/install.sh
less install.sh
COMPAREGRAPH_VERSION=v0.1.3 sh install.sh
# the same in one line, script from main, latest release
curl -fsSL https://raw.githubusercontent.com/MassRelayAI/comparegraph/main/scripts/install.sh | sh
# Windows x64 (PowerShell)
irm https://raw.githubusercontent.com/MassRelayAI/comparegraph/main/scripts/install.ps1 | iex
Windows:文件会写入 %LOCALAPPDATA%\Programs\comparegraph,并将该目录添加到用户的 PATH;请打开新的终端。COMPAREGRAPH_INSTALL_DIR 可以更改二进制文件的安装位置。脚本只会检查校验和。v0.1.2 起的版本还附带构建来源证明,但脚本不会检查该证明;请自行使用 gh attestation verify <asset> -R MassRelayAI/comparegraph 进行检查(发行说明)。
不使用 Shell 管道:Homebrew、npm、手动安装、从源代码安装
Homebrew,适用于 macOS 和 Linux:brew install massrelayai/tap/comparegraph。
npm,适用于装有 Node 18 或更高版本的五个平台(此软件包封装了相同的发行版二进制文件):npx -y @MassRelayAI/comparegraph --version,或 npm i -g @MassRelayAI/comparegraph。
手动安装: 从最新发行版获取 comparegraph-<platform> 和 SHA256SUMS;使用 sha256sum -c --ignore-missing SHA256SUMS 进行检查。从源代码安装,适用于任何能运行 Rust 1.85 或更高版本的环境:cargo install --locked --git https://github.com/MassRelayAI/comparegraph comparegraph(--locked 很重要:crates.io 上最新版本的 Perl 语法包已撤回,只有 Cargo.lock 能解析依赖)。
2. 在示例上试运行
示例仓库和功能示例列表都在此仓库中,而不在二进制文件里,因此第一条命令会下载该仓库的副本。你可以在任意文件夹中运行这些命令;它们会在同一目录下创建 comparegraph 和 cg-try 两个文件夹。
git clone --depth 1 https://github.com/MassRelayAI/comparegraph # the sample lives here
mkdir cg-try && cd cg-try # your workspace
comparegraph add ../comparegraph/fixtures/typescript --name tsfix # read, never run
comparegraph build tsfix # parse it
comparegraph family add ../comparegraph/families/example-code-graph-tools
comparegraph map tsfix example-code-graph-tools # places to read
comparegraph claim tsfix symbols.extraction has --author me --at src/util.ts:11-11
comparegraph matrix example-code-graph-tools # the table
该表为 symbols.extraction 显示 has,其他九项功能显示 -(尚未回答)。所有命令总共不到一秒即可运行完毕。用法展示了每一步的实际输出。
3. 比较你自己的仓库
示例包描述的是代码图工具。对于你自己的领域,需要自行编写功能列表,放在一个简短的 rows.md 文件中;起步时写三行就足够了。
comparegraph add ../your-lib --name mine --as-root # any clones on your disk
comparegraph add ../their-lib --name theirs
comparegraph build mine && comparegraph build theirs
comparegraph family propose libs --repos mine,theirs # optional draft
family propose 会起草一份共用词列表(name、file、extract 等),而不是功能列表;保留有用的词,为它们编写定义,并将文件保存为 families/libs/rows.md:
---
family: libs
description: the three features I want to compare
---
| id | group | feature | definition | counts_as_has | tier | weight |
|---|---|---|---|---|---|---|
| search.fulltext | search | Full-text search | Search over names or text through an index | a query entry point over a full-text index | basics | 2 |
| search.embeddings | search | Embedding search | Search by vector similarity | code that embeds text and ranks by similarity | extra | 1 |
| graph.communities | graph | Module communities | Groups of related code found from the graph | a clustering pass over the graph | extra | 1 |
然后像第 2 步一样运行 comparegraph family add families/libs、map、claim 和 matrix libs。map 会提供可供查阅的位置,而不是结论:由你或你的 Agent 打开这些位置,并编写每项声明。列规则见用法。
4. 接入你的 Agent(可选)
comparegraph setup --apply # omit --apply for the plan; --scope project for an entry you commit
comparegraph doctor # each client's state: aligned, stale, conflict, missing, plugin
为它在机器上找到的所有 Agent 注册 MCP 服务(共 12 个:Claude Code、Codex、Cursor、Gemini CLI、OpenCode、Hermes、Windsurf、Antigravity、Kiro、Copilot、Copilot CLI、Qwen Code),将一段简短的规则写入工作区的指令文件,并为 Claude Code 添加一个会话启动钩子。它只接入 Agent;不会建立索引。已经安装?comparegraph doctor 会告诉你哪些已接入。
将 Claude Code 用作插件,或使用 Agent 自带的命令
**将 Claude Code 用作插件:**一次安装即可包含七个技能、服务和钩子(需要 Claude Code 2.1.275 或更高版本;在 shell 中运行 claude plugin install … 效果相同):
/plugin install comparegraph --marketplace MassRelayAI/comparegraph
启用插件后,setup --apply 会将 Claude Code 的服务和钩子交由插件处理(对应行会显示 plugin),并仍会写入规则。
使用 Agent 自带的命令,在工作区中运行;每条命令都会写入 setup 会设置的用户级条目(Claude Code 默认的 local 作用域不会被 doctor 读取),因此 doctor 会将其识别为已对齐:
| Agent | 命令 |
|---|---|
| Claude Code | claude mcp add --scope user comparegraph -- comparegraph --root "$PWD" mcp |
| Codex | codex mcp add comparegraph -- comparegraph --root "$PWD" mcp |
| Gemini CLI | gemini mcp add -s user comparegraph comparegraph -- --root "$PWD" mcp |
该服务已在 MCP Registry 中列出,名称为 io.github.MassRelayAI/comparegraph;表格列出了每个客户端对应的文件。
如需卸载,请参阅Agent、平台与卸载。免费且开源,没有付费版本;如有疑问或发现 Bug,请前往 GitHub issues,安全问题请报告至 SECURITY.md。
Why CompareGraph
在六份研究副本和 30 项功能上测得,二进制版本为 0.1.1:数据见 docs/assets/cost.json,方法与注意事项见答案大小报告。
你有许多代码库,也有一个问题:谁具备什么?逐个手动阅读无法扩展;没有行号的摘要无法核查;代码一旦变动,笔记就会过时。五项属性,每一项都可以检验:
- 确定性。 相同的克隆和版本会得到相同的
store_hash。comparegraph check会重新构建并进行比较,而且增量构建必须与build --full相同(在计划 6 报告中的两棵大型代码树上结果相同)。 - 每个答案都有证据类别。 每个封装都标明
observed、derived、inferred或unknown,并附有limitations[]列表,说明引擎无法看到的内容。 - 每项声明都需要当前有效的引用。
has和partial需要提供--at path:start-end,且必须与已存储节点匹配;否则引擎会拒绝。引用位置发生变动后,check会将其标记为unknown*。 none需要缺失证明。 可以提供找不到任何结果的--searched词条;也可以提供相同的词条,并在--read-hits中列出所有已打开并排除的命中项;还可以通过图检查:四个渠道(符号、路径、社区词条和节点类型)都为空。使用--searched的none必须将absent-check --searched返回的排名前 10 个候选项列为已阅读(read_set);超过上限的候选项会记录为read_capped限制。若排名前 10 中存在未阅读的候选项,引擎会拒绝该声明并指出该候选项。- 引擎中没有模型。 分数、分档、描述和候选项均根据已存储的事实计算。Agent 可以负责阅读;引擎只负责存储、检查和拒绝。
与单仓库代码图谱对比
| 需求 | 单仓库代码图谱 | CompareGraph |
|---|---|---|
| 按一份功能列表比较多个代码库 | 不可以,一个索引对应一个代码库 | family、relate、matrix |
| 将证据与结论保存在一起 | 不可以 | 声明会存储 path:start-end 和内容哈希 |
| 拒绝无法提供依据的声明 | 不可以 | has 和 partial 需要有效引用;none 需要引擎执行过搜索 |
| 显示代码变动后的变化 | 不可以 | check 会将变动后的引用标记为过期;矩阵会显示 unknown* |
| 留下谁说了什么的记录 | 不可以 | 声明和决策均为只追加 |
适用对象:需要将自家产品与行业对比的团队、对一组项目开展尽职调查的人员、梳理某个领域的新手(family propose 会起草分类体系),以及需要通过 MCP 获取精简事实的编码 Agent。
工作原理
三项规则
- 引擎绝不调用模型。 每个分数、分档、描述和候选项均根据已存储的事实计算。
- 每项声明都需要当前有效的引用。
has和partial需要提供--at path:start-end,且必须与已存储节点匹配。none需要提供找不到结果的--searched词条,或通过图检查。否则引擎会拒绝,或写入unknown。 - 声明和决策均为只追加,由数据库强制执行。 变更会作为新行写入,并注明其取代的行。最新记录生效,同时保留完整记录。
search 或 map 返回的候选项会标记为 candidate,绝不会标记为 has。设计说明见:docs/design.md。
流程图和代码环形图见:docs/design.md。
图谱中的一个家族
家族是一种分类体系:由多个特性组构成,每个特性都有定义和判定其是否具备的测试。一个单元格对应一个克隆和一个特性,包含一个判定(has、partial、none);对于 has 和 partial,还包含一条引用。图中展示了家族 code-graph-tools 及映射金标准中双方一致的单元格;在 Obsidian 中,comparegraph export vault 会显示同一张实时图谱。
插件和第二个引擎
外部提供方是指任何通过 stdin 和 stdout 使用 JSON 行协议的可执行程序:宿主写入一行请求,关闭 stdin,然后读取答复行,直到收到第一条 ok 答复。它打印的所有内容都是数据,并会被解析为我们自己的类型。在 comparegraph.toml 中注册一个提供方([providers.mine] command = "tools/my-provider"),或将其命名为 comparegraph-provider-<name> 并放在 PATH 中,同时在旁边放置 comparegraph-plugin.toml 清单(包含 kind、name、protocol = "1"、languages、network)。没有清单时,只有使用 --allow-unverified 才会运行。清单只是声明,不是签名:程序不会检查可执行文件的哈希值,提供方会以独立程序的形式在你的权限下运行。优先使用 comparegraph.toml 中的路径;它会先于 PATH 中找到的名称进行查找。清单中的 network 值会作为 COMPAREGRAPH_NETWORK 传递给提供方,但不会强制执行。
完整协议、安全防护、一个 25 行的 Python 提供方,以及 code-review-graph 适配器(build --providers reference,crg 后的第二个引擎):docs/dev/plugin-protocol.md。
家族和七项技能
家族是一个包含 rows.md 的目录。项目附带两个包:families/example-code-graph-tools(10 个特性,快速入门)和 families/code-graph-tools(30 个特性,映射金标准)。列规则、同义词和 family propose 见用法。
该方法由 skills/ 中的七项纯 Markdown 技能构成,任何 Agent 都可以阅读。每项技能都会说明何时使用相应动词、准确的命令、引擎会拒绝什么,以及如何进行检查。在 Claude Code 中,这些技能和 MCP 服务会作为同一个插件一同提供(开始使用);其他 Agent 可以从克隆仓库中读取 skills/ 目录。
| 技能 | 简介 |
|---|---|
using-comparegraph | 入口:适用哪项技能、工作流顺序,以及保持判定诚实的习惯。 |
adding-a-clone | 将克隆注册为比较对象或根节点,解析它并验证构建。 |
defining-a-family | 编写一个包,用 family propose 为其创建初始内容,并安全地重新加载。 |
mapping-features | 查找候选证据并评估相关性。候选项只是线索,绝不是判定。 |
writing-a-claim | 记录有、部分有、没有或未知,并附上当前可解析的引用。 |
recording-a-decision | 记录某人选择采纳、拒绝或暂缓,并注明姓名和理由。 |
reading-the-vault | 阅读矩阵、vault 和 JSON 导出,并正确理解缺口。 |
使用方法
docs/ 下的四个页面提供参考资料;从这里点击几次即可访问每一页。
你将获得什么
四个层级,每个层级都回答它如何得出结论:仓库概况、模块社群、符号(调用方、被调用方、影响范围、测试、入口点、死代码候选项)以及声明(结论、引用、作者、轨迹)。每个答案都是一个带有证据类别的 JSON 信封。用法中有表格和一个真实的 show 答案。
CLI 参考
全局选项 --root 和 --pretty,以及分为四组的动词:构建与检查、图查询、家族与声明、导出与 Agent。命令列出了每个动词及其重要标志。
MCP 工具
comparegraph mcp 通过 stdio 提供十八种工具(十七种只读,一种写入:comparegraph_claim);特意没有 decide 工具。MCP 工具中有表格;docs/catalog.json 是机器可读的来源,catalog --check 会在 CI 中对其进行校验。
知识库、配置、库
comparegraph export vault --out ./vault 会生成 Obsidian 风格的 Markdown 知识库,其中的笔记带有自动生成的描述。设置项包括 --root 和 COMPAREGRAPH_* 环境变量,而 crate 会将每个动词作为函数开放出来。三者都在用法中介绍。
效果如何
以下所有数字均摘自本仓库中的报告;引用前请先阅读其中的注意事项。所有测量均于 2026-10-13 在一台共享主机上完成。
在人工标注的调用点金标准上,CompareGraph 的合并精确率达到 0.995,召回率达到 0.834;相比之下,code-review-graph 通过适配器的精确率 / 召回率为 0.956 / 0.736,codegraph 为 0.708 / 0.506。它构建一个含 38,258 个文件的仓库耗时 499.6 秒,并能在 2.5 秒内回答针对含 129 万条边的图的 impact 查询;下方表格列出了注意事项。数据:accuracy.json、scale.json;一致性报告:引擎一致性。
调用边与人工标注金标准的对比
金标准:从每个项目自身的源代码中随机抽取 150 个调用点(总计 750 个),由两位读者在同一套标准下独立标注
(两位读者都是语言模型 Agent;标注时都知道各引擎的结果)。final 仅保留双方意见一致的行。金标准的制作方法:fixtures/gold/README.md。精确率以已回答的站点为分母,召回率以指向仓库内部目标的站点为分母(以括号标出)。Kappa 是两位读者对调用目标判断的 Cohen's kappa。
| 项目(站点数) | 读者 kappa | CompareGraph P / R | code-review-graph 通过适配器 P / R | codegraph P / R |
|---|---|---|---|---|
| graphmind (48) | 0.98 | 0.973 / 0.750 | 0.963 / 0.542 | 0.650 / 0.813 |
| srclight (50) | 0.96 | 1.000 / 0.780 | 1.000 / 0.740 | 1.000 / 0.320 |
| code-review-graph (53) | 1.00 | 1.000 / 0.925 | 1.000 / 1.000 | 0.913 / 0.396 |
| hono (36) | 0.89 | 1.000 / 0.667 | 0.880 / 0.611 | 无回答 / 0.000 |
| caddy (48) | 0.92 | 1.000 / 1.000 | 0.897 / 0.729 | 0.623 / 0.896 |
| 合并结果 (235) | 0.95 | 0.995 / 0.834 | 0.956 / 0.736 | 0.708 / 0.506 |
| 汇总计数:CompareGraph 在已回答的 197 个站点中答对 196 个,在 235 个站点中答对 196 个;codegraph 在已回答的 168 个站点中答对 119 个,在 235 个站点中答对 119 个。 | ||||
来源:docs/reports/2026-10-12-engine-parity.md 中的“After Plan 6”和 | ||||
“codegraph head-to-head”部分;kappa 来自“After Plan 5”中的读者间一致性(汇总 is_call kappa 为 0.94)。 | ||||
复现:scripts/gold-score.sh <project-copy> fixtures/gold/<project>/calls.jsonl --binary <comparegraph>、 | ||||
scripts/compare-engines.sh(所有引擎)、scripts/h2h-codegraph.sh(codegraph)。 |
阅读这些数据时请注意以下限制。每个项目的站点数为 36 到 53,因此单个项目的噪声约为 0.1。caddy 的 1.000 表示“每个已标注站点”(在 Go 工作开始前抽取的 48 个站点),而 hono 的精确率基于 24 个已回答站点。codegraph 以
--graph-only 模式运行,每个站点调用一次 get_callees;如果它列出了多个同名目标,只要其中包含正确目标,我们的评分器就会将该站点计为正确。hono 上没有任何站点得到回答,因为它找到的最具体节点是一个没有调用边的匿名箭头函数;未运行通过最近的具名祖先进行查找的步骤。fixtures/gold/FLOORS.json 中的最低标准由 crates/comparegraph/tests/gold.rs 断言,且只会提高。
构建与查询耗时
数据见 docs/assets/scale.json,来源是验证报告(最后一节)和 Plan 6 报告。
| 指标 | 结果 | 来源章节 |
|---|---|---|
| 五个研究项目的冷构建 | 每个项目耗时 0.8 秒至 6.4 秒;与 codegraph 对比,我们的耗时 : codegraph 耗时在四个项目上为 0.50 至 1.29,在 hono 上为 5.12,已扣除 codegraph 固定的 12 秒嵌入模型加载时间 | head-to-head |
| 冷构建与 code-review-graph 对比 | 快 1.6 倍至 3.4 倍,仅给出比率(主机负载为 37 至 73) | After Plan 5 |
| hermes-agent,10,288 个文件 | 全量构建 93.2 秒;空操作重建 2.0 秒;编辑单个文件 47.5 秒;存储哈希与 --full 相同 | After Plan 6,build time and scale |
| openclaw,38,258 个文件 | 全量构建 499.6 秒(比 8 分钟的目标慢了 20 秒);空操作 7.5 秒;编辑单个文件 289.7 秒;最大 RSS 为 3.54 GB | After Plan 6,build time and scale |
| 在含 1.29M 条边的 openclaw 图上查询 | impact 2.5 秒,traverse 3.6 秒,dead-code 1.6 秒;RSS 为 12 至 15 MB | After Plan 6,query bounds |
报告中的注意事项:构建测试在 40 核机器上运行,负载为 6 至 15,因此应关注比率,而非秒数。hermes-agent 的构建比 Plan 6 的 B1 阶段结束时慢 1.40 倍;这是已测得但原因未明的回归。查询上限是在默认设置下,对一个枢纽符号(3,156 个调用者)各运行一次测得的。一个包含 4.4k 个文件的私有产品单体仓库构建耗时 103 秒(53k 个节点),其三个测试框架比较器耗时分别为 25 秒、81 秒和 436 秒(验证报告,最后一
节);在产品上,对 12 个特性执行排序后的 map 耗时 1.2 秒,在含 454k 个节点的比较器上耗时 12.1 秒。
复现:scripts/compare-engines.sh、scripts/h2h-codegraph.sh,以及 COMPAREGRAPH_PROFILE=1 comparegraph build <repo>。
与 code-review-graph 的重合度(符号和边)
在三个项目上计算节点和已解析边的 Jaccard 系数(一致性报告中的“After the review fixes”;符号和继承关系数据来自“After the precision and recall pass”):
| 指标 | graphmind | srclight | code-review-graph |
|---|---|---|---|
| 符号(函数、方法、类、类型) | 0.946 | 0.988 | 0.939 |
| 调用,已解析 | 0.713 | 0.969 | 0.963 |
| 导入,文件到文件 | 0.647 | 0.904 | 0.901 |
| 测试(测试到被测符号) | 0.119 | 0.605 | 0.513 |
| 继承与实现 | 0.938 | 0.667 | 0.730 |
测试链接是三个项目中表现较弱的部分。复现:scripts/compare-engines.sh。
一致性测试样例(参考引擎)
comparegraph conform reference 会运行 fixtures/ 中的黄金测试样例;低于基准(节点召回率和精确率 0.95,边召回率和精确率 0.85)的提供方将被拒绝。本次提交的输出:
| 测试样例 | 节点召回率 / 精确率 | 边召回率 / 精确率 |
|---|---|---|
| go | 1.00 / 1.00 | 1.00 / 1.00 |
| java | 1.00 / 1.00 | 1.00 / 1.00 |
| python | 1.00 / 1.00 | 0.952 / 1.00 |
| rust | 1.00 / 1.00 | 1.00 / 1.00 |
| typescript | 1.00 / 1.00 | 0.955 / 1.00 |
这五个测试样例来自五个小型代码库:它们用于验证提取器能否生成经人工核查的图,而非涵盖每种语言特性。
特性映射黄金标准
第二个黄金标准评估 map(从特性映射到代码)和基于图的缺失检查:以 families/code-graph-tools/rows.md 中的 30 项特性,对照六个代码图工具的研究副本,共 180 组配对,由两位独立读者阅读,其中 121 组达成一致,59 组存在分歧,因此未计入评分(有 13 个一致认定的位置在引擎图中没有节点)(方法和 kappa 系数:
fixtures/gold-map/README.md)。排名依据三个克隆版本进行调优,并在另外三个版本上测量一次;留出集这一列才是面对工具从未见过的代码库时的真实表现。
| precision@5 | recall@5 | 备注 | |
|---|---|---|---|
map,留出集克隆版本(CodeGraph、codanna、ripwire) | 0.038 | 0.149 | 应关注的数值 |
map,调优用克隆版本(graphmind、srclight、code-review-graph) | 0.161 | 0.523 | 拟合结果 |
map,六个版本合并 | 0.113 | 0.393 | 排名之前为 0.046 / 0.141 |
| 对相同词项进行普通全文 OR 搜索,合并结果 | 0.046 | 0.141 | 我们自己的引擎,不进行排名 |
对相同词项使用 codegraph symbol_search,合并结果 | 0.036 | 0.118 | 按相同规则评分 |
| 缺失检查,合并结果 | 1.00(1 次调用) | 0.05(19 项中的 1 项) | 从不出错,但很少给出结果 |
目标(留出集 recall@5 达到或超过 0.50,precision@5 为 0.30)尚未实现:对于留出集中的特性,只有三分之一的黄金位置位于前 200 个候选结果中,因为存储内容只有符号名称、路径和社区关键词,没有文档文本;下一步的改进方向见路线图。relate 区间是已知的弱信号:家族之外的代码库得分仍高于 0.5(docs/decisions.md,「Plan 7 IMP」);运行 relate 之前,该克隆版本在矩阵中会显示 not run,并在 limitations[] 中注明(matrix --relate 会先为缺失项评分)。来源:
docs/reports/2026-10-14-mapping-gold-first-measurement.md 和一致性报告中的「Feature-mapping baselines」。复现方法:scripts/map-score.sh、scripts/map-baselines.sh。
回答大小
对于六个研究副本中的 30 项特性,map 的回答总计 336 KB(估算约 84 k 个 token),而源代码为 106.1 MB(约 26.5 M 个 token):比例为 316 比 1。这些回答是排序后的阅读位置,并非结论(上文的留出集 recall@5 为 0.149),因此读者仍需打开文件。方法、各克隆版本的数据和注意事项:docs/reports/2026-10-14-answer-size.md。
复现方法:运行 scripts/answer-size.sh,然后运行 node scripts/readme-assets.mjs。
共解析 29 种语言,其中 5 种会进行深度解析,4 种有经过测量的黄金标准。请查看各层级,而不是只看标题。
每种语法(共 32 个 ID:tsx、jsx 和 mjs 分别计数)都有一个固定样例,并在
fixtures/languages/ 中提交了图摘要,因此,任何会改变图的语法版本升级都会导致 CI 失败,并需要有意重新生成黄金标准。
| 层级 | 语言 | 引擎提取的内容 |
|---|---|---|
| 已解析(29) | typescript(+tsx)、javascript(+jsx、mjs)、python、rust、go、java、ruby、php、swift、kotlin、dart、scala、c、cpp、csharp、objc、perl、r、bash、powershell、sql、yaml、toml、hcl、dockerfile、graphql、css、scss、html | 符号、文件、包含关系、导入,以及提取器报告的直接调用。配置和标记语言(yaml 到 html)只会产生符号;比较时应将其视为噪声。 |
| 已解析绑定(5) | typescript/javascript、python、rust、go、java | 还会提取解析到文件的导入、声明类型、类型化接收者、barrel 再导出、继承(extends、implements)和测试关联;按设计,go 没有继承边 |
| 经过测量 | typescript(hono、graphmind、code-review-graph)、python(srclight、code-review-graph)、rust(graphmind)和 go(caddy)有调用边黄金标准;所有 5 种已解析绑定的语言都有一致性固定样例 | 参见黄金标准表;java 只有固定样例 |
限制、已知缺口和跳过的文件
注册表包含 32 个标识符(tsx、jsx、mjs 与其所属语言一起计数)。未解析绑定的语言只会按名称绑定调用,
置信度为 0.5,且仅限同一语言系列。已知缺口:Java 的 new T() 没有调用点;Rust trait 方法及其实现共享一个限定名称;Go 中对方法结果、range 变量和泛型的调用目前都无法绑定
(计划 7 候选项)。每次构建都会跳过以下目录:
node_modules、target、dist、build、.git、vendor、__pycache__、.venv、venv;被 .gitignore 或
.ignore 排除的文件;以及经过压缩的文件。跳过的文件数会计入运行结果的 limitations。
Agent、平台与卸载
comparegraph setup 会写入配置项;comparegraph doctor 会报告每个客户端的状态(aligned、stale、conflict、
missing、unverified、plugin)。--client all 只会作用于看起来已安装的客户端。plugin:当启用 comparegraph@comparegraph 且使用 --client all 时,交由 Claude Code 插件处理;指定 --client claude 可强制写入。若不带参数的 comparegraph 命令在 PATH 中解析到已注册的二进制文件,则视为已对齐。setup --apply 只会添加配置,并创建名为 <file>.bak-<unix-seconds> 的备份;如果配置项不同,除非传入 --force,否则不会修改。
setup 还会向 Agent 的指令文件写入规则块,并为 Claude Code 添加一个 SessionStart hook;详情请参阅用法。
十二个客户端、对应文件及卸载时要移除的内容
| Agent | --client | 配置(用户 / 项目) | 规则文件 | 卸载时移除 |
|---|---|---|---|---|
| Claude Code | claude | ~/.claude.json / .mcp.json | CLAUDE.md | mcpServers.comparegraph |
| Codex | codex | ~/.codex/config.toml / .codex/config.toml | AGENTS.md | [mcp_servers.comparegraph] 表 |
| Cursor | cursor --scope project | .cursor/mcp.json(用户范围未经验证,已跳过) | AGENTS.md | mcpServers.comparegraph |
| Gemini CLI | gemini | ~/.gemini/settings.json / .gemini/settings.json | GEMINI.md | mcpServers.comparegraph |
| OpenCode | opencode | ~/.config/opencode/opencode.json / opencode.json | AGENTS.md | mcp.comparegraph |
| Hermes | hermes | ~/.hermes/config.yaml(无项目范围) | AGENTS.md | mcp_servers.comparegraph |
| Windsurf | windsurf | ~/.codeium/windsurf/mcp_config.json(无项目范围) | AGENTS.md | mcpServers.comparegraph |
| Antigravity | antigravity | ~/.gemini/antigravity/mcp_config.json(无项目范围) | GEMINI.md | mcpServers.comparegraph |
| Kiro | kiro --scope project | .kiro/settings/mcp.json(无用户范围) | AGENTS.md | mcpServers.comparegraph |
| GitHub Copilot(VS Code) | copilot --scope project | .vscode/mcp.json(无用户范围) | .github/instructions/comparegraph.instructions.md | servers.comparegraph |
| GitHub Copilot CLI | copilot-cli | ~/.copilot/mcp-config.json(无项目范围) | AGENTS.md | mcpServers.comparegraph |
| Qwen Code | qwen | ~/.qwen/settings.json(无项目范围) | GEMINI.md | mcpServers.comparegraph |
要卸载规则块,请删除从 到 的行;要卸载 hook,请删除命令为 comparegraph doctor --brief 的 SessionStart 条目。
平台:每个版本都会在各自的运行器上构建 linux-x64、linux-arm64、darwin-arm64、darwin-x64 和 win32-x64,并将每个构建作为发布资源提供,列表见 SHA256SUMS;Homebrew tap 会随版本更新。测试套件仅在 linux-x64 上运行。凡是能运行 Rust 1.85+ 的环境,都可以从源代码构建。仅限本地运行:引擎不会发起网络调用(如何自行检查,以及尚未强制执行的内容:常见问题);MCP 服务通过 stdio 通信;存储是一个由你掌控的 SQLite 文件。
卸载:移除上述配置项(在启用了插件的 Claude Code 中,使用 /plugin uninstall comparegraph),然后删除二进制文件(~/.local/bin/comparegraph、brew uninstall comparegraph 或 cargo uninstall comparegraph),并在每个工作区中运行 rm -r .comparegraph。
常见问题与故障排查
- 常见问题:它与 code-review-graph 和 codegraph 有何不同(以及它们具备而它不具备的功能)、是否使用模型(不使用)、是否会替你采纳代码(不会)、为什么有些调用边的权重是 0.5、它是否免费以及由谁支持、如何确认它不会发送任何内容、它会如何处理你不信任的代码库,以及它不会做什么。
- 故障排查:十二种症状及其原因,从
no workspace和被拒绝的none声明,到无声无息的会话启动钩子。 - 从
comparegraph doctor开始:它会报告存储、每个提供方以及每个客户端的注册情况。
路线图
以下内容目前都尚不存在,顺序由维护者决定。完整列表及每项背后的测量结果:docs/roadmap.md。
- 下一个经过测量的改进方向:在存储中增加文本通道(文档注释和签名令牌)以及按家族划分的同义词,以便在未见过的克隆中使用
map。 - 为已采纳的功能提供 port-kit 导出;导出功能统计;导入声明以及
family import/export。 - 图谱对齐查询、C/C++/C# 解析器、按文件划分的分析缓存,以及更多客户端(Zed、Continue)。
文档
| 文档 | 内容 |
|---|---|
docs/reports/README.md | 所有测量结果的索引,包含结论和状态 |
docs/dev/scripts.md | 每个脚本复现哪些数字 |
docs/dev/release.md | 如何发布:标签、工作流、注册表条目、tap,以及发布后要检查的内容 |
docs/dev/plugin-protocol.md | 外部引擎使用的 JSON 行协议、限制、一致性要求,以及一个 25 行示例 |
docs/dev/pid-namespaces.md | 测试为何在 PID 命名空间中运行,以及如何启用它 |
docs/dev/language-fixtures.md | 每种语法一个 fixture、已提交的摘要,以及语法升级后如何重新生成基准 |
docs/usage.md | 你能获得什么、配置、保险库、库的用法 |
docs/commands.md | CLI 参考 |
docs/mcp-tools.md | 18 个 MCP 工具 |
docs/faq.md、docs/troubleshooting.md | 问题与解决方法 |
docs/catalog.json | 18 个 MCP 工具和 9 个错误代码,由程序生成并由 CI 检查 |
docs/decisions.md | 每项临时决定、替代方案,以及可能促使其改变的因素 |
docs/design.md | 设计 |
docs/roadmap.md | 后续计划、每项计划留下的内容,以及每项背后的测量结果 |
docs/THIRD_PARTY_NOTICES.md | 改编代码的来源和许可证 |
skills/ | 七种方法技能 |
fixtures/gold/README.md | 如何绘制和标注调用边基准 |
fixtures/gold-map/README.md | 如何制作功能映射基准 |
families/ | 示例包和包含 30 项功能的 code-graph-tools 包 |
CHANGELOG.md | 各版本的变更 |
CONTRIBUTING.md、AGENTS.md、CODE_OF_CONDUCT.md | 参与贡献:环节、不变量、禁止事项清单 |
贡献、许可证、第三方代码
安全问题请发送至 [email protected],或通过私人安全公告渠道报告(SECURITY.md);行为准则问题请发送至同一地址(CODE_OF_CONDUCT.md)。
请先阅读 CONTRIBUTING.md 和 AGENTS.md。修复错误时,先编写一个失败的测试;提取变更时,扩展一致性测试样例;引擎中不得调用模型或网络。CI 会运行 clippy、测试套件、一致性摘要和语言摘要,以及 cargo-deny(许可证、公告、来源;deny.toml)。随附的解析器层来自 graphmind(MIT);详见 docs/THIRD_PARTY_NOTICES.md。许可证:Apache-2.0,详见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。