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
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
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
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."