O contexto do seu projeto, a 7 milissegundos do agente.O contexto doseu projeto, a7 ms do agente.
kx indexa documentação, código, configuração e notas num SQLite local e serve busca híbrida — semântica + BM25, fundidas por RRF, com impulso de recência e deduplicação. Sem cloud, sem API key, sem telemetria.
Antes de escrever uma linha, o agente precisa saber como o projeto decide, nomeia e resolve as coisas. As saídas de sempre falham de jeitos previsíveis.
A · grep cego
Acha a string. Perde o conceito.
Busca textual devolve a linha exata, mas não sabe que “disjuntor”, “retry com backoff” e “circuit breaker” falam da mesma decisão espalhada em cinco arquivos.
→ várias listagens e leituras integrais até montar o quadroB · CLAUDE.md gigante
Tudo no prompt, o tempo todo.
Despejar a documentação no arquivo de contexto cobra tokens em toda sessão. A Anthropic recomenda CLAUDE.md com menos de 200 linhas.
→ contexto extenso aumenta o consumo de reasoning tokens em até 20%C · vetor puro
Entende paráfrase. Erra identificador.
Embeddings acham o conceito, mas tropeçam no que um dev mais procura: nomes de configuração, mensagens de erro, símbolos exatos.
→ em índice real de 75 mil chunks, circuit-open estava em 20 chunks e fora até do top-50 vetorial
02 · A resposta
Duas vias de busca. Um ranking.
O kx roda a via vetorial (sqlite-vec) e a via lexical (FTS5/BM25) sobre o mesmo índice e funde as duas por posição, com Reciprocal Rank Fusion. O conceito vem do vetor. O identificador exato vem do BM25. O agente recebe os dois.
Tudo roda na sua máquina: o modelo de embedding (all-MiniLM-L6-v2, ~23 MB) é baixado uma vez e depois o kx funciona 100% offline.
Recall@10 · termo exatostress · pipeline real
Só vetorial3/20
Híbrida kx20/20
7mslatência p50
10mslatência p95
142/sbuscas · 8 workers
Números do README do projeto, medidos num corpus sintético de stress com o pipeline real. Variam com Node.js, sistema operacional e tamanho do índice.
03 · Anatomia de uma busca
Uma consulta, cinco decisões.
Role e acompanhe o que acontece entre a pergunta do agente e os chunks que ele recebe. As fórmulas são as do kx; o projeto e os arquivos são fictícios.
Consulta:search"circuit-open"
01 Consulta
02 Duas vias
03 RRF
04 Recência + dedup
05 Top-K
A consulta vira duas coisas ao mesmo tempo: um embedding de 384 dimensões e uma expressão MATCH com cada termo entre aspas.
Vetorial
sqlite-vec · top-200
#1docs/resiliencia/visao-geral.md
#2docs/resiliencia/visao-geral.mdcópiabyte-idêntico, outro repositório
3docs/resiliencia/visao-geral.mdRRF 0.0318 × 1,01 antigo · ambas0.0322
4src/resilience/CircuitBreakerConfig.tssó o BM25 achou · lexical0.0210
Lexical
FTS5 · BM25 · top-200
#1src/resilience/CircuitBreakerConfig.ts
#2docs/runbooks/circuit-open.md
#3.vault/decisions/2026-08-resiliencia.md
#4config/resilience.yml
#5docs/resiliencia/visao-geral.md
…remove_diacritics 2“configuracao” casa com “configuração”
RRF funde por posição, não por valor: distância de cosseno e BM25 têm escalas incomensuráveis. A recência é multiplicativa e limitada — desempata a favor do recente, mas nunca promove um resultado irrelevante só por ser novo.
Pesos por fonte no .kx.json · recência desligável por projeto
04 · Como funciona
Do arquivo salvo à resposta do agente. Tudo local.
Um binário compartilhado, uma base SQLite por projeto. O MCP server lê e escreve; o CLI só lê. WAL mode permite os dois ao mesmo tempo.
01 · FONTES
Docs, código, config, vault
Markdown, TS/Java/SQL, YAML/JSON e notas do .vault/.
chokidar · reindex <10s02 · CHUNKING
Por header e por função
Nenhum chunk passa do orçamento seguro do modelo.
EMBED_SAFE_TOKENS = 44003 · DUAS REPRESENTAÇÕES
Embedding + índice lexical
Transformers.js in-process, sem servidor externo.
MiniLM-L6-v2 · 384d · FTS504 · SQLITE POR PROJETO
Um arquivo, isolado
Fácil de copiar, mover e apagar. Nada compartilhado entre projetos.
~/.kx/data/{projeto}.sqlite05 · ENTREGA
MCP stdio e CLI
Tool nativa no agente; terminal para você, sem chamar LLM.
kx mcp · kx search06 · AGENTE
Contexto antes do código
Claude Code, Codex, Cursor ou qualquer cliente MCP.
search → chunks relevantes
05 · Garantias
Feito para quem opera vários projetos com agentes.
Isolamento por projeto
Cada projeto aponta para o próprio .sqlite pela .kx.json. Uma denylist global impede que paths sensíveis entrem no índice.
indexing.deny: [".vault/private/**", "**/.env*"]
100% offline
Depois do download único do modelo, nada sai da máquina. Sem cloud, sem API key, sem telemetria.
embeddings in-process · ~23 MB
Watcher incremental
O Chokidar detecta o arquivo salvo e reindexa só o que mudou. No macOS, sobe sozinho via launchd.
kx watch · incremental <10s
Vault Obsidian
Notas pessoais, reuniões e decisões ficam no .vault/ do projeto e entram na busca. Repo Git é da equipe; o vault é seu.
--type vault
Asserção MCP fail-closed
Com mcp.projectId, toda tool exige UUID e raiz do projeto. Divergência falha antes de abrir o SQLite.
KX_PROJECT_MISMATCH
Registro de artefatos
Páginas publicadas pelo agente são registradas no vault e vinculadas à atividade em que o trabalho aconteceu.
.vault/ARTEFATOS.md
06 · Tools MCP
Onze tools. Três trabalhos.
O que o agente vê quando o kx está ativo. A busca é o centro; atividades e artefatos dão memória de trabalho ao projeto.
Núcleo
Buscar e indexar
O índice e a busca híbrida.
searchBusca híbrida em docs, código, config e vault. Filtros por tipo e top-K.
ingestIndexa um arquivo ou diretório específico.
reindexReindexação completa ou incremental.
statusDocumentos, chunks e distribuição por tipo.
Activity manager
Onde paramos
Atividades em Markdown no vault.
megabrain_addCria uma atividade e sincroniza o índice de atividades.
megabrain_updateRegistra avanço, bloqueio ou conclusão no log.
megabrain_statusPainel das últimas atividades e onde cada uma parou.
megabrain_getConteúdo completo de uma atividade.
Artifacts
O que foi publicado
Links vinculados ao trabalho que os gerou.
megabrain_artifact_addRegistra ou versiona um artefato publicado.
megabrain_artifactsLista links, versão atual e atividade de origem.
megabrain_artifact_linkVincula um artefato já registrado a uma atividade.
Com mcp.projectId configurado, todas exigem expected_project_id e expected_project_root.
07 · Configuração
Três arquivos. Nenhuma conta.
.kx.json na raiz define fontes, índice e, opcionalmente, o UUID da asserção MCP.
.mcp.json (ou config.toml no Codex) registra o kx com raiz explícita.
kx index gera o índice; kx watch mantém em dia.
Instalação e requisitos (Node.js 22+) no README do repositório.
# busca$ kx search "como a autenticação é validada"$ kx search "SecurityConfig" --type code --top 3
$ kx search "decisão de cache" --type vault --json
# índice$ kx index # incremental$ kx index --full # do zero$ kx status
$ kx watch
Exemplos — ajuste caminhos e nomes para o seu projeto.
08 · Quando usar
kx não substitui o rg. Complementa.
Recuperar alguns chunks relevantes costuma evitar listagens, buscas amplas e leituras integrais. O ganho depende da qualidade do índice e da consulta — e há casos em que outra ferramenta é melhor.
Use kx para
Conceitos espalhados entre arquivos: arquitetura, decisões, fluxos, regras.
Impacto provável de uma mudança antes de implementar.
Contexto para code review e para responder sobre o projeto.
Consultas rápidas no terminal durante uma reunião, sem LLM.
Use rg ou AST para
Símbolo exato quando você já sabe o nome.
Path conhecido.
Precisão de linha e refatoração mecânica.
Limites honestos
Não é cofre de segredos: credenciais ficam fora do índice via denylist.
Cada processo MCP carrega o modelo após a primeira busca (~380 MB de RAM); muitas sessões simultâneas somam.
Prefira top-K entre 3 e 5; aumente só se faltar contexto.
DesenvolvedoresTech leadsQuem opera vários projetos com agentes
kx
Se o kx poupou um grep cego, deixe uma estrela.
É open source, roda na sua máquina e cresce com quem usa. A estrela ajuda outras pessoas a encontrarem o projeto.