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-vu | Mem0 | Letta | memU | Memori | claude-mem | agentmemory | |
|---|---|---|---|---|---|---|---|
| What it is | index over agent transcripts | memory API for apps | agent runtime (this repo now points at letta-code) | memory filesystem | SQL memory SDK | Claude Code plugin | capture daemon |
| Starts with your history | ✓ retroactive | — | — | — | — | — | ✓ imports Claude Code JSONL |
| Capture step | none needed | API calls | its runtime | agent distills | SDK wrap | hooks + LLM | hooks |
| Stored as | verbatim, redacted | LLM facts | memory blocks | markdown | SQL rows | LLM summaries | events + vectors |
| Needs LLM/embedding key | no | yes | yes | yes | yes | yes | model or API |
| Background process | none | server / cloud | server | server / cloud | cloud by default, your own database opt-in | worker | daemon, ports |
| Coding agents | 43 native parsers (Claude Code, Codex, opencode, Cursor, Goose, OpenClaw…) | via SDK/MCP | own runtime | adapters | MCP: Claude Code, Cursor, Codex, Warp, Antigravity | Claude Code, Codex, Cursor, opencode, Windsurf, Antigravity, Grok Bot, OpenClaw | via hooks |
| Cross-machine sync | ✓ SSH, no cloud | cloud | server-side | cloud / self-host | cloud, or your own database | cloud (cmem.ai) | peer-to-peer mesh |
| Recall provenance | ✓ log + receipts | — | partial | — | queryable rows | viewer | dashboard |
| Retrieval | tiered lexical, optional embeddings | vector + graph | agent + vector | embeddings | SQL + vector | vector | hybrid RRF |
| Benchmark, harness in repo | 88.1% hit@1 LME-S (470q cleaned) · measured · day zero vs seven tools | self-reported | research lineage | — | self-reported | — | LME-S 95.2% R@5, harness in repo |
| Install | one binary | pip + keys | npm | pip / server | npm or pip, plus keys | npx, or Claude’s plugin install | npx |
| License | MIT | Apache-2.0 | Apache-2.0 | Apache-2.0 | Apache-2.0 | Apache-2.0 | Apache-2.0 |
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-vu | MemPalace | cognee | Graphiti / Zep | Hindsight | ai-memory | basic-memory | |
|---|---|---|---|---|---|---|---|
| What it is | index over agent transcripts | local-first memory store | knowledge-graph memory platform | temporal knowledge graph | memory service with typed pathways | memory server for coding agents | MCP server over a markdown knowledge base |
| Stars | see repo | 59.3k | 31.0k | 31.1k | 27.1k | 8.3k | 4.0k |
| Starts with your history | ✓ retroactive, 43 harnesses | ✓ mines Claude Code, Codex, Cursor | — | — | — | — hooks capture forward; the importer takes markdown wikis | partial — import claude conversations and import chatgpt, from exports |
| Capture step | none needed | hooks, plus a mine/sweep backfill | API calls | API (episodes) | API (retain) | lifecycle hooks, silent | the agent writes notes |
| Stored as | verbatim, redacted | verbatim, in rooms and drawers | graph entities + embeddings | entities and edges with validity windows | typed facts + sparse/dense vectors | markdown pages in a git wiki, derived index | markdown notes with wikilinks, SQLite index |
| Needs LLM/embedding key | no | no — ships a local model (~300 MB) | yes | yes | yes | no — zero-LLM default, local embeddings opt-in | no — local FastEmbed model; reranking downloads a second one |
| Background process | none | none; a vector store backend (ChromaDB by default) | Postgres + pgvector, or Neo4j | Neo4j, FalkorDB or Neptune | Docker service, or embedded | a server you run (Docker or a wrapper script) | a sync process; hosted tier optional |
| Retrieval | tiered lexical, optional embeddings | semantic, optional keyword and recency boosts, optional LLM rerank | graph + vector, strategy picked for you | embeddings + BM25 + graph traversal | hybrid sparse/dense over memory banks | full-text, optional local embeddings | full-text + vector, optional cross-encoder rerank |
| Published retrieval numbers | 88.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 repo | 96.6% R@5 LongMemEval (500q, no LLM); 88.9% R@10 LoCoMo | 0.79 on BEAM at 100k tokens; LME-S measured below | none in README; a Zep paper reports separately | a LongMemEval leaderboard and an arXiv paper, end-to-end rather than retrieval-only | LongMemEval-S hit@5 0.666 zero-LLM, 0.815 with local embeddings, harness in repo | none in the README |
| Install | one binary | uv tool install | uv pip install + a database | pip + a graph database | docker | Docker image, or the install script | uv tool install basic-memory |
| License | MIT | MIT | Apache-2.0 | Apache-2.0 | MIT | MIT | AGPL-3.0 |
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, chunks | deja-vu | |
|---|---|---|
| hit@1 | 65% | 90% |
| hit@5 | 75% | 95% |
| MRR | 0.699 | 0.925 |
| Ingest, one 50-session haystack | ~15 s | ~0.27 s |
| Query, median | 52 ms | 6 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.
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-vu | cass | Agent Sessions | agent-historian | casr | agentsview | |
|---|---|---|---|---|---|---|
| What it is | index the agent queries | TUI and CLI over one timeline | macOS app | CLI for agents | session converter | local archive with a web UI |
| Agents read | 43 | 26 in its pipeline, 32 connectors | 16 CLIs | 5 CLIs | Claude, Codex, Gemini and more | 64 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 does | blame, fix, how, digests | timeline browsing | live quota burn per session, priced per model | project or global scope | resume a Codex session inside Claude Code | token-cost and activity dashboards, semantic search through an embeddings endpoint |
| Written in | Go, one binary | Rust | Swift, macOS only | TypeScript | Rust | Go |
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.
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.