LongMemEval-S · 500 questions · 2026-09-06
Benchmarks
Where Perpetuity's measured result sits among published memory systems.
Cost
52%
less spent in a 120-prompt Claude Code test, the same agent side by side
Recall
99.1%
of the 470 questions with evidence have it within one recall call
Accuracy
94.0
one user's history per question, the standard setting
Accuracy, pooled
92.2
one 82M-token memory, 500 users at once, a retrieval test.
- 97.4% already in the first frame
- all of a question's evidence: 96.4% within one call, 89.8% in the first frame
- zero exclusions
- 3.6k-token frame, measured
- recall tools on
- no model in retrieval
- Opus 5 with native thinking, the production prompt
- GPT-4o-2024-08-06, the official judge
- Token counts use Claude's tokenizer, the unit the bill is in.
Efficiencysession cost, measured, then estimated over 192 more
Measured test, 30 September 2026
120 prompts in Claude Code
52% less spent
The same prompts run side by side on an open-source dashboard, with the same model. Claude Code ran as it ships, on its default 1M-token window.
Claude Code alone
Perpetuity
Session cost
$104.71
$50.24
Cache writes
$13.09
$25.85
Cache reads
$75.42
$11.04
Context at prompt start, tokens
up to 965k
about 47k
Compactions
1
0
Recall at end, 16 questions
88%
97%
Perpetuity writes a new memory frame on every prompt, so it pays more for cache writes and far less for re-reading. Every call is priced at Claude Opus 5.5's list prices. The recall questions were graded blind. One run per setup. Both runs used the same Claude Code setup, the instructions file and skills we work with every day, unchanged for the test, with MCP servers and Claude Code's auto-memory off. Perpetuity ran in its production configuration. Nothing was tuned for the test.
Cumulative cost, 120 prompts
Claude Code alone, $104.71
Perpetuity, $50.24
Cost / prompt, 10-prompt average
Without Perpetuity each prompt costs more than the one before until Claude Code compacts at prompt 82. Through Perpetuity every prompt starts from the same context, so its cost per prompt stays level. Averaged over each 30-prompt stretch, a prompt through Perpetuity cost about 35 to 50 cents from start to finish. Without it, the average climbed from about 45 cents to $1.39. Between prompts 61 and 90 the session through Perpetuity was 2.8× cheaper. Over the 5 recall tests, 84% of questions about earlier work were answered through Perpetuity (64.5 of 77), against 80% for Claude Code on its own, which compacted its history in every one of them. One of the five tests went to Claude Code on its own. The Go and Flask recall tests ran at the end of our first runs on those projects, before the fixes. The tests gallery shows the runs after the fixes, which asked no recall questions.
Corrected on 1 October 2026: these costs were first published at the previous Opus model's prices, which overstated the saving as 65%. The full note is in the receipts.
Tokens / call, last prompt of a 60-prompt coding session
without Perpetuity, the whole history739k tokens per call
through Perpetuity45k tokens per call
- Claude Code's system prompt and tools, 31k
- the memory frame and the live turn, 14k
Both sides re-read most of their context from the prompt cache at a twentieth of the input price, so the dollar saving is smaller than the token saving.
Coding agent behaviour
Claude Code on a small open-source dashboard, the same task with and without Perpetuity. Task quality and turn counts came out level.
Preference recalled
Told once, in an earlier session, that the person is red-green colour blind, it built the status panel with a colour-blind-safe palette without being asked. The run without Perpetuity used the conventional green.
Rule kept
Told once that the person never pushes without asking, it finished with "committed, not pushed".
Work resumed
A fresh session, told only to continue, re-read the files it had written and finished the work. Without Perpetuity it answered "I don't know what we were doing".
From six runs on one task in September, each kept in full. They show what the memory changed, not how often it does.
192 sessions, estimated
recorded cost
Perpetuity, estimated
$51,735 recorded, about $20,614 estimated, 60% less
This chart is calculated, not measured. The grey line is what 192 of our own Claude Code sessions cost, priced call by call from their recorded usage, each call at the list prices of the model it ran on, with caching counted. The cyan line is a model of the same sessions through Perpetuity: a 10k-token frame in place of the conversation history, and 1.3× the calls, since an agent reading a frame looks around a little more. We checked the model against an earlier 30-prompt pair: it came within 2% at the settings that pair ran and 11% off at 1.3 times the calls. Nearly all of these sessions ran on models whose cache reads cost a tenth of the input price. On Claude Opus 5.5, where they cost a twentieth, the saving is smaller, as the measured chart above shows. Over the 192 sessions it gives 60% less (65% on input alone), up to 5× for one session, and 3 sessions cost more. The saving follows the size of the context: these are long sessions, half of them past 799k tokens, and a short session with a small context saves little or nothing. Published context sizes for other memory systems run from 7k to 115k tokens per answer. The scale is logarithmic, so an equal saving is an equal gap.
Tokens / LongMemEval question vs full-context turn (chat, no coding harness)
one full-context turn of the same history165k tokens in Claude's tokenizer (the benchmark's "115k"), median question
the same question through Perpetuity18k tokens on the average question, 8.9k at the median
- reading prompt + tool schemas, 4.0k
- the frame, the memory, 3.6k
- recall rounds, new tokens, 3.0k
- recall rounds, cache re-read at a tenth of the price, 6.9k
The frame is 3.6k tokens on the median question, sized by that question's own retrieval. The pieces of memory that stand out from the rest stay in it, and the rest is reachable through the recall tools. Half the questions are answered in one round, and those bill 7.6k. The median over all rounds is 8.9k. The one full-context turn it replaces is 165k. A history kept entirely in cache would cost about the same in dollars as one of our questions, so the saving above comes from the session, where the history grows every turn and the frame does not.
Retrievalaccuracy on LongMemEval-S, 500 questions
Measured by us
Perpetuity
470/500 correct
46× leaner94.0
Self-reported
Supermemory ASMR
self-declared parody
99
AgentMemory
tuned on the test set
96.2
Chronos
paper, iterative retrieval loop
95.6
OmegaMax
self-judged, best run
95.4
Mastra OM
best of 3 readers
3.8×94.9
Mem0
closed platform, reader unstated
16×94.4
Backboard
unofficial judge
1×93.4
ByteRover
excludes 30 questions
92.8
Hindsight
self-judged
91.4
Memoria
self-reported
88.8
TiMem
GPT-4o reader
79
Zep
third-party roundup
63.8
Reference points (no memory system)
Full 115k context
1×59
No memory
5.1
Only the Perpetuity row is measured by us: Opus 5 with native thinking, the production prompt, GPT-4o-2024-08-06, the official judge, nothing excluded. Every other row is that vendor's self-reported number under its own conditions. The chip under each name is its caveat in short, and the full caveat is in the receipts. Where a system publishes how much memory context it puts before the reader per answer, its row carries a second bar: how many times less than sending the whole 115k history. For Perpetuity that is its median frame of 3.6k tokens against the same history counted the same way, 165k in Claude's tokenizer.
How Perpetuity differs from each family of memory system is on how it works.
Score history
The same 500 questions at every rung.
The first two are where an agent stands without memory. The rest is one memory, measured as it was built. From 88.6 to 92.4 every point came from the answering model and its prompt, none from tuning the memory. The step to 94.0 came from sizing the frame per question, and 92.2 is that system with all 500 users' histories in one memory.
5.1
No memory
The floor, the answering model with nothing to go on.
59
Full context
GPT-4o reading the whole 115k-token history at once. The benchmark paper's own baseline is near 60.
The LongMemEval paper78 to 83
Sparse retrieval
Our first retrieval, early 2026. Each message is stored as a sparse code, a short list of learned features, and found by how many features it shares with the question. No embedding model runs when a question arrives.
87.0
First run on all 500
It still needed a second model in the loop and contexts of about 17k tokens.
88.6
Architecture
Related facts linked into chains, a frame that widens only when a question needs breadth, and the second model removed. Answered by Sonnet 5 without extended thinking.
The frame and its cap90.6
Thinking on
Same memory and code, with the answering model's extended thinking switched on.
91.2
Opus 5
Same memory, a stronger answering model. Every point past 88.6 came from the model, none from tuning the memory.
92.4
Production prompt
The benchmark-specific answering instructions removed: each question goes to the model with the system prompt users get. Against 91.2, 17 questions turned right and 11 turned wrong, a gap chance alone could make (p≈0.35).
94.0
Measured frame
Each question gets a frame sized to what its own retrieval found, 3.6k tokens at the median, and a shorter system prompt. Half the questions were answered without searching the memory again.
The memory tools92.2
82M tokens, one memory
All 500 users' histories in one memory, 82M tokens, every question searching all of it, with the asking user's own messages weighted up. Against 94.0, 9 questions turned right and 18 turned wrong (p≈0.12).
One memory for many users
Receipts
The reader is the model that answers, the judge grades the answers, and the memory is what is under test.
Caveats
- Only the Perpetuity row is measured by us. Every other row is that vendor's self-reported number under its own conditions.
- Readers differ. Ours is stated on every row. Most vendors do not state theirs. A stronger reader lifts any memory system's score, by up to 22.6 points on identical memory in our own axis.
- Exclusions differ. Ours: all 500 questions, abstentions included, empty answers scored as misses. Some reports drop questions or do not state the variant.
- Judges differ. Ours is the benchmark's official GPT-4o judge, always. Several rows judge themselves with their own model family.
- Supermemory posted its ~99, the field's top score, as a parody of leaderboards that omit cost and latency. This page reports accuracy and cost together.
- Every token figure here is in Claude's tokenizer, the unit the bill is in. Our internal capture counter runs about 0.7 of it.
- Correction, 1 October 2026. The coding costs on this site were first priced with the previous Opus model's rates. The sessions ran on Claude Opus 5.5, which is cheaper, most of all for cache reads, and the side without Perpetuity is mostly cache reads. At the correct list prices the saving over 120 prompts is 52%, where we had published 65%, and over 60 prompts 48%, where we had published 63%. Token counts, context sizes and recall scores did not change.
- The coding cost is measured on sessions run twice at the same time, with and without Perpetuity, on the same model, Claude Opus 5.5, with Claude Code on its default 1M-token window. Each session is priced in dollars at that model's list prices ($4 input, $20 output, $0.20 cache read and $8 cache write per million tokens), every call counted, as Claude Code's own cost readout totals it. 120 prompts: $50.24 against $104.71, 52% less, and 64% less in prompts 61 to 90. 60 prompts: $26.40 against $50.93, 48% less. Two 30-prompt pairs came out 11% and 35% less. On three other projects, 200 prompts each, summed from each prompt's own usage at the same list prices, a Rust command-line tool came out 38% less, a Go command-line tool 27% less and a Flask application 4% less, which we count as a tie. These are the runs after the fixes we made from our first runs, and in them both sides ended with every test passing. On the Go and Flask pairs Claude Code on its own wrote more tests to reach about the same coverage. Seven pairs of runs show the direction, not a precise average.
- On a smaller window the cost gap narrows. The same 120 prompts with Claude Code capped at a 200k-token window compacted 17 times and cost $57.05, so Perpetuity's $50.24 is 12% less, and Perpetuity cost more over the first 60 prompts. On the same 16 recall questions, graded blind in one packet, Perpetuity answered 15.5, the default-window run 14 and the 200k-window run 12.5. One run per setup.
- Claude Code compacted its history once in the 120-prompt session, during prompt 82, at a 965k-token context. Its cost per prompt fell after that, because the history it threw away is no longer paid for. Asked 16 pre-registered questions about work from across the session and graded blind, it answered 14 and Perpetuity answered 15.5, with the difference in the first half of the session. In the 60-prompt session the result was 13 of 13 against 11. On the two 200-prompt pairs on other projects, asked the same way and graded blind, the Flask session went to Claude Code on its own, 14.5 against 11, the Go session to Perpetuity, 12 against 10, and the Rust session to Perpetuity, 13 against 12, with Claude Code compacting its history once, four times and four times. Pooled over the five runs, 64.5 of 77 against 61.5: 84% against 80%. Where Perpetuity lost points it mostly declined to state a detail of the code (a hash formula, a column list, a weight) while keeping the names, values and messages right. Where Claude Code lost them it had no memory of the earliest work before a compaction. The Perpetuity side starts every prompt at about 46k tokens per call, from prompt 10 to prompt 120, while the other side reached 965k before compacting. Within one prompt its context rises with that prompt's own file reads and tool calls, up to 165k in a 25-call refactor, and starts again at 46k on the next prompt.
- The 192-session chart is an estimate. The recorded usage of 192 of our own Claude Code sessions is priced as it happened, each call at the list prices of the model it ran on (mostly Opus 4.8 and Fable 5). The same sessions through Perpetuity are modeled with a 10k-token frame and 1.3 times the calls, output equal. The model was checked against an earlier 30-prompt pair: within 2% at the settings that pair ran, 11% off at 1.3 times the calls. It gives about 60% less, and 3 sessions cost more. On Claude Opus 5.5, whose cache reads are cheaper, the saving is smaller, as the measured sessions show. 183 of the 192 sessions run past 400k tokens of context. Short sessions with small contexts save little or nothing.
- The reader has recall tools: a search over the whole memory, the rest of this turn's retrieval below the cut, an exact ledger by category, the calendar dates of matching moments, an association walk and a table of contents. A tool result is appended to that turn's context on top of the frame. On the final record the tools ran on 248 of 500 questions, 1.72 rounds per question on average, and half the questions were answered in one round.
- The frame is measured on every question of the 94.0 run with the reader's tokenizer: 3.6k tokens at the median, 4.3k at the ninetieth percentile. Earlier runs did not log it.
- The pooled row asks each question against one memory holding all 500 users' histories, with the asking user's own items given priority in the ranking: an item from another user's history scores at two thirds. Without that priority the frame fills with other users' text and the score falls to about 83, measured on 161 of the questions. The priority is a dial between a private memory and a communal one, and the frame stops changing once it is past 1.5. It is a test of retrieval at that size, not a mode users get yet. Perpetuity ships one memory per agent. The benchmark also shares 4,396 of its 18,325 sessions across its 500 users, so a hit from another user's history is often the same text under another name, which makes this pool easier than 500 truly different users would be.
- One full-context turn of the same question's history is 165k tokens. Against it a question through Perpetuity bills about 9k at the median, about the same in dollars as a history kept entirely in cache. The saving over a session comes from the history growing every turn while the frame does not.
Row caveats
- Supermemory ASMR 99 Self-declared parody: a real score posted to show that leaderboard numbers without cost and latency are meaningless ("not fit for production", their words). Multi-agent search with LLM reranking. No retraction changelog.
- AgentMemory 96.2 Opus 4.6 reader stated, official judge, harness published. Self-flagged: 46 tuning iterations on the test set, no held-out split.
- Chronos 95.6 PwC paper. Iterative tool-calling retrieval loop. The reader is stated in the paper.
- OmegaMax 95.4 95.4 is a category-averaged best run (raw 93.2). GPT-4.1 is reader and judge (identical-model self-judging, unofficial). Eight iterations on the test set targeting failure modes. No harness published.
- Mastra OM 94.9 Best of three readers (gpt-5-mini) and a category-unweighted average. 84.2 with GPT-4o. Harness published. About 30k tokens of context per answer, their own figure.
- Mem0 94.4 Closed platform number (top-200, about 7k tokens). Reader unstated at claim level. A third-party open-source config measures about 32%. On LoCoMo its harness drops 22.5% of questions.
- Backboard 93.4 gpt-4.1 reader. Primary judge gpt-4o-mini, not the official judge. The whole 115k history sent as one message. No latency published. Per-question outputs not visible in the repo.
- ByteRover 92.8 Excludes the 30 adversarial questions. Gemini 3.1 Pro reader judged by Gemini 3 Flash (in-family, unofficial). LLM curation at write.
- Hindsight 91.4 Gemini-3-Pro reader, judged with its own model family on custom prompts. The number drifted 90 to 91.4 to 94.6 without a changelog.
- Memoria 88.8 Self-reported. Best of three readers, judged by a model that is also one of the readers. The referenced results file is not in the public repo.
- TiMem 79 Paper. GPT-4o reader. Judge id unstated.
- Zep 63.8 Third-party roundup figure. Zep's own paper reports 71.2 with a gpt-4o-2024-11-20 reader.
- Full 115k context 59 GPT-4o given the whole history, no memory system. Our reproduction 59. The paper's figure 60.6. Mastra's independent replication 60.2.
- No memory 5.1 Our measured floor: the reader with nothing.
Readers
Every row uses the official judge. The first reads the whole history and the third reads human-picked evidence, as reference points. The five rows from 69.8 to 92.4 read the same Perpetuity memory, and only the reader or its prompt changes: the reader alone spans 22.6 points. The last row is the shipped configuration, with the frame sized per question. At the same reader, our selection beats the full 115k history it was distilled from (69.8 against 60.6).
- GPT-4o, the full 115k history, no memory60.6
- GPT-4o + Perpetuity retrieval69.8
- GPT-4o + human-picked evidence, the paper's ceiling87
- Sonnet 5 + Perpetuity88.6
- Sonnet 5 + thinking + Perpetuity90.6
- Opus 5 + thinking + Perpetuity, citation protocol on91.2
- Opus 5 + thinking + Perpetuity, the production prompt92.4
- Opus 5 + thinking + Perpetuity, the measured frame94
Judges
The 92.4 run re-judged. The official judge is always the headline. Every alternative lands within 0.2 below or 1.2 above it. Our reader is Anthropic and the official judge is OpenAI, so the grader never shares a family with the graded.
- GPT-4o-2024-08-06, the official judge92.4
- GPT-5.6 Sol92.2
- Sonnet 5 (our reader's vendor, never crowned)92.6
- Gemini 3.1 Pro93.6
- Gemini 3.7 Flash93.6
Reader prompt
Each benchmark question is sent bare, with no answering instructions. The only system prompt is the production memory prompt, and on the one axis where a prompt could game the judge, ours points the other way.
- Ours, the production prompt
- Confidence without a source is a signal to say "I don't recall", not an answer.
- Mem0's LoCoMo harness
- NEVER say "not specified"... COMMIT AND ANSWER
Evidence in the frame
Retrieval recall on the 470 questions that have evidence, zero model calls on the path: 97.4% of questions have a gold evidence session in the frame the reader sees first, 89.8% have every one of them. One recall_more call away, 99.1% and 96.4%. With the evidence this often in reach, the gap to 94.0 most likely lies in how the reader puts it together, not in retrieval.
The control is plain BM25 over the same corpora, one document per turn, no model, at the same cut. This benchmark's questions name their targets, so on them it is level with ours. We then rewrote all 500 questions once so that names became descriptions (the share of a question's words found in its evidence fell from 0.744 to 0.49) and ran both again. They differ only on the low-overlap quarter, and our claim over lexical retrieval stops there.
original questions
rewritten questions
rewritten, low overlap (118 sharing a third or less of their words)
On the full frame BM25 reaches 100% and 98.1% on the original questions. On questions that repeat the evidence's words, it ranks the evidence higher.
Unscored systems
These memory systems run without a model, as ours does, and we found no result for them on this benchmark. A row needs a number from the same test, so they are named here instead of scored.
- Holographic (Hermes Agent provider): model-less, SQLite full-text plus an algebraic layer.
- Vestige: model-less by default, BM25 over FTS5.
- OKF Agent Memory: model-less, local BM25 over hierarchical index files.
- minirag: model-less, BM25 over markdown.
- Files with grep, CLAUDE.md-style memory files: model-less, the simplest form.
Sources and runs
- LongMemEval (ICLR 2025)
- Mastra OM research
- Hindsight paper
- Supermemory research
- Mem0 research
- Mem0 paper (latency)
- Zep paper
- AgentMemory
- Chronos
- OmegaMax benchmarks
- ByteRover
- Backboard
- Penfield Labs benchmark audit
- LongMemEval-V2
Perpetuity's runs: lme-chain3-record-final-z2-cap2k-500 (the 94.0 record, verified), lme-chain3-plain-opus-reason-500dry-clean (the clean 92.8 re-run of the old configuration), lme-pool57m-lambda15-z2-cap2k-500 (the pooled row, verified), lme-chain3-corpus.recall-row-served (retrieval recall on the served frame), bm25-control.turn and bm25-control.paraphrased.turn (the lexical control, original and rewritten questions), lme-chain3-corpus.recall-row-paraphrased (our retrieval on the rewritten questions). Per-question outputs and run metadata are kept per run and available on request.
Perpetuity opens in early access.
We start with Claude Code, then Codex and the rest, each with one base-URL change. Join now and you are first in line. We email you when your access is approved.