recon
35× menos tokens para agentes de codificação de IA
Documentação
Query p50
14 ms
Compilador Rust · 320K símbolos
Redução de tokens
15–30 ×
vs Read/Grep/Glob em exploração
Atualização do índice
<1 s
563 ms reindexação a quente
Linguagens
9
ciente de grafo · Rust, Python, TS, JS, Go, Java, C, C++
01 — Onde roda
Integra-se aos agentes que você já usa.
recon init --mcp <ide> grava a configuração MCP da IDE e um arquivo de regras de agente com política estrita, para que o agente use as ferramentas code_* do recon antes de Read / Grep / Glob por padrão.
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 — Ferramentas
Vinte ferramentas que falam símbolos, não strings.
Vinte ferramentas — primitivas de símbolo e texto, navegação ciente de grafo para "como X chega a Y?" e "o que quebra se eu mudar isso?", e telemetria para você comprovar a economia.
code_outline(path)
Uma linha por símbolo — tipo, nome, linha. Folheie um arquivo de 2000 linhas em uma única tela.
code_skeleton(path)
Apenas assinaturas e documentação; corpos são recolhidos para …. Cerca de 10× de compressão vs. leitura completa.
code_read_symbol(…)
Puxe uma única função, sua assinatura, documentação, corpo — e todos os chamadores — sem carregar o arquivo.
code_find_symbol(name)
Resolvedor de três níveis: SQLite exato → Tantivy BM25 → FTS5 trigrama com reclassificação fuzzy nucleo.
code_find_refs(…)
Contagem de referências e os principais locais de chamada para qualquer símbolo no repositório.
code_search(query, mode)
Exato · regex · híbrido. Tantivy primeiro, fallback para grep. DSL de filtro: type:rust !test.
code_list(glob?)
Listagem estruturada de arquivos com contagens de símbolos — uma única consulta GROUP BY, não por arquivo.
code_repo_map(budget)
Visão geral do repositório classificada por PageRank, armazenada em cache no SQLite, invalidada na reindexação.
code_find_strings(…)
Busque literais de string e comentários separadamente dos identificadores. Grep, mas mais restrito.
code_multi_find(patterns[])
Distribua vários padrões pela trait TextSearcher em uma única chamada.
code_reindex()
Reindexação acionada pelo agente. Limpa o cache do mapa e reconstrói incrementalmente.
code_path(src, dst)
Caminho mais curto no grafo de chamadas de src para dst. BFS bidirecional, limitado a 8 saltos.
code_callers(sym, depth)
Chamadores transitivos até N níveis (padrão 1, máximo 6). Seguro contra ciclos; limite de fan-out por nível 50; limite total de visitas 50 000.
code_callees(sym, depth)
Espelho de callers — o que sym chama (direta e transitivamente)? Mesmos limites, mesma forma.
code_context(sym, budget)
Pacote único: assinatura, corpo, chamadores, callees, tipos, testes. Substitui o loop canônico de entender-X.
code_impact(sym, depth)
Raio de impacto: chamadores transitivos + testes alcançáveis. Use antes de refatorações para responder "o que pode quebrar?"
code_subsystems(limit?)
Componentes fracamente conectados do grafo de referências, classificados por hub. Orientação arquitetural, sem lore de diretórios.
code_subsystem(id, budget)
Aprofunde-se em um subsistema de code_subsystems. Resumo em estilo skeleton dentro de um orçamento de tokens.
code_activate_repo(path)
Alterna o repositório ativo para ferramentas com estado subsequentes. Ciente do limite de nível via RepoRouter; persiste o conjunto carregado entre reinicializações de recon serve.
code_list_repos()
Repositórios carregados com files, symbols e um sinalizador active. Pareia com code_activate_repo para descoberta antes de alternar.
A telemetria de economia de tokens roda junto a cada chamada — medida por chamada contra o equivalente Read/grep em processo para as 8 ferramentas diretas de arquivo/grep, estimativas estáticas conservadoras para as 12 ferramentas restantes. Superfícies do operador: recon stats e recon savings show na CLI; resumos diários no painel.
03 — A diferença
Um agente lendo código não deveria queimar a janela de contexto fazendo isso.
Sem 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 — O que você economiza
Um benchmark que não arredonda.
Múltiplos de destaque como 35× são reais para tokens de entrada novos. O cache de prompt da Anthropic já absorve a maior parte da economia óbvia em sessões quentes, então o número que realmente afeta sua fatura é menor. Aqui está o detalhamento honesto de uma medição independente de terceiros (grepai vs Claude Code, repositório TypeScript de 155K LOC, 5 perguntas × 5 execuções):
Tokens de entrada novos
-97 %
51.147 → 1.326
Chamadas de ferramentas
-55 %
139 → 62
Subagentes
-100 %
5 → 0 iniciados
Custo $ faturado
-27 %
$6,78 → $4,92
A lacuna entre −97% de entrada nova e −27% de custo faturado é o cache de prompt fazendo seu trabalho. A economia domina em sessões frias, repositórios grandes e tarefas onde o agente, de outra forma, geraria subagentes. Ela encolhe em sessões quentes e em repositórios pequenos o suficiente para o agente ler tudo de qualquer forma.
05 — Princípios
Construído sobre quatro ideias pequenas e teimosas.
Símbolos primeiro, bytes por último.
Tudo o que o tree-sitter consegue nomear é um cidadão de primeira classe. Todo o resto é ruído que o agente nunca deveria pagar.
Cinco formatos de saída. Nada além disso.
Cada resposta de ferramenta é um dos cinco formatos canônicos em recon-core::shapes. Previsível para o modelo, barato de analisar.
Incremental por padrão.
gix ColdStart pula o reparse em HEAD inalterado. Uma árvore Merkle blake3 reindexa apenas o que mudou. Da primeira tecla ao consultável: menos de um segundo.
Segredos permanecem redigidos.
Cada resposta de ferramenta passa por redação de segredos — chaves AWS, blocos PEM, tokens de API são removidos antes de chegar ao agente. Isolamento por locatário por chave.
06 — Benchmarks
Testado em codebases reais. Não em repositórios de brinquedo.
Zed
EDITOR · RUST
LOC
1,3M
SÍMBOLOS
80K
ÍNDICE FRIO
28 s
QUERY P50
13 ms
find 13ms skeleton 19ms search 15ms refs 13ms map 13ms
Compilador Rust
COMPILADOR · RUST
LOC
3,8M
SÍMBOLOS
320K
ÍNDICE FRIO
55 s
QUERY P50
14 ms
find 14ms skeleton 17ms search 36ms refs 15ms map 24ms
Todos os números: build de release · cache quente · mimalloc · fat LTO · ReadPool sem bloqueio · CSR PageRank · binário de 25 MB
07 — Instalação
Um binário assinado. Seu código permanece local.
Etapa 02
Instale o binário
Assinado com cosign. Apenas sua chave de licença toca a rede.
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
Conecte-o ao seu agente
recon init --mcp <ide> grava a configuração MCP da IDE e um arquivo de regras de agente estrito, para que o agente use as ferramentas code_* por padrão.
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
Etapa 04
Atingiu um limite? Faça upgrade.
Grátis · 1 repositório · 250 arquivos · 10K LOC
Pro $3/mês · 10 repositórios · 5K arquivos · 200K LOC
Time $7/mês · 25 repositórios · 50K arquivos · 4M LOC
08 — Perguntas
O que compradores preocupados com segurança perguntam primeiro.
O recon vê algum do meu código?
Não. Indexação, busca e cada resposta de ferramenta rodam na sua máquina. A única chamada de saída é uma verificação HTTPS curta para validar sua chave de licença — sem caminhos, sem consultas, sem código-fonte, sem metadados.
Posso executá-lo offline ou em ambiente isolado?
Sim, uma vez ativado. recon login armazena em cache uma licença assinada localmente; depois disso, a CLI roda sem nenhuma rede. Chaves empresariais podem ser emitidas offline de ponta a ponta.
Como verifico se o binário é o que vocês construíram?
Cada release acompanha um SHA256SUMS.txt assinado com cosign keyless sigstore, atestado pelo nosso fluxo de trabalho de release do GitHub Actions. O instalador verifica digest + assinatura antes de extrair. Você pode reverificar manualmente com cosign verify-blob.
Quais IDEs e agentes funcionam com o recon?
Qualquer cliente compatível com MCP. recon init grava configuração para Claude Code, OpenCode, Cursor, Windsurf, Kiro, Zed, VS Code Copilot MCP, Cline, Roo Code e OpenAI Codex prontos para uso. Qualquer coisa que fale o spec stdio do MCP também funcionará.
O que acontece quando minha assinatura termina?
Seus índices em disco permanecem. A CLI recusa novas chamadas de ferramentas até você renovar — nada é enviado, nada é excluído. Você pode manter o binário; só não pode executá-lo contra um nível licenciado até fazer login novamente.
Vocês armazenam algo no servidor?
Apenas o necessário para emitir e faturar uma licença: seu e-mail do GitHub, seu nível e um prefixo de chave com hash. Sem nomes de repositórios, sem caminhos de arquivos, sem símbolos. Nosso worker está aberto à inspeção sob solicitação para contas empresariais.
"O agente deveria gastar seus tokens pensando, não lendo. O recon devolve a janela de contexto — e a maior parte do tempo de relógio — que Read e Grep silenciosamente tomavam. E faz isso sem nunca enviar uma linha do seu código pela rede."