codeix

Busca semântica rápida de código para agentes de IA — encontre símbolos, referências e chamadores em qualquer base de código. Índice pré-construído commitado no git, consultas instantâneas via MCP.

Documentação

codeix

codeix.dev · Busca semântica rápida de código para agentes de IA — encontre símbolos, referências e chamadores em qualquer base de código.

codeix                 # start MCP server, watch for changes
codeix build           # parse source files, write .codeindex
codeix -r ~/project build  # build from a specific directory

Por quê

Agentes de codificação de IA gastam a maior parte do orçamento de tokens encontrando código antes de poderem trabalhar nele. Eles fazem grep, leem arquivos, fazem grep novamente, voltam atrás. Em uma base de código grande, o agente pode queimar milhares de tokens apenas para localizar a função certa — ou, pior, não encontrá-la e alucinar.

O codeix dá ao agente um mapa pré-construído da sua base de código. Uma única consulta estruturada retorna o nome do símbolo, arquivo, intervalo de linhas, assinatura e pai — sem varredura, sem adivinhação.

O que as ferramentas existentes fazem de errado

ProblemaO que acontece hoje
Sem estruturagrep encontra correspondências de texto, não símbolos. O agente não consegue distinguir uma definição de função de um comentário que a menciona.
Re-análise lentaIndexadores baseados em Python re-analisam tudo na inicialização. Em bases de código grandes, você espera.
Não compartilhávelÍndices são caches locais — efêmeros, por máquina. Um novo desenvolvedor ou runner de CI começa do zero.
Sem composiçãoMonorepo com 10 pacotes? Dependências com APIs úteis? Não há como consultar além dos limites.
Prosa é invisívelTODOs, docstrings, mensagens de erro — pesquisáveis por grep, mas não seletivamente. Você não pode pesquisar apenas comentários sem também corresponder ao código.

O que o codeix faz de diferente

  • Commitado no git — o índice é um diretório .codeindex que você commita junto com seu código. Clone o repositório, o índice já está lá. Sem re-indexação.
  • Compartilhável — autores de bibliotecas podem enviar .codeindex em seus pacotes npm/PyPI/crates.io. Consumidores obtêm navegação instantânea das dependências.
  • Componível — o servidor MCP descobre automaticamente os índices de dependências e os monta. Consulte seu código e suas dependências em um só lugar.
  • Estruturado para LLMs — símbolos têm tipos, assinaturas, relações de pai e intervalos de linhas. O agente obtém exatamente o que precisa em uma única chamada de ferramenta, em vez de montar tudo a partir de texto bruto.
  • Busca em prosa — search --scope text tem como alvo comentários, docstrings e literais de string especificamente. Encontre TODOs, encontre a mensagem de erro que um usuário relatou, encontre o que a docstring de uma função diz — sem ruído do código.
  • Rápido — compila em segundos, consultas em milissegundos. Rust + tree-sitter + SQLite FTS5 em memória por baixo dos panos.

O formato .codeindex

Um formato aberto e portátil para indexação estruturada de código. Arquivos JSONL simples que você commita junto com seu código — diffs amigáveis ao git, legíveis por humanos com grep e jq, sem blobs binários.

.codeindex/
  index.json        # manifest: version, name, languages
  files.jsonl       # one line per source file (path, lang, hash, line count)
  symbols.jsonl     # one line per symbol (functions, classes, imports, with signatures)
  texts.jsonl       # one line per comment, docstring, string literal

Qualquer ferramenta que consiga analisar JSON pode consumir um .codeindex. O codeix o constrói usando tree-sitter, e agentes de IA o consultam por meio do MCP (Model Context Protocol).

Exemplo — symbols.jsonl:

{"file":"src/main.py","name":"os","kind":"import","line":[1,1]}
{"file":"src/main.py","name":"Config","kind":"class","line":[22,45]}
{"file":"src/main.py","name":"Config.__init__","kind":"method","line":[23,30],"parent":"Config","sig":"def __init__(self, path: str, debug: bool = False)"}
{"file":"src/main.py","name":"main","kind":"function","line":[48,60],"sig":"def main(args: list[str]) -> int"}

Envie seu índice junto com seu pacote

Inclua .codeindex no seu pacote e todo desenvolvedor que depende de você obtém navegação instantânea da sua API — sem configuração, sem re-indexação.

Funciona com repositórios Git, npm, PyPI e crates.io.

Ferramentas MCP

Sete ferramentas, zero configuração. O agente consulta imediatamente — sem init, sem config, sem refresh.

FerramentaO que faz
exploreExplore a estrutura do projeto: metadados, subprojetos, arquivos agrupados por diretório
searchBusca unificada de texto completo em símbolos, arquivos e textos (FTS5, ranqueado por BM25) com filtros de escopo/tipo/caminho/projeto
get_file_symbolsLista todos os símbolos em um arquivo
get_childrenObtém os filhos de uma classe/módulo
get_callersEncontra todos os lugares que chamam ou referenciam um símbolo
get_calleesEncontra todos os símbolos que uma função/método chama
flush_indexGrava alterações pendentes do índice no disco

Descoberta de projetos

Inicie o codeix a partir de qualquer diretório. Ele percorre para baixo e trata cada diretório que contém .git/ como um projeto separado — cada um recebe seu próprio .codeindex.

Funciona uniformemente para repositórios únicos, monorepos, repositórios irmãos e submódulos git. Sem necessidade de configuração.

Linguagens

Gramáticas tree-sitter, controladas por recursos em tempo de compilação:

LinguagemFlag de recursoPadrãoExtensões
Pythonlang-pythonyes.py .pyi .pyw
Rustlang-rustyes.rs
JavaScriptlang-javascriptyes.js .mjs .cjs .jsx
TypeScriptlang-typescriptyes.ts .mts .cts .tsx
Golang-goyes.go
Javalang-javayes.java
Clang-cyes.c .h
C++lang-cppyes.cpp .cc .cxx .hpp .hxx
Rubylang-rubyyes.rb .rake .gemspec
C#lang-csharpyes.cs
Markdownlang-markdownyes.md .markdown

Suporte a Markdown

Arquivos Markdown são analisados em busca de cabeçalhos (tanto estilo ATX # quanto sublinhado Setext), que são indexados como símbolos section com relações hierárquicas de pai-filho — permitindo extração de TOC e navegação pela estrutura do documento.

Blocos de código cercados são extraídos como entradas de texto code, vinculados à seção que os contém.

Scripts embutidos

Arquivos HTML, Vue, Svelte e Astro são pré-processados para extrair blocos <script> embutidos, que são então analisados com a gramática de JavaScript ou TypeScript:

FormatoExtensõesDetecção de script
HTML.html .htmtags <script>, com lang="ts" opcional
Vue.vue<script> e <script setup>, com lang="ts" opcional
Svelte.svelte<script>, com lang="ts" opcional
Astro.astrofrontmatter --- (sempre TypeScript) + tags <script> opcionais

Os números de linha no índice apontam para o arquivo original, não para o bloco de script extraído.

Instalação

# npm / npx — run without installing
npx codeix

# pip / uvx — run without installing
uvx codeix

# Rust
cargo install codeix

# Homebrew
brew install codeix

# Or build from source
git clone https://github.com/montanetech/codeix.git
cd codeix
cargo build --release

Todos os canais instalam o mesmo binário único. Sem dependências de runtime.

Uso

# Build the index for the current project
codeix build

# Build from a specific directory (discovers all git repos below)
codeix -r ~/projects build

# Start MCP server (default command, watches for changes)
codeix

# Or explicitly
codeix serve
codeix serve --no-watch

# Serve from a specific directory
codeix -r ~/projects serve

Configuração do cliente MCP

Adicione à configuração do seu cliente MCP (ex.: Claude Desktop, Cursor):

{
  "mcpServers": {
    "codeix": {
      "command": "codeix"
    }
  }
}

Princípios de design

  • Somente local — sem rede, sem chaves de API, funciona offline e em ambientes isolados
  • Determinístico — a mesma fonte sempre produz o mesmo índice (diffs limpos)
  • Componível — índices de dependências são descobertos automaticamente e montados no momento da consulta
  • Superfície mínima — 7 ferramentas de consulta, zero encanamento de gerenciamento

Arquitetura

Veja docs/architecture.md para o conjunto completo de registros de decisão de arquitetura.

Licença

MIT OR Apache-2.0