devin-memory
Memória local-first anti-envenenamento para agentes de codificação: proveniência, versionamento, gate de quarentena e verificação.
Documentação
Parte do ecossistema DEVIN
Trilha: Build · Natureza: produto
Para: engenheiros de IA, desenvolvedores, cientistas de dados
Interface: CLI / biblioteca Python / servidor MCP / serviço
Caminho: engenheiros de IA · passo 3/3 — apósdevin-orchestrator
Onde isso se encaixa
- Trabalho: Build
- Produto:
devin-brain - Pacotes:
devin-memory - Modo: misto
- Fundação:
devin-internals-spec - Ecossistema:
awesome-devin· registro:devin-powerups
devin-memory
Renomeado (out 2026): este repositório foi movido de
Icaro0310/devin-memoryparaIcaro0310/devin-brain— o pacote PyPI, os comandos CLI e o nome do servidor MCP permanecemdevin-memory; estrelas, issues e histórico são preservados pelo redirecionamento do GitHub.
Projeto comunitário não oficial. Não afiliado, endossado ou patrocinado pela Cognition AI. "Devin" é uma marca registrada da Cognition AI.
Linux · Windows pessoal · Windows corporativo
Parte do ecossistema awesome-devin: o hub curado para as ferramentas devin-*.
Um armazenamento de memória anti-envenenamento para Devin: fatos duráveis com proveniência, versionamento e um portão de quarentena — para que a memória do agente não possa ser silenciosamente corrompida por uma sessão ruim ou conteúdo injetado.
O problema
A memória do agente é um vetor de envenenamento. Qualquer ferramenta que persista "fatos" entre sessões pode ser corrompida por uma única sessão ruim — uma instrução injetada ou um segredo colado se torna uma crença confiável em todas as sessões futuras, sem etapa de revisão e sem como responder "de onde isso veio?".
Trabalhos anteriores
- O Devin memory MCP (
retain/recall/reflectsobre.devin/memory/memories.jsonl) — somente anexação, sem triagem, sem proveniência de sessão.devin-memoryexporta para esse formato de linha exato. - Memória MemGPT / LangChain — camadas de persistência que otimizam para recordação, não para auditoria ou desconfiança do que foi armazenado.
devin-memory adapta a ideia de armazenamento de memória; adiciona as partes que essas ferramentas
não têm: um portão de quarentena e proveniência de volta para linhas reais de sessão.
O que o torna nativo de Devin
- Lado a lado: cada entrada pode carregar
source_session_id+source_rowid, auditável contra osessions.dbdo Devin via armazenamento somente leitura dodevin-internals— o memory MCP não pode verificar se uma sessão de origem reivindicada (ou uma linha de mensagem específica) já existiu. O portão de quarentena também tria cada escrita em busca de formatos de segredo e injeção. - Sem Devin: sem
sessions.dbnão há proveniência de sessão para auditar — o extra desaparece. - Uma frase: é um armazenamento de memória que lembra de onde cada memória veio — e coloca as suspeitas em quarentena até que um humano as libere.
Instalação
Python ≥ 3.10 necessário; instale com uv (recomendado) ou pipx.
uv tool install 'devin-memory[mcp]'
ou com pipx (alternativa):
pipx install 'devin-memory[mcp]'
Para desenvolvimento:
pip install -e ".[dev]"
pytest
Uso
# Store a fact (screened on write; suspect content lands in quarantine)
devin-memory retain "CI is green on Windows + Linux" --tags ci,status
devin-memory retain "..." --source-session <session-id> --source-rowid <n>
devin-memory retain "..." --workspace /path/to/project # scope to a workspace
# Keyword-ranked recall — returns active entries only
devin-memory recall "ci status" [--json] [--limit 5] [--tags a,b]
# Quarantine lane: list, mark an existing entry, or release one
devin-memory quarantine # list with reasons
devin-memory quarantine <id> [--reason manual:x] # mark entry as quarantined
devin-memory quarantine --release <id> # human override -> active
# Contradictions: a conflicting retain is linked, not overwritten
devin-memory conflicts [--json] # (newer, older) pairs; resolve with
# supersede / retract / quarantine <id>
# Mine a session for durable knowledge -> proposed entries (inactive
# until reviewed); extraction is heuristic — see "Limitations"
devin-memory extract <session-id> --sessions-db path/to/sessions.db
devin-memory extract --latest --sessions-db path/to/sessions.db [--auto-approve]
devin-memory list --status proposed # review queue
devin-memory approve <id> # proposed -> active
# Context block for a UserPromptSubmit hook — active entries only,
# filtered by workspace + machine profile, bounded by ~4 chars/token
devin-memory prime [--workspace PATH] [--max-tokens N]
# Versioning and housekeeping
devin-memory supersede <id> "corrected fact"
devin-memory retract <id>
devin-memory list [--status active|proposed|quarantined|retracted] [--json]
# Audit an entry's provenance against a real sessions.db (read-only)
devin-memory verify <id> --sessions-db path/to/sessions.db
# Export active memories to a memory-MCP-compatible JSONL
devin-memory export --out memories.jsonl
Servidor MCP
devin-memory também é um servidor MCP real (stdio) — o mesmo pipeline de reter/recordar
com o portão de quarentena em cada escrita, chamável a partir de Devin,
Claude Desktop, Cursor ou qualquer cliente MCP:
pipx install "devin-memory-mcp"
Configuração do cliente:
{
"mcpServers": {
"devin-memory": {
"command": "devin-memory-mcp",
"args": ["--db", "/path/to/memory.db"]
}
}
}
Ferramentas: retain, recall, screen (teste do portão sem escrita), list,
retract, supersede, quarantine, release, approve, conflicts,
prime, verify, extract. Cada ferramenta retorna dados estruturados ou um
objeto {"error", "detail"} — nada gera exceção pelo transporte.
DEVIN_MEMORY_DB funciona como alternativa ao --db.
Aprenda com sessões usando devin-learning
Este CLI complementar extrai lições candidatas de um sessions.db e escreve
rascunhos de habilidades revisáveis. Ele não instala rascunhos em um espaço de trabalho por padrão.
devin-learning extract --sessions-db path/to/sessions.db --out ./learning-drafts
devin-learning review --out ./learning-drafts
# After reviewing drafts, explicitly allow output to a live skill directory:
devin-learning extract --sessions-db path/to/sessions.db --out .devin/skills --apply
review é um teste sem escrita, a menos que --apply seja fornecido; review --apply move rascunhos
rejeitados para _rejected/. O extrator lê o conteúdo da sessão, então mantenha sua
saída privada até a revisão.
Estados de memória
active · proposed (extraído, aguardando approve) · quarantined
(triado ou sinalizado manualmente, aguardando release) · retracted (retirado ou
substituído). Apenas entradas active aparecem em recall/prime/export —
conteúdo em quarentena nunca é impresso e nunca é recordado.
Conflitos, extração e prime (heurísticas)
- Conflitos — um
retainque dá a diretiva oposta sobre o mesmo assunto normalizado que uma entrada ativa existente é armazenado ao lado dela com um linkconflicts_with(devin-memory conflicts). A heurística compara uma "chave de assunto" sem palavras de parada mais polaridade afirmativa/proibitiva — ela deliberadamente perde contradições reformuladas em vez de vincular fatos incorretamente. extractescaneia omessage_nodesde uma sessão (somente leitura via devin-internals) em busca de sinais de conhecimento durável — correções do usuário ("na verdade", "actually", "the right way"), preferências ("always", "never", "sempre", "nunca"), comandos descobertos (ferramentas conhecidas entre crases) e caminhos. Candidatos são triados como qualquer escrita: os limpos vão paraproposed, os suspeitos paraquarantined.--auto-approvepula a etapa de revisão.primeemite um bloco compacto de# devin-memory: recalled context (heuristic)dimensionado para um gancho de prompt. Entradas com escoporetain --workspacesó fazem prime dentro desse espaço de trabalho; entradas escritas sob um perfil de máquina diferente nunca fazem prime (o perfil padrão écorporate— falha fechada).
O armazenamento é ./memory.db por padrão — substitua com --db ou
DEVIN_MEMORY_DB. É o único armazenamento em que esta ferramenta escreve; os
sessions.db, acp-messages/*.db e state.vscdb do Devin são apenas lidos.
Funciona com Devin sozinho (modo somente Devin)
devin-memory mantém um armazenamento de memória local (JSONL) com rastreamento de proveniência e
uma faixa de quarentena — sem serviço de memória externo, sem chamadas de rede. Ambos os scripts
de console (devin-memory e devin-learning) rodam apenas na sua máquina.
Aviso honesto: a triagem no momento da escrita é uma heurística, não uma garantia — entradas suspeitas vão para a quarentena para revisão humana, então mantenha esse hábito.
Suporte de plataforma
O armazenamento de memória usa um caminho SQLite local explícito e o banco de dados de sessão é
fornecido com --sessions-db; nenhum caminho específico de plataforma é assumido. Windows
e Linux são suportados e cobertos por CI.
Limitações
- A extração é heurística e proposta por padrão.
extracteleva frases com formato de palavra-chave de uma sessão para uma fila de revisãoproposed— nada se torna ativo semapprove(ou--auto-approve). Para um pipeline de lições mais rico, vejadevin-learning. - A triagem é um filtro, não uma garantia. A detecção de segredos baseada em padrões
e as heurísticas de injeção têm tanto falsos positivos (→ quarentena, um
comando para liberar) quanto falsos negativos. Execute scanners dedicados
(gitleaks,
devin-redact) também — isso os complementa. - A classificação de recordação é baseada em palavras-chave, determinística e documentada — sem embeddings ou busca semântica no M1.
- A proveniência é registrada, não autoverificável.
retainarmazena osource_session_id/source_rowidreivindicado;verifyaudita isso contra umsessions.dbreal depois. Um ator mal-intencionado pode reivindicar proveniência falsa — o ponto é que ela é verificável. - Substituições em quarentena ainda aposentam a versão antiga. Se a
substituição for para a quarentena, revise a fila (
quarantine --release). - Distribuições PyPI:
devin-memorypara o CLI e extra MCP opcional;devin-memory-mcpé o pacote independente do registro MCP.
Quando usar isso
- Você persiste memória do agente entre sessões e quer desconfiança por padrão: cada escrita triada, entradas suspeitas em quarentena para liberação humana.
- Você precisa responder "de onde veio essa memória?" — entradas carregam
source_session_id/source_rowid, auditáveis viaverify. - Você quer versionamento de memória —
supersede/retractmantêm um histórico em vez de edições silenciosas. - Você quer permanecer compatível:
exportescreve o formato de linhamemories.jsonldo Devin memory MCP.
Quando NÃO usar isso
- Você precisa de recordação semântica — a classificação é baseada em palavras-chave, sem embeddings.
- Você espera que a triagem capture tudo — é um filtro heurístico; execute scanners dedicados (gitleaks, devin-redact) junto.
- Você espera que
extractleia intenção — ele corresponde a sinais de palavras-chave e usa o padrãoproposedprecisamente porque heurísticas erram.
FAQ
Como evito que a memória do agente seja envenenada por uma sessão ruim? Use devin-memory retain em vez de anexar a um armazenamento bruto. Cada escrita é triada em busca de formatos de segredo e injeção — entradas suspeitas vão para a quarentena e só se tornam ativas após um humano executar quarantine --release <id>.
O devin-memory pode provar que uma memória veio de uma sessão real? Sim, via proveniência registrada. retain --source-session <id> --source-rowid <n> armazena a origem reivindicada, e devin-memory verify <id> --sessions-db <path> audita isso somente leitura contra o sessions.db real do Devin — uma fonte fabricada é verificável, não silenciosamente confiável.
O devin-memory substitui o Devin memory MCP? Ele o complementa. O MCP é somente anexação sem triagem; devin-memory adiciona quarentena, proveniência e versionamento, e devin-memory export --out memories.jsonl produz o formato de linha exato que o MCP lê.
Licença
MIT — veja LICENSE.