Skip to content
plugmcp
DirectorySkillsCategoriesBlog
EN/δΈ­ζ–‡
Sign inSign up
Home/Servers/Devin Memory

Devin Memory

I
by io.github.Icaro0310

Anti-poisoning memory for agents: provenance, conflicts, quarantine gate.

Power your agent

Add this server

The publisher's own command. Not a PlugMCP endpoint.

Local command
uvx devin-memory-mcp==0.3.1
Credentials from the publisher
  • DEVIN_MEMORY_DB β€” Path to memory.db (default: ./memory.db)
Provider
Claude Code
DEVIN_MEMORY_DB=<value> claude mcp add io.github.icaro0310-devin-memory -- uvx devin-memory-mcp==0.3.1

Run in a terminal.

Claude Desktop
{
  "mcpServers": {
    "io.github.icaro0310-devin-memory": {
      "command": "uvx",
      "args": [
        "devin-memory-mcp==0.3.1"
      ],
      "env": {
        "DEVIN_MEMORY_DB": "<value>"
      }
    }
  }
}

claude_desktop_config.json

Step-by-step: add this in Claude

Remote URL or a command on your machine? How the two installs differ

Run on PlugMCP

Host a copy with our keys and logs.

A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.

Launch

Related MCP

View more
  • FirecrawlπŸ”₯ Official Firecrawl MCP Server - Adds powerful web scraping and search to Cursor, Claude and any other LLM clients.
  • N
    NotionToken-auth Notion MCP: pages, databases, blocks, comments, files. Runs headless in CI and agents.
  • Context7Context7 Platform -- Up-to-date code documentation for LLMs and AI code editors

Related skills

View all
  • reaReverse engineer anything with agents, from app behavior down to native binaries.
  • rea-changelog-updatePrepare or rewrite REA release changelogs and GitHub release notes from pinned Git history, with verified contributor thanks and Release Please synchronization.
  • rea-tool-designDesign or change REA investigation tools, CLI/MCP contracts, provider capabilities, and Evidence semantics.

Questions

How do I install Devin Memory?
Copy the stdio config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
Does Devin Memory need an API key?
The publisher lists these environment variables: DEVIN_MEMORY_DB.
What transport does Devin Memory use?
Devin Memory runs locally over stdio.
When was Devin Memory last checked?
Last checked 2026-10-16. Anti-poisoning memory for agents: provenance, conflicts, quarantine gate.

Anti-poisoning memory for agents: provenance, conflicts, quarantine gate.

Part of the DEVIN ecosystem
Track: Build Β· Nature: product
For: AI engineers, Developers, Data Scientists
Interface: CLI / Python library / MCP server / Service
Path: AI engineers Β· step 3/3 β€” after devin-orchestrator

Where this fits

  • Job: Build
  • Product: devin-brain
  • Packages: devin-memory
  • Mode: mixed
  • Foundation: devin-internals-spec
  • Ecosystem: awesome-devin Β· registry: devin-powerups

devin-memory

Renamed (Oct 2026): this repository moved from Icaro0310/devin-memory to Icaro0310/devin-brain β€” the PyPI package, CLI commands and MCP server name stay devin-memory; stars, issues and history are preserved by the GitHub redirect.

Unofficial community project. Not affiliated with, endorsed by, or sponsored by Cognition AI. "Devin" is a trademark of Cognition AI.

Linux Β· Personal Windows Β· Corporate Windows

Part of the awesome-devin ecosystem: the curated hub for the devin-* tools.

An anti-poisoning memory store for Devin: durable facts with provenance, versioning, and a quarantine gate β€” so agent memory can't be silently corrupted by a bad session or injected content.

The problem

Agent memory is a poisoning vector. Any tool that persists "facts" between sessions can be corrupted by a single bad session β€” an injected instruction or a pasted secret becomes a trusted belief in every future session, with no review step and no way to answer "where did this come from?".

Prior art

  • The Devin memory MCP (retain/recall/reflect over .devin/memory/memories.jsonl) β€” append-only, no screening, no session provenance. devin-memory exports to that exact line shape.
  • MemGPT / LangChain memory β€” persistence layers that optimize for recall, not for auditing or distrusting what was stored.

devin-memory adapts the memory-store idea; it adds the parts those tools don't have: a quarantine gate and provenance back to real session rows.

What makes it Devin-native

  1. Side-by-side: every entry can carry source_session_id + source_rowid, auditable against Devin's sessions.db via devin-internals' read-only store β€” the memory MCP cannot verify that a claimed source session (or a specific message row) ever existed. The quarantine gate also screens every write for secret and injection shapes.
  2. No-Devin: without sessions.db there is no session provenance to audit β€” the extra disappears.
  3. One sentence: it's a memory store that remembers where each memory came from β€” and quarantines suspicious ones until a human releases them.

Install

Python β‰₯ 3.10 required; install with uv (recommended) or pipx.

uv tool install 'devin-memory[mcp]'

or with pipx (alternative):

pipx install 'devin-memory[mcp]'

For development:

pip install -e ".[dev]"
pytest

Usage

# 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
devin-memory retain "..." --expires-at 2026-12-31T00:00:00Z  # TTL: drops
                                   # out of recall/prime after this instant

# Keyword-ranked recall β€” returns active, unexpired entries only;
# scores are weighted by recency decay so fresh memories outrank stale ones
devin-memory recall "ci status" [--json] [--limit 5] [--tags a,b]
devin-memory recall "ci status" --include-expired  # also surface expired

# 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
devin-memory quarantine --digest [--json]        # audit hash (read-only)

# 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" [--expires-at <iso>]
                                          # default: inherit old expiry
devin-memory retract <id>
devin-memory list [--status active|proposed|quarantined|retracted] [--json]
devin-memory compact [--json]   # dedup report (dry-run)
devin-memory compact --apply    # retract copies + vacuum the file

# 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

MCP server

devin-memory is also a real MCP server (stdio) β€” the same retain/recall pipeline with the quarantine gate on every write, callable from Devin, Claude Desktop, Cursor or any MCP client:

pipx install "devin-memory-mcp"

The devin-memory-mcp console script also ships inside the base devin-memory dist, so a bare uv tool install devin-memory (no extra) leaves a script that exits with error: The MCP server needs the 'mcp' extra β€” recovery steps live in the Troubleshooting section of each platform guide (Linux, Personal Windows, Corporate Windows).

Client config:

{
  "mcpServers": {
    "devin-memory": {
      "command": "devin-memory-mcp",
      "args": ["--db", "/path/to/memory.db"]
    }
  }
}

The same stdio server registers in other MCP hosts:

Zed β€” context_servers in settings.json:

{
  "context_servers": {
    "devin-memory": {
      "command": { "path": "devin-memory-mcp", "args": ["--db", "/path/to/memory.db"] }
    }
  }
}

JetBrains β€” Settings β†’ Tools β†’ AI Assistant β†’ Model Context Protocol β†’ Add:

{ "mcpServers": { "devin-memory": { "command": "devin-memory-mcp", "args": ["--db", "/path/to/memory.db"] } } }

Antigravity β€” ~/.gemini/config/mcp_config.json:

{ "mcpServers": { "devin-memory": { "command": "devin-memory-mcp", "args": ["--db", "/path/to/memory.db"] } } }

Tools: retain, recall, screen (dry-run the gate, no write), list, retract, supersede, quarantine, release, approve, conflicts, prime, verify, extract, compact, quarantine_digest. The release and approve promotion overrides are only registered when the server runs with DEVIN_MEMORY_MCP_PROMOTE=1 β€” otherwise promotion stays human-only via the CLI (devin-memory quarantine --release <id> / devin-memory approve <id>). The same flag gates extract's auto_approve parameter, which is forced off without the opt-in so an AI client cannot skip the review step. Every tool returns structured data or a {"error", "detail"} object β€” nothing raises through the transport. DEVIN_MEMORY_DB works as an alternative to --db.

VS Code: adapters/vscode/ ships an extension that registers this server with the editor's built-in MCP support (server definition provider, VS Code β‰₯1.102) β€” launch command, optional DEVIN_MEMORY_DB and workspace cwd are declared there; the promotion opt-in is pinned off so the editor-facing server keeps its non-promoting surface.

adapters/ is a self-contained Devin plugin root (adapters/.devin-plugin/plugin.json + adapters/skills/devin-brain/SKILL.md), installed with devin plugins install Icaro0310/devin-brain#adapters β€” it ships in the repo, not inside the wheel. The manifest launches the server through uvx --from 'devin-memory[mcp]' devin-memory-mcp; the promotion opt-in (DEVIN_MEMORY_MCP_PROMOTE) is never set, so the plugin-facing server keeps its non-promoting surface. To run against a checkout instead of PyPI, point a local manifest copy at uvx --from '.[mcp]' devin-memory-mcp.

Learn from sessions with devin-learning

This companion CLI extracts candidate lessons from a sessions.db and writes reviewable skill drafts. It does not install drafts into a workspace by default.

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 is a dry-run unless --apply is given; review --apply moves rejected drafts under _rejected/. The extractor reads session contents, so keep its output private until reviewed.

For a shareable summary there is weekly-report β€” the public surface of the loop. It emits weekly-YYYY-Www.md with aggregate counts only (lessons by theme, promoted learned-* skills, quarantine-pending buckets): no session text, ids or paths, so the file is safe to commit. It resumes from the devin-learning-weekly cursor, falling back to the last --days (default 7).

devin-learning weekly-report --sessions-db path/to/sessions.db --out ./docs/learning

Memory states

active Β· proposed (extracted, awaiting approve) Β· quarantined (screened or manually flagged, awaiting release) Β· retracted (withdrawn or superseded). Only active entries surface in recall/prime/export β€” quarantined content is never printed and never recalled.

An active entry can also carry expires_at (ISO-8601, set at retain/ supersede or changed via set_expires_at): once the instant passes the entry is excluded from recall/prime β€” excluded, not deleted, so it stays visible in list/export --all for audit (recall --include-expired opts out). Entries without expires_at never expire. Separately, recall applies an exponential recency decay to keyword scores (half-life 30 days, ops.RECALL_DECAY_HALF_LIFE_DAYS, tunable per call via half_life_days) β€” fresher memories win close calls while clearly stronger stale hits still rank first.

Conflicts, extraction and prime (heuristics)

  • Conflicts β€” a retain that gives the opposite directive about the same normalized subject as an existing active entry is stored alongside it with a conflicts_with link (devin-memory conflicts). The heuristic compares a stop-word-stripped "subject key" plus affirmative/prohibitive polarity β€” it deliberately misses reworded contradictions rather than mislinking facts.
  • extract scans one session's message_nodes (read-only via devin-internals) for durable-knowledge signals β€” user corrections ("na verdade", "actually", "the right way"), preferences ("always", "never", "sempre", "nunca"), discovered commands (backticked known tools) and paths. Candidates are screened like any write: clean ones land proposed, suspect ones quarantined. --auto-approve skips the review step.
  • prime emits a compact # devin-memory: recalled context (heuristic) block sized for a prompt hook. Entries scoped with retain --workspace only prime inside that workspace; entries written under a different machine profile never prime (the profile defaults to corporate β€” fail-closed).
  • compact deduplicates: non-retracted entries sharing exact content + workspace + profile collapse to one survivor β€” the liveliest status wins (active > proposed > quarantined), ties keep the oldest row. The other copies become retracted (never deleted β€” history and reasons stay auditable) and the survivor inherits the union of tags from copies sharing its status β€” quarantined or proposed tags never bleed into an active entry. Default is a dry-run report (live entries Nβ†’M, per-group keep/retracted ids, truncated content sha256 β€” never content); --apply executes and runs VACUUM on the file.
  • quarantine --digest prints a deterministic audit fingerprint of the lane: entry count, reason buckets by taxonomy family (free-form manual reasons collapse to manual:*), and a sha256 over the sorted per-entry fingerprints sha256(content)+sorted(reasons). Keyed on content, not row ids β€” two stores holding the same quarantined facts digest identically, and any membership or reason change moves it. Always read-only.

The store is ./memory.db by default β€” override with --db or DEVIN_MEMORY_DB. It is the only store this tool writes to; Devin's sessions.db, acp-messages/*.db and state.vscdb are only ever read.

Works with Devin alone (Devin-only mode)

devin-memory keeps a local memory store (JSONL) with provenance tracking and a quarantine lane β€” no external memory service, no network calls. Both console scripts (devin-memory and devin-learning) run on your machine only.

Honest caveat: write-time screening is a heuristic, not a guarantee β€” suspect entries land in quarantine for human review, so keep that habit.

Platform support

The memory store uses an explicit local SQLite path and the session database is provided with --sessions-db; no platform-specific path is assumed. Windows and Linux are supported and covered by CI.

Limitations

  • Extraction is heuristic, and proposed by default. extract lifts keyword-shaped sentences from one session into a proposed review queue β€” nothing becomes active without approve (or --auto-approve). For a richer lesson pipeline see devin-learning.
  • The screen is a filter, not a guarantee. Pattern-based secret detection and injection heuristics have both false positives (β†’ quarantine, one command to release) and false negatives. Run dedicated scanners (gitleaks, devin-redact) too β€” this complements them.
  • Recall ranking is keyword-based, deterministic and documented β€” no embeddings or semantic search in M1.
  • Provenance is recorded, not self-verifying. retain stores the claimed source_session_id/source_rowid; verify audits it against a real sessions.db afterwards. A bad actor can claim fake provenance β€” the point is that it is checkable.
  • Quarantined supersessions still retire the old version. If the replacement quarantines, review the queue (quarantine --release).
  • PyPI distributions: devin-memory for the CLI and optional MCP extra; devin-memory-mcp is the standalone MCP-registry package.

When to use this

  • You persist agent memory between sessions and want it distrust-by-default: every write screened, suspect entries quarantined for human release.
  • You need to answer "where did this memory come from?" β€” entries carry source_session_id/source_rowid, auditable via verify.
  • You want memory versioning β€” supersede/retract keep a history instead of silent edits.
  • You want to stay compatible: export writes the Devin memory MCP's memories.jsonl line shape.

When NOT to use this

  • You need semantic recall β€” ranking is keyword-based, no embeddings.
  • You expect the screen to catch everything β€” it is a heuristic filter; run dedicated scanners (gitleaks, devin-redact) alongside.
  • You expect extract to read intent β€” it matches keyword signals and defaults to proposed precisely because heuristics err.

FAQ

How do I stop agent memory from being poisoned by a bad session? Use devin-memory retain instead of appending to a raw store. Every write is screened for secret and injection shapes β€” suspect entries land in quarantine and only become active after a human runs quarantine --release <id>.

Can devin-memory prove a memory came from a real session? Yes, via recorded provenance. retain --source-session <id> --source-rowid <n> stores the claimed origin, and devin-memory verify <id> --sessions-db <path> audits it read-only against Devin's actual sessions.db β€” a fabricated source is checkable, not silently trusted.

Does devin-memory replace the Devin memory MCP? It complements it. The MCP is append-only with no screening; devin-memory adds quarantine, provenance and versioning, and devin-memory export --out memories.jsonl produces the exact line shape the MCP reads.

License

MIT β€” see LICENSE.

How do I install Devin Memory?
Copy the stdio config for Cursor, Claude Desktop, Claude Code, or VS Code on this page. It uses the publisher's install, not a PlugMCP proxy.
Does Devin Memory need an API key?
The publisher lists these environment variables: DEVIN_MEMORY_DB.
What transport does Devin Memory use?
Devin Memory runs locally over stdio.
When was Devin Memory last checked?
Last checked 2026-10-16. Anti-poisoning memory for agents: provenance, conflicts, quarantine gate.

No tool list yet. Remote servers get one after the first health check.

plugmcp

Plug any tool into any agent. MCP servers for people who do not write servers. Gateway for volume, n8n for apps.

  • github.com/TODO
  • x.com/TODO
  • linkedin.com/company/TODO

PlugMCP, 2026

Product
  • Browse
  • Install
  • Host your own
  • Pricing
  • Voice mode
  • Browser
Directory
  • All MCP servers
  • MCP Apps
  • Tools
  • Agent skills
  • Categories
  • New
  • Voice
  • Submit a server
Developers
  • Docs
  • Blog
  • Club
  • Work with us
  • What is MCP
  • What is WebMCP
  • Status
Company
  • About
  • Contact
  • Terms
  • Privacy
  • DPA