cogito-mem v0.1 · measured 19 Oct 2026 · MacBook Pro M5 Max

cogito-mem on LoCoMo

Scored the way the Mem0 paper scored Mem0, Zep and the others, cogito-mem answers 74.7 % of LoCoMo's 1,540 questions from a 1,000-token budget of stored turns, and on the same questions that is statistically level with handing the model the whole conversation (76.5). Published under the same protocol: Mem0 66.9, Mem0g 68.4, Zep 66.0 as Mem0 ran it and 75.1 as Zep ran it. It stores without an LLM and answers a query in about 10 ms on this laptop.

Like for like

Same answering model, same judge

Every bar below was scored the way the Mem0 paper scored its table: the memory hands context to gpt-4o-mini, which answers; gpt-4o-mini then marks the answer CORRECT or WRONG against LoCoMo's gold answer, over the 1,540 questions of categories 1–4. We ran the full-context baseline the same way, so our harness can be checked against the paper's 72.9.

cogito-mem, measured herefull context (no memory)publishedour full-context run
Show as a table, with sources

Self-reported means the vendor ran its own system. Rows marked 3rd party come from the Mem0 paper, where Mem0 configured Zep, LangMem, ChatGPT memory and A-Mem; Zep disputed its row. Our bars are single runs; with 1,540 questions a run's 95 % interval is about ±2.2 points (±3 for the 762-question full-context run). Text only drops the photo captions, as Mem0's harness did; it changes nothing (−0.1 points, 95 % interval −1.6 to +1.4). Hover a bar for its context size.

Against full context in the same harness

Absolute scores move with the harness. With the same model, prompts and judge, our full-context run scored 76.5 on the first five conversations, where the paper reported 72.9 over all ten. Dividing each system by the full-context score measured alongside it removes that offset.

Cost per question

What the answering model has to read

Context is counted as the answering model counts it: billed prompt tokens minus the fixed instructions, so dates and speaker names are included. cogito-mem gains 9.4 points from the 300 to the 1,000-token budget (paired 95 % interval 7.1 to 11.6) and 2.3 more at 2,500 (0.5 to 4.0). Every system scored with the same prompts sits below the cogito-mem line at its own context size. MemOS (*), with its own answer prompt and an unnamed judge, reports 75.8 at about 1,600 tokens.

cogito-mem at 300 / 1,000 / 2,500 tokensfull context, our runpublished, with tokens reported
Show as a table
By question type

Where it wins and where it loses

Single-hop questions, one fact said once, are where returning the original turns pays off: 84.5 at 1,000 tokens against 72.9 for Mem0. Temporal questions do well because every returned turn carries its date; the whole conversation does worst there (59.6), as the model loses track of which session said what. Multi-hop and open-domain questions need several turns or an inference across the conversation, and that is where a fixed budget runs out first. When every turn an answer needs was returned, gpt-4o-mini answered 85.6 % correctly at 1,000 tokens; when one was missing, 45.7 %.

Categories use the dataset's own ids: 1 multi-hop (282), 2 temporal (321), 3 open-domain (96), 4 single-hop (841). The Mem0 paper attached these names to different ids; its row here is re-mapped by question count, so it may differ from the paper's printed columns.

Speed on this laptop

Query time does not matter at this size

A query over one LoCoMo conversation takes about 10 ms. Over 10M tokens the 95th percentile is 26 ms on the CPU alone, a quarter of the 100 ms target in the requirements. Hosted memories report 0.1 to 3 s, largely network and their own model calls, so this compares architectures, not hardware. Appending returns in 1 to 11 ms; embedding follows in the background at about 21k tokens a second, so 10M tokens of history is indexed in about 8 minutes.

cogito-mem, M5 Max

Published search latency

The other leaderboard

Why vendors now report 90 % and more

Since late 2025 most vendors report LoCoMo with stronger answering models (GPT-4.1-mini, GPT-5, Gemini 3), longer step-by-step answer prompts and more lenient judges. Those numbers measure the model and the prompt as much as the memory, and they are not comparable with the table above or with each other.

Three things move these numbers. The judge: we re-judged our own 1,540 answers at 1,000 tokens with Mem0's 2026 judge, keeping gpt-4o-mini, and the score rose from 74.7 to 86.3; 180 answers flipped to correct and one to wrong. The answering model: in the MIRIX paper the whole conversation alone scores 87.5 with gpt-4.1-mini. The ceiling: an audit of LoCoMo found 99 of the 1,540 gold answers wrong, so a perfect system scores about 93.6, and several published scores sit at or above it. Mem0's 2026 protocol with GPT-5 would cost roughly $40 to $60 on OpenRouter; it was not run here.
Claude Code

Using it inside a Claude Code session

Tested in this session

  • The repo's own .mcp.json failed to start here: it runs ${CLAUDE_PLUGIN_ROOT}/scripts/cogito-mem-plugin, and that variable is set only when the repo is installed as a plugin, not when it is opened as a project.
  • The MCP server over stdio, driven the way Claude Code drives it: handshake, both tools listed, memory_query in 10 to 22 ms, memory_append in under 1 ms.
  • Capture of this repo's two Claude Code sessions into a separate trial memory: 480 messages and 194k tokens appended in half a second, embedded in the background within seconds.
  • Recall over those sessions finds the conversation around a topic, but often not the decision itself: decisions end up in files and tool output (the decision log in docs/requirements.md), which capture skips on purpose.
  • Fixed on the way: cogito-mem setup could not install llama.cpp on any platform, because llama.cpp's newest GitHub release (v0.7.0) carries no binaries; new installs were silently keyword-only.

The integration to aim for

  1. Install once for every project. The plugin or cogito-mem install claude-code: a user-scope MCP server plus the Stop and SessionEnd capture hooks; then cogito-mem capture claude-code --all for the history.
  2. Push recall instead of waiting for a tool call. A UserPromptSubmit hook queries the memory with each prompt (about 15 ms) and adds the hits above a score threshold as context. With many MCP servers, Claude Code defers their tools behind tool search, so a recall tool that waits to be called is rarely used unprompted.
  3. Start where the last session ended. A SessionStart hook adds the last few exchanges of the previous session in the same project.
  4. Know the project. Store each turn's cwd and git branch (the transcript has both; captured items have no title today) and prefer the current project when ranking.
  5. Remember decisions, not only chat. Capture commit messages, and have Claude save decisions with memory_append, as the server's instructions already ask.
  6. Read more when asked to remember. 300 tokens suits context pushed on every prompt (J 65.3 on LoCoMo); an explicit "do you remember…" should ask for about 1,000 (J 74.7).
Method and caveats

How this was measured

Setup

  • Data: locomo10.json from snap-research/locomo (sha256 79fa87e9…): 10 conversations, 1,540 questions in categories 1–4; the 446 adversarial questions are left out, as everyone does.
  • Memory: cogito-mem 0.1.0 at commit 2951bfa plus this evaluation, default settings: BM25 and EmbeddingGemma 2 (Q8_0, 256 numbers, each turn embedded with the turn before it and its author) fused by rank, llama.cpp b11724 on Metal. A fresh memory per conversation; each turn is one item dated with its session; each question is asked as of just after the last session, top_k 100, max_tokens 300, 1,000 or 2,500.
  • Answer and judge: openai/gpt-4o-mini through OpenRouter, temperature 0, with Mem0's prompts word for word: the memory prompt Mem0 used for Zep, the paper's full-context prompt, and its judge prompt in JSON mode. Returned turns are shown in date order as "date: speaker: text".
  • Runs: one per configuration (the paper averaged 10); full context on the first five conversations only. All LLM calls are cached, so a rerun is free. Total spent on OpenRouter: $8.00.
  • Speed: cogito-mem bench speed, 1,000 queries one at a time, top_k 10, 300 tokens. Every query is embedded by the real model; the stored 10M tokens are synthetic text with random vectors (embedding them for real is timed separately, on 1M tokens).

Caveats

  • Our full-context run is the check on the harness. On the first five conversations (762 questions) it scored 76.5, against the paper's 72.9 over all ten, so our setup may score a few points more generously than the paper's. Compare shares of full context, or subtract about 3 points before comparing absolute numbers. Finishing it on all ten would cost about $3.30 more; OpenRouter credit ran short.
  • Context tokens are counted with EmbeddingGemma's tokenizer for cogito-mem and with each author's own tokenizer for the others.
  • Almost every published number is self-reported or run by a competitor. Only the full-context baseline was re-run here.
  • LoCoMo conversations are about 20k tokens, so any model can read them whole. The benchmark tests retrieval at a small scale; LongMemEval-M (1.5M tokens per question) is the stage-0 test in the requirements for that reason.
  • The gpt-4o-mini judge is generous: the audit found it accepts most vague but on-topic wrong answers, for every system alike.
cogito-mem eval locomo-qa --data locomo10.json --env-file .env --context memory --budget 1000 --out results/locomo-qa/paper-mem1000.json
cogito-mem eval locomo-qa --data locomo10.json --env-file .env --context full --out results/locomo-qa/paper-full.json
cogito-mem eval locomo-qa compare results/locomo-qa/paper-full.json results/locomo-qa/paper-mem1000.json
COGITO_MEM_GPU_LAYERS=0 cogito-mem bench speed --tokens 10M --random-vectors --out results/m5max/speed-10M-cpu.json