O GraphFinder transforma vaults Markdown e bases de código inteiras em um grafo de conhecimento com indexação semântica — um lugar bonito para humanos pensarem e recuperação cirúrgica de ~50 tokens para agentes de IA via servidor MCP nativo.
# Indexa qualquer pasta (notas + código) e exporta artefatos do grafo
$ graphfinder sync ./meu-repo --export
# Registra o GraphFinder em todos os editores de IA desta máquina
$ graphfinder config --install
# Pergunte ao grafo
$ graphfinder search "como a autenticação é tratada?"
24ferramentas MCP
20+linguagens indexadas
~50tokens por consulta
0chamadas à nuvem / API keys
Recursos
Um motor para notas, código e agentes.
Tudo roda na sua máquina: um núcleo em Rust com modelo ONNX embarcado, SQLite com FTS5, uma interface de grafo force-directed e um servidor MCP com o qual qualquer editor de IA conversa.
Busca semântica híbrida
Vetores densos FastEmbed de 384 dimensões combinados com BM25 do SQLite FTS5 via Reciprocal Rank Fusion (k = 60). As notas são divididas por títulos ##/###, então cada resposta é uma seção atômica com deep link, como [[Nota#Seção]].
Sem API keys, sem telemetria. Seu Markdown continua como arquivos simples no disco.
Grafo interativo
Canvas force-directed com destaque de vizinhança de 1/2 saltos, clusters por tag e anéis coloridos por linguagem.
Inteligência de código
Varredura AST-lite de repositórios inteiros: símbolos (funções, classes, structs), grafo de imports locais e pacotes externos — respeitando o .gitignore e sincronizando de forma incremental por SHA-256.
TypeScriptRustPythonGoJavaScriptC / C++Java · Kotlin · C#+ outras
Servidor MCP nativo
24 ferramentas via Streamable HTTP/SSE (127.0.0.1:45123) com o app aberto, ou stdio headless com graphfinder mcp. Funciona com Cursor, Claude Desktop, Antigravity, Windsurf, Cline, Roo Code e Zed.
Análise de grafos
Detecção de comunidades, centralidade de grau, God Nodes, acoplamentos surpresa, ciclos e caminhos mínimos — exportados como graph.json, GRAPH_REPORT.md e um graph.html offline.
Monitoramento ao vivo
Edite no VS Code, Cursor ou Neovim — as mudanças são reindexadas em 500 ms.
Múltiplos projetos
Vaults isolados, cada um com seu índice. Renomear atualiza todos os wikilinks de entrada.
Seguro por padrão
Defesa contra DNS rebinding, validação de Origin, CSP estrita e sanitização com DOMPurify.
01 · INGESTÃO
Aponte para uma pasta
Notas Markdown e arquivos de código são analisados, divididos e vetorizados localmente.
02 · CONEXÃO
Veja o grafo se formar
Wikilinks, tags e imports viram arestas que você pode explorar e analisar.
03 · RECUPERAÇÃO
Agentes perguntam com precisão
As ferramentas MCP retornam só a seção ou símbolo necessário — não arquivos inteiros.
Documentação
Tudo sobre o GraphFinder.
Da instalação aos detalhes internos do motor de busca. Versão atual: v0.10.0.
O GraphFinder é um aplicativo desktop multiplataforma (Tauri v2 + Rust + React 19) e uma ferramenta de linha de comando que indexa vaults de conhecimento em Markdown e repositórios de código em um único grafo pesquisável semanticamente.
Pipelines de RAG tradicionais cortam documentos em janelas fixas arbitrárias ou jogam arquivos inteiros no contexto do LLM, desperdiçando milhares de tokens. Já as ferramentas de notas raramente oferecem busca vetorial local ou uma API utilizável por agentes. O GraphFinder resolve os dois lados:
Para humanos — um ambiente local-first e sem distrações para escrever Markdown puro com [[wikilinks]], explorar conexões em um grafo 2D interativo e manter total posse dos seus arquivos.
Para agentes de IA — um servidor Model Context Protocol (MCP) embarcado que retorna resultados no nível de subseção ([[Nota#Seção]]) e símbolos de código individuais, tipicamente com cerca de 50 tokens por resultado.
Conceitos principais
Conceito
Significado
Vault
Uma pasta de arquivos .md (e opcionalmente código) indexada pelo GraphFinder.
Projeto
Um vault registrado com seu próprio índice SQLite isolado. Identificado por um slug (ex.: minha-api).
Chunk
Uma seção atômica de uma nota delimitada por títulos ## / ###, vetorizada de forma independente.
Deep link
Referência a uma seção específica: [[Título da Nota#Título da Seção]], ou a um símbolo: [[caminho/arquivo.rs#funcao]].
Nó / Aresta
Notas e arquivos de código são nós; wikilinks e imports são arestas.
God Node
Um hub altamente central no grafo, detectado por centralidade de grau.
Após instalar, habilite o comando de terminal para que graphfinder funcione em qualquer shell:
bash
# Windows: adiciona a pasta de instalação ao PATH do usuário + cria atalhos graphfinder.cmd
# macOS/Linux: cria um symlink em ~/.local/bin/graphfinder
graphfinder install-cli
Se graphfinder ainda não estiver no PATH, execute o binário diretamente, ex.: "C:\Program Files\GraphFinder\GraphFinder.exe" install-cli. Depois abra um novo terminal.
Windows: Visual Studio C++ Build Tools · Linux: libwebkit2gtk-4.1-dev, build-essential, libssl-dev, libayatana-appindicator3-dev, librsvg2-dev
bash
git clone https://github.com/GabrielTBeserra/GraphFinder.git
cd GraphFinder
npm install
# Roda o app desktop em modo de desenvolvimento (Vite na :1420 + Tauri)
npm run app
# Gera instaladores em src-tauri/target/release/bundle/
npm run tauri build
Na primeira execução o modelo de embeddings (all-MiniLM-L6-v2, ~90 MB) é baixado uma única vez para .fastembed_cache. Depois disso o GraphFinder funciona totalmente offline.
Abra o appInicie o GraphFinder (ou rode graphfinder sem argumentos). Um vault padrão é criado e o grafo aparece.
Crie ou abra um projetoUse o seletor de projetos na barra superior → Novo projeto, dê um nome e, opcionalmente, escolha uma pasta existente (de notas ou um repositório de código).
Escreva uma notaCrie uma nota começando com # Título, um resumo curto e depois seções ##. Conecte conceitos com [[Outra Nota]] e termine com tags como #arquitetura. Salve com Ctrl+S.
PesquisePressione Ctrl/⌘+K para abrir o Omnisearch — busca semântica híbrida em notas e símbolos de código.
Conecte seu editor de IARode graphfinder config --install ou copie um snippet do modal MCP no app. Seu agente passa a ter 24 ferramentas do GraphFinder.
Prefere o terminal? O mesmo fluxo, sem interface:
bash
cd ~/code/meu-projeto
graphfinder sync # registra a pasta como projeto e a indexa
graphfinder status # notas, arquivos de código, arestas, tamanho do banco
graphfinder search "middleware de rate limiting"
graphfinder report # auditoria de arquitetura + artefatos do grafo
A interface é organizada em uma barra lateral, o canvas central do grafo e painéis contextuais.
Área
O que faz
Barra superior
Seletor de projetos, novo projeto, Omnisearch, relatório arquitetural, modal de integração MCP e alternância de tema claro/escuro (salva no localStorage).
Barra lateral
Abas Notes e Code (com filtros de linguagem), além de busca semântica com alternância entre notas Markdown e símbolos de código. Mostrar/ocultar com Ctrl+B.
Visão de grafo
Canvas force-directed. Clique em um nó para focá-lo e destacar sua vizinhança de 1 e 2 saltos. Filtre com [All], [Notes], [Code]. Notas são coloridas por cluster de tag; arquivos de código ganham anéis por linguagem; hubs brilham proporcionalmente ao grau.
Editor de notas
Editor Markdown com preview ao vivo (sanitizado pelo DOMPurify), autocomplete de wikilinks (digite [[, navegue com ↑↓, aceite com Enter/Tab, feche com Esc) e Ctrl+S para salvar.
Code Inspector
Painel deslizante para um nó de código: símbolos declarados com intervalos de linha, grafo de imports com navegação clicável, pacotes externos e visualizador de código cirúrgico.
Omnisearch
Ctrl/⌘+K. Busca híbrida no projeto ativo, navegável pelo teclado.
Relatório arquitetural
Comunidades, God Nodes, acoplamentos surpresa e ciclos do projeto ativo, com exportação em um clique.
Modal MCP
Snippets de configuração prontos para cada editor de IA, além das regras de agente (AGENTS.md) e da skill curadora.
Atalhos de teclado
Atalho
Ação
Ctrl/⌘ + K
Abrir/fechar Omnisearch
Ctrl/⌘ + B
Mostrar/ocultar barra lateral
Ctrl/⌘ + S
Salvar a nota atual
↑↓EnterEsc
Navegar em resultados de busca e sugestões de wikilink
Enquanto o app desktop está aberto ele também hospeda o servidor MCP em http://127.0.0.1:45123, então notas criadas pelo seu agente aparecem no grafo em tempo real.
O GraphFinder funciona com qualquer Markdown, mas a recuperação fica mais precisa quando as notas seguem esta estrutura:
Um único título H1 (# Título da Nota) seguido de um resumo executivo de 2–3 linhas.
Seções ##/### autocontidas de aproximadamente 40–150 tokens, com títulos descritivos (## 2. Configuração do SQLite WAL em vez de ## Config). Cada título vira um embedding próprio e um alvo de deep link.
Wikilinks — [[Nota]] ou [[Nota#Seção]]. Mire em 1–3 links por nota para evitar órfãos.
Hashtags em minúsculas — #arquitetura #sqlite #mcp no fim das seções ou da nota. Elas geram os clusters coloridos no grafo.
vault/Auth JWT.md
# Auth JWT
Como a API emite e valida JSON Web Tokens. Cobre chaves de assinatura,
política de expiração e rotação de refresh.
## 1. Assinatura de Tokens
Os tokens são assinados com RS256. As chaves giram a cada 30 dias e são
carregadas do cofre de segredos na inicialização. Veja [[Arquitetura do Sistema#2. Segredos]].
## 2. Rotação de Refresh
Cada refresh invalida a família de tokens anterior para impedir ataques de replay.
#auth #seguranca #arquitetura
Como as notas são processadas
O parsing usa uma AST CommonMark real (pulldown-cmark). O conteúdo dentro de blocos de código é isolado, então um # em código nunca é tratado como título ou tag.
Seções com mais de 320 tokens são divididas em janelas com sobreposição de 40 tokens para não perder contexto nas bordas.
Renomear uma nota (pela interface ou rename_note) reescreve todos os [[Título Antigo]] no vault.
Notas editadas fora do GraphFinder (VS Code, Cursor, Neovim…) são detectadas pelo file watcher (debounce de 500 ms).
Cada consulta executa dois mecanismos de recuperação em paralelo e os combina:
Etapa
Detalhes
Vetores densos
FastEmbed sobre ONNX Runtime. Modelo padrão all-MiniLM-L6-v2 (384 dimensões). Opcional MultilingualE5Small para vaults em outros idiomas. Similaridade de cosseno sobre note_chunks / code_chunks.
Palavra-chave (BM25)
Índice full-text SQLite FTS5 — encontra identificadores exatos, códigos de erro e termos raros que embeddings deixam passar.
Fusão
Reciprocal Rank Fusion: score = Σ 1 / (60 + rank). Robusto sem normalização de scores.
Saída
Top-N chunks com título, seção, deep link, score de afinidade e estimativa de tokens.
O armazenamento é um único banco SQLite por projeto em modo WAL, permitindo indexação e consultas concorrentes. A reindexação é incremental: arquivos são comparados por timestamp e hash SHA-256, e apenas os alterados são reprocessados e revetorizados.
Aponte o GraphFinder para um repositório e ele constrói um índice de símbolos e um grafo de dependências sem precisar de compilador ou language server.
Símbolos — funções, classes, structs, interfaces e enums de nível superior, com intervalos de linha e estimativa de tokens. Cada símbolo é um chunk pesquisável.
Imports locais — resolvidos para arquivos do projeto e salvos como arestas bidirecionais (code_links): imports e dependentes.
Pacotes externos — módulos de terceiros (ex.: rusqlite, react) listados por arquivo.
O que é ignorado
Tudo que está no .gitignore, além de node_modules, target, dist, .git, arquivos binários e arquivos maiores que 1 MB.
O mesmo binário é o app desktop e a CLI. Executado sem argumentos, abre a interface gráfica; com um comando, roda no terminal.
uso
graphfinder [COMANDO] [OPÇÕES]
Comando (aliases)
Opções
Descrição
sync (syn, index) [caminho]
--json--export
Indexa notas e código em caminho (padrão: diretório atual). Registra um novo projeto se for desconhecido; caso contrário, atualiza incrementalmente via SHA-256. --export também gera os artefatos do grafo.
status (info) [caminho]
—
Mostra notas, arquivos de código, arestas e estatísticas do banco.
projects (list)
—
Lista todos os projetos registrados e seus caminhos.
search <consulta>
--path--limit <n>
Busca semântica híbrida (BM25 + embeddings) em um projeto.
report (audit) [caminho]
--out-dir--json
Comunidades, God Nodes, surpresas e ciclos, além dos três artefatos.
path <de> <para>
--path--json
Caminho mínimo multi-salto entre dois arquivos, símbolos ou notas.
explain <nó>
--path--json
Cartão de contexto arquitetural de um nó.
export [caminho]
--out-dir
Gera graph.json, GRAPH_REPORT.md e graph.html sem relatório no terminal.
config (mcp-config, setup)
--install / -i--json
Imprime a configuração MCP para editores de IA. --install detecta os editores instalados, registra o GraphFinder neles e adiciona a CLI ao PATH.
Exporta os schemas JSON das 24 ferramentas, um manifesto tools.json e instructions.md para ./mcp-tools.
install-cli (install-path)
—
Adiciona graphfinder ao PATH do sistema.
mcp (--mcp)
—
Inicia o servidor MCP stdio headless.
help (--help, -h)
—
Mostra a ajuda.
Exemplos
bash
# Sync com saída legível por máquina para CI ou scripts
graphfinder sync ./services/api --json
# Como a interface chega até a camada de banco?
graphfinder path "GraphView.tsx" "db.rs"
# Por que este arquivo é importante?
graphfinder explain "src-tauri/src/engine/db.rs"
# Auditoria em uma pasta personalizada
graphfinder report --out-dir ./docs/arquitetura
# Apenas 3 resultados em um projeto específico
graphfinder search "debounce do file watcher" --path ./GraphFinder --limit 3
A partir do código-fonte, scripts npm encapsulam a CLI: npm run sync, npm run status, npm run search, npm run projects, npm run mcp.
Todas as ferramentas aceitam o parâmetro opcional project para mirar um vault específico sem contaminação entre projetos. Parâmetros tracejados são opcionais.
Recuperação de conhecimento
search_semantic
Busca híbrida vetor + BM25 sobre chunks de notas com RRF. Retorna deep links e estimativa de tokens.
querylimit=5format: dense_chunks | summaries
read_section
Lê exatamente uma seção pelo título ou fragmento de deep link.
targetsection
get_compressed_context
Resumo, links, tags e mapa de títulos com custo de tokens por seção — menos de 80 tokens.
target
list_recent_notes
Notas modificadas recentemente com resumos de uma linha e tags.
limit=10
Autoria e conexões
suggest_links
Vetoriza um rascunho e recomenda notas/seções existentes para linkar (evita órfãos).
textcurrent_notethreshold=0.60
store_context
Cria ou atualiza uma nota, faz o parsing e a indexa imediatamente.
titlecontenttags[]links[]
link_notes
Adiciona um [[wikilink]] de uma nota para outra e atualiza o grafo.
from_noteto_note
rename_note
Renomeia uma nota e refatora todos os wikilinks de entrada no vault.
old_titlenew_title
delete_note
Apaga o arquivo e limpa chunks, embeddings, links e tags.
target
Grafo e arquitetura
get_graph_neighborhood
Nós conectados em 1 ou 2 saltos, sem ler o conteúdo.
targetdepth=1
find_path
Caminho mínimo (BFS) por wikilinks e imports entre dois nós.
sourcetargetdirected=false
explain_node
Centralidade, comunidade, status de God Node, dependentes, dependências e irmãos.
target
get_community_report
Auditoria do sistema: comunidades, God Nodes, surpresas e ciclos.
project
export_graph
Gera graph.json, GRAPH_REPORT.md e graph.html.
out_dir=./graphfinder-out
get_vault_stats
Notas, chunks, links, tags e estimativa total de tokens.
project
Base de código
search_code
Busca híbrida em símbolos, assinaturas e comentários. Retorna [[arquivo#simbolo]] com intervalos de linha.
querylanguagelimit=5
find_files
Busca por glob / substring nos caminhos indexados.
patternlimit=20
get_file_context
Símbolos com linhas, imports locais, dependentes e pacotes — menos de 80 tokens.
file
read_code_chunk
Retorna apenas o corpo de uma função, classe ou struct.
filesymbol
get_code_dependencies
O que um arquivo importa e quem o importa.
file
Projetos e sincronização
list_projects
Todos os vaults registrados com caminhos e contagem de notas.
—
create_project
Cria um vault isolado (opcionalmente em qualquer caminho do disco).
namepath
switch_project
Troca o vault padrão ativo.
project_id
sync_vault
Reindexação incremental por hash; um path é mapeado (ou registrado) automaticamente como projeto.
pathproject
Rode graphfinder tools para exportar os schemas JSON de todas as ferramentas e usá-los com qualquer framework de agentes.
O GraphFinder traz três camadas que trabalham juntas: o agente (Cursor, Claude, Antigravity…) raciocina e planeja, a skill impõe economia de tokens e qualidade das notas, e o servidor MCP executa buscas e escritas.
Skills e regras incluídas
AGENTS.md — regras do repositório para agentes (economia de tokens, schema de notas, pipelines de decisão). O Antigravity carrega automaticamente; no Cursor adicione às Project Rules; no Claude cole no prompt do projeto.
.agents/skills/graphfinder-curator — fluxo de autoria e curadoria (resumos, seções atômicas, suggest_links antes de store_context, tags).
.agents/skills/graphfinder — fluxo de auditoria de arquitetura (relatórios, caminhos, explain, exportações).
Fluxos recomendados
Respondendo uma pergunta
fluxo
search_semantic("sqlite wal mode") → top 5 chunks (~50 tokens cada)
└─ precisa da estrutura? get_compressed_context("Arquitetura do Sistema")
└─ precisa de uma seção? read_section("Arquitetura do Sistema", "1. Armazenamento Local")
Salvando conhecimento
fluxo
rascunho (# Título + resumo + seções ##)
→ suggest_links(rascunho) → ex.: "Arquitetura do Sistema: 85%"
→ inserir [[Arquitetura do Sistema]] no rascunho
→ store_context(title, content, tags) → arquivo gravado, indexado, grafo atualizado
Inspecionando código
fluxo
search_code("hybrid_search", language="rust")
→ get_file_context("src-tauri/src/engine/db.rs") # mapa de símbolos, <80 tokens
→ read_code_chunk("src-tauri/src/engine/db.rs", "hybrid_search")
→ get_code_dependencies("src-tauri/src/engine/db.rs") # análise de impacto
Auditando a arquitetura
fluxo
get_community_report() → subsistemas, God Nodes, surpresas, ciclos
→ explain_node("db.rs") → por que importa
→ find_path("App.tsx", "db.rs")
Exemplos de prompts
Objetivo
Prompt
Busca cirúrgica
"Consulte o vault do GraphFinder e explique como funciona a indexação de código sem ler arquivos inteiros."
Nota conectada
"Documente nosso fluxo OAuth2 como uma nota no GraphFinder. Chame suggest_links antes e adicione tags relevantes."
Inspeção de código
"Encontre onde o parsing de imports é implementado e leia só essa função com read_code_chunk."
Análise de impacto
"Quais arquivos importam GraphView.tsx? Resuma o impacto arquitetural de alterá-lo."
Auditoria
"Gere um community report do GraphFinder e liste os God Nodes que devemos documentar primeiro."
Cada projeto é um workspace isolado com seu próprio diretório Markdown e seu próprio banco vetorial SQLite, então as buscas nunca vazam entre projetos.
Vault padrão — <pasta de dados>/vault com índice em <pasta de dados>/index.db.
Vaults gerenciados — <pasta de dados>/vaults/<project_id>/, criados pela interface ou por create_project.
Pastas externas — qualquer caminho do disco (ex.: um repositório) registrado pela interface, por graphfinder sync <caminho> ou create_project(name, path).
Registro — vaults/projects.json guarda o projeto ativo, nomes e caminhos personalizados.
O diretório atual, se contiver package.json (código-fonte / modo dev).
Caso contrário, a pasta de dados do sistema: %APPDATA%\GraphFinder (Windows), ~/Library/Application Support/GraphFinder (macOS), ~/.local/share/GraphFinder (Linux).
Trocar o modelo de embeddings muda a semântica dos vetores. Reindexe seus projetos (apague o index.db do projeto e rode graphfinder sync) após a troca.
Testes unitários Rust (parser, FTS5, matemática de embeddings, detecção de linguagem, imports, busca de código).
npm run sync | status | search | projects | mcp
Executa comandos da CLI via cargo run.
Releases
Enviar uma tag no formato v* (ou rodar o workflow Release manualmente) dispara o .github/workflows/release.yml: o scripts/sync-version.js aplica a versão da tag em package.json, Cargo.toml e tauri.conf.json, e então o tauri-action compila e publica instaladores para Windows, macOS e Linux.
O endpoint HTTP/SSE só existe enquanto o app desktop está aberto. Abra o app ou mude o cliente para o modo stdio ("command": "graphfinder", "args": ["--mcp"]). Se alterou GRAPHFINDER_MCP_PORT, atualize a URL.
graphfinder não é reconhecido no terminal.
Rode GraphFinder.exe install-cli (ou graphfinder config --install) e abra um novo terminal para carregar o PATH atualizado.
Os resultados são ruins para português / outros idiomas.
Defina GRAPHFINDER_MODEL=multilingual e reindexe.
A primeira inicialização é lenta.
O modelo de embeddings é baixado uma vez. Nas próximas execuções ele é carregado de .fastembed_cache; aponte GRAPHFINDER_MODELS para uma cópia local em máquinas sem internet.
Alguns arquivos não aparecem no grafo de código.
Verifique se estão no .gitignore, se são binários, se passam de 1 MB ou se têm extensão não suportada. Rode graphfinder sync para forçar uma atualização incremental.
Algum dado sai da minha máquina?
Não. Embeddings, busca e análises rodam localmente. O único acesso à rede é o download único do modelo (e este site consultando a release mais recente no GitHub).