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

github →

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

github →

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

Ver preços →

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