Recall vs Zep and Letta
Zep keeps a temporal knowledge graph where a changed fact is invalidated rather than deleted; Letta keeps an agent's memory as editable text blocks pinned into its prompt, with a vector store behind them. Recall keeps typed append-only records and works out what is current by rule. Two tables, the same eight rows.
Recall and Zep
| Recall | Zep (Zep Cloud and Graphiti) | |
|---|---|---|
| Storage ownership | Your own database: polign_db in your S3, GCS or Azure bucket, or PostgreSQL, MongoDB or Qdrant you already run. No vendor control plane. | Zep Cloud, a hosted service (BYO cloud on Enterprise). The open-source engine Graphiti runs on Neo4j, FalkorDB or Amazon Neptune you operate; Zep Community Edition is no longer supported. |
| Typed records | Yes. Each fact is a subject, a predicate from a registry (or coined on first use) and a typed value; text is extracted into those by a model you name. | A temporal knowledge graph: entity and edge types you can declare, facts as edges with valid_at, invalid_at, expired_at. |
| Corrections and supersession | By rule at read time: a single-valued predicate's newer statement replaces the older one; a text statement can name what it makes untrue. Reads carry what was replaced. | Yes, by the model: when information changes, the old fact's edge is invalidated, not deleted. Current facts are those with invalid_at unset. |
| Resume after restart | Yes. Working state, turns, outputs, pointers and in-flight tool calls per agent id, fenced by a lease; a new process resumes from a briefing. | No. Zep stores facts and conversation; agent state stays in your framework. |
| Shared across agents | Yes. One database, keys per namespace through recall serve, Kubernetes workload identity, packages for LangGraph, OpenAI Agents SDK, Pydantic AI, LiveKit, Vapi and MCP hosts. | Yes, one graph per user or group in Zep Cloud; Graphiti shares one database. |
| Audit and history | Append-only records with time and source; history, as_of reads, diff, and audit bundles replayable offline. | Edges keep their validity window; search_edges takes date filters on those fields. No as-of convenience read documented. |
| Self-hosted path | pip install polign-recall runs a local database; recall serve or the Helm chart for a shared one. Apache-2.0. | Graphiti (Apache-2.0) with a graph database and an LLM that supports structured output; no supported self-hosted Zep server. |
| Pricing | Free to self-host, no limits. Paid: design partner seat (60 days free, then $12k for 12 months) or a Production Agreement at $24k a year, flat. | Free $0 (10,000 credits a month, 2 projects); Flex $125 a month (50,000 credits, $25 per 10,000 over); Flex Plus $375 a month (200,000 credits); Enterprise custom with SOC 2 Type II, HIPAA BAA and BYO cloud. |
Recall and Letta
| Recall | Letta | |
|---|---|---|
| Storage ownership | Your own database: polign_db in your S3, GCS or Azure bucket, or PostgreSQL, MongoDB or Qdrant you already run. No vendor control plane. | Letta Cloud, or a Letta server you run on PostgreSQL with pgvector (the Docker image is no longer an actively maintained product surface). |
| Typed records | Yes. Each fact is a subject, a predicate from a registry (or coined on first use) and a typed value; text is extracted into those by a model you name. | Memory blocks: labeled text blocks with a character limit, pinned into the system prompt; archival memory is a vector database of passages. MemFS keeps memory as Markdown files in a git repository. |
| Corrections and supersession | By rule at read time: a single-valued predicate's newer statement replaces the older one; a text statement can name what it makes untrue. Reads carry what was replaced. | The agent edits its own blocks with tools (memory_replace, memory_rethink); setting a block's value replaces the whole block. No rule-based supersession of individual facts. |
| Resume after restart | Yes. Working state, turns, outputs, pointers and in-flight tool calls per agent id, fenced by a lease; a new process resumes from a briefing. | Yes, in Letta's own sense: the agent is a server-side stateful object whose blocks and message history persist between calls. Not a model for your own framework's agent. |
| Shared across agents | Yes. One database, keys per namespace through recall serve, Kubernetes workload identity, packages for LangGraph, OpenAI Agents SDK, Pydantic AI, LiveKit, Vapi and MCP hosts. | Yes. Blocks can be attached to several agents, so two agents share one block. |
| Audit and history | Append-only records with time and source; history, as_of reads, diff, and audit bundles replayable offline. | Blocks have no documented version history and concurrent writes can overwrite; MemFS commits every memory edit to git, which gives real history for that mode. |
| Self-hosted path | pip install polign-recall runs a local database; recall serve or the Helm chart for a shared one. Apache-2.0. | letta server on your own PostgreSQL. Apache-2.0. |
| Pricing | Free to self-host, no limits. Paid: design partner seat (60 days free, then $12k for 12 months) or a Production Agreement at $24k a year, flat. | Free $0 (5 MiB per memory repository); Pro $20 a month (up to 20 stateful agents, 50 MiB); API plan $20 a month plus $0.10 per active agent a month and $0.00015 per second of tool execution; Enterprise custom. |
When to pick the other tool
Pick Zep when the relationships between entities are the point: who reported to whom and when, which product belongs to which account, questions a graph answers better than a list of facts. Its validity windows are real and its Cloud comes with SOC 2 and a HIPAA BAA. The cost is the graph database to run, or the hosted service, and on the changing-facts scenario Graphiti took about 14.7k tokens and 14 seconds per saved message against Recall's 3.0k and 3.8.
Pick Letta when you want the agent itself to be the stateful object, hosted and managed as one, and are building on Letta's runtime rather than bringing your own framework. Its memory blocks are a good fit for a small, always-visible self-model, and MemFS gives git history for memory edits. Recall is the better fit when several agents in different frameworks must read one memory, when a fact must replace another by a rule you can audit, or when the records have to live in your own bucket.
Where to go next
- Recall compared with mem0 and Zep: the measured scenario
- Shared memory across agents
- An audit trail of what the agent knew
Sources, read on November 3, 2026: Zep facts, searching the graph, Graphiti, Zep Community Edition status, Zep pricing; Letta memory blocks, archival memory, MemFS, self-hosting, pricing.
Recall is typed, durable memory and state for AI agents. It stores corrections, decisions and task state as append-only records in your own object store (S3 or GCS), so an agent can be corrected without retraining and resumed after a crash, restart or pod replacement without snapshotting the process.
Try it
One pip install brings the client, the recall binary and the database. The snippet on
this page runs as written.