Over-Reach Detector

io.github.choreoatlasPublished by GitHub account choreoatlasv0.0.6Updated Oct 24, 2026

Detect when AI code changes exceed declared task scope (MCP server).

VerifiedSTDIODesktop onlyDeveloper ToolsSecurity & Monitoring

Overview

AI-generated overview

Audits AI coding agents by comparing a declared task scope against the files actually changed and reporting any over-reach.

What you can do
  • Check a change set against a declared scope: pass declared file globs, declared categories (tests, docs, infra, config, code) and the list of actually modified files.
  • Get a report with status in_scope, over_reach or empty, plus the offending files and inferred categories.
  • Choose JSON or markdown output for the report.
  • Run the same check from the command line or from Python, not only through the MCP server.
When to use it
Useful when an AI coding agent works on a repository and you want a quick, repeatable check that it stayed inside the files and categories the task allowed, for example before reviewing a change or as a disclosure step in an agent workflow.
Requirements
Runs locally over stdio as a Python package (over-reach-detector, installable from PyPI or run with uvx); register the command in the agent's MCP configuration. No accounts, API keys or environment variables are declared.
Before you install
It is an audit and disclosure tool, not a sandbox or blocker: it does not prevent file writes and does not revert, approve or block changes, so enforcement and human review remain with the caller. Scope matching is fnmatch glob based and Python oriented, so results depend on the declared scope being accurate.

Installation

In SourceWeft

  1. Open Over-Reach Detector in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Over-Reach Detector (MCP server)

Detect and report when AI coding agents change files outside their declared task scope. Designed to plug into Cursor, Claude Code, and other MCP-compatible AI coding agents via the standard stdio transport.

Compares two things:

  1. Declared scope — the files (as fnmatch globs) and categories (tests, docs, infra, config, code) the task is allowed to touch.
  2. Actual diff — the files the AI actually modified.

If the actual diff exceeds the declared scope, the tool returns status=over_reach and lists the offending files and categories.

What this tool does and does not do

over-reach-detector is an audit/disclosure tool, not a sandbox and not a blocker.

It compares a declared task scope with the actual files/categories changed by an AI coding agent. If the actual changes exceed the declared scope, it reports that mismatch.

It does not prevent file writes by itself. It does not decide whether to revert, approve, or block a change. The caller remains responsible for enforcement, rollback, or human review.

Install

From PyPI:

bash
pip install over-reach-detector

From source:

bash
git clone https://github.com/choreoatlas/over_reach_detectorcd over_reach_detectorpip install -e .

Quick start

Run all tests: python -m pytest -v

Try the CLI directly: python -m over_reach_detector.detector --input fixtures/example_pr_1.json --format markdown

Use as MCP server

Start the server (stdio transport): over-reach-detector (or python -m over_reach_detector.server from source)

Register with your AI agent:

  • Cursor: in ~/.cursor/mcp.json, add (after pip install over-reach-detector):
json
{  "mcpServers": {    "over-reach-detector": {      "command": "over-reach-detector"    }  }}

Dev / from source: use "command": "python", "args": ["-m", "over_reach_detector.server"] (run from repo root).

  • Claude Code: after pip install over-reach-detector, run claude mcp add over-reach-detector over-reach-detector (writes to ~/.claude.json). Dev / from source: claude mcp add over-reach-detector /absolute/path/to/python -m over_reach_detector.server.

The tool

check_scope_tool takes:

  • declared_files: list of fnmatch globs (e.g. ["docs/*.md", "tests/*.py"])
  • declared_categories: subset of ["tests", "docs", "infra", "config", "code"]
  • actual_files: list of file paths the AI modified
  • output_format: "json" (default) or "markdown"

Returns a report with:

  • status: in_scope (within declared scope) | over_reach (reported mismatch) | empty
  • file_overreach: files not matching any declared glob
  • category_overreach: inferred categories outside the declared set

Scope discipline

Current scope: CLI + MCP stdio server + 1 tool. Python only. fnmatch-based globs.

Out of scope (forbidden): code quality review, security audit, completeness governance, languages other than Python, multi-tool MCP servers, HTTP/SSE transport, GitHub Actions integration. These are deliberately deferred to later versions or never.

Example usage

Call check_scope_tool directly from Python (same logic the MCP server exposes):

python
import jsonfrom over_reach_detector import server
result = server.check_scope_tool(    declared_files=["docs/*.md"],    declared_categories=["docs"],    actual_files=["docs/a.md", "scripts/extra.py"],    output_format="json",)
report = json.loads(result)print(report["status"])          # "over_reach"print(report["file_overreach"])  # ["scripts/extra.py"]

License

MIT — see LICENSE.

Source: README.md at commit c72bc0f

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.0.6LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts