关于 RepoPilot
RepoPilot 是一个本地运行的 Git 变更审查 MCP 服务,面向开发者和团队在合并前检查改动。它基于结构化证据给出 PASS、REVIEW、BLOCK 或 NOT ASSESSED 决策,分析过程不向托管服务发送源代码。
主要功能
- 01本地确定性审查 Git 变更
- 02识别被削弱的测试与 CI 门禁
- 03标记安全边界与输入到汇聚点的路径
- 04分析依赖图中的直接与间接影响
- 05支持控制台、Markdown、JSON、HTML 和 SARIF 报告
适用场景
- 01合并前检查变更是否跳过或削弱了测试
- 02在 CI 中基于高置信度信号阻止分支合并
- 03为编码 Agent 的改动提供快照与审查
MCP 相关
RepoPilot 作为本地 stdio MCP 服务运行,向 agent 提供扫描和审查工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
6收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| base | string | 否 | 要比较的基础 Git 引用,例如 "origin/main"。可选;默认比较工作树与 HEAD。 |
| head | string | 否 | Head Git ref。可选,且仅可与 "base" 一起使用。 |
| path | string | 否 | 要审查的仓库路径。默认使用当前工作目录。 |
| limit | integer | 否 | 返回的发现数量上限。 |
| scope | enum | 否 | "changed" 仅报告已更改文件中的发现;"full" 还会返回仓库其余部分的发现。changed | full |
| config | string | 否 | 可选的 repopilot.toml 路径。默认使用在仓库中发现的文件。 |
| detail | enum | 否 | "compact" 最多返回 20 条发现和 20 个信号;"full" 返回全部内容。compact | full |
| intent | object | 否 | 可选的内联说明,描述此更改预期涉及的内容(路径、契约类别、关键路径、验证 ID)。报告会标记超出此范围的偏离。此内容仅作为元数据,不能执行命令。 |
| intent.paths | array | 否 | |
| intent.summary | string | 否 | |
| intent.version | integer | 否 | |
| intent.verification | array | 否 | |
| intent.critical_paths | array | 否 | |
| intent.contract_families | array | 否 | |
| offset | integer | 否 | 从 0 开始的发现偏移量。 |
| verify | array | 否 | 在 repopilot.toml 中配置、要为所审查版本请求运行的检查 ID。每项检查都需要通过 form-mode Elicitation 单独获得一次性用户批准;不支持的客户端会跳过检查。不传入则不运行任何检查。 |
| filters | object | 否 | 可选的阈值和规则 ID,用于缩小返回的发现范围。 |
| filters.rules | array | 否 | |
| filters.min_priority | enum | 否 | p0 | p1 | p2 | p3 |
| filters.min_severity | enum | 否 | info | low | medium | high | critical |
| filters.min_confidence | enum | 否 | low | medium | high |
| profile | enum | 否 | “default”会隐藏低信号建议;“strict”会显示所有发现。default | strict |
| baseline | string | 否 | 可选的基线文件(通过 `repopilot baseline create` 创建)。其中记录的发现会计为已接受的技术债,与新发现分开处理。 |
| intent_path | string | 否 | 可选的、以仓库根目录为基准的 TOML 文件,用于说明此更改预期涉及的范围。报告会标记超出该范围的偏离。使用此项或 `intent`,不能同时使用。 |
| fail_on_review | enum | 否 | 如果存在符合门控条件的 definitely 级信号,“definitely”会使报告门控失败;“none”会报告信号但不进行门控。none | definitely |
详细介绍
RepoPilot
对 Git 更改进行本地、确定性的审查。
RepoPilot 帮助开发者和团队在合并前检查更改。它会报告有关安全边界、行为、本地导入和导出,以及通过依赖关系图受影响文件的结构性证据。同一项审查可以在终端、CI 中运行,也可以通过 Agent 集成运行。
分析在运行它的机器或 CI 运行器上执行。它不会将源代码发送到托管服务,也不会调用内置语言模型。发现会指出相关代码并说明需要检查的内容;审查者仍需自行判断更改对其应用是否安全。
示例:削弱自身测试的更改
此更改从 applyDiscount 中移除了范围检查。同一更改还跳过了因此会失败的测试,从另一个测试中删除断言,并允许 CI 测试步骤失败而不导致任务失败。所有仍在运行的检查都通过了。repopilot review . 会在给出判断后立即列出这些问题:
Decision: REVIEW (Change Proof: REVIEW)
...
Checks this change weakened (details under Review signals):
⚑ check gate relaxed — .github/workflows/ci.yml:10
⚑ assertions removed — src/pricing.test.ts:5
⚑ test skipped — src/pricing.test.ts:9
再往下,每条信号都会说明原因:
⚑ check gate relaxed — .github/workflows/ci.yml:10 check step `npm test` in job `test` now has `continue-on-error: true`
⚑ assertions removed — src/pricing.test.ts:5 "applyDiscount > takes a percentage off the total": assertions 2 → 1
⚑ test skipped — src/pricing.test.ts:9 `it.skip` added on "rejects a discount above 100%"; its result no longer fails the run
这些是一次运行的摘录(录屏)。使用
scripts/demo-weakened-tests.sh <empty-dir> 重放,然后运行
repopilot review <empty-dir>。
安装并审查
cargo install repopilot
# or
npm install -g repopilot
repopilot review . --base origin/main
对于未提交的工作,运行 repopilot review .。首屏会给出一个
PASS、REVIEW、BLOCK 或 NOT ASSESSED 判断,以及判断原因、覆盖范围限制和下一步操作。
审查可能会发现:
- 身份验证、请求信任、部署、依赖项或机密配置方面的更改;
- 新增或移除的行为,例如网络调用、子进程、文件系统写入、SQL 或错误处理;
- 更改后的输入到接收端路径、算法结构,或本地导入/导出契约;
- 更改导致不再运行或被削弱的测试:已提交的专注标记(例如
it.only)、新跳过的测试(it.skip、@pytest.mark.skip、t.Skip、#[ignore])、移除或替换的测试用例、丢失断言的测试、新增的 lint、 类型或覆盖率抑制,以及放宽的 CI 或工具门槛 (continue-on-error、|| true、降低覆盖率阈值、关闭严格模式),以免绿色运行掩盖这些问题; - 直接依赖方,以及更改文件造成的更广泛影响。
信号是供参考的证据。例如,taint-lite 信号表明,在已更改的源代码中,一个可识别的输入可以到达一个可识别的接收端。请结合应用的上下文和已配置的检查确认其影响。
示例:审查图像处理更改
Wagtail 示例在单文件更改中移除了一项授权检查,并将请求数据传递给子进程。RepoPilot 会报告边界更改和从输入到进程的流向。
在固定版本的测试仓库中重放此示例:
python3 scripts/zoo.py clone --only wagtail
scripts/demo-agent-edit.sh .zoo/wagtail
repopilot review .zoo/wagtail
报告的流向是一条值得调查的路径。RepoPilot 无法证明它可被利用,也无法证明应用是安全的。
在团队中使用
基于高置信度信号,为分支审查设置门禁:
repopilot review . --base origin/main --fail-on-review definitely
只有在明确使用 --verify 选择了仓库配置的检查项,且这些检查项在被审查的修订版本上通过时,审查才会标记为 VERIFIED。使用
repopilot init --suggestions-output repopilot-suggestions.toml 为初次设置生成建议;该文件与活动配置分开。请参阅配置。
如需更全面地查看仓库,请运行 repopilot scan .。使用
repopilot baseline create . 接纳现有发现项,然后再对新工作设置门禁。
Agent 和 CI 集成
同一审查既可检查人工完成的工作,也可检查编码 Agent 完成的工作。记录一个起点,然后审查此后所做的更改:
repopilot snapshot
# Work happens here.
repopilot review --since-snapshot
如果工作树已有未提交更改,标记也会记录这些文件的基线提交,因此后续审查只涵盖快照之后的更改。它会显示更改内容,而不会显示是谁做了更改。 请参阅常见工作流。
在 Claude Code 中,RepoPilot 插件会在每个会话中运行这一流程,并阻止 Claude 在未解释其跳过、聚焦、移除或弱化的测试之前结束会话:
/plugin marketplace add MykytaStel/repopilot
/plugin install repopilot@repopilot
Codex 可安装相同的插件(codex plugin marketplace add MykytaStel/repopilot,然后运行 codex plugin add repopilot@repopilot)。Gemini CLI 可将其作为扩展安装(gemini extensions install https://github.com/MykytaStel/repopilot),Cursor 则通过项目钩子运行它。对于 GitHub Copilot 编码 Agent 和其他 Agent,RepoPilot 提供设置步骤、一个 MCP 条目以及一段 AGENTS.md 代码片段。请参阅保护 Agent 运行。
RepoPilot 还提供本地 stdio MCP 服务和 GitHub Action。MCP
服务可让 Agent 使用本地扫描和审查工具。Action 会在 Actions 运行器上运行
RepoPilot,并可发布 SARIF 或拉取请求摘要。
请参阅保护 Agent 运行、MCP 服务
和 GitHub 集成。MCP Registry
名称:mcp-name: io.github.MykytaStel/repopilot。
更多功能
repopilot ai context .会生成本地交接材料,其中包含仓库信息、发现项和按优先级排序的计划。它不会调用模型。repopilot init会创建配置或集成文件,供审查使用。- 报告支持控制台、Markdown、JSON、HTML 和 SARIF 格式。
文档
贡献指南和开发环境设置:CONTRIBUTING.md。
许可证
您可选择依据 Apache License, Version 2.0 或 MIT license 获得许可。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。