amem
A camada de memória para ferramentas de codificação de IA. Local-first, semântica, 9 ferramentas MCP com consolidação e escopo de projeto. Funciona com Claude Code, Cursor, Windsurf e qualquer cliente MCP.
Documentação
amem
A camada de memória para ferramentas de codificação com IA.
Diga ao seu IA uma vez — ele lembra em todos os lugares.
| 🎯 97,8% R@5 | ⚡ ~14ms p50 | 🛠 33 Ferramentas | 🔒 100% Local |
|---|---|---|---|
| LongMemEval-S, 500q | Pipeline de recall completo | Kit de memória completo | Sem nuvem necessária |
Início Rápido · Como Funciona · Benchmarks · Ferramentas · Painel · Arquitetura
💡 O Problema
Toda ferramenta de IA começa do zero. Toda sessão. Toda ferramenta.
- You: "Don't use 'any' in TypeScript" → told Claude 3 times. Copilot still doesn't know.
- You: "We chose PostgreSQL over MongoDB" → explained in Cursor. Claude has no idea.
+ With amem: tell it once, every AI tool remembers — forever.
Veja em ação
You (in Claude Code): "Don't use any type in TypeScript"
└─ amem stores this as a correction (priority 1.0, confidence 100%)
You (switch to Copilot): starts coding
└─ Copilot already knows — amem feeds it the same correction
You (open Cursor): "What do you remember about TypeScript?"
└─ Instantly recalls: "Don't use any type" + all related preferences
Sem nuvem. Sem chaves de API. Um único arquivo SQLite. Tudo permanece na sua máquina.
🚀 Início Rápido
|
Claude Code (recomendado)
|
GitHub Copilot CLI
|
📦 Cursor / Windsurf / Qualquer Cliente MCP
npm install -g @aman_asmuei/amem
amem-cli init # Detects & configures all installed AI tools
amem-cli rules # Generates extraction rules for proactive memory use
Ou adicione manualmente à sua configuração MCP:
{
"mcpServers": {
"amem": {
"command": "npx",
"args": ["-y", "@aman_asmuei/amem"]
}
}
}
Verifique se funciona:
amem-cli stats # Should show "0 memories" initially
💬 Diga ao seu IA: "Lembre-se: sempre use TypeScript estrito, nunca use o tipo any"
🔄 Inicie uma nova sessão: "O que você lembra sobre TypeScript?" — ele recorda instantaneamente.
🧬 Desenvolvido por amem-core
amem é o servidor MCP. O mecanismo de recuperação vive em @aman_asmuei/amem-core.
Claude Code / Copilot / Cursor / any MCP client
│
│ MCP (stdio)
▼
┌──────────────────────────────────┐
│ @aman_asmuei/amem (this pkg) │
│ 33 Tools · 7 Resources · 2 Prompts
│ CLI · Hooks · Dashboard │
└───────────────┬──────────────────┘
│ imports
▼
┌──────────────────────────────────┐
│ @aman_asmuei/amem-core │
│ Embeddings · HNSW · Recall │
│ Knowledge Graph · Reflection │
│ 97.8% R@5 on LongMemEval-S │
└───────────────┬──────────────────┘
▼
┌────────────────────┐
│ SQLite + WAL │
│ ~/.amem/memory.db │
└────────────────────┘
Por que dois pacotes?
| Pacote | Função | Instalação |
|---|---|---|
@aman_asmuei/amem (este) | Servidor MCP + CLI + hooks | npm i -g @aman_asmuei/amem |
@aman_asmuei/amem-core | Biblioteca TS pura, zero dependências MCP | npm i @aman_asmuei/amem-core |
O mesmo mecanismo alimenta amem (servidor MCP), aman-agent (CLI), aman-tg (bot do Telegram) e qualquer aplicativo Node ao qual você der memória. Melhorias na recuperação chegam via amem-core. Mudanças nas ferramentas MCP chegam via amem. Eles têm versionamento independente.
O destaque de 97,8% R@5 é a qualidade do mecanismo de
amem-core(LongMemEval-S, nível de sessão, 500 perguntas, zero chamadas de API) — exatamente o que você obtém, seja chamando via MCP ou importando a biblioteca diretamente.
⚙️ Como Funciona
amem captura conhecimento em três camadas — do totalmente automático ao totalmente manual:
| Camada | Como | O que faz |
|---|---|---|
| Automática | Hooks de ciclo de vida | Captura observações de ferramentas, extrai automaticamente correções/decisões/padrões ao final da sessão |
| Impulsionada por IA | Regras de extração | Seu IA chama proativamente memory_store quando você o corrige, toma decisões ou expressa preferências |
| Manual | Linguagem natural | "Lembre-se: usamos PostgreSQL" ou "Esqueça a memória do Redis" |
Tipos de Memória
| Prioridade | Tipo | Exemplo |
|---|---|---|
| 1.0 | correção | "Não faça mock do banco de dados em testes de integração" |
| 0.85 | decisão | "Escolhemos Postgres em vez de Mongo por ACID" |
| 0.7 | padrão | "Prefere retornos antecipados a aninhamentos" |
| 0.7 | preferência | "Usa pnpm, não npm" |
| 0.5 | topologia | "O módulo de autenticação fica em src/auth/" |
| 0.4 | fato | "API lançada em janeiro de 2025" |
Correções sempre aparecem primeiro — são as restrições rígidas do seu IA.
🔄 Camadas de Memória e Validade Temporal
Camadas de Memória
| Camada | Comportamento |
|---|---|
| Núcleo | Sempre injetada no início da sessão (~500 tokens). Suas correções mais críticas. |
| Trabalho | Escopo da sessão, exibida automaticamente para a tarefa atual. |
| Arquivo | Padrão. Pesquisável, mas não injetada automaticamente. |
Validade Temporal
Memórias não são para sempre. Quando os fatos mudam:
- Memórias antigas são expiridas (não excluídas) — preservadas para "o que era verdade em março?"
- Contradições são detectadas automaticamente — armazenar uma nova decisão expira automaticamente a antiga
- Consulte qualquer ponto no tempo com
memory_since
🧠 Loop de Memória Auto-Evolutiva
Sua memória não apenas armazena — ela aprende com sua própria estrutura. Chame memory_reflect para acionar o mecanismo de reflexão:
memory_reflect → Analyzes your entire memory graph
│
├─ Clusters related memories (HNSW neighbor graph)
├─ Detects contradictions (negation pairs, numerical, low-overlap)
├─ Identifies synthesis candidates
├─ Surfaces knowledge gaps (topics with sparse recall)
└─ Returns a structured report with suggested actions
O loop de evolução:
- Refletir —
memory_reflectagrupa suas memórias e encontra padrões - Sintetizar — A IA mescla clusters relacionados em princípios de ordem superior via
memory_store - Vincular —
memory_relateconecta sínteses às memórias de origem (rastreadas via linhagem de síntese) - Repetir — a cada ciclo, o grafo se torna mais coerente e abstrato
O sistema sugere automaticamente quando a reflexão é necessária (>7 dias ou >50 novas memórias desde a última execução).
📊 Como é o relatório de reflexão
# Memory Reflection Report
Analyzed 127 memories in 12ms
Health Score: 68/100
## Stats
- Clusters: 8 (avg size: 4.2)
- Clustered: 34 | Orphans: 93
- Contradictions: 2
- Synthesis candidates: 3
- Knowledge gaps: 4
## Contradictions Found
⚠ Opposing language detected (23d apart, 87% similar)
A: a1b2c3d4 "Always use semicolons in JavaScript..."
B: e5f6g7h8 "Never use semicolons in JavaScript..."
→ Expire older memory a1b2c3d4 — newer supersedes it
## Synthesis Candidates
### cluster-0 (4 patterns)
"These 4 related memories form a cluster about 'typescript, types':
[patterns]:
- 'Always use strict TypeScript types'
- 'Prefer strict null checks'
- 'Use unknown instead of any'
- 'Enable strictNullChecks in tsconfig'
Synthesize into a higher-order principle..."
## Knowledge Gaps
- "kubernetes deployment" — asked 3x, avg 25% confidence
- "database migration strategy" — asked 2x, avg 0% confidence
📈 Benchmarks
Precisão de Recall (LongMemEval)
Todos os números de amem-core v0.5.1 — o mecanismo de recuperação que alimenta este servidor MCP. Zero chamadas de API, tudo local, totalmente reproduzível.
|
LongMemEval-S (nível de sessão) — métrica principal
500 perguntas · apenas CPU · zero chamadas de API |
LongMemEval Oracle (nível de turno)
479 perguntas pontuáveis · 301s de execução · Node 22 |
Pipeline: bge-small-en-v1.5 bi-encoder local + ms-marco-MiniLM-L-6-v2 cross-encoder (int8, em lote, ativado por padrão). Consulte benchmarks do amem-core para detalhamentos completos por tipo, evolução do pipeline e notas honestas.
Por que isso importa para a questão "reescrever em Rust". O valor de 10,3ms de rerank acima reflete uma aceleração de ~30% sobre a implementação por par que substituiu — alcançada com ~20 linhas de processamento em lote mais quantização int8, sem reescrita nativa. Os caminhos críticos já eram eficientes; os ganhos restantes vieram de usá-los com mais cuidado. Permanecemos em TypeScript.
Latência de Busca
|
Pipeline de recall completo (v0.5.1+)
|
Somente índice HNSW (busca vetorial)
|
Medido: 100 buscas em média, embeddings de 384 dimensões, top-10 resultados. Sub-0,1ms em qualquer escala — efetivamente O(log n). HNSW é uma dependência opcional; força bruta é usada como fallback quando indisponível. |
🛠️ Referência de Ferramentas
Memória Principal (7 ferramentas)
| Ferramenta | Descrição |
|---|---|
memory_store | Armazena uma memória com tipo, tags e confiança. Redige automaticamente conteúdo privado e expira contradições automaticamente. |
memory_recall | Busca semântica — modo compacto por padrão (~10x economia de tokens). Use memory_detail para conteúdo completo. |
memory_detail | Recupera conteúdo completo por ID após recall compacto. |
memory_context | Carrega todo o contexto relevante para um tópico, organizado por tipo com orçamento de tokens. |
memory_extract | Salva em lote múltiplas memórias da conversa. |
memory_forget | Exclui por ID ou consulta (com confirmação). |
memory_inject | Exibe correções + decisões + vizinhos do grafo antes de começar a codificar. |
Precisão, Histórico, Avançado, Administração, Lembretes e Ferramentas de Manutenção (mais 26)
Precisão e Histórico (5 ferramentas)
| Ferramenta | Descrição |
|---|---|
memory_patch | Edição cirúrgica em nível de campo com snapshot automático. |
memory_versions | Visualiza o histórico completo de edições ou restaura qualquer versão. |
memory_search | Busca exata de texto completo via FTS5 com modo compacto. |
memory_since | Consulta temporal com intervalos em linguagem natural (7d, 2w, 1h). |
memory_relate | Constrói um grafo de conhecimento tipado entre memórias. |
Avançado (6 ferramentas)
| Ferramenta | Descrição |
|---|---|
memory_multi_recall | Busca multiestratégia com modo compacto: semântica + FTS5 + grafo + temporal. |
memory_tier | Move memórias entre camadas: núcleo / trabalho / arquivo. |
memory_expire | Marca como não mais válida — preservada para histórico, excluída do recall. |
memory_summarize | Armazena resumo estruturado de sessão com decisões, correções e métricas. |
memory_history | Visualiza resumos de sessões anteriores. |
memory_reflect | Mecanismo de reflexão auto-evolutivo — agrupa memórias, detecta contradições, identifica candidatos a síntese e expõe lacunas de conhecimento. |
Administração e Sincronização (4 ferramentas)
| Ferramenta | Descrição |
|---|---|
memory_doctor | Executa diagnósticos de saúde somente leitura no banco de dados amem. |
memory_repair | Realiza reparos seguros e direcionados no banco de dados amem. |
memory_config | Obtém ou define a configuração do amem com proteções de segurança. |
memory_sync | Importa ou exporta memórias entre amem e outros sistemas (auto-memória do Claude, instruções do Copilot). |
Lembretes (4 ferramentas)
| Ferramenta | Descrição |
|---|---|
reminder_set | Cria lembrete com prazo e escopo opcionais. |
reminder_list | Lista lembretes ativos (ou todos), filtráveis por escopo. |
reminder_check | Mostra atrasados, de hoje e próximos (7 dias). |
reminder_complete | Marca como concluído (suporta ID parcial). |
Log e Manutenção (7 ferramentas)
| Ferramenta | Descrição |
|---|---|
memory_log | Acrescenta turnos brutos de conversa (sem perdas, somente acréscimo). |
memory_log_recall | Busca ou reproduz log por sessão, palavra-chave ou recência. |
memory_log_cleanup | Remove entradas antigas com retenção configurável. |
memory_stats | Contagens, detalhamento por tipo, distribuição de confiança. |
memory_export | Exporta como Markdown ou JSON. |
memory_import | Importação em massa de JSON com deduplicação automática. |
memory_consolidate | Mescla duplicatas, remove obsoletas, promove frequentes, decai inativas. |
📖 Guia de Uso
Armazenando Memórias
|
Linguagem natural (mais fácil)
|
Chamadas explícitas de ferramentas
|
Recuperando Memórias
// Step 1: Compact index — ~50-100 tokens (default)
memory_recall({ query: "auth decisions", limit: 5 })
// -> a1b2c3d4 [decision] Auth service uses JWT tokens... (92%)
// -> e5f6g7h8 [correction] Never store tokens in localStorage... (100%)
// Step 2: Full details only for what you need
memory_detail({ ids: ["a1b2c3d4", "e5f6g7h8"] })
Mais opções de busca
// Multi-strategy: semantic + FTS5 + graph + temporal
memory_multi_recall({
query: "authentication architecture",
limit: 10,
weights: { semantic: 0.4, fts: 0.3, graph: 0.15, temporal: 0.15 }
})
// Exact keyword search (FTS5 syntax)
memory_search({ query: "OAuth PKCE" })
memory_search({ query: '"event sourcing"' }) // phrase match
memory_search({ query: "auth* NOT legacy" }) // boolean
Gerenciando Memórias
Editar, expirar, promover, vincular
// Surgical edit with auto-snapshot for rollback
memory_patch({ id: "a1b2c3d4", field: "content", value: "Updated text", reason: "clarified" })
// View edit history / restore
memory_versions({ memory_id: "a1b2c3d4" })
// Expire (preserve for history, exclude from recall)
memory_expire({ id: "a1b2c3d4", reason: "Migrated to GraphQL" })
// Promote to core tier (always loaded at session start)
memory_tier({ id: "a1b2c3d4", tier: "core" })
// Link related memories (graph builds itself, but you can add manual links)
memory_relate({ action: "relate", from_id: "abc", to_id: "xyz", relation_type: "supports" })
Tipos de relação: supports, contradicts, depends_on, supersedes, related_to, caused_by, implements — ou defina os seus próprios.
Lembretes
Acompanhamento de prazos entre sessões
reminder_set({ content: "Review PR #42", due_at: 1743033600000, scope: "global" })
reminder_check({})
// -> [OVERDUE] Review PR #42
// -> [TODAY] Deploy auth service
// -> [upcoming] Write quarterly report
reminder_complete({ id: "a1b2c3d4" })
Privacidade
Redação automática
// Private blocks stripped before storage
memory_store({
content: "DB password is <private>hunter2</private>, connect to prod at db.example.com",
type: "topology", tags: ["database"]
})
// Stored: "DB password is [REDACTED], connect to prod at db.example.com"
// API keys, tokens, passwords auto-redacted by pattern matching
// Configure patterns in ~/.amem/config.json
⚔️ Comparação honesta: amem vs graphify
Clique para expandir — como o amem se compara ao graphify
graphify é o "e quanto a X?" mais comum quando as pessoas encontram o amem. Eles resolvem problemas fundamentalmente diferentes e são genuinamente complementares.
O que cada ferramenta faz
| amem | graphify | |
|---|---|---|
| Resumo | Memória persistente entre sessões de IA | Base de código → grafo de conhecimento |
| Pergunta central | "O que minha IA aprendeu sobre mim?" | "Como é esta base de código?" |
| Entrada | Linguagem natural (correções, decisões, preferências) | Arquivos (código, docs, PDFs, imagens, vídeo) |
| Saída | Memórias recuperadas classificadas por relevância | Grafo estrutural + relatório + HTML interativo |
| Persistência | Sempre — a memória sobrevive entre sessões e ferramentas | Instantâneo — graph.json persiste, mas não aprende com o tempo |
| Quando executa | Continuamente, a cada sessão | Sob demanda (/graphify .) ou no commit via git hook |
Comparação técnica
| amem | graphify | |
|---|---|---|
| Runtime | TypeScript / Node (≥18) | Python (≥3.10) |
| Protocolo | Servidor MCP (33 ferramentas, 7 recursos) | Skill de IA (comando de barra) + servidor MCP opcional |
| Armazenamento | SQLite + FTS5 + WAL | Grafo NetworkX → arquivo JSON |
| Busca | Embeddings semânticos + FTS5 + grafo + reclassificação | Travessia de grafo (BFS/DFS) + consulta de nós |
| Embeddings | bge-small-en-v1.5 local (384-dim) | Nenhum — usa topologia de grafo, não similaridade vetorial |
| Compreensão de código | Nenhuma — armazena o que você informa | Profunda — AST tree-sitter para 25 linguagens |
| Multimodal | Somente texto | Código, docs, PDFs, imagens, vídeo, áudio |
| LLM necessário | Não (tudo local) | Sim para docs/imagens (código é livre de LLM via tree-sitter) |
| Benchmark | 97,8% R@5 no LongMemEval-S | Redução de 71,5x de tokens vs leitura bruta de arquivos |
| Suporte a ferramentas de IA | Claude Code, Copilot, Cursor, qualquer cliente MCP | Claude Code, Codex, Copilot, Cursor, Gemini, Aider, Kiro, +10 mais |
Onde cada um vence
amem vence em:
- Lembrar suas preferências, correções e decisões entre projetos e ferramentas
- Recuperação semântica — encontrar a memória certa a partir de uma consulta vaga (97,8% R@5)
- Inteligência temporal — rastrear o que era verdade quando, expirando contradições automaticamente
- Auto-evolução — o mecanismo de reflexão agrupa, detecta contradições e identifica lacunas
- Zero dependência de LLM — tudo roda localmente, sem chamadas de API
graphify vence em:
- Compreender estrutura de código — grafos de chamadas, imports, hierarquias de classes, relações entre arquivos
- Ingestão multimodal — adicione código, artigos, capturas de tela, vídeos, ele cria grafos de tudo
- Eficiência de tokens — compressão de 71,5x significa que sua IA lê a estrutura, não arquivos brutos
- Ampla cobertura de linguagens — 25 linguagens de programação via AST tree-sitter
- Ampla cobertura de ferramentas de IA — 15+ plataformas com comandos de instalação dedicados
Conclusões honestas
-
Eles não competem. O amem lembra seu conhecimento (decisões, correções, preferências). O graphify mapeia a estrutura da base de código (grafos de chamadas, dependências, arquitetura). Dados diferentes, padrões de acesso diferentes.
-
Use ambos se quiser. Execute
graphify .para obter um mapa estrutural do seu projeto. Use o amem para lembrar "escolhemos esta arquitetura porque X." O grafo diz à sua IA o que existe. A memória diz por que as coisas são assim. -
O graphify tem cobertura de plataforma mais ampla (15+ ferramentas de IA). O amem tem integração mais profunda onde funciona (protocolo MCP com 33 ferramentas, recursos estruturados, prompts).
-
O graphify precisa de um LLM para arquivos não-código. O amem é totalmente local — sem chamadas de API, sem inferência de modelo além do modelo de embedding local.
-
A escolha real depende do seu problema. Se sua IA continua esquecendo suas preferências e decisões → amem. Se sua IA não consegue navegar pela base de código eficientemente → graphify. Se ambos → use ambos.
🌐 Compatibilidade de Plataformas
| Recurso | Claude Code | GitHub Copilot CLI | Cursor / Windsurf / Outros |
|---|---|---|---|
| Instalação de plugin com um comando | Sim | Sim | -- |
| 33 ferramentas MCP | Sim | Sim | Sim |
| Skills de IA | 14 | 7 | -- |
| Hooks de captura automática | Sim | Sim | -- |
| Resumo automático de sessão | Sim | Sim | -- |
| Sincronização automática de memória | Sim | -- | -- |
Configuração via CLI (amem-cli init) | Sim | Sim | Sim |
Claude Code tem a integração mais profunda (plugin + hooks + sincronização automática de memória). Copilot CLI é um segundo próximo. Outros clientes MCP obtêm o servidor completo com 33 ferramentas via configuração manual.
Skills de IA
Skills disponíveis por plataforma
| O que você diz | Skill | Claude Code | Copilot CLI |
|---|---|---|---|
| "Lembre-se de nunca usar any type" | remember | Sim | Sim |
| "O que você lembra sobre auth?" | recall | Sim | Sim |
| "Carregar contexto para esta tarefa" | context | Sim | Sim |
| "Mostrar estatísticas de memória" | stats | Sim | Sim |
| "Executar memory doctor" | doctor | Sim | Sim |
| "Exportar minhas memórias" | export | Sim | Sim |
| "Listar todas as correções" | list | Sim | Sim |
| "Sincronizar minha memória do Claude" | sync | Sim | -- |
| "Abrir o painel de memória" | dashboard | Sim | -- |
| "Instalar hooks" | hooks | Sim | -- |
🔄 Trabalhando com Auto-Memória do Claude Code
O amem complementa a auto-memória integrada do Claude — ele não a substitui.
| Auto-memória do Claude | amem | |
|---|---|---|
| Captura | Automática, zero configuração | Tipada com pontuações de confiança |
| Armazenamento | Arquivo markdown único | SQLite com busca, grafo, temporal |
| Recuperação | Arquivo inteiro carregado a cada sessão | Apenas memórias relevantes são exibidas |
| Histórico | Sobrescrito na atualização | Versionado, validade temporal |
| Busca | Nenhuma | Semântica + FTS5 + grafo + reclassificação |
Recomendado: Mantenha ambos ativados. Execute amem-cli sync para importar as memórias do Claude para o amem e obter acesso estruturado e unificado.
Sincronização Claude → amem
amem-cli sync # Import all projects
amem-cli sync --dry-run # Preview what would be imported
amem-cli sync --project myapp # Import specific project
| Tipo Claude | Tipo amem | Confiança |
|---|---|---|
feedback | correction | 1.0 |
project | decision | 0.85 |
user | preference | 0.8 |
reference | topology | 0.7 |
Sincronização amem → Copilot
Exporte as memórias do amem para .github/copilot-instructions.md para que o Copilot as leia como contexto persistente:
amem-cli sync --to copilot # Export to current project
amem-cli sync --to copilot --dry-run # Preview without writing
amem-cli sync --to copilot --project /path/to/repo
Isso gera markdown estruturado agrupado por prioridade:
- Correções (devem ser seguidas) — restrições rígidas
- Decisões — escolhas arquiteturais
- Preferências — preferências do usuário
- Padrões — convenções de codificação
- Contexto — topologia + fatos
A seção do amem é envolvida em marcadores <!-- amem:start/end --> — o conteúdo existente que não é do amem no arquivo é preservado.
Sincronização entre ferramentas: Decisões tomadas em sessões do Claude informam automaticamente o Copilot:
Claude Code → amem sync → amem DB → amem sync --to copilot → copilot-instructions.md
📊 Painel & Grafo de Conhecimento
amem-cli dashboard # Opens at localhost:3333
amem-cli dashboard --port=8080 # Custom port
Painel web completo com:
- 🔍 Navegador de memórias — busca, filtro por tipo/camada/fonte, ações inline (promover, rebaixar, expirar)
- 🕸️ Grafo de conhecimento interativo — zoom, pan, clique para focar com destaque de vizinhança, painel de detalhes, busca, arestas direcionais
- 📈 Análises — distribuição de confiança, detalhamento por tipo, linha do tempo de sessões
- ⏰ Lembretes — visualize e gerencie tarefas entre sessões
- 📋 Pré-visualização do Copilot — veja o que seria exportado para
copilot-instructions.md
💻 Referência da CLI
# Setup
amem-cli init # Auto-configure AI tools
amem-cli rules # Generate extraction rules
amem-cli hooks # Install hooks for Claude Code
amem-cli hooks --target copilot # Install hooks for GitHub Copilot CLI
amem-cli hooks --uninstall # Remove hooks
amem-cli sync # Import Claude auto-memory → amem
amem-cli sync --to copilot # Export amem → copilot-instructions.md
amem-cli doctor # Health diagnostics
amem-cli repair # Repair corrupted database from backups
# Dashboard
amem-cli dashboard # Web dashboard (localhost:3333)
# Memory operations
amem-cli recall "authentication" # Semantic search
amem-cli stats # Statistics
amem-cli list --type correction # List by type
amem-cli export --file memories.md # Export to file
amem-cli forget abc12345 # Delete by short ID
amem-cli reset --confirm # Wipe all data
🏗 Arquitetura
Your AI Tool
Claude Code / Copilot CLI / any MCP client
│ │
│ MCP (stdio) │ Lifecycle Hooks
▼ ▼
┌─────────────────────────────────┐
│ @aman_asmuei/amem │ ← this package
│ │
│ 33 Tools · 7 Resources · 2 Prompts
│ Slash commands · CLI · Hooks │
│ Config: ~/.amem/config.json │
└────────────────┬────────────────┘
│ imports
▼
┌─────────────────────────────────┐
│ @aman_asmuei/amem-core │ ← the engine
│ │
│ Multi-Strategy Retrieval │
│ [HNSW] + [FTS5] + [Graph] + [Temporal]
│ + query expansion │
│ + cross-encoder reranker │
│ │
│ Self-Evolving Reflection │
│ [Clustering] + [Contradictions]│
│ + [Synthesis] + [Gap Detection]│
│ │
│ Embeddings: bge-small-en-v1.5 │
│ Reranker: ms-marco-MiniLM int8 │
│ 97.8% R@5 on LongMemEval-S │
└────────────────┬────────────────┘
│
▼
┌─────────────────────────────────┐
│ SQLite + WAL + FTS5 │
│ ~/.amem/memory.db │
│ │
│ memories (tiered) │
│ conversation_log (raw) │
│ memory_versions (history) │
│ memory_relations (graph) │
│ synthesis_lineage │
│ knowledge_gaps │
│ session_summaries │
│ reminders │
└─────────────────────────────────┘
O servidor MCP amem é um wrapper fino em torno de amem-core. O mecanismo de recuperação, embeddings, grafo de conhecimento, reflexão — tudo vive em amem-core e tem versão independente. Bug na integração MCP? Republique amem. Melhoria na recuperação? Republique amem-core. Sem acoplamento.
Fórmula de Classificação
score = relevance x 0.45 + recency x 0.2 + confidence x 0.2 + importance x 0.15
| Fator | Como funciona |
|---|---|
| Relevância | Similaridade de cosseno via índice HNSW; fallback de palavras-chave com expansão de consulta |
| Recência | Decaimento exponencial (0.995^hours) |
| Confiança | Reforçada por confirmação repetida (0-1) |
| Importância | Baseada em tipo: correções 1.0 ... fatos 0.4 |
A pontuação aditiva garante que nenhum fator baixo isolado elimine a classificação.
⚙️ Configuração
Variáveis de ambiente
| Variável | Padrão | Descrição |
|---|---|---|
AMEM_DIR | ~/.amem | Diretório de armazenamento |
AMEM_DB | ~/.amem/memory.db | Caminho do banco de dados |
AMEM_PROJECT | (auto do git) | Sobrescrita de escopo do projeto |
Arquivo de configuração (~/.amem/config.json)
Criado automaticamente com padrões:
{
"retrieval": {
"semanticWeight": 0.4,
"ftsWeight": 0.3,
"graphWeight": 0.15,
"temporalWeight": 0.15,
"rerankerEnabled": true
},
"privacy": {
"enablePrivateTags": true,
"redactPatterns": ["..."]
},
"tiers": {
"coreMaxTokens": 500,
"workingMaxTokens": 2000
},
"hooks": {
"enabled": true,
"captureToolUse": true,
"captureSessionEnd": true
}
}
📋 Histórico de versões
v0.23.0 — Painel de Grafo de Conhecimento Interativo
Explorador de grafo em largura total com zoom/pan, clique para focar com destaque de vizinhança, painel de detalhes com navegação de relações, busca e filtro, arestas direcionais, layout dirigido por força. Ferramentas de administração (doctor, repair, config, sync). 255 testes em 18 suítes.
v0.19.0 — Loop de Memória Auto-Evolutiva
Mecanismo de reflexão com agrupamento baseado em HNSW, detecção de contradição em 3 camadas (negação + numérica + baixa sobreposição), candidatos de síntese com rastreamento de linhagem, detecção de lacunas de conhecimento, pontuação de utilidade, aviso de acionamento automático em memory_inject. Novas tabelas de banco: synthesis_lineage, knowledge_gaps, reflection_meta. Migração v5.
v0.18.0 — Divulgação Progressiva e Escala
Índice vetorial HNSW (67x mais rápido em 10k), modo compacto padrão na recuperação/busca, CLI de reparo de banco, segurança de acesso concorrente, extrator heurístico de conversas, extração automática no fim da sessão.
v0.13.0 — Recuperação de Classe Mundial
Embeddings bge-small-en-v1.5, pontuação aditiva, expansão de consulta, grafo de conhecimento com relação automática, injeção ciente de grafo, amem doctor, benchmarks de CI.
v0.9.x — Inteligência Temporal
Validade temporal, expiração automática de contradições, recuperação multi-estratégia, reclassificação cross-encoder, camadas de memória, tags de privacidade, hooks de ciclo de vida, resumos de sessão, painel, sistema de configuração.
v0.7.0 — v0.8.0
Importação/exportação, decaimento de confiança, cache de embeddings, segurança multi-processo, CLI de configuração automática, painel.
v0.1.0 — v0.5.x
Armazenamento/recuperação central, embeddings locais, SQLite + WAL, consolidação, escopo de projeto, lembretes, registro de conversas, grafo de conhecimento, FTS5, divulgação progressiva.
🧰 Pilha Tecnológica
| Camada | Tecnologia |
|---|---|
| Protocol | MCP SDK ^1.25 |
| Language | TypeScript 5.6+, strict mode |
| Database | SQLite + WAL + FTS5 |
| Embeddings | HuggingFace bge-small-en-v1.5 (local, 80MB) + HNSW vector index |
| Reranking | ms-marco-MiniLM-L-6-v2 (default-on, int8, batched, local) |
| Validation | Zod 3.25+ with .strict() schemas |
| Testing | Vitest — 281 tests across 19 suites + recall benchmarks |
| CI/CD | GitHub Actions, npm publish on release |
🤝 Contribuindo
git clone https://github.com/amanasmuei/amem.git
cd amem && npm install
npm run build # zero TS errors
npm test # 281 tests pass
PRs devem passar no CI antes do merge. Veja Problemas para tarefas em aberto.
Feito com ❤️ na 🇲🇾 Malásia por Aman Asmuei
Licença MIT · Dê uma estrela ⭐ se o amem salvar sua IA da amnésia