A dor¶
Tu instala o Playwright como servidor MCP. Pede pro Claude Code raspar um site.
Sem mneme
Claude tenta curl https://..., recebe HTML que não consegue parsear, cai num regex frágil, e em momento nenhum considera que tem o Playwright disponível.
Isso é affordance blindness. O agente esquece a superfície de capabilities que tem instalada e escolhe o primeiro caminho plausível. O mesmo agente que tem Telegram, GitHub, Postgres, Obsidian, PyAutoGUI, Docker — e ignora quando precisa.
Documentado:
- "Lost in the Middle" (Liu et al., TACL 2024) — conteúdo no meio do contexto longo é ignorado pela attention do modelo.
- "RAG-MCP" (Gan & Sun, 2025) — empírico: precisão de seleção de ferramenta cai de 43,1% com retrieval para 13,6% sem.
Bibliotecas de memória (Mem0, Zep, Letta, Memori, Anthropic Memory tool) resolvem outro problema. Lembram fatos sobre você. Nenhuma lembra o que o agente pode fazer.
mneme preenche essa lacuna.
A solução¶
pip install git+https://github.com/Luizhcrs/mneme.git
ollama pull nomic-embed-text
mneme init && mneme reindex
Adiciona em ~/.claude/settings.json:
{
"hooks": {
"UserPromptSubmit": [
{ "hooks": [{ "type": "command", "command": "python -m mneme.hooks.user_prompt_submit" }] }
],
"PostToolUse": [
{ "hooks": [{ "type": "command", "command": "python -m mneme.hooks.post_tool_use" }] }
]
}
}
Pronto. Todo prompt que teu agente recebe agora começa com um bloco <capabilities-available> listando as ferramentas que casam com a tarefa — por similaridade semântica, em PT-BR ou EN, com scores.
Funciona mesmo?¶
Benchmark de 50 tarefas (Ollama nomic-embed-text real, queries mistas EN+PT-BR, 10 capabilities):
| Métrica | Resultado |
|---|---|
| top-1 affordance recall | 90% |
| top-3 affordance recall | 94% |
| top-5 affordance recall | 94% |
| Mínimo RAG-MCP | 43% |
| Margem sobre o baseline publicado | +51 pp |
9 de cada 10 vezes o agente acerta a ferramenta na primeira tentativa, sem fine-tune, sem cloud, modelo de embedding genérico rodando local. Acceptance gate reprodutível — MNEME_REAL_OLLAMA=1 pytest tests/test_benchmark_acceptance.py.
Na prática¶
QUERY: "manda mensagem no telegram avisando que deploy terminou"
→ telegram_send (comms, score=0.76)
QUERY: "abre uma issue no github sobre esse bug"
→ github_create_issue (vcs, score=0.74)
QUERY: "sobe os containers do projeto com docker"
→ docker_compose_up (container, score=0.73)
QUERY: "roda um modelo local de ia"
→ ollama_generate (ml_inference, score=0.72)
QUERY: "busca minhas notas sobre memoria no obsidian"
→ obsidian_search_vault (vault_kb, score=0.69)
O que tem na caixa¶
-
Só local
Ollama pra embeddings, SQLite + sqlite-vec pro vector store, JSONL pra memória procedural. Zero cloud. Zero custo de API.
-
Bilíngue de fábrica
Descrições de categoria e cards seed em EN + PT-BR. Ambas as línguas no mesmo espaço vetorial.
-
Retrieval em dois estágios
Top-K categorias → top-N capabilities (AnyTool). Configurável por tamanho de registry.
-
Memória procedural
Sequências bem-sucedidas viram workflows persistidos (Voyager) e re-aparecem em tarefas similares.
-
Auto-discovery
Scanner lê
claude mcp list, plugins e slash commands automaticamente. -
Fail-safe
Crash do hook nunca trava Claude Code. Fallback regex opcional quando Ollama indisponível.
-
Auto-telemetria
Metadata local (sem conteúdo de prompt).
mneme insightssurfa cards mortos, outliers de latência, matches suspeitos automaticamente. -
Padrão aberto
Capability cards em YAML simples; PR pra publicar cards de MCPs populares.
Próximos passos¶
- Início rápido — instalar + conectar hooks em 2 minutos
- Arquitetura — como o retrieval funciona por baixo
- Capability cards — contribuir pra registry aberta
- Roadmap — Phase 2 + Phase 3 pela frente
