Engram
Servidor MCP auto-hospedado + painel que dá aos agentes memória compartilhada através de uma pasta de markdown com suporte a git.
Documentação
Engram
O segundo cérebro que seus agentes de IA leem e escrevem.
▶ Assista ao vídeo completo (tempo real, qualidade total)
↗ Experimente a demonstração ao vivo — sem cadastro. Pesquise preço de retenção e veja a nota aposentada ser retida.
Engram é um servidor MCP + painel auto-hospedado que dá ao Claude Code, Cursor, Hermes e a qualquer agente do Model Context Protocol memória compartilhada e de longo prazo que eles leem e escrevem — por meio de uma pasta simples, com suporte a git, de markdown que você possui. Construído para o caso em que a memória de um único agente nunca alcança: uma equipe executando vários agentes contra um único cérebro.
Agentes autônomos esquecem tudo entre sessões — e pior, não conseguem dizer se o que lembram ainda é verdade. Um agente puxa um README antigo, um preço aposentado, um documento de API que você mudou há meses, e o cita com total confiança, porque a busca por palavras-chave e vetores classifica por semelhança, não por verdade. Engram torna "isso ainda é verdade?" uma propriedade escrita de primeira classe: marque um fato como substituído ou expirado e a busca o retém — e diz ao agente o que foi ignorado e por quê. Tokens de leitura/escrita por agente e um trilho de auditoria git de quem-escreveu-o-quê mantêm a sanidade quando os escritores são uma frota, não apenas você.
Ao contrário de um armazenamento de memória sem cabeça, você pode ver acontecer. Um painel rápido permite pesquisar seu
cérebro, ver exatamente o que cada agente e colega mudou (com diffs por arquivo), voltar para
notas recentes e curar tudo — enquanto os agentes leem e escrevem no mesmo cofre por um único endpoint MCP. Sem
banco de dados: seus arquivos .md são a fonte da verdade, o git é o armazenamento durável, e um índice em memória
alimenta a busca de texto completo + um grafo de conhecimento de wikilinks.
Opinativo sobre como armazena memória — markdown com suporte a git, sem banco de dados, agentes escrevem (não apenas leem), auto-hospedado. Não opinativo sobre o que você mantém nele — qualquer cofre markdown, qualquer estrutura de pastas, qualquer cliente MCP. Aponte-o para um repositório novo ou seu cofre Obsidian existente: sem etapa de importação, sem aprisionamento.
Para que serve · Como se compara · Recursos · Funciona com · Início rápido · Ferramentas MCP · Implantar · FAQ · Contribuindo
Para que serve
- Memória compartilhada para uma equipe executando vários agentes — um cofre, muitos agentes lendo e escrevendo simultaneamente, com tokens de leitura/escrita por agente e um trilho de auditoria git de quem mudou o quê.
- Memória que sabe o que ainda é verdade — aposente um preço, um termo ou um documento de API alterado e seus agentes param de citá-lo; eles são informados do que foi ignorado e por quê. A falha que a memória de um único agente nunca corrige.
- Memória de longo prazo para Claude Code e outros agentes de codificação — pare de reexplicar seu projeto a cada sessão.
- Um segundo cérebro auto-hospedado e compatível com Obsidian exposto via MCP — suas notas, seu servidor, seu repositório git.
- Memória que você pode ver, não uma caixa preta — um painel para pesquisar, observar (com diffs) e curar o que seus agentes lembram.
- RAG de markdown sem o banco de vetores — busca de texto completo + um grafo de links sobre arquivos legíveis por humanos.
Como se compara
A maioria das memórias de agente é construída para responder "o que eu armazenei sobre isso?" Engram é construído para responder "o que ainda é verdade sobre isso?" — uma pergunta diferente, e a que morde quando um agente cita um preço que você aposentou há meses.
| Engram | Memória de vetores (mem0, Zep, …) | Memória de markdown (Basic Memory, …) | RAG simples sobre documentos | |
|---|---|---|---|---|
| Armazenamento | arquivos markdown, git é o banco de dados | embeddings em um banco de vetores | arquivos markdown | embeddings em um banco de vetores |
| Classificação | relevância × autoridade | similaridade | relevância | similaridade |
| Sabe que um fato está aposentado | ✅ superseded_by + valid_until, aplicado na busca | — | — | — |
| Explica o que foi retido | ✅ excluded[] com um motivo por nota | — | — | — |
| Aposenta + substitui atomicamente | ✅ brain_supersede, um commit | — | — | — |
| Recusa escritas contraditórias | ✅ no momento da escrita, não da leitura | — | — | n/a (somente leitura) |
| Trilho de auditoria | ✅ git, atribuição por escrita, diffs por arquivo | varia | git, se você fizer commit | — |
| Controle de acesso por agente | ✅ escopos de token de leitura / escrita | varia | — | — |
| Interface humana | ✅ painel, busca, diffs, grafo | varia | — | — |
| Executa em | sua máquina, um contêiner | principalmente SaaS hospedado | sua máquina | sua máquina |
A linha que importa é a terceira. A busca por similaridade não consegue distinguir uma contradição de um duplicado — um preço aposentado e um ativo são textualmente idênticos, então o aposentado muitas vezes supera o ativo por ser mais longo e detalhado. Isso não pode ser corrigido no momento da leitura, por isso Engram registra a aposentadoria quando ela acontece.
Este par exato está incluído em sample-vault/. Execute bun dev, pesquise preço acme,
e veja a nota aposentada ser retida com um motivo.
Categorias, não auditorias recurso por recurso de produtos específicos, e precisas até onde sei em julho de 2026. Se algo aqui deturpar uma ferramenta que você mantém, abra um PR — corrigirei.
Recursos
- Servidor MCP — 15 ferramentas
brain_*em um único endpoint HTTP autenticado por bearer (POST /api/mcp, JSON-RPC HTTP streamable). Conecte qualquer cliente MCP a uma única URL. Escopos de token por agente: um token somente leitura nunca vê nem as ferramentas de escrita. - Painel humano — uma página inicial focada em busca, árvore de arquivos, visualizador de notas com callouts do Obsidian, wikilinks e backlinks, editor Preview / Edit / Split com salvamento automático, busca ⌘K + navegação por teclado na página, "voltar para" recentes, e um grafo de conhecimento com força direcionada.
- Busca ciente de autoridade — a classificação sabe relevância, não verdade, então uma nota substituída repete suas
palavras de consulta tanto quanto a ativa. Cada resultado carrega uma autoridade (
authoritative→current→provisional→superseded→archived) derivada da pasta e do frontmatter da nota — para que seus agentes citem o documento bloqueado, não o morto. RAG de markdown que não devolve a resposta de ontem. - Validade temporal + rejeição explicável — marque um fato como
superseded_byoutra nota ou dê a ele uma data devalid_until, e a busca o retém por padrão (mesmo se forlocked) — e então entrega ao agente uma listaexcludeddo que foi ignorado, cada um com um motivo ("expired 2026-06-01"). Umbrain_supersedeatômico aposenta o fato antigo e vincula o novo em um único commit, para que adicionar-e-aposentar não possa divergir. Essa é a diferença entre um agente que lembra e um que sabe o que é ainda verdade. - Guardas de contradição no momento da escrita — a classificação por autoridade corrige a leitura; estas impedem o cofre
de aceitar a contradição em primeiro lugar. Engram se recusa a criar uma segunda nota ativa sobre um
assunto que uma nota ativa já cobre (o bug
acme-pricing-2026.md-ao-lado-de-acme-pricing.md) e aponta o agente parabrain_supersedeem vez disso; recusa-se a sobrescrever uma nota que o chamador não leu; e avisa quando umstatus:não é uma palavra que o modelo de classificação conhece, para que um erro de digitação não possa silenciosamente remover a autoridade de uma nota. - Trilho de auditoria + controle de acesso — cada escrita é atribuída no git ao token ou humano que a fez, com diffs por arquivo expansíveis no feed de atividade. Dê a um agente um token somente leitura e ele nunca vê nem as ferramentas de escrita; um token de escrita pode criar, editar, mover e arquivar.
- O Curador (opcional) — o harness de agente integrado do Engram sobre seu cofre. Converse com suas
notas (respostas fundamentadas, citações com wikilinks). Ou entregue a
brain_captureum despejo bruto — uma nota de reunião, um transcrição de voz — e um loop agêntico pesquisa o que já existe, então arquiva, mescla ou arquiva e retorna um manifesto do que tocou. Ele lê antes de sobrescrever e nunca exclui. Opus / Sonnet / Haiku, sua chave. - Nativo de markdown —
.mdsimples + frontmatter YAML +[[wikilinks]]. Coloque um cofre Obsidian existente e ele simplesmente funciona. - Com suporte a git — commit e push automáticos opcionais de cada mudança. Histórico completo, sem aprisionamento, seus dados vivem no seu repositório.
- Sem banco de dados — os arquivos são a fonte da verdade; um índice MiniSearch em memória + um grafo de wikilinks portado alimentam busca e backlinks. Nada para provisionar.
- Multi-workspace — conecte vários repositórios de cofre (URL + token ou OAuth do GitHub), renomeie, alterne o ativo ou remova-os — tudo pela interface.
- Auto-hospedado — um contêiner Docker. Railway / Render / Fly / qualquer host com volume. Não serverless (precisa de um volume persistente, um observador de arquivos e um índice de longa duração).
- Autenticação de equipe — SSO do Google + lista de permissões de e-mail para o painel; tokens bearer por agente — ou OAuth para conectores personalizados do Claude.ai — para MCP, criados/revogados na interface. Segredos criptografados em repouso.
- Configuração em tempo de execução — alterne git-sync e o Curador direto da página inicial; gerencie autor de commit, chaves, e OAuth em Configurações — sem reimplantar.
Funciona com
Qualquer cliente que fale o Model Context Protocol — um endpoint, autenticação por token bearer. Mais usados primeiro:
- Claude Code — o CLI de codificação agêntica da Anthropic
- Codex — o agente de codificação da OpenAI (CLI + IDE)
- Hermes — runtime de agente autônomo sempre ativo
- openclaw — agente de codificação de código aberto
- Cursor — editor de código com IA
- Cline — agente do VS Code
- Windsurf — IDE agêntica
- Claude Desktop — o aplicativo de desktop da Anthropic
- …e qualquer outro cliente MCP — Continue, Goose, Zed, Amp e o resto
Se fala MCP, pode ler e escrever no Engram como memória compartilhada.
Início rápido
Quer testar primeiro? Há uma demonstração ao vivo — aberta, sem cadastro, reinicia algumas vezes por dia. Quebre à vontade.
bun install
bun dev # http://localhost:3000 — runs against ./sample-vault
Aponte-o para seu próprio cofre:
VAULT_DIR=/path/to/your/obsidian-or-markdown/vault bun dev
Duas maneiras de executar
-
Modo hospedado (equipe): o painel + servidor MCP HTTP acima — auto-hospede uma vez, muitos agentes e colegas se conectam via
POST /api/mcp. Este é o modo principal. -
Modo local (stdio): um servidor MCP stdio simples sobre uma pasta, sem HTTP/auth/git — para uma única máquina, Claude Desktop / Cursor, ou a introspecção Docker de um registro:
bun run mcp:stdio /path/to/your/vault # defaults to ./sample-vaultMesmas ferramentas
brain_*. Construído a partir deDockerfile.mcp.
Cada modo é fornecido como sua própria imagem, e eles não são intercambiáveis:
| Imagem | Modo | Use para |
|---|---|---|
ghcr.io/rwnalds/engram-app | HTTP — painel + /api/mcp | Railway, Render, Fly, qualquer host. Este é o que você implanta. |
ghcr.io/rwnalds/engram | stdio — JSON-RPC em stdin/stdout | Claude Desktop, Cursor, registros MCP. Nunca abre uma porta. |
| Implantar a imagem stdio como um serviço web é o único erro que vale a pena destacar: ela só consegue retornar 502, porque não há nada escutando. Agora ela se recusa a iniciar em um PaaS e informa isso a você. |
Ferramentas MCP
Os agentes só veem o vault ativo — nenhuma ferramenta de repo, workspace ou GitHub é exposta.
Um token com escopo read vê apenas as ferramentas de leitura. brain_capture aparece apenas quando o Curator está full.
| Ferramentas | |
|---|---|
| Leitura | brain_search · brain_read · brain_list · brain_recent · brain_tree · brain_backlinks · brain_graph · brain_schema |
Escrita (precisa de um token com escopo write) | brain_write · brain_edit · brain_append · brain_move · brain_supersede · brain_create_folder · brain_delete |
Conecte um agente (a página Connect do dashboard mostra o comando e o token exatos):
claude mcp add --transport http engram https://<host>/api/mcp \
--header "Authorization: Bearer <token>"
Implantação
Roda em qualquer lugar onde você possa executar um contêiner Docker com um volume persistente — Railway, Render, Fly ou sua própria máquina. Serverless (Vercel) não funciona: o Engram mantém um volume, um observador de arquivos e um índice em memória que uma função serverless não consegue manter ativo.
- Implante este repo (raiz
Dockerfile), monte um volume em/data, definaENGRAM_DATA_DIR=/data. - Conecte seu(s) repo(s) de vault no dashboard (Workspaces) — por URL + token, ou GitHub OAuth.
- Entre com o Google, crie tokens MCP na página Connect e aponte seus agentes para a URL.
A maior parte da configuração em tempo de execução (git-sync, captura por IA, GitHub OAuth, nome do app) é editável na página Settings — apenas variáveis de bootstrap de auth/infra ficam no host. Configuração completa: DEPLOY.md.
- Railway: New Project → Deploy from GitHub repo → adicione um Volume em
/data. - Render: um clique via o
render.yamlincluído (Docker + um disco/data).
Implantando a partir de uma imagem pré-construída em vez do repo? Use ghcr.io/rwnalds/engram-app:latest — não engram:latest, que é o servidor stdio e não consegue responder HTTP. Defina o healthcheck para /api/health.
Perguntas frequentes
Como dou memória de longo prazo ao Claude Code?
Implante o Engram, conecte um vault markdown e claude mcp add o endpoint. As ferramentas brain_* permitem que o Claude Code pesquise, leia e escreva notas persistentes entre sessões.
Vários agentes de IA podem compartilhar uma base de conhecimento?
Sim. Cada agente aponta para a mesma URL MCP e lê/grava no mesmo vault ativo — essa é a ideia. Dê a cada agente seu próprio bearer token, read ou write — um token somente leitura não pode alterar suas notas.
Como faço para impedir um agente de citar fatos desatualizados?
Aposente o fato e a busca para de exibi-lo. Quando um valor muda, chame brain_supersede(old, new) — um commit atômico marca a nota antiga como superseded_by a nova, e ela fica oculta da busca por padrão (mesmo que seja locked). Ou defina valid_until: 2026-12-31 em uma nota e ela expira sozinha. Correspondências aposentadas não desaparecem silenciosamente: brain_search as retorna em uma lista excluded com um motivo ("expired 2026-06-01"), para que o agente possa dizer o que ignorou e por quê em vez de citar.
O que impede um agente de simplesmente adicionar uma segunda nota contraditória?
O Engram recusa a gravação. Ao ser informado de que "o preço agora é X", um agente que não consegue sobrescrever uma nota que nunca leu vai alegremente adicionar acme-pricing-2026.md ao lado de acme-pricing.md — nada é corrompido, e você agora tem duas notas ativas discordando sobre um número. Essa gravação é rejeitada com um ponteiro para brain_supersede, que aposenta a nota antiga e adiciona a nova em um único commit. Passe allow_conflict: true quando ambas as notas realmente pertencem.
Como sei o que um agente alterou? Cada gravação é commitada no git atribuída ao token ou humano por trás dela, e o feed de atividade do dashboard mostra diffs por arquivo — uma trilha de auditoria integrada para agentes autônomos.
Funciona com meu vault do Obsidian?
Sim. Ele lê markdown simples com frontmatter e [[wikilinks]], e renderiza callouts e backlinks no estilo Obsidian. Sem etapa de importação.
Preciso de um banco de dados vetorial? Não. O Engram usa busca de texto completo (MiniSearch) mais um grafo de wikilinks sobre markdown legível por humanos — sem serviço de embeddings, sem vector store para executar.
Posso conversar com minhas notas? Sim — ative o Curator opcional, um agente de chat que pesquisa e lê seu vault para responder com citações de wikilinks (Opus / Sonnet / Haiku). Ele é somente leitura no chat, então ajuda você a pensar sem alterar nada, e roda com sua própria chave da Anthropic.
Posso ver o que meus agentes alteraram? Sim — a visualização Activity lê o histórico git do seu vault e mostra cada alteração (agentes e colegas igualmente), expansível para diffs por arquivo. Como é apenas git, você obtém a trilha de auditoria completa de graça.
Meus dados ficam presos?
Não. São apenas arquivos .md em um repo git que você possui. Desligue o Engram e você ainda terá todas as notas e seu histórico completo.
Onde ele roda / é self-hosted? Você o hospeda. Um contêiner Docker em Railway / Render / Fly / qualquer VM com um volume. Suas chaves, seus dados.
Contribuindo
Issues e PRs são bem-vindos — especialmente onde o modelo de validade falha com um vault estruturado de forma diferente do meu.
- CONTRIBUTING.md — configuração, convenções e o checklist pré-PR.
- docs/curator.md — como funciona o loop do agente Curator opcional.
- SECURITY.md — por favor, relate vulnerabilidades em particular, não como uma issue.
bun install && bun dev
bun test # the ranking/authority suite, incl. the stale-truth fixtures
Se o Engram é útil para você, dar uma estrela no repo genuinamente ajuda outras pessoas a encontrá-lo.
Stack
Next.js 16 (App Router) · React 19 · TypeScript · Tailwind v4 · shadcn/ui · bun · MiniSearch · d3-force · MCP SDK. Licença MIT.
Palavras-chave: servidor MCP · Model Context Protocol · segundo cérebro para agentes de IA · memória de agente · memória de longo prazo para Claude Code · memória compartilhada para agentes de IA · base de conhecimento self-hosted · compatível com Obsidian · markdown · grafo de conhecimento · wikilinks · PKM · Zettelkasten · notas com backup em git · memória de agente Hermes · memória Cursor · RAG sem banco de dados vetorial · converse com suas notas markdown · feed de atividade de agente com backup em git · trilha de auditoria para agentes de IA · busca ciente de autoridade · tokens MCP somente leitura vs escrita · controle de acesso de agentes · notas auto-organizáveis · captura de notas por agentes · IA que arquiva suas notas · validade temporal · memória obsoleta · agentes citando fatos desatualizados · substituir · expiração de notas · memória compartilhada para uma equipe de agentes · alternativa ao Basic Memory · alternativa ao mem0.