Memory plugins for coding agents, compared

where deja sits among the memory tools

There are a lot of AI memory systems. Most solve a different problem than deja: they give applications a memory API you call from code, or wrap an agent runtime around their own store. deja is narrower — it makes the transcripts your coding agents already write to disk searchable, and serves them back to those agents. That one difference (retroactive indexing vs forward capture) drives most of the table below.

deja-vuMem0LettamemUMemoriclaude-memagentmemory
What it isindex over agent transcriptsmemory API for appsagent runtime (this repo now points at letta-code)memory filesystemSQL memory SDKClaude Code plugincapture daemon
Starts with your history✓ retroactive—————✓ imports Claude Code JSONL
Capture stepnone neededAPI callsits runtimeagent distillsSDK wraphooks + LLMhooks
Stored asverbatim, redactedLLM factsmemory blocksmarkdownSQL rowsLLM summariesevents + vectors
Needs LLM/embedding keynoyesyesyesyesyesmodel or API
Background processnoneserver / cloudserverserver / cloudcloud by default, your own database opt-inworkerdaemon, ports
Coding agents43 native parsers (Claude Code, Codex, opencode, Cursor, Goose, OpenClaw…)via SDK/MCPown runtimeadaptersMCP: Claude Code, Cursor, Codex, Warp, AntigravityClaude Code, Codex, Cursor, opencode, Windsurf, Antigravity, Grok Bot, OpenClawvia hooks
Cross-machine sync✓ SSH, no cloudcloudserver-sidecloud / self-hostcloud, or your own databasecloud (cmem.ai)peer-to-peer mesh
Recall provenance✓ log + receipts—partial—queryable rowsviewerdashboard
Retrievaltiered lexical, optional embeddingsvector + graphagent + vectorembeddingsSQL + vectorvectorhybrid RRF
Benchmark, harness in repo88.1% hit@1 LME-S (470q cleaned) · measured · day zero vs seven toolsself-reportedresearch lineage—self-reported—LME-S 95.2% R@5, harness in repo
Installone binarypip + keysnpmpip / servernpm or pip, plus keysnpx, or Claude’s plugin installnpx
LicenseMITApache-2.0Apache-2.0Apache-2.0Apache-2.0Apache-2.0Apache-2.0
Benchmark rows are not directly comparable across systems: most projects publish end-to-end QA accuracy (an answering LLM on top of retrieval), deja publishes retrieval-only numbers with the harness in-repo so you can rerun them. Competitor cells reflect their public READMEs, re-read on September 24, 2026 — corrections welcome, open an issue.

The wider field

The table above is the six systems people ask us about, which are mostly a different shape of tool. Asked for a broader atlas (#310), here are six memory projects outside that set, on the same axes: the four largest, plus the two a reader is most often pointed at when they ask for a local memory layer. Cells are from each project’s own README, re-read on September 25, 2026, and so are the star counts.

deja-vuMemPalacecogneeGraphiti / ZepHindsightai-memorybasic-memory
What it isindex over agent transcriptslocal-first memory storeknowledge-graph memory platformtemporal knowledge graphmemory service with typed pathwaysmemory server for coding agentsMCP server over a markdown knowledge base
Starssee repo59.3k31.0k31.1k27.1k8.3k4.0k
Starts with your history✓ retroactive, 43 harnesses✓ mines Claude Code, Codex, Cursor———— hooks capture forward; the importer takes markdown wikispartial — import claude conversations and import chatgpt, from exports
Capture stepnone neededhooks, plus a mine/sweep backfillAPI callsAPI (episodes)API (retain)lifecycle hooks, silentthe agent writes notes
Stored asverbatim, redactedverbatim, in rooms and drawersgraph entities + embeddingsentities and edges with validity windowstyped facts + sparse/dense vectorsmarkdown pages in a git wiki, derived indexmarkdown notes with wikilinks, SQLite index
Needs LLM/embedding keynono — ships a local model (~300 MB)yesyesyesno — zero-LLM default, local embeddings opt-inno — local FastEmbed model; reranking downloads a second one
Background processnonenone; a vector store backend (ChromaDB by default)Postgres + pgvector, or Neo4jNeo4j, FalkorDB or NeptuneDocker service, or embeddeda server you run (Docker or a wrapper script)a sync process; hosted tier optional
Retrievaltiered lexical, optional embeddingssemantic, optional keyword and recency boosts, optional LLM rerankgraph + vector, strategy picked for youembeddings + BM25 + graph traversalhybrid sparse/dense over memory banksfull-text, optional local embeddingsfull-text + vector, optional cross-encoder rerank
Published retrieval numbers88.1% hit@1 / 97.4% hit@5 LME-S on the 470-question cleaned set, 87.4% / 97.2% on all 500, LoCoMo 70.5% hit@1 / 95.6% R@10, harness in repo96.6% R@5 LongMemEval (500q, no LLM); 88.9% R@10 LoCoMo0.79 on BEAM at 100k tokens; LME-S measured belownone in README; a Zep paper reports separatelya LongMemEval leaderboard and an arXiv paper, end-to-end rather than retrieval-onlyLongMemEval-S hit@5 0.666 zero-LLM, 0.815 with local embeddings, harness in reponone in the README
Installone binaryuv tool installuv pip install + a databasepip + a graph databasedockerDocker image, or the install scriptuv tool install basic-memory
LicenseMITMITApache-2.0Apache-2.0MITMITAGPL-3.0
On that benchmark row: MemPalace publishes 96.6% R@5 on LongMemEval (500 questions, semantic search, no LLM) and 88.9% R@10 on LoCoMo. Our harness scores 97.2% hit@5 and 98.6% hit@10 on the same 500 questions, and 95.6% R@10 on LoCoMo. The metrics are defined slightly differently and neither of us has rerun the other's harness, so read those as close rather than settled. What we can say about ours is that it is in this repo and you can run it.

cognee on LongMemEval-S, measured

cognee's README cites BEAM, not a LongMemEval retrieval number, so we ran it on 15 October 2026: the first 20 non-abstention questions of LongMemEval-S cleaned, scored by the same -score path as our harness. All twenty are single-session-user, the easiest question type. cognee 1.6.4 ran on an Apple M4 with every model served by Ollama, in chunks mode: its own chunker and nomic-embed-text embeddings, with the graph-extraction task removed.

cognee 1.6.4, chunksdeja-vu
hit@165%90%
hit@575%95%
MRR0.6990.925
Ingest, one 50-session haystack~15 s~0.27 s
Query, median52 ms6 ms

The default cognify, the one that builds the graph, is not scored. With llama3.1:8b on the same machine, one haystack is 137 chunks and about 274 LLM calls, ~430k input and 77k output tokens by cognee's own dry-run estimate; at the call rates we saw that is three to six hours per question. On a three-session probe that did finish, the graph held topic entities (a flu shot, a budgeting app, a river-crossing puzzle) joined by generic relations. The fact the question asked for, the user's degree, was neither an entity nor an edge; the hit came from chunk text and summaries, and no edge linked one session to another.

An 8B local model extracts worse than the GPT-class model cognee uses by default, so read the graph finding as a lower bound for cognee, not its ceiling. This is n=20 of one question type, and we maintain deja. The drivers and the 20 question ids are in scripts/lmecompare; if a setting we missed changes the result, open an issue and we will re-run it.

The other tools that read the same files

A second group is closer to deja than any memory system: tools that also read the session files coding agents leave on disk. They are built for a person doing the looking — a window or a terminal you open when you want to find something. Cells are from each project's own README, re-read on 24 September 2026. The agentsview column replaces its archived predecessor agent-session-viewer; two of its cells — the MCP server and the output masking — are now documented outside the README, in docs/ and in the source, and are marked from there.

deja-vucassAgent Sessionsagent-historiancasragentsview
What it isindex the agent queriesTUI and CLI over one timelinemacOS appCLI for agentssession converterlocal archive with a web UI
Agents read4326 in its pipeline, 32 connectors16 CLIs5 CLIsClaude, Codex, Gemini and more64 in its table
Recall without being asked✓ hooks at session start, before an edit, after a failure—————
Serves an agent✓ MCP + skill✓ MCP—✓ CLI and a skill, MCP dropped on purpose—✓ MCP, read-only
Secrets stripped at index time✓✓———— masked on output, --reveal shows them
Cross-machine sync✓ SSH, no cloud✓ SSH and rsync, with provenance———✓ a copied directory, PostgreSQL, DuckDB, ClickHouse
Also doesblame, fix, how, digeststimeline browsinglive quota burn per session, priced per modelproject or global scoperesume a Codex session inside Claude Codetoken-cost and activity dashboards, semantic search through an embeddings endpoint
Written inGo, one binaryRustSwift, macOS onlyTypeScriptRustGo

One more belongs here since September 2026: Hugging Face's funes reads existing transcripts of Claude Code, Codex, pi and Hermes into a local vector index with a reranker, and serves an agent over MCP and per-turn hooks — the closest thing to deja's shape. Measured on the day-zero corpus: 31 minutes to index what deja indexes in under twenty seconds, 8.6 s a query against 97 ms, and it does not rank ahead of deja at any depth, even with its recency weighting off (17 against 36 at rank five). Four harnesses against forty-three, and nothing arrives at a failed command or a file about to be edited. ctx is the nearest sibling in shape — a Rust lexical index over thirty-nine providers' files, with MCP and a blame of its own — and on the same corpus it finds a little over a third of deja's sessions at rank one and rank five and about half at fifty (hit@1 7, found@50 34) at 1.0 s a query; its automatic setup indexes none of the directory and needs an explicit import, on 1.4.12 and again on 1.6.3.

The row that matters is the third one. Every tool here can find the session you are thinking of; deja is the one where nobody has to be thinking of it — the hook fires at session start and before an edit, so the earlier decision arrives whether or not anyone remembered to look. That is a different job from browsing, and on browsing several of these are better than we are.

When to pick something else

Honest routing, because the categories genuinely differ:

Mem0 / Memori — you are building an application and want to give your users memory through an API. deja has no SDK; it is not for app-embedded memory.

Letta — you want a full agent runtime with self-editing memory and you're happy living inside it. deja is the opposite bet: memory only, bring whatever agent you already use.

memU — you want curated, distilled knowledge files and don't mind the agent doing the distilling. deja keeps the verbatim record and searches it instead.

claude-mem — you prefer compressed summaries over raw history. It installs into Claude Code, Codex, Cursor, opencode, Windsurf, Antigravity, Grok Bot and OpenClaw gateways; deja parses 43 agents and keeps recall lossless. The two side by side.

agentmemory — it publishes 95.2% R@5 on LongMemEval-S with the harness in its own repository, imports the Claude Code transcripts you already have, and syncs peer to peer. It wants a daemon on ports and a model or an API key; deja is one binary with neither, and reads forty-three harnesses rather than one. On the day-zero corpus the two are measured side by side.

MemPalace — the closest overlap by far, and the honest comparison is narrow: it also reads Claude Code sessions off disk and also keeps them verbatim. It brings a local embedding model and a vector store; deja is one binary with neither, parses 43 harnesses rather than three, and adds the things built around a code history specifically — deja blame, SSH sync, sanitized digests. If you want semantic paraphrase matching and don't mind a Python install with a 300 MB model, theirs is the better fit.

cognee / Graphiti — you want a knowledge graph with entities, relationships and time-valid facts to reason over, and you accept a database and an LLM key as the price. deja does not build a graph; it searches what was said.

Hindsight — you want an agent to accumulate curated beliefs about the world over time, through an API you call. deja never writes memories of its own: it indexes the record your agents already produced.

cass — you want to sit and read across your own history, and you want the widest net: its pipeline names 26 and its connector list 32, against our 43 harnesses, in a TUI built for browsing a single timeline. It also serves an agent over MCP and strips secrets. deja's difference is the hook, not the search.

Agent Sessions — you are on a Mac and the question is where your quota went. It attributes 5-hour and weekly burn to the individual session, priced per model, which deja does not do at all. deja's own screen is a terminal search, with no quota view.

casr — you want to carry one session into a different agent and keep going with the same transcript. deja resumes a session in the tool that wrote it, or hands what it asked, settled and left open to another agent and starts it (o on the screen, deja handoff --exec on the CLI); it does not convert the transcript between formats.

A vector database + your own pipeline — you need semantic paraphrase matching above all. deja's lexical ladder loses to embeddings on pure paraphrase (we say so in the benchmarks); it wins on identifiers, error strings, and everything code-shaped, with no key and no daemon.

What only deja does

Across the systems we've studied, these have no equivalent elsewhere: déjà vu recurrence detection (a line naming the agent and age, "from Codex CLI, 4 months ago", when a prompt matches work any agent already solved); origin-trust scopes on imported memory; sanitized deja share digests; and the whole thing in one binary, with no model and no runtime, that you can scp.

This list used to open with "indexing history from before the tool was installed". It no longer does: MemPalace mines Claude Code, Codex and Cursor transcripts off disk too. Retroactive indexing is no longer ours alone either: agentmemory imports older Claude Code JSONL transcripts, and ctx imports existing histories from its own providers. It is still uncommon on this page rather than unheard of, and a page that claimed otherwise would be the wrong thing to trust.

Found this useful? Star deja-vu on GitHub.