reference

Substrate memory vs. the memory MCPs

A comparison between substrate memory and the family of memory-layer tools built for a single agent to extend or manage its own memory, including Mem0, Letta (the MemGPT lineage), and Zep.

Several tools now give a language model somewhere to keep what it has learned, each built around one agent saving what it did and recalling it later. Mem0, Letta, and Zep are three of the most widely discussed. Substrate memory shares the underlying goal of giving a stateless model continuity, and diverges on a specific axis: who is allowed to write to the memory, and what happens to a write that turns out to be wrong.

§01 · field's map

Three tools, three designs.

Independent comparisons of agent-memory tools published in 2026 converge on a similar three-way split.

Mem0 is a memory layer added to an existing agent. Letta is a runtime in which the agent's memory is part of its own execution state. Zep builds a temporal knowledge graph from conversation history. Each is real, shipping software, and none of the three is built around a graph that a population of agents write to and reason on together.

SystemModel
Mem0An extraction layer added to an existing agent: conversation is read after the fact and written to a memory store, then retrieved for that agent by similarity or recency.
Letta (MemGPT lineage)A self-hostable agent runtime with tiered memory (core, archival, recall). The agent manages its own memory through function calls, and supports memory blocks shared across a small number of attached agents.
ZepA temporal knowledge graph (the Graphiti engine) that timestamps facts extracted from conversation and models when a fact changes, scoped to one user's history with one agent.
§02 · fingerprint test

Not which recalls more. Who is allowed to write.

Coverage of this category is usually organized around recall accuracy: how much of what was said earlier a tool can retrieve when asked. LongMemEval, a benchmark built for that question, reports Zep’s Graphiti backend at 63.8% and Mem0 at 49.0%, both measured against GPT-4o. Those figures describe a real property: single-user, single-agent recall over a conversation history. Substrate memory is not built for that axis and has not been measured against it.

figureLongMemEval recall — the axis the field measures
Coverage of memory tools usually centers on recall accuracy. On LongMemEval (measured against GPT-4o), Zep’s Graphiti backend reports 63.8% and Mem0 49.0%. That is single-user, single-agent recall over a conversation history — a different property than the cross-session, multi-author record substrate memory is built for, and one substrate has not been measured against.LongMemEval, as cited in this section.

The question this page asks instead is who is allowed to write to the memory, and what happens to a write that later turns out to be wrong.

§03 · traced comparison

Letta.

Letta’s shared memory blocks come closest to what a substrate provides: a block can be created independently of any one agent, attached to several agents by ID, and read and written by all of them. The distinction is in what a write does. Letta’s own documentation describes updating a block as a full replacement of its content: the previous text is gone, and the same documentation flags concurrent updates to a shared block as an anti-pattern that can lose data, recommending that callers partition the string by agent ID to avoid collisions. Substrate memory’s equivalent of a wrong call is a new entry linked to the one it replaces with a supersedes relation; the earlier entry stays in the record, dated and attributed, rather than being overwritten. Both hold shared work memory. One is an append-only typed graph where a wrong call is superseded, not overwritten, and where a fleet of sessions writes concurrently; the other is a pinned flat string that a small number of agents take turns overwriting.

The same design difference shows up at scale. A shared memory block is documented as a primitive for a small number of attached agents. Vinculum’s own graph, by contrast, has recorded concurrent writes from a fleet peaking at 192 sessions in an hour. And because a shared block is pinned into every attached agent’s context window, it is bounded by that window’s size. Letta’s documentation recommends archiving older content or having an agent periodically summarize it once it grows too large, the same compaction problem a substrate avoids by keeping history outside the context window entirely.

§04 · traced comparison

Zep.

Zep’s Graphiti engine timestamps facts pulled from conversation and models state changes explicitly. A user who says they used to live in London and later moved to Tokyo produces a graph where the earlier fact is marked as superseded by the later one, rather than two facts a similarity search might return as equally current. That mechanism is close in spirit to how a substrate treats a reversed decision.

The difference is scope and authorship. Zep’s temporal facts describe one user’s attributes as understood by one agent across that user’s sessions, a personalization record. Substrate memory’s supersede chains describe decisions made by many different sessions and authors working on a shared project. The mechanism rhymes; the subject matter and the population writing to it do not.

§05 · traced comparison

Mem0.

Mem0 follows the more common pattern in this field: an extraction step reads a conversation after it ends and writes a summarized memory to a store, later retrieved for a single agent by similarity or recency. It offers an optional graph mode over that store, but its default is vector-first — retrieval by similarity, not traversal of relations an author asserted.

The deeper difference is not vector versus graph but when a memory is written, and by whom. Mem0’s model extracts memories from a transcript after a conversation ends, an instance of post-hoc extraction. Substrate memory’s entries are written as the reasoning happens, by the same session that made the call, a difference in timing and authorship rather than in whether a graph is involved.

§06 · where it sits

A fourth category.

Mem0, Letta, and Zep read as three answers to the same design question: how much of its own memory an agent should manage, and how. Mem0 answers by adding a layer outside the agent. Letta answers by making memory part of the agent’s own runtime. Zep answers by tracking one user’s facts over time. Each keeps the agent as the unit the memory belongs to.

Substrate memoryanswers a related but distinct question. It does not extend one agent’s memory; it describes a graph that a population of agents, each one short-lived, reads and reasons on together, and to which any of them may write. The graph, not any single agent, is what persists.

§07 · common questions

Common questions.

Does substrate memory outperform Mem0 or Zep on memory-recall benchmarks?

It has not been measured against LongMemEval or a comparable single-agent recall benchmark. Those benchmarks test a different property (personalization recall for one user and one agent) than the cross-session, multi-author supersession substrate memory is built to record.

Is a Letta shared memory block the same thing as a substrate?

It is the closest existing primitive: a block attached to several agents that all of them can read and write. It differs in how a write behaves (replacing the block's content rather than superseding it) and in how many agents it is documented to support at once.

Is Zep's temporal fact tracking the same mechanism as supersession?

The underlying idea, that a new fact can mark an earlier one as no longer current, is similar. Zep scopes this to one user's attributes across sessions with one agent. Substrate memory scopes it to decisions made across many sessions and authors on a shared project.