devin-memory

Memória local-first anti-envenenamento para agentes de codificação: proveniência, versionamento, gate de quarentena e verificação.

Documentação

devin-memory

ci PyPI OpenSSF Scorecard M8ven Score Glama Score Listed on mcpservers.org MCP Registry

License: MIT Python 3.10+ GitHub stars Last commit devin-* ecosystem PRs welcome

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ós devin-orchestrator

Onde isso se encaixa

devin-memory

Renomeado (out 2026): este repositório foi movido de Icaro0310/devin-memory para Icaro0310/devin-brain — o pacote PyPI, os comandos CLI e o nome do servidor MCP permanecem devin-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/reflect sobre .devin/memory/memories.jsonl) — somente anexação, sem triagem, sem proveniência de sessão. devin-memory exporta 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

  1. Lado a lado: cada entrada pode carregar source_session_id + source_rowid, auditável contra o sessions.db do Devin via armazenamento somente leitura do devin-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.
  2. Sem Devin: sem sessions.db não há proveniência de sessão para auditar — o extra desaparece.
  3. 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 retain que dá a diretiva oposta sobre o mesmo assunto normalizado que uma entrada ativa existente é armazenado ao lado dela com um link conflicts_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.
  • extract escaneia o message_nodes de 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 para proposed, os suspeitos para quarantined. --auto-approve pula a etapa de revisão.
  • prime emite um bloco compacto de # devin-memory: recalled context (heuristic) dimensionado para um gancho de prompt. Entradas com escopo retain --workspace só 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. extract eleva frases com formato de palavra-chave de uma sessão para uma fila de revisão proposed — nada se torna ativo sem approve (ou --auto-approve). Para um pipeline de lições mais rico, veja devin-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. retain armazena o source_session_id/source_rowid reivindicado; verify audita isso contra um sessions.db real 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-memory para 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 via verify.
  • Você quer versionamento de memória — supersede/retract mantêm um histórico em vez de edições silenciosas.
  • Você quer permanecer compatível: export escreve o formato de linha memories.jsonl do 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 extract leia intenção — ele corresponde a sinais de palavras-chave e usa o padrão proposed precisamente 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.