COMPARE · COMPARISON: AGENT MEMORY

XERJ vs agent memory tools: Mem0, Zep, Letta and Cognee

AUTHOR · XERJ documentation team · REVIEWED BY · XERJ engineering team · PUBLISHED · 2026-10-28 · UPDATED · 2026-10-28
SHORT ANSWER · UPDATED 2026-10-28

Should I use Mem0, Zep, Letta, Cognee or XERJ for agent memory? Pick Mem0 or Cognee to have a model extract facts and links for you, Zep or Graphiti for facts that change over time, Letta for a full stateful agent. Pick XERJ for plain local memory, searched like any other data, with no generative fact-extraction step.

TL;DR: Mem0, Zep, Letta and Cognee add intelligence on top of memory: models that extract facts, graphs that track change, or a whole agent runtime. XERJ does less on purpose. It stores what your agent writes and finds it with search, in one local binary with no generative fact-extraction step. No head-to-head was run.

PASTE THIS TO YOUR AI AGENT — IT DOES THE REST Act as a coding agent. Read https://xerj.org/llms.txt, install XERJ, start a local node, store three facts about this project with POST /_memory/project, recall each one with POST /_memory/project/_recall, and tell me whether plain search recall is enough for my agent before I add an LLM-based memory tool.
RUN THIS XERJ COMMAND curl -fsSL https://xerj.org/get | sh Install the single XERJ binary.
RUN THIS XERJ COMMAND curl -s -XPOST 'http://127.0.0.1:9200/_memory/project' -H 'content-type: application/json' -d '{"text":"Releases are cut from the main branch on Fridays."}' Store one fact exactly as the agent wrote it.
RUN THIS XERJ COMMAND curl -s -XPOST 'http://127.0.0.1:9200/_memory/project/_recall' -H 'content-type: application/json' -d '{"query":"Releases Fridays","k":3}' Recall with words present in the stored fact. Plain query recall is BM25, not paraphrase understanding.

What each one is

toolwhat it isneeds a model to store?license
Mem0fact extraction by default; raw inserts with infer=falseLLM extraction optional; embeddings still applyApache 2.0
Zep and GraphitiZep Cloud, plus the open Graphiti framework for temporal context graphsGraphiti: you supply the LLMGraphiti: Apache 2.0
Lettaharness for stateful agents with memory blocks and MemFSruns your agent's modelApache 2.0
Cogneememory platform that builds a graph of entities and relationshipslocal extraction and embedding models; LLM optionalApache 2.0
XERJsearch engine for AI agents with a memory APIlexical by default; neural/proxy embedder optionalApache 2.0

Each row comes from the project's own README, linked in the sources.

The real difference

These tools support different memory workflows. Mem0 extracts facts by default and can also store raw text. Graphiti builds a graph whose facts have validity windows. Cognee pulls out entities and links. Letta lets the agent rewrite its own memory files.

XERJ keeps the raw text the agent sends and makes it searchable. Keeping the original text makes it possible to inspect what was stored. Two 2026 preprints report competitive raw-history retrieval on their evaluated tasks; neither evaluates XERJ or establishes its cost or quality. See agentic memory vs RAG.

When to choose Mem0 instead

Choose Mem0 when you want a model to turn chats into short facts. Its default extraction path calls an LLM; infer=false skips that extraction, while embedding configuration still matters. Mem0 also offers a cloud platform. XERJ memory runs on your own machine.

When to choose Zep or Graphiti instead

Choose Zep Cloud when you want Zep to run it for you. Choose self-hosted Graphiti when facts change over time and you must know what was true when. Graphiti expects a graph store such as Neo4j or FalkorDB.

When to choose Letta instead

Choose Letta when you want the whole agent, not just a store. It puts memory blocks, a memory filesystem, skills and channels in one harness.

When to choose Cognee instead

Choose Cognee when you want documents, code and chats turned into a graph of entities and relationships. Cognee is a Python stack.

When to choose XERJ

Choose XERJ when you want memory and search in one place, on your machine, with nothing extra to run.

Limits you inherit with XERJ

XERJ is single-node: no replication and no failover. It does not extract facts or build entity links for you. The default embedder is lexical feature hashing, so semantic: true recall matches shared words unless you start the node with --embed-mode neural. Memories are permanent until explicitly forgotten.

What was not measured

No head-to-head was run. No accuracy, speed or cost numbers are claimed for any tool here. Competitor behavior is described from the linked project documentation, checked on 2026-10-29. These integrations were not executed in this review.

FAQ

What is the main difference between XERJ and Mem0?

Mem0 extracts facts by default and supports raw inserts with infer=false. XERJ stores the supplied text and generates a search vector with its configured embedder, lexical feature hashing by default.

Is Zep open source?

Zep Cloud is a commercial cloud product. Zep Community Edition is deprecated. The open-source part is Graphiti, an Apache-2.0 framework where you bring your own graph database, LLM and embedder.

Is Letta a memory layer?

Letta is broader: it is a harness for stateful agents, with memory blocks and a git-versioned memory filesystem. You run your agent inside Letta rather than calling it as a store.

Does Cognee need an LLM?

Not for ingestion and retrieval. Its README says it runs locally with a GLiNER model and a local embedder, and an LLM key adds generated answers.

When is XERJ the better fit?

When you want memory as plain searchable records on your own machine, next to the files and data your agent already searches, without an LLM or a second database.

Did you benchmark these tools against each other?

No. No head-to-head was run. This page compares what each project documents about itself.

Evidence

Related