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

cogito-mem on LoCoMo

With today's answering models (GPT-5 mini, Claude Haiku 5.5, gpt-oss-120b, Qwen3), cogito-mem answers 85.6 to 89.9 % of LoCoMo's 1,540 questions under Mem0's own 2026 judging rules. That is the level published memory systems report, and 3.4 to 4.7 points below reading the whole conversation, while the model reads 9 times fewer tokens. It stores without any model call, searches in milliseconds on a laptop, and keeps everything on your machine.

Current answering models

Close to reading the whole conversation, at a ninth of the tokens

Each answering model read either what cogito-mem returned for the question, within a 1,000-token budget, or the whole conversation. The answer prompt is the one in Mem0's open benchmark (memory-benchmarks, 2026). GPT-5 mini then judged every answer twice: with Mem0's 2026 rules, which most current vendor numbers resemble, and with the stricter 2025 rules. The same 1,540 questions were used in every run.

cogito-mem, 1,000-token budgetthe whole conversation, no memory
Show as a table, with both judges

Differences are paired over the same 1,540 questions; hover a row for the interval and the stricter judge. GPT-5 mini and gpt-oss-120b ran with low reasoning effort. The open models were pinned to hosts serving full-precision weights (gpt-oss-120b in bf16, Qwen3 in fp8). Prompt tokens include the same instructions in both arms. A single run's 95 % interval is about ±1.5 points at 90 %.

A bigger budget closes part of the gap

1,000 tokens is cogito-mem's budget for an explicit recall. With GPT-5 mini answering, 300 tokens scores 79.6 and 2,500 tokens scores 92.1 (about 4,900 prompt tokens), 2.0 points (95 % interval 0.8 to 3.2) below the whole conversation.

Next to published numbers

Where the others report

The closest published comparison is Mem0's own: its platform scored 91.6 % (its README says 92.5) with this same answer prompt and these judging rules, but with the larger GPT-5 answering and judging, and 200 memories per question. cogito-mem lands at 85.6 to 89.9 with smaller models and a 1,000-token budget. Other vendors use their own prompts, judges and models; their numbers sit in the same band but cannot be compared point for point.

Three things move these numbers. The judge: with GPT-5 mini answering, cogito-mem's answers score 89.4 under the 2026 rules and 83.1 under the 2025 rules; with gpt-4o-mini, Mem0's 2026 judge lifted the same answers from 74.7 to 86.3. The answering model: the whole conversation alone scores 94.1 with GPT-5 mini and 87.5 with gpt-4.1-mini (MIRIX paper). 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.
Faster and lighter

What it takes to run

The case for cogito-mem is not a higher score; it is what a score costs. No model call to store a message, about 3,400 prompt tokens to answer, local search in milliseconds, and nothing to host or sign up for.

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 2025 protocol

gpt-4o-mini, as in the Mem0 paper

The Mem0 paper scored every system with gpt-4o-mini answering through its own prompts and gpt-4o-mini judging. Most 2025 tables reuse its numbers. We ran cogito-mem and the full-context baseline the same way, with the paper's prompts word for word.

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.

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

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.

Limits

What this does not show

Claude Code

Using it inside a Claude Code session

Tested in this session

  • 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.
  • Then installed as a Claude Code plugin, mid-session: memory_append stored a note in 4.9 ms, memory_query found it by meaning in 19.5 ms, and the next prompt arrived with a memory the recall hook had added on its own.
  • 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 repo's .mcp.json, which failed to start when the repo was opened as a project, is gone: the MCP server now lives in the plugin's manifest.

The integration, and what is still open

  1. shipped Install once for every project. The plugin or cogito-mem install claude-code: a user-scope MCP server, capture on Stop and SessionEnd, and cogito-mem capture claude-code --all for the history.
  2. shipped Push recall instead of waiting for a tool call. A UserPromptSubmit hook queries the memory with each prompt and adds up to 300 tokens of hits from earlier sessions that clear a score and a shared-word threshold, the current project's first; it gives up after 1 s rather than hold up the prompt. 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. shipped Start where the last session ended. A SessionStart hook adds the last exchanges of the most recent earlier session in the same project, read from its transcript.
  4. shipped Know the project. Every captured turn carries its project (the session's folder; a Claude Code worktree counts as its repository).
  5. shipped Read more when asked to remember. An explicit query reads 1,000 tokens by default: J 89.4 with GPT-5 mini, against 79.6 at 300.
  6. open Remember decisions, not only chat. Commit messages and edited documents are not captured; for now Claude saves decisions with memory_append, as the server's instructions ask.
Method

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.
  • 2025 protocol: 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".
  • Current models: GPT-5 mini (low reasoning), Claude Haiku 5.5, gpt-oss-120b (low reasoning, bf16 hosts) and Qwen3-235B-A22B-2507 (fp8 host) through OpenRouter, with Mem0's 2026 answer prompt from mem0ai/memory-benchmarks; GPT-5 mini (minimal reasoning) judged every answer with Mem0's 2026 rules and the 2025 rules. The instructions and the conversation form a prefix the providers cache, which cuts the cost of the whole-conversation runs.
  • 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: $36.52.
  • 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 --protocol mem0-2026 --context memory --budget 1000   --answer-model openai/gpt-5-mini --answer-reasoning low --answer-max-tokens 8000   --judge-model openai/gpt-5-mini --judge-reasoning minimal --judges mem0-2026,mem0-2025 --out results/gpt-5-mini-memory1000.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