recon

35× menos tokens para agentes de codificación de IA

Documentación

Query p50

14 ms

Compilador de Rust · 320K símbolos

Reducción de tokens

15–30 ×

vs Read/Grep/Glob en exploración

Actualización del índice

<1 s

563 ms re-indexación en caliente

Lenguajes

9

consciente de grafos · Rust, Python, TS, JS, Go, Java, C, C++

01 — Dónde se ejecuta

Se integra en los agentes que ya usas.

recon init --mcp <ide> escribe la configuración MCP del IDE y un archivo de reglas de agente con política estricta para que el agente use las herramientas code_* de recon antes que Read / Grep / Glob por defecto.

cc

Claude Code

recon init --mcp cc

oc

OpenCode

recon init --mcp oc

cur

Cursor

recon init --mcp cursor

win

Windsurf

recon init --mcp windsurf

ki

Kiro

recon init --mcp kiro

zed

Zed

recon init --mcp zed

vscode

VS Code

recon init --mcp vscode

cline

Cline

recon init --mcp cline

roo

Roo Code

recon init --mcp roo

codex

OpenAI Codex

recon init --mcp codex

02 — Herramientas

Veinte herramientas que hablan de símbolos, no de cadenas.

Veinte herramientas — primitivas de símbolos y texto, recorrido consciente de grafos para "¿cómo llega X a Y?" y "¿qué se rompe si cambio esto?", y telemetría para que puedas demostrar los ahorros.

code_outline(path)

Una línea por símbolo — tipo, nombre, línea. Examina un archivo de 2000 líneas en una sola pantalla.

code_skeleton(path)

Solo firmas y documentación; los cuerpos se colapsan a . Aproximadamente 10× de compresión frente a una lectura completa.

code_read_symbol(…)

Extrae una sola función, su firma, documentación, cuerpo — y todos sus llamadores — sin cargar el archivo.

code_find_symbol(name)

Resolvedor de tres niveles: SQLite exacto → Tantivy BM25 → FTS5 trigrama con reordenamiento difuso nucleo.

code_find_refs(…)

Conteo de referencias y los k sitios de llamada principales para cualquier símbolo en el repositorio.

code_search(query, mode)

Exacto · regex · híbrido. Tantivy primero, respaldo grep. DSL de filtro: type:rust !test.

code_list(glob?)

Listado estructurado de archivos con conteos de símbolos — una sola consulta GROUP BY, no por archivo.

code_repo_map(budget)

Resumen del repositorio clasificado por PageRank, almacenado en caché en SQLite, invalidado al reindexar.

code_find_strings(…)

Busca literales de cadena y comentarios por separado de los identificadores. Grep, pero más acotado.

code_multi_find(patterns[])

Distribuye varios patrones a través del trait TextSearcher en una sola llamada.

code_reindex()

Re-indexación activada por el agente. Limpia la caché del mapa, reconstruye de forma incremental.

code_path(src, dst)

Camino más corto en el grafo de llamadas desde src hasta dst. BFS bidireccional, limitado a 8 saltos.

code_callers(sym, depth)

Llamadores transitivos hasta N anillos (predeterminado 1, máximo 6). Seguro ante ciclos; límite de expansión por nivel 50; límite total de visitas 50 000.

code_callees(sym, depth)

Espejo de callers — ¿qué llama sym (directa y transitivamente)? Mismos límites, misma forma.

code_context(sym, budget)

Paquete de una sola vez: firma, cuerpo, llamadores, callees, tipos, pruebas. Reemplaza el bucle canónico de entender-X.

code_impact(sym, depth)

Radio de explosión: llamadores transitivos + pruebas alcanzables. Úsalo antes de refactorizaciones para responder "¿qué podría romperse?"

code_subsystems(limit?)

Componentes débilmente conectados del grafo de referencias, clasificados por hub. Orientación arquitectónica, sin lore de directorios.

code_subsystem(id, budget)

Profundiza en un subsistema desde code_subsystems. Resumen estilo esqueleto dentro de un presupuesto de tokens.

code_activate_repo(path)

Cambia el repositorio activo para herramientas con estado posteriores. Consciente del límite de nivel vía RepoRouter; persiste el conjunto cargado entre reinicios de recon serve.

code_list_repos()

Repositorios cargados con files, symbols y una marca active. Se combina con code_activate_repo para descubrimiento antes de cambiar.

La telemetría de ahorro de tokens se ejecuta junto a cada llamada — medida por llamada contra el equivalente Read/grep en proceso para las 8 herramientas directas de archivo/grep, estimaciones estáticas conservadoras para las 12 herramientas restantes. Superficies de operador: recon stats y recon savings show en la CLI; resúmenes diarios en el panel.

03 — La diferencia

Un agente que lee código no debería quemar la ventana de contexto haciéndolo.

Sin recon Read · Grep · Glob

// agent wants to understand render_map
Glob("crates/**/*.rs")
→ 312 paths  ·  ~12,000 tokens

Read("crates/recon-search/src/map.rs")
→ 412 lines  ·  ~6,800 tokens

Grep("render_map", "crates/**")  + context
→ 34 matches × 3-line window  ·  ~28,000 tokens

Read("crates/recon-search/tests/map_test.rs")
→ 142 lines  ·  ~2,300 tokens

Read 4 callers  (server.rs, handler.rs, …)
→ 1,847 lines  ·  ~31,000 tokens

Read("crates/recon-search/src/page_rank.rs")
→ 218 lines  ·  ~3,600 tokens

Read("crates/recon-search/src/lib.rs")
→ 312 lines  ·  ~5,100 tokens

Read 6 more files for orientation
→ 2,170 lines  ·  ~27,600 tokens

subtotal ≈ 116,400 tokens
// same question, symbol-first + graph-aware
code_find_symbol("render_map")
→ exact match  ·  ~90 tokens

code_outline("crates/recon-search/src/map.rs")
→ 14 symbols, one line each  ·  ~210 tokens

code_read_symbol("render_map")
→ signature, body, every caller  ·  ~860 tokens

code_context("render_map", budget=2000)
→ callers, callees, types, tests  ·  ~1,520 tokens

code_impact("render_map", depth=3)
→ blast radius: 12 callers, 4 tests  ·  ~450 tokens

code_repo_map(focus="…/map.rs", budget=1500)
→ pageranked overview  ·  ~1,100 tokens

code_list("crates/**/*.rs")
→ 312 files, symbol counts per file  ·  ~680 tokens

code_context("render_map", budget=2000)
→ signature + body + callers + tests  ·  ~1,300 tokens

subtotal ≈ 6,210 tokens

04 — Lo que ahorras

Un benchmark que no redondea.

Los múltiplos destacados como 35× son reales para tokens de entrada nuevos. El caché de prompts de Anthropic ya absorbe la mayor parte de los ahorros obvios en sesiones cálidas, así que el número que realmente afecta tu factura es menor. Aquí está el desglose honesto de una medición independiente de terceros (grepai vs Claude Code, repositorio TypeScript de 155K LOC, 5 preguntas × 5 ejecuciones):

Tokens de entrada nuevos

-97 %

51,147 → 1,326

Llamadas de herramientas

-55 %

139 → 62

Subagentes

-100 %

5 → 0 lanzados

Costo $ facturado

-27 %

$6.78 → $4.92

La brecha entre −97% de entrada nueva y −27% de costo facturado es el caché de prompts haciendo su trabajo. Los ahorros dominan en sesiones frías, repositorios grandes y tareas donde el agente de otro modo lanzaría subagentes. Se reducen en sesiones cálidas y en repositorios lo suficientemente pequeños como para que el agente lea todo de todos modos.

05 — Principios

Construido sobre cuatro ideas pequeñas y obstinadas.

Símbolos primero, bytes al final.

Todo lo que tree-sitter puede nombrar es un ciudadano de primera clase. Todo lo demás es ruido por el que el agente nunca debería pagar.

Cinco formas de salida. No más.

Cada respuesta de herramienta es una de cinco formas canónicas en recon-core::shapes. Predecible para el modelo, barato de analizar.

Incremental por defecto.

gix ColdStart omite el reanálisis en HEAD sin cambios. Un árbol Merkle blake3 reindexa solo lo que se movió. De la primera pulsación a consultable: menos de un segundo.

Los secretos permanecen redactados.

Cada respuesta de herramienta pasa por redacción de secretos — claves AWS, bloques PEM, tokens de API se eliminan antes de llegar al agente. Aislamiento por inquilino por clave.

06 — Benchmarks

Probado en codebases reales. No en repositorios de juguete.

Zed

EDITOR · RUST

github →

LOC
1.3M

SÍMBOLOS
80K

ÍNDICE FRÍO
28 s

QUERY P50
13 ms

find 13ms skeleton 19ms search 15ms refs 13ms map 13ms

Compilador de Rust

COMPILADOR · RUST

github →

LOC
3.8M

SÍMBOLOS
320K

ÍNDICE FRÍO
55 s

QUERY P50
14 ms

find 14ms skeleton 17ms search 36ms refs 15ms map 24ms

Todos los números: build de release · caché cálida · mimalloc · LTO graso · ReadPool sin bloqueos · PageRank CSR · binario de 25 MB

07 — Instalación

Un binario firmado. Tu código permanece local.

Paso 02

Instala el binario

Firmado con cosign. Solo tu clave de licencia toca la red.

curl -fsSL https://mcprecon.pages.dev/install.sh | bash
curl -fsSL https://mcprecon.pages.dev/install.sh | bash
iwr https://mcprecon.pages.dev/install.ps1 | iex
recon login sk-recon-xxx

Conéctalo a tu agente

recon init --mcp <ide> escribe la configuración MCP del IDE y un archivo de reglas de agente estricto para que el agente use las herramientas code_* por defecto.

recon init --mcp cc        # Claude Code
recon init --mcp oc        # OpenCode
recon init --mcp cursor    # Cursor
recon init --mcp windsurf  # Windsurf
recon init --mcp kiro      # Kiro
recon init --mcp zed       # Zed
recon init --mcp vscode    # VS Code
recon init --mcp cline     # Cline
recon init --mcp roo       # Roo Code
recon init --mcp codex     # OpenAI Codex

Paso 04

¿Alcanzaste un límite? Mejora.

Gratis · 1 repositorio · 250 archivos · 10K LOC
Pro $3/mes · 10 repositorios · 5K archivos · 200K LOC
Equipo $7/mes · 25 repositorios · 50K archivos · 4M LOC

Ver precios →

08 — Preguntas

Lo que los compradores con mentalidad de seguridad preguntan primero.

¿recon ve algo de mi código?

No. La indexación, la búsqueda y cada respuesta de herramienta se ejecutan en tu máquina. La única llamada saliente es una verificación HTTPS corta para validar tu clave de licencia — sin rutas, sin consultas, sin código fuente, sin metadatos.

¿Puedo ejecutarlo sin conexión o en un entorno aislado?

Sí, una vez activado. recon login almacena en caché una licencia firmada localmente; después de eso, la CLI se ejecuta sin red en absoluto. Las claves empresariales se pueden emitir sin conexión de principio a fin.

¿Cómo verifico que el binario es el que construiste?

Cada versión incluye un SHA256SUMS.txt firmado con cosign keyless sigstore, atestiguado por nuestro flujo de trabajo de release de GitHub Actions. El instalador verifica el digesto + la firma antes de extraer. Puedes volver a verificar manualmente con cosign verify-blob.

¿Qué IDEs y agentes funcionan con recon?

Cualquier cliente compatible con MCP. recon init escribe configuración para Claude Code, OpenCode, Cursor, Windsurf, Kiro, Zed, VS Code Copilot MCP, Cline, Roo Code y OpenAI Codex de fábrica. Cualquier cosa que hable la especificación MCP stdio también funcionará.

¿Qué sucede cuando termina mi suscripción?

Tus índices en disco permanecen. La CLI rechaza nuevas llamadas de herramientas hasta que renueves — nada se sube, nada se elimina. Puedes conservar el binario; simplemente no puedes ejecutarlo contra un nivel con licencia hasta que vuelvas a iniciar sesión.

¿Almacenan algo en el servidor?

Solo lo necesario para emitir y facturar una licencia: tu correo de GitHub, tu nivel y un prefijo de clave con hash. Sin nombres de repositorios, sin rutas de archivos, sin símbolos. Nuestro worker está abierto a inspección bajo solicitud para cuentas empresariales.

"El agente debería gastar sus tokens pensando, no leyendo. recon devuelve la ventana de contexto — y la mayor parte del tiempo de pared — que Read y Grep tomaron silenciosamente. Y lo hace sin enviar jamás una línea de tu código por la red."