Every AI coding agent forgets everything when the session ends. That’s the problem every “agent memory” tool is trying to solve — but they solve it in fundamentally different ways, and the differences matter more than the shared goal.
I run Vestige as my memory system, so I have a strong opinion on this space. When I looked at three newcomers — Pond, ai-memory, and Engram — the first thing that struck me is that they’re not actually competitors. They’re three different answers to three different questions, and only one of them is trying to do what Vestige does.
Let me break down each one, then the honest head-to-head.
The four, in one line each
| Tool | Language | Storage | The pitch |
|---|---|---|---|
| Pond | Rust | Local dir / S3 (Lance) | Archive every session, searchable + restorable |
| ai-memory | Rust | Markdown wiki in a git repo | Lifecycle handoffs between sessions |
| Engram | Go | Single SQLite + FTS5 file | One brain, agent-agnostic, zero deps |
| Vestige | (MCP) | Graph + embeddings + FSRS | Cognitive memory with scheduling and gating |
Pond: the archive, not the memory
Pond — Rust, Apache-2.0, pre-v1. Its thesis is explicit and it’s a good one: “the sessions themselves are the source of truth; memory is a derived view you can rebuild from an archive, but an archive can never be rebuilt from memories.”
Pond ingests every session from every tool (Claude Code, Codex, any client, any machine) losslessly into storage you own — a local dir or your own S3 bucket. It makes the whole corpus searchable and SQL-queryable, hands recall back to agents over MCP, and lets you restore any session into any client and continue it there.
The key distinction Pond draws itself is worth quoting:
- Session search (deja-vu, cass, ctx) = a search index over sessions
- Memory layers (Mem0, Letta) = extracted facts
- Pond = the whole session, value-complete, never pruned
Pond is deliberately not a memory layer — it’s the archive underneath one. It keeps the record; it doesn’t decide what you need.
ai-memory: the handoff wiki
ai-memory — Rust, MIT. Its pitch: “Quit Claude Code mid-task, start OpenAI Codex in the same directory, continue without re-explaining the architecture.”
The mechanism is lifecycle hooks. When a session ends, relevant observations become a coherent summary; the next agent receives a bounded handoff at session start. The result is a shared, persistent wiki compiled from sanitized lifecycle observations — plain markdown in a git repo, grep-able, openable in Obsidian, backed up with rsync.
Notable: no vector database to babysit. It’s markdown + git + handoffs. And it has the broadest agent support matrix I’ve seen — Claude Code, Codex, OpenCode, Cursor, Gemini CLI, Pi, Crush, Grok, Devin, and more, each with native lifecycle hooks.
The tradeoff: it’s about continuity between sessions, not deep recall. It hands off context; it doesn’t answer “how did we fix this three months ago?” the way a searchable archive does.
Engram: the single-binary brain
Engram — Go, single binary, zero dependencies. SQLite + FTS5 full-text search in ~/.engram/engram.db. Exposed via CLI, HTTP API, MCP server, and an interactive TUI. Works with any MCP-capable agent.
The pitch: “Your AI coding agent forgets everything when the session ends. Engram gives it a brain.” One binary, one SQLite file, no Node/Python/Docker. engram setup <agent> writes the MCP config and you’re done.
This is the closest in spirit to a classic memory layer — a persistent store the agent reads/writes over MCP. It’s simpler than the others (SQLite + FTS5, no vector DB by default), which is both its strength (dead simple, zero deps) and its limit (full-text search, not semantic).
Vestige: the cognitive one
Vestige — the memory system I actually run. It’s the odd one out, and deliberately so. Where the others store records (Pond), handoffs (ai-memory), or searchable facts (Engram), Vestige does cognitive memory:
- FSRS-6 scheduling — memories are spaced-repetition scheduled like flashcards; retrieval strength and retention are tracked per memory, so what you actually use gets strengthened and what you don’t decays.
- Semantic embeddings — retrieval is hybrid (keyword + semantic), so “how did we solve X” finds conceptually-related memories, not just exact matches.
- Graph-based dedup and supersession — related memories are linked, and when a new memory contradicts an old one, the old one is superseded rather than duplicated.
- Prediction-error gating — not every observation becomes a memory; only ones that matter (that would change future behavior) get stored. It’s memory with a filter, not a firehose.
Vestige’s thesis is the opposite of Pond’s: it’s a memory layer, not an archive. It stores what it decides you need, distilled and scheduled, not the whole record. You can’t rebuild the sessions from it — but you don’t have to, because it’s designed to carry the useful parts forward.
The honest head-to-head
These aren’t rivals. They occupy different layers:
Pond vs Vestige is the real tension. Pond says “keep everything, rebuild memory from the archive.” Vestige says “curate what matters, schedule it, supersede the stale.” They’re philosophically opposed — and honestly, they’re complementary. Pond is the archive (source of truth, never pruned); Vestige is the memory (distilled, scheduled, gated). You could run both: Pond for “what exactly did we do in session X,” Vestige for “what should I remember going forward.”
ai-memory is a different layer entirely — it’s about session continuity (handoffs between agents), not recall. It answers “where did I leave off” rather than “how did we solve this.” Useful, but not competing with Vestige’s recall.
Engram is the closest to a traditional memory store — SQLite + FTS5, agent reads/writes over MCP. It’s the simplest of the four, and the most conventional. It competes with Vestige only if you want a simple memory store and don’t need the cognitive scheduling/embeddings/gating that Vestige adds.
What this means for your stack
If you’re choosing one, the question is what you actually need:
- “I want to never lose a session and be able to search/restore any of them” → Pond. It’s the archive. Nothing else keeps the whole record.
- “I want continuity when I switch agents mid-task” → ai-memory. It’s the handoff layer.
- “I want a dead-simple persistent memory my agent reads/writes” → Engram. One binary, one file, zero deps.
- “I want a memory that learns what matters, schedules it, and surfaces the right thing at the right time” → Vestige. It’s the cognitive layer.
The mistake is treating them as interchangeable. They’re not. Pond and Vestige are arguably the most interesting pairing — the archive and the memory, the record and the distillation — and they don’t actually conflict. The others fill narrower niches.
The stack I actually run: deja-vu + Vestige + Obsidian
For my own setup, I don’t run one memory tool — I run three, each in a different layer, and that’s the honest answer to “which one should I pick?” It’s not one; it’s a stack.
- deja-vu — recall. A read-only session-search index (~12ms, FTS5). Answers “what did we do in session X” by searching the record of what happened. This is the lite version of Pond’s category — it’s a search index over sessions, not a full archive.
- Vestige — memory. The cognitive layer: FSRS-6 scheduling, semantic embeddings, graph dedup, prediction-error gating. Answers “what should I remember going forward” by curating what matters and making it stronger with use.
- Obsidian MCP — long-term notes. The durable, human-readable layer. When something is worth keeping permanently — a decision, a review, a reference — it lands in the vault as a markdown note with proper frontmatter. This is the layer that outlives all the agents.
Together they form a clean three-layer stack that maps onto the taxonomy:
| Layer | Tool | Answers | Category |
|---|---|---|---|
| Recall | deja-vu | “What did we do before?” | session search (lite archive) |
| Memory | Vestige | “What should I remember?” | cognitive memory |
| Long-term notes | Obsidian MCP | “What’s worth keeping forever?” | durable knowledge |
The key insight: the three don’t overlap. deja-vu is fast recall of the record. Vestige is scheduled, distilled memory that gets stronger with use. Obsidian is the permanent, human-readable archive that survives even if all the agents change. Each fills a slot the others don’t.
Where Pond fits in: if you ever want the recall layer to be a true archive — value-complete sessions, restorable cross-machine, never pruned — Pond is the upgrade to the deja-vu side. It would slot in underneath this stack as the durable archive, keeping deja-vu for fast local recall and Vestige for memory. But for day-to-day work, deja-vu + Vestige + Obsidian already covers recall, memory, and permanence.
The lesson from running this stack: don’t pick one memory tool — pick one per layer, and make sure they don’t collide. That’s what makes the stack work.
All facts fetched from each project’s README at publish time. Vestige, deja-vu, and Obsidian details from the author’s own running stack.