Overreach について
Overreachは、タスクのプロンプトに照らしてコーディングエージェントの変更を確認するコマンドラインツールです。決定的な差分チェックで未承認の追加やファイル間のリスクを検出し、任意でLLMを使って許可範囲を抽出します。
主な機能
- 01プロンプトの範囲とコード差分の比較
- 02想定外のファイル、依存関係、エンドポイントの検出
- 03ファイル間のレビューリスクの検出
- 04正規表現解析によるAPIキー不要の実行
- 05コミット前フックまたはGitHub Actionへの組み込み
- 06JSON出力とMCPサーバーの提供
活用シーン
- 01マージ前のエージェント生成コードのレビュー
- 02プルリクエストで範囲外の変更をブロック
- 03コミット前にローカルで差分を確認
- 04AIエージェント自身に変更を検査させる
MCP 対応
OverreachはAIエージェントが自身の作業を確認するためのMCPサーバーを提供します。`overreach --serve`で起動し、Claude DesktopやCursorなどのクライアントに設定できます。
詳細
Overreach
AI が 2,000 行を書きました。レビューに使える時間は 10 分です。
Overreach は、まずどこを確認すべきかを知らせます。ログインフォームを依頼したところ、Stripe キー、チェックアウトエンドポイント、そして AI エージェントが無断で追加した 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 キーやトークンがソースコードに直接記述された |
| 大きなファイル | 1 つのファイルに 200 行以上追加されたため、分割が必要な可能性がある |
| 未使用の新規ファイル | 新しいファイルが作成されたが、どこからもインポートされていない |
| 技術的負債の追加 | 2 つ以上のファイルに TODO/FIXME/HACK がある |
| ドキュメントのない API | API ルートが変更されたが、ドキュメントが更新されていない |
| 孤立したスタイル | CSS は変更されたが、コンポーネントは更新されていない |
| 設定ファイルの乱立 | 設定ファイルが一度に 3 つ以上変更された |
| インフラのみの変更 | Docker/CI は変更されたが、ソースコードは変更されていない |
これらはスコープの肥大化ではありません。午前 2 時には忘れていて、本番環境で問題に気付くような項目です。
なぜ決定論的なのか
多くの AI コードレビューツールは、別の AI にコードを評価させます。つまり、主観や幻覚が入り、実行するたびに結果が変わります。
Overreach はそうしません。
3 段階のパイプラインを実行します。
-
スコープを抽出 — 低コストな LLM 呼び出しでプロンプトを読み取り、許可された内容(ファイル、依存関係、環境変数、エンドポイント)を抽出します。または、LLM を完全に省略してゼロキー モードを使うこともできます。
-
差分を解析 — 正規表現ベースで抽出します。LLM は使いません。変更されたすべてのファイル、追加された依存関係、設定された環境変数、作成されたエンドポイントを検出します。数ミリ秒で実行されます。
-
比較 —
actual − authorized = findings。純粋な集合演算です。差分に含まれていてプロンプトにはなかったものは、すべて検出結果になります。
ステージ 2 と 3 は純粋関数です。同じ入力なら、いつでも同じ出力になります。推論も、モデルの変動もありません。
CI ゲート
Overreach を GitHub Action として使用して、すべての PR で AI のスコープ逸脱をブロックします。
# .github/workflows/overreach.yml
- uses: Naveja00/Overreach@v1
予期しない変更が見つかった場合は終了コード 1 を返します。AI エージェントはこのチェックをスキップできません。
MCP サーバー(AI エージェント向け)
AI エージェントは、コミット前に自身の作業をチェックするために 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 出力
構造化出力(CI、パイプ処理、インテグレーション)には --json を追加します。
{
"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 の件数、OS、バージョン)で、コード、プロンプト、ファイルパス、差分の内容は送信されません。初回のレビュー時に一度だけ通知が表示されます。いつでもオプトアウトできます。
export OVERREACH_TELEMETRY=0 # or DO_NOT_TRACK=1
テスト
npm test # 241 deterministic assertions, zero API calls
ライセンス
MIT — 無料のオープンソースです。
リンク
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。