关于 argot
argot 是一个本地运行、不依赖 LLM 的 MCP 服务,通过分析仓库自身的 git 历史来学习代码模式,并检查变更是否偏离这些模式。它面向希望审查 AI 生成代码的团队,区别在于其结论基于统计和仓库证据,由人工决定是否采纳。
主要功能
- 01从 git 历史学习仓库模式
- 02完全本地运行,无需账号或网络
- 03检测外来导入与未知调用
- 04提供 12 类规则并支持自定义规则
- 05结果附带仓库证据,供人工判断
适用场景
- 01审查 AI 生成的拉取请求是否符合仓库风格
- 02在 CI 中对变更进行只读检查
- 03发现测试被删除或弱化的情况
MCP 相关
argot 以 MCP 服务的形式运行,向已配置的客户端提供只读上下文、代码块级别及完整变更集的检查工具。依赖模型的工具需要先对仓库进行 fit 处理。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
检查那些你从未写下的规则。
AI 编写代码。argot 用唯一不会产生幻觉的东西为它保驾护航:你自己的代码库历史。
用统计学,而非第二个大模型。100% 本地运行。它会揭示偏差——是否接受,由你决定。
argot.tmonier.com · 文档 · 实证 · 研究日志
|
|
🎬 观看 45 秒发布短片 |
argot audit 无需预先进行 Argot 拟合或配置。它会在临时工作树中拟合历史基线,然后评估保留的基线到 HEAD 净差异。你的工作树不会受到影响。这是一条供审查的提示,并非对代码作者的统计,也不能证明某项发现就是缺陷。
# macOS / Linux
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/get-tmonier/argot/releases/latest/download/argot-installer.sh | sh
cd your-repository
argot audit
Windows:powershell -c "irm https://github.com/get-tmonier/argot/releases/latest/download/argot-installer.ps1 | iex"。
也可以通过 npm install -g @tmonier/argot 安装 npm 软件包。
审计需要可用的 Git 历史记录和受支持的源代码。它不承诺固定的运行时间。 它完全离线运行——语义发现背后的代码嵌入模型随二进制文件一起提供。安装 和拟合详情请参阅入门指南。
如果审计为你提供了有用的线索,请拟合当前仓库,并为你打算审查的更改评分:
argot init
argot check
审查并提交生成的 argot.toml 和 .argot/ 拟合快照,然后在添加 CI 工作流
之前,将其合并到未来 PR 的目标分支。之后,本地工具和 CI 都会使用相同的学习基线。CI 只读取基分支快照,
不会进行拟合,因此,初始快照 PR 必须与 CI 工作流 PR 分开提交。之后,只有在已接受的源代码、
函数或布局范围发生实质性变化时,argot status 才会建议在本地
重新拟合并提交。默认情况下,提交数量和快照年龄不会触发刷新;只有作为团队明确设置的兜底措施时,
才可使用 [fit] refresh-after。
argot-refresh 技能会在拟合前重新审查排除项、结构路径和静音设置,
因此仓库重新组织后不会盲目地重新学习旧范围。
flowchart LR
A["argot init<br/>learn locally"] --> B["review + commit<br/>argot.toml · .argot/"]
B --> C["local tools + CI<br/>read one baseline"]
C --> D{"material accepted drift?"}
D -- no --> C
D -- yes --> E["argot-refresh<br/>review scope · fit locally"]
E --> B
嵌入模型本身随二进制文件一起提供。Git 只会存储特定于仓库的学习快照——通常为几 MB 到几十 MB——因此 每个克隆都可以复现检查,无需重新训练或运行服务。
check 会报告所选变更集中值得审查的模式;结果干净并不能证明更改正确或完全符合惯用做法。请阅读
审计、
初始化与拟合和
检查指南,了解具体约定。
它能发现什么
类型检查器会询问代码能否编译。argot 会询问代码是否属于你的仓库。 即使拉取请求代码干净、类型正确且经过充分审查,也可能与合入它的仓库格格不入。argot 自带以下规则,每一条都是从你自己的历史记录中学得,而非手动配置:
| 规则 | 分组 | 检查内容 |
|---|---|---|
foreign-import | 风格 | 导入仓库从未使用过的依赖 |
unfamiliar-callee | 风格 | 调用仓库代码从未调用过的接收者或被调用方 |
rare-tokens | 风格 | 在统计上不符合仓库风格的词元序列 |
convention | 风格 | 违反从仓库中学得的惯例的构造 |
superseded | 风格 | 仓库正在替换或已声明不再使用的模式 |
redundant | 语义 | 新函数与仓库已有函数重复 |
misplaced | 语义 | 看起来应属于其他模块领域的函数 |
layering | 架构 | 反转仓库分层方向的内部导入 |
test-deleted | 完整性 | 删除了测试,但测试所覆盖的代码仍然存在 |
test-disabled | 完整性 | 随着生产代码变更添加跳过标记,或大幅删减测试 |
test-weakened | 完整性 | 随变更移除断言、使断言成为恒真式或放宽断言 |
rule-tampered | 治理 | 移除或弱化锁定规则的变更 |
仓库还可以在这些规则之上添加自己的规则——在 .argot/rules/ 下放置一个 TOML 清单和一个沙盒化的 Rhai 脚本,可在 examples/rules/ 中找到可直接复制使用的示例。无需重新编译。
argot 是概率性审查护栏,而非正确性判定器。每条发现都会附带仓库证据。请将其视为检查并明确作出人工判断的提示词,绝不能将其视为代码有误的证明。
选择运行方式
CLI 是完整、明确的变更集检查。其他方式的触发条件和覆盖范围更窄;没有任何一种能在验收时提供通用检查。
| 方式 | 执行类型 | 前置条件和覆盖范围 | 证据状态 |
|---|---|---|---|
| CLI | 由用户或 Agent 调用 | 运行 audit、init 或完整的 check;命令需要时必须先完成拟合。 | CLI/源代码清单,2026-07-22 |
| Skills | 调用 | 面向兼容技能宿主的七种按需工作流;安装不会安排命令、配置 MCP 或添加钩子。 | 清单/源代码清单,2026-07-30 |
| MCP | 被动 | 配置好的客户端选择只读上下文、代码块或完整变更集工具;依赖模型的工具需要已拟合的仓库。拟合仍需通过明确的本地 CLI/技能工作流完成。 | 定向测试和源代码检查,2026-07-30 |
| Claude Code 插件 | 配置后自动运行,同时提供调用/被动功能 | 在已拟合的仓库中,其选择启用的写入前钩子仅会在 Write、Edit 或 MultiEdit 引入外部导入时询问。它绝不会阻止操作,也不是完整检查或回合结束时的检查。 | 清单/源代码检查,2026-07-22 |
| pre-commit | 用户配置后自动运行 | 在已拟合的仓库中为暂存的受支持文件评分。argot-check 钩子针对发现的问题提供建议;argot-check-gate 可选择启用错误级别退出。 | 清单检查,2026-07-22 |
| GitHub Action | 用户配置后自动运行 | 在工作流中为配置的 ref/范围评分;需要检出历史记录和发布下载访问权限。fail-on-hits 默认为 false。 | Action 清单检查,2026-07-22 |
规范的设置和宿主详情:Claude Code、 其他 Agent 和 MCP,以及 CI 和 pre-commit。
证据与局限
当前公开测量结果针对特定检测器,并非适用于整个产品的准确率或综合简报声明。已批准的声明清单 记录了:
- 可见外来符号样本:620/637 — 97.3%,涵盖 36 个语料库和 12 种语言;
- 重造样本:545/584 — 93.3%,涵盖 31 个语料库和 11 种语言;
- 位置移植样本:12,899/13,456 — 95.9%,涵盖 22 个可评估语料库和 11 种语言 (其余九个语料库因布局中没有可分离的架构而弃权);
- 分层样本:264/272 — 97.1%,涵盖 25 个语料库和 12 种语言;
- 测试完整性样本:154/164 — 93.9%,涵盖 23 个语料库和 12 种语言。
如果不考虑误报成本,检出率意义不大,因此两项指标都会公布。在同一批 36 个语料库中,语音检测器会将 0.25% 的普通已接受编辑标记出来;而对于新增文件中的代码块,这一比例为 0.00%。此时仓库最难判断哪些内容才是合适的。
每个数字都有各自的语料库、分母和限定条件。综合简报/噪声结果以及普通仓库的运行时间尚未形成公开测量声明。请参阅 基准测试方法与来源。
Argot 提供适用于 12 种语言的适配器。经过测试的五个发布目标为 macOS arm64/x64、Linux x64/arm64 和 Windows x64。本地分析路径会使用统计、图、脚本和嵌入证据;没有生成式或表达观点的模型会决定检测结果。
模型适配状况很重要。如果仓库历史记录较浅、由生成内容构成、包含供应商代码,或以其他方式不适用,可能无法生成有用的模型。对于完全使用熟悉词汇、经过掩饰的描述以及所选范围之外的代码做出的错误选择,Argot 的可靠性也最低。依赖特定检测器之前,请先阅读 局限。
可复现的编写示例

这是一个编写的样本,并非真实案例语料库。固定的命令、版本、回执、校验和、重新生成步骤,以及图中 GIF 无法保证逐字节稳定的说明,均记录在 证明回执中。此图是可审计的 Markdown 回执的可复现配套内容。
隐私与开源
Argot 会在本地分析源代码、历史记录和检测结果。个人本地核心版本免费,采用 MIT 开源许可证,且无需账户或云服务。Argot 默认不启用遥测,也不会上传源代码。其执行的分析完全不需要网络——语义检测所用的代码嵌入模型已编译到二进制文件中。不过,Argot 仍可通过网络检查更新/版本、下载发行版,或连接显式配置的审查/更新/CI 集成。设置 ARGOT_OFFLINE=1 可阻止网络访问;不会损失任何分析功能。
贡献
欢迎贡献。请先查看 CONTRIBUTING.md,再参阅产品策略了解维护中的决策记录,并查看研究日志了解相关证据。
致谢
argot 发布的每项数据,都是基于 36 个开源项目的真实历史记录,在支持的 12 种语言中进行测量的——fastapi、rich、 faker、saleor、wagtail、scrapy、hono、ink、faker-js、excalidraw、outline、 express、commander、eslint、gh-cli、hugo、ripgrep、bat、guava、junit5、 powershell、jellyfin、redis、curl、rocksdb、fmt、homebrew、rubocop、laravel、 composer、castle-engine、mORMot2、uos、ideU、MSEide/MSEgui 和 dagster。
没有这些项目,就不会有这项基准测试。我们衷心感谢它们的维护者和贡献者。Argot 不会打包或重新分发这些项目的任何代码:测试框架会在固定的 SHA 上克隆每个仓库,在本地读取其历史记录,且不会随其分发任何内容。每个项目仍受其自身许可证约束,版权归其作者所有。完整列表及链接,以及 argot 提交的内容,请见:
benchmarks/README.md。
argot 确实会重新分发一项内容。redundant 和 misplaced 背后的模型,是通过
model2vec 技术(MinishLab,MIT)从
jina-embeddings-v2-base-code
(Jina AI,Apache-2.0)蒸馏而来的、含 15.6M 个参数的静态表。其权重已编译进二进制文件,并依据 Apache-2.0 许可证重新分发;
完整条款请见 NOTICE。argot 与这两个项目均无关联。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
