overreach
Herramienta MCP que audita un diff de código
Documentación
Overreach
Tu IA escribió 2,000 líneas. Tienes 10 minutos para revisarlas.
Overreach te dice por dónde empezar. Pediste un formulario de inicio de sesión — te muestra la clave de Stripe, el endpoint de pago y el trabajo cron que tu agente de IA añadió sin preguntar. Determinista, respaldado por evidencia, sin opiniones de IA.
Verlo
$ 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
Pediste un formulario de inicio de sesión. Overreach encontró un sistema de pagos. Revisa esos archivos antes de fusionar.
Instalación
# Just run it — zero setup
cd your-project
npx -y overreach
Eso es todo. Detecta automáticamente tus cambios, pregunta qué le dijiste a la IA que hiciera y muestra la revisión. Sin archivos de configuración, sin banderas que memorizar.
O instálalo permanentemente:
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
¿Sin clave de API? No hay problema. Sin una clave, Overreach analiza tu prompt con expresiones regulares sin conexión. Instantáneo, gratuito y totalmente determinista.
Compatible con
- Claude Code
- Cursor
- Codex
- GitHub Copilot
- Windsurf
- Aider
Cualquier herramienta que escriba código a partir de un prompt. Overreach revisa el resultado, no la herramienta.
Qué detecta
Cambios inesperados (cosas que la IA hizo que no pediste)
| Verificación | Ejemplo |
|---|---|
| Dependencias | Añadió stripe cuando pediste un formulario de inicio de sesión |
| Variables de entorno | STRIPE_SECRET apareció en .env |
| Endpoints de API | Ruta /api/checkout que nunca solicitaste |
| Trabajos programados | Trabajos cron o tareas en segundo plano añadidos silenciosamente |
| Listeners de ejecución | Servidores, manejadores de WebSocket, hooks de process.on |
| Archivos fuera de alcance | Archivos modificados que tu prompt no mencionó |
| Expansión de funciones | Nuevas funciones/clases más allá de lo solicitado |
Cada hallazgo es determinista — derivado de tu prompt y del diff mediante aritmética de conjuntos. Sin opiniones de IA. Solo: "pediste X, el diff también contiene Y, y Y no estaba en X."
Avisos (cosas que probablemente necesitas verificar)
Overreach también escanea problemas prácticos entre archivos que los desarrolladores pasan por alto durante la revisión:
| Advertencia | Qué detecta |
|---|---|
| Esquema sin migración | Cambió schema.prisma pero no añadió una migración |
| Desajuste de variables de entorno | El código usa process.env.FOO pero .env no lo define |
| Ruta sin pruebas | Nueva ruta de API añadida pero ningún archivo de prueba actualizado |
| Sin pruebas en absoluto | 3+ archivos fuente cambiados, cero archivos de prueba tocados |
| Dependencias sin lockfile | package.json cambió pero no hay package-lock.json |
| Autenticación/middleware cambiado | Archivos sensibles a seguridad modificados |
| Secretos codificados | Claves de API o tokens escritos directamente en el código fuente |
| Archivo grande | 200+ líneas añadidas a un archivo — podría necesitar dividirse |
| Archivos nuevos muertos | Archivo nuevo creado pero nunca importado en ningún lugar |
| Deuda técnica añadida | TODO/FIXME/HACK en 2+ archivos |
| API sin documentación | Rutas de API cambiadas pero documentación no actualizada |
| Estilos huérfanos | CSS cambiado pero ningún componente actualizado |
| Dispersión de configuración | 3+ archivos de configuración cambiados a la vez |
| Solo infraestructura | Docker/CI cambiado pero sin código fuente |
Estos no son expansión de alcance — son las cosas que olvidas a las 2am y descubres en producción.
Por qué es determinista
La mayoría de los revisores de código con IA usan otra IA para juzgar tu código. Eso significa opiniones, alucinaciones y resultados que cambian entre ejecuciones.
Overreach no hace eso.
Ejecuta un pipeline de 3 etapas:
-
Extraer alcance — Una llamada LLM económica lee tu prompt y extrae lo que autorizaste (archivos, dependencias, variables de entorno, endpoints). O omite el LLM por completo con el modo sin clave.
-
Analizar el diff — Extracción basada en expresiones regulares. Sin LLM. Encuentra cada archivo cambiado, dependencia añadida, variable de entorno establecida, endpoint creado. Se ejecuta en milisegundos.
-
Comparar —
actual − authorized = findings. Aritmética pura de conjuntos. Todo en el diff que no estaba en tu prompt es un hallazgo.
Las etapas 2 y 3 son funciones puras — misma entrada, misma salida, cada vez. Sin inferencia, sin deriva de modelo.
Puerta de CI
Usa Overreach como una GitHub Action para bloquear la expansión de alcance de la IA en cada PR:
# .github/workflows/overreach.yml
- uses: Naveja00/Overreach@v1
Código de salida 1 cuando se encuentran cambios inesperados — el agente de IA no puede omitir esta verificación.
Servidor MCP (para agentes de IA)
Los agentes de IA pueden usar Overreach para verificar su propio trabajo antes de confirmar:
# 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"] } } }
Detalles internos
Clave de API (opcional)
Overreach detecta automáticamente tu proveedor de IA:
| Proveedor | Variable de entorno |
|---|---|
| Anthropic | ANTHROPIC_API_KEY |
| OpenAI / compatible | OPENAI_API_KEY |
| Ollama (local) | Sin clave necesaria |
Banderas de 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
Salida JSON
Añade --json para salida estructurada (CI, tuberías, integraciones):
{
"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"
}
]
}
}
Tipos de hallazgos
| Tipo | Severidad | Qué lo desencadenó |
|---|---|---|
scope.env | ALTA | Variable de entorno no mencionada en el prompt |
scope.endpoint | ALTA | Ruta de API añadida sin autorización |
scope.cron | ALTA | Trabajo programado añadido |
scope.listener | ALTA | Listener de ejecución (servidor, WebSocket, process.on) |
scope.dep | MEDIA | Dependencia de paquete añadida |
scope.file | MEDIA | Archivo cambiado fuera del alcance del prompt |
scope.feature | BAJA | Nuevo símbolo que no coincide con ninguna función autorizada |
Telemetría
Overreach envía pings de uso anónimos: solo conteos y enumeraciones (score,
conteo de findings, sistema operativo, versión) — nunca código, prompts, rutas de archivos o contenido
del diff. Se imprime un aviso único en tu primera revisión. Exclúyete en cualquier momento:
export OVERREACH_TELEMETRY=0 # or DO_NOT_TRACK=1
Pruebas
npm test # 241 deterministic assertions, zero API calls
Licencia
MIT — gratuito y de código abierto.