mcpField
O
Overreach

Overreach

github.com/Naveja00编码 Agent616 周前更新

关于 Overreach

Overreach 是用于依据任务提示词审查编码 Agent 改动的命令行工具。它通过确定性的差异检查标记未经授权的改动和跨文件风险,也可选用 LLM 提取授权范围。

主要功能

  1. 01对照提示词范围与代码差异
  2. 02标记意外文件、依赖和端点
  3. 03检测跨文件审查风险
  4. 04使用正则解析实现无 API 密钥运行
  5. 05集成为提交前钩子或 GitHub Action
  6. 06提供 JSON 输出和 MCP 服务

适用场景

  1. 01合并前审查 Agent 生成的改动
  2. 02在拉取请求中阻止超出范围的改动
  3. 03提交前在本地检查差异
  4. 04让 AI Agent 检查自身改动

MCP 相关

Overreach 提供供 AI Agent 检查自身工作的 MCP 服务。可通过 `overreach --serve` 启动,并在 Claude Desktop 或 Cursor 等客户端中配置。

详细介绍

Overreach

你的 AI 写了 2,000 行代码,你只有 10 分钟来审查。

npm version license

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 个阶段的流程:

  1. 提取范围 — 通过一次成本低廉的 LLM 调用读取你的提示词,并提取你授权的内容(文件、依赖项、环境变量、端点)。或者完全跳过 LLM,使用零密钥模式。

  2. 解析差异 — 基于正则表达式提取。不使用 LLM。找出所有已更改的文件、新增的依赖项、设置的环境变量和创建的端点。只需几毫秒。

  3. 对比 — 实际内容 − 已授权内容 = 发现项。纯粹的集合运算。差异中任何未出现在提示词里的内容都会成为发现项。

第 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 提供商:

提供商环境变量
AnthropicANTHROPIC_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.envHIGH提示词中未提及环境变量
scope.endpointHIGH添加了未经授权的 API 路由
scope.cronHIGH添加了计划任务
scope.listenerHIGH运行时监听器(服务器、WebSocket、process.on)
scope.depMEDIUM添加了软件包依赖
scope.fileMEDIUM更改了提示词范围之外的文件
scope.featureLOW新符号与任何已授权功能都不匹配
遥测

Overreach 会发送匿名使用情况统计信息:仅包含计数和枚举值(score、 findings 计数、操作系统、版本)——绝不会发送代码、提示词、文件路径或差异 内容。首次审查时会显示一次性提示。你可以随时选择退出:

export OVERREACH_TELEMETRY=0   # or DO_NOT_TRACK=1
测试
npm test    # 241 deterministic assertions, zero API calls

许可证

MIT——免费且开源。

链接

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。