XERJ vs agentmemory: which memory for your coding agent?
XERJ or agentmemory? In keyword mode they tied closely: agentmemory found 74.7% of answers in the top 5 and XERJ 73.3%. XERJ semantic recall, with a model built in, found 94.7%. Pick agentmemory to capture sessions through hooks. Pick XERJ to store what the agent chooses and search it by meaning.
Key number: agentmemory's keyless default disables vector embeddings, so memory_recall uses BM25. Setting EMBEDDING_PROVIDER=local adds on-device semantic recall. (as of 2026-10-31 · source: github.com/rohitg00/agentmemory)
TL;DR agentmemory captures what happens in your coding sessions through hooks and finds it later with BM25. XERJ stores what your agent decides to save. It is lexical by default; neural is opt-in. On our 75 question test the keyword modes were close, and XERJ semantic recall found 94.7%.
How each one gets memories in
Hooks capture the session
Plugins and hooks for Claude Code and other agents record session events, with secret scrubbing. A local server (port 3111 by default) runs on the iii-engine runtime. Keyless mode searches with BM25; set an embedding provider for semantic recall.
The agent decides what to save
The agent calls the memory store tool or POST /_memory/ns. One binary holds memory next to logs, docs and code. Recall is BM25 by default, semantic or hybrid with the built-in MiniLM model.
Act as a coding agent. Read https://xerj.org/llms.txt, install XERJ, start a local node with --embed-mode neural, store the five most useful facts about this repository with POST /_memory/project, then recall each one with a reworded question using semantic recall and report which ones came back in the top 5.
curl -fsSL https://xerj.org/get | sh
Install the single XERJ binary.
xerj --embed-mode neural
Start a local node with the built-in MiniLM embedder.
curl -s -XPOST 'http://127.0.0.1:9200/_memory/project/_recall' -H 'content-type: application/json' -d '{"query":"how do we deploy","semantic":true,"k":5}'
Semantic recall: matches meaning, not only shared words.
Tested side by side
Same 85 memories and 75 questions, one HTTP write per memory, no hooks. Top 5 is the share of questions where the right memory came back in the first five.
| agentmemory 0.9.31 | XERJ v1.0.0-rc.100 | |
|---|---|---|
| Top 5, default settings | 74.7% (BM25, keyless) | 73.3% (BM25) |
| Top 1, default settings | 53.3% | 54.7% |
| Top 5, reworded questions, default | 28% | 24% |
| Top 5, semantic with MiniLM | Not tested | 94.7% |
| New value first, changed facts | 13.3% | 13.3%; 93.3% with recency weight |
| Median write | 4.4 ms | 11.3 ms |
| Median query | 4.8 ms | 3.8 ms |
| LLM calls per write in this test | 0 | 0 |
| What you install | 143 npm packages plus the iii-engine binary | One binary |
| How memories get in | Hooks and plugins, or REST and MCP | REST and MCP |
| License | Apache 2.0 | Apache 2.0 |
Question by question
Pick a question type. A check means the right memory was in the top 5.
XERJ and agentmemory, question by question
| Question | Answer | XERJ BM25 | XERJ hybrid | agentmemory |
|---|---|---|---|---|
| Does Dana prefer pnpm or npm? | pnpm | 1 | 1 | 1 |
| What is the main database for Lark? | PostgreSQL | 1 | 1 | 1 |
| What is Dana allergic to? | peanuts | 1 | 1 | 1 |
| Which region does the staging cluster run in? | eu-west-3 | 1 | 1 | 1 |
| What is Lark's frontend written in? | Svelte | 1 | 1 | 1 |
| Where does error tracking for Lark go? | Sentry | 1 | 1 | 1 |
| What is Dana's cat named? | Biscuit | 1 | 1 | 1 |
| How fast must the test suite finish? | 12 minutes | 1 | 1 | 1 |
| What does the billing service use for card payments? | Stripe | 1 | 1 | 1 |
| What is the Lark mobile app built with? | Flutter | 1 | 1 | 1 |
| What is the Lark design system called? | Pebble | 1 | 1 | 1 |
| Where are Lark's public docs hosted? | Mintlify | 1 | 1 | 1 |
| What is the analytics warehouse? | ClickHouse | 1 | 1 | 1 |
| What is the support inbox address? | [email protected] | 1 | 1 | 1 |
| Which day does Dana's daughter Mia have swim practice? | Wednesdays | 1 | 1 | 1 |
| What is the load balancer in front of Lark? | HAProxy | 1 | 1 | 1 |
| What do background jobs run on? | Sidekiq | 1 | 1 | 1 |
| What is Dana's GitHub handle? | dana-codes | 1 | 1 | 1 |
| What is the Redis cache TTL? | 300 seconds | 1 | 1 | 1 |
| What is the Slack channel for incidents? | lark-fire | 1 | 1 | 1 |
| Where are secrets stored? | Vault | 1 | 1 | 1 |
| What is transactional email sent through? | Postmark | 1 | 1 | 1 |
| What is the monorepo built with? | Turborepo | 1 | 1 | 1 |
| When do database backups run? | 02:00 | 1 | 1 | 1 |
| What is Lark's mascot? | Hugo | 1 | 1 | 1 |
| Which package manager should I use for JS work? | pnpm | miss | 2 | 4 |
| Does she have any food intolerance I should know about before ordering lunch? | peanuts | miss | 1 | miss |
| Who is the boss Dana answers to? | Tomas | 3 | miss | miss |
| Which UI framework powers the web client? | Svelte | miss | miss | miss |
| Where do crash reports and exceptions end up? | Sentry | miss | 1 | miss |
| What is the name of her pet? | Biscuit | miss | 1 | 3 |
| How does Dana take her coffee? | oat milk | miss | 3 | miss |
| Which company handles credit card charges? | Stripe | 1 | 1 | 2 |
| What computer does she use at the office? | ThinkPad | miss | 5 | miss |
| Which toolkit was used for the iOS and Android client? | Flutter | miss | 2 | miss |
| What style should git log entries follow? | imperative | miss | 5 | miss |
| Which language does Dana like coding in most? | Rust | 1 | 1 | 1 |
| Is there a legal rule about where user records may be kept? | inside the EU | miss | 1 | miss |
| What sport does Dana's kid do midweek? | swim | miss | 2 | miss |
| How long should a call with Dana be? | 25 minutes | miss | 5 | miss |
| Does Dana eat meat? | vegetarian | 1 | 1 | 2 |
| Which human languages does the product UI support? | Portuguese | miss | 5 | miss |
| Where do we keep passwords and API tokens? | Vault | miss | 2 | miss |
| What exercise does she do at the weekend? | 10k | miss | 4 | miss |
| Which tool maps the JavaScript backends to SQL tables? | Prisma | miss | miss | miss |
| How quickly should a pull request get feedback? | same day | miss | miss | miss |
| What bird represents the brand? | heron | miss | 3 | miss |
| Which city is home to Dana's sibling? | Porto | miss | 3 | miss |
| How slow may search get for the slowest one in twenty requests? | 200 ms | 1 | 1 | 1 |
| Under which open source terms is the code published? | MPL-2.0 | 1 | 1 | 1 |
| What port does the Lark API listen on in production? | 9443 | 2, old first | 2, old first | 2, old first |
| Which day does Dana's team deploy to production? | Tuesdays | 1 | 1 | 1 |
| Who is Dana's manager? | Tomas | miss | miss | miss |
| What code editor does Dana use? | Zed | 2, old first | 2, old first | 2, old first |
| Where does the Lark CI pipeline run? | GitHub Actions | 2, old first | 2, old first | 2, old first |
| What is Lark's search feature backed by? | Typesense | 2, old first | 2, old first | 2, old first |
| Where are feature flags managed? | Unleash | 2, old first | 2, old first | 2, old first |
| How long are application logs retained? | 90 days | 4, old first | 3, old first | 3, old first |
| What timezone does Dana work on? | Berlin | 3, old first | 2, old first | 2, old first |
| When do auth JWTs expire? | 60 minutes | 1 | 1 | 1 |
| What do Lark's Python services use for dependency management? | uv | 2, old first | 2, old first | 2, old first |
| When is the Lark 2.0 launch? | April 2 | 2, old first | 2, old first | 2, old first |
| Which floor is Dana's desk on? | 3rd floor | 2, old first | 2, old first | 2, old first |
| What is the Lark API rate limit per key? | 1200 | 2, old first | 2, old first | 2, old first |
| Which Kubernetes version runs in production? | 1.33 | 2, old first | 2, old first | 2, old first |
| What is the staging database for Lark? | MySQL | 1 | 1 | 1 |
| Which package manager does Dana's brother prefer? | yarn | 2 | 2 | 1 |
| What port does the internal admin API listen on? | 7001 | 1 | 1 | 1 |
| Which day does the marketing website deploy? | Fridays | 1 | 1 | 1 |
| What is Priya's cat named? | Pixel | 1 | 1 | 1 |
| How long are search query logs retained? | 7 days | 1 | 1 | 1 |
| What is the mobile app's rate limit? | 100 requests | 1 | 1 | 1 |
| What does the data team use for local analysis? | DuckDB | 1 | 1 | 1 |
| What was Dana's old personal laptop? | MacBook | 1 | 1 | 1 |
| Which street is Mia's school on? | Rua das Flores | 1 | 1 | 1 |
When to pick agentmemory
- You want sessions captured for you, with no extra step in your prompts.
- You switch between several coding agents and want one memory server for all of them.
- You want a live viewer to inspect what was saved.
- Your recalls reuse the words in your notes, so BM25 is enough.
When to pick XERJ
- You want semantic recall that works with no setup, using a built-in model.
- You want the agent to choose what is worth keeping.
- You want one binary with no Node runtime.
- You want memory in the same engine as your logs, docs and code search.
Limits on the XERJ side
- agentmemory wrote faster and edged XERJ on keyword top 5 in this test.
- XERJ does not capture sessions by itself. Your agent has to call the store tool.
- XERJ runs on one node with no replication.
See the full AI agent memory benchmark for all seven projects.
Try it with XERJ
Use the Copy the prompt button and paste it into your coding agent. It installs XERJ, stores five facts about your repository and checks which reworded questions find them.
Sources checked
All checked on 2026-10-31.
- agentmemory: README in rohitg00/agentmemory, commit c6c476d2, npm release 0.9.31. License Apache 2.0 from the GitHub API.
- Test runs and per question results: benchmarks/agent-memory.
FAQ
What is agentmemory?
An Apache 2.0 memory server for coding agents such as Claude Code, Codex CLI and Cursor. Hooks and plugins record session events, and agents recall them later over MCP or a REST API.
Which one recalled more in your test?
In keyword mode agentmemory was slightly ahead on top 5, 74.7% vs 73.3%, and XERJ slightly ahead on the first result, 54.7% vs 53.3%. With its MiniLM embedder on, XERJ semantic recall found 94.7%.
Did you test agentmemory with embeddings?
No. We tested its keyless default, which is what a new install runs. Its optional local embeddings use the same MiniLM model family, so its semantic score could be close to the other MiniLM systems. We did not measure it.
Which one is faster?
Writes: agentmemory 4.4 ms median, XERJ 11.3 ms. Queries: XERJ 3.8 ms, agentmemory 4.8 ms. Both ran over HTTP on the same shared machine.
What do I install for each?
agentmemory resolved to 143 npm packages and downloads the iii-engine runtime binary. XERJ is one binary.
Evidence
- Top 5: agentmemory keyless BM25 74.7%, XERJ BM25 73.3%, XERJ semantic 94.7%. Top 1: agentmemory 53.3%, XERJ BM25 54.7%. Reworded top 5: agentmemory 28%, XERJ BM25 24%. New value first: both 13.3%; XERJ with recency weight 93.3%. —
benchmarks/agent-memory/out/summary.csv
Related
- AI agent memory compared: real tests on 7 open-source projects
- claude-mem vs MemPalace vs XERJ: which memory should Claude Code use?
- XERJ vs mcp-memory-service: two MCP memory servers, tested
- XERJ vs ReMe (Alibaba Tongyi Lab): a tested comparison
- How do people store user preferences so an agent can recall them next week?
- What is an MCP memory server?
- XERJ vs Mem0: which memory fits your AI agent? · same intent: agent memory
- XERJ vs memvid: one memory file or one local server? · same intent: agent memory
- XERJ vs agent memory tools: Mem0, Zep, Letta and Cognee · same intent: agent memory