关于 Overreach
Overreach 是用于依据任务提示词审查编码 Agent 改动的命令行工具。它通过确定性的差异检查标记未经授权的改动和跨文件风险,也可选用 LLM 提取授权范围。
主要功能
- 01对照提示词范围与代码差异
- 02标记意外文件、依赖和端点
- 03检测跨文件审查风险
- 04使用正则解析实现无 API 密钥运行
- 05集成为提交前钩子或 GitHub Action
- 06提供 JSON 输出和 MCP 服务
适用场景
- 01合并前审查 Agent 生成的改动
- 02在拉取请求中阻止超出范围的改动
- 03提交前在本地检查差异
- 04让 AI Agent 检查自身改动
MCP 相关
Overreach 提供供 AI Agent 检查自身工作的 MCP 服务。可通过 `overreach --serve` 启动,并在 Claude Desktop 或 Cursor 等客户端中配置。
详细介绍
Overreach
你的 AI 写了 2,000 行代码,你只有 10 分钟来审查。
Overreach 会告诉你应该先看哪里。你要求做一个登录表单——它却找出了 Stripe 密钥、结账端点,以及 AI Agent 未经询问就添加的 cron 作业。结果确定、有证据支撑,不掺杂 AI 的主观看法。
看看效果
$ npx -y overreach demo
Overreach — AI PR Review
─────────────────────────────────────────────────
You asked: "add a login form to the settings page"
5 files changed · 4 in scope · 1 outside scope
Findings
✗ New environment variable: STRIPE_SECRET
.env.example
✗ New API endpoint: /api/checkout
src/app/api/checkout/route.ts
✗ Scheduled job added
cron.config.ts
⚠ File outside scope: cron.config.ts
cron.config.ts
⚠ Added dependency: stripe
package.json
Heads Up
→ New API route added but no test file updated
→ Dependencies changed but lockfile not updated
→ 3 source files changed but no tests updated
─────────────────────────────────────────────────
5 findings · review carefully · deterministic
你要求做一个登录表单。Overreach 却找出了一个支付系统。合并前,先审查这些文件。
安装
# Just run it — zero setup
cd your-project
npx -y overreach
就这么简单。它会自动检测你的更改,询问你让 AI 做了什么,然后展示审查结果。无需配置文件,也不用记住任何标志。
或者将其永久安装:
npm install -g overreach
# Pipe a diff with an explicit prompt
git diff | overreach --prompt "add user authentication"
# Install as a pre-commit hook
overreach init
没有 API 密钥?没问题。 不提供密钥时,Overreach 会在本地使用正则表达式解析你的提示词。即时、免费、完全确定。
适用对象
- Claude Code
- Cursor
- Codex
- GitHub Copilot
- Windsurf
- Aider
任何根据提示词编写代码的工具都适用。Overreach 审查的是输出,而不是工具。
它能发现什么
意料之外的更改(AI 做了你没要求的事)
| 检查项 | 示例 |
|---|---|
| 依赖项 | 你要求做一个登录表单,它却添加了 stripe |
| 环境变量 | .env 中出现了 STRIPE_SECRET |
| API 端点 | 出现了你从未要求的 /api/checkout 路由 |
| 定时作业 | 悄悄添加了 cron 作业或后台任务 |
| 运行时监听器 | 服务器、WebSocket 处理程序、process.on 钩子 |
| 范围外文件 | 修改了提示词中未提及的文件 |
| 功能蔓延 | 添加了超出要求的新函数或类 |
每条发现都是确定的——通过对提示词和差异进行集合运算得出。没有 AI 的主观看法。只有:“你要求了 X,差异中还包含 Y,而 Y 不属于 X。”
提醒事项(可能需要检查的内容)
Overreach 还会扫描实际的跨文件问题,这些问题开发者在审查时容易遗漏:
| 警告 | 发现的问题 |
|---|---|
| 有架构变更但无迁移 | 修改了 schema.prisma,却没有添加迁移 |
| 环境变量不匹配 | 代码使用了 process.env.FOO,但 .env 中未定义该变量 |
| 路由没有测试 | 添加了新的 API 路由,但没有更新测试文件 |
| 完全没有测试 | 更改了 3 个或更多源文件,却没有触及任何测试文件 |
| 有依赖但无锁文件 | 修改了 package.json,但没有 package-lock.json |
| 身份验证/中间件已更改 | 修改了与安全相关的文件 |
| 硬编码密钥 | 将 API 密钥或令牌直接写入源代码 |
| 文件过大 | 单个文件新增了 200 行或更多内容,可能需要拆分 |
| 无用的新文件 | 创建了新文件,但从未在任何地方导入 |
| 新增技术债务 | 在 2 个或更多文件中添加了 TODO/FIXME/HACK |
| API 缺少文档 | 更改了 API 路由,却没有更新文档 |
| 孤立样式 | 更改了 CSS,却没有更新任何组件 |
| 配置泛滥 | 一次更改了 3 个或更多配置文件 |
| 仅基础设施更改 | 更改了 Docker/CI,却没有更改源代码 |
这些不是范围蔓延,而是你凌晨 2 点容易忘记、最终在生产环境中才发现的问题。
为什么采用确定性方式
大多数 AI 代码审查工具会使用另一个 AI 来评判你的代码。这意味着主观意见、幻觉,以及每次运行结果都可能不同。
Overreach 不会这样做。
它运行一个包含 3 个阶段的流程:
-
提取范围 — 通过一次成本低廉的 LLM 调用读取你的提示词,并提取你授权的内容(文件、依赖项、环境变量、端点)。或者完全跳过 LLM,使用零密钥模式。
-
解析差异 — 基于正则表达式提取。不使用 LLM。找出所有已更改的文件、新增的依赖项、设置的环境变量和创建的端点。只需几毫秒。
-
对比 —
实际内容 − 已授权内容 = 发现项。纯粹的集合运算。差异中任何未出现在提示词里的内容都会成为发现项。
第 2 和第 3 阶段都是纯函数——相同的输入始终得到相同的输出。不进行推断,也不会出现模型漂移。
CI 门禁
将 Overreach 用作 GitHub Action,在每个 PR 上阻止 AI 范围蔓延:
# .github/workflows/overreach.yml
- uses: Naveja00/Overreach@v1
发现意外更改时返回退出码 1——AI Agent 无法跳过此检查。
MCP 服务(供 AI Agent 使用)
AI Agent 可以在提交前使用 Overreach 检查自己的工作:
# Claude Code
claude mcp add overreach -- npx -y overreach --serve
# Claude Desktop / Cursor — add to MCP config:
{ "mcpServers": { "overreach": { "command": "npx", "args": ["-y", "overreach", "--serve"] } } }
内部机制
API 密钥(可选)
Overreach 会自动检测你的 AI 提供商:
| 提供商 | 环境变量 |
|---|---|
| Anthropic | ANTHROPIC_API_KEY |
| OpenAI / 兼容服务 | OPENAI_API_KEY |
| Ollama(本地) | 无需密钥 |
CLI 标志
overreach # Interactive mode (recommended)
overreach demo # Zero-key demo with sample diff
overreach init # Install as pre-commit hook
git diff | overreach --prompt "…" # Pipe a diff with explicit prompt
overreach --diff file.diff --prompt "…" # Read diff from file
overreach --scope scope.json --prompt "…" # Skip LLM, use pre-extracted scope
overreach --json # Machine-readable JSON output
overreach --serve # Start as MCP server
JSON 输出
添加 --json 以生成结构化输出(CI、管道、集成):
{
"scope": { "files_allowed": [], "features_allowed": [] },
"actual": { "files_changed": [], "symbols_added": [] },
"findings": [
{
"kind": "scope.env",
"detail": "New environment variable STRIPE_SECRET not in authorized scope",
"file": ".env.example",
"severity": "high",
"evidence": "STRIPE_SECRET"
}
],
"scope_creep_score": "HIGH",
"blast_radius": {
"warnings": [
{
"pattern": "route-no-test",
"message": "New API route added but no test file updated",
"files": ["src/app/api/checkout/route.ts"],
"suggestion": "Add tests for the new endpoint"
}
]
}
}
发现类型
| 类型 | 严重性 | 触发原因 |
|---|---|---|
scope.env | HIGH | 提示词中未提及环境变量 |
scope.endpoint | HIGH | 添加了未经授权的 API 路由 |
scope.cron | HIGH | 添加了计划任务 |
scope.listener | HIGH | 运行时监听器(服务器、WebSocket、process.on) |
scope.dep | MEDIUM | 添加了软件包依赖 |
scope.file | MEDIUM | 更改了提示词范围之外的文件 |
scope.feature | LOW | 新符号与任何已授权功能都不匹配 |
遥测
Overreach 会发送匿名使用情况统计信息:仅包含计数和枚举值(score、
findings 计数、操作系统、版本)——绝不会发送代码、提示词、文件路径或差异
内容。首次审查时会显示一次性提示。你可以随时选择退出:
export OVERREACH_TELEMETRY=0 # or DO_NOT_TRACK=1
测试
npm test # 241 deterministic assertions, zero API calls
许可证
MIT——免费且开源。
链接
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。