
Every time a memory system is queried it has to decide how many memories to hand over in support of that answer. Almost every system does this with a fixed top-k: rank by vector search, by keyword search, or by a fusion of both, then inject the first k into the context.
That decision lands on every request, so it is not only an accuracy question but a latency and billing one: each injected memory has to pass through the model’s input.
The trouble is that k. It is a configuration value, fixed before any query arrives, and neither direction is safe. Set it large and most of what you inject is redundant, raising the input cost of every request and mixing unrelated memories into the context. Set it small and what comes back may not cover what the answer needs. The same k has to serve simple queries and complex ones.
This is not a problem with how retrieval ranks. Vector search, keyword search and hybrid ranking all surface relevant memories; the fixed injection budget is the bottleneck. “Which flight did we book for the second leg?” may need one memory. “Has anything changed about her dietary preference since March?” needs the state before and the state after, and those two need not sit next to each other in any single ranking. Real traffic mixes both, and one k cannot cover them, so it comes down to choosing between redundancy and insufficiency.
EverOS does not fix that budget. It retrieves in rounds and lets the model judge when it has enough, so how much a query costs is decided by that query. This post describes how, and reports what it does on four memory benchmarks.
The method
llm_multiround puts a small model (the decider) inside the retrieval loop rather than after it. Each round:
1. Search the store and return candidate episodes.
2. The decider reads them and marks which are core, meaning the ones that actually carry evidence for this query.
3. The decider then chooses: stop, or issue a follow-up query for what is still missing.
Two details are worth stating.
The decider reads full episode text, not snippets. A snippet is a summary of a summary; deciding whether an episode carries the evidence requires the episode. This is a token cost on the input side, and it buys the loop its judgement.
Stopping is a decision, not a round cap. The loop’s value is knowing when it has enough. Raising the round limit does not help a policy that cannot tell, it only makes every query slower; what helps is a policy that stops early when the evidence is in hand and continues when it is not.
What reaches the context is the core set, not the top-k. The budget follows the query rather than the other way round.
What fixed top-k costs at both ends
An injection-budget ablation on LongMemEval-S puts numbers on both of the ends named above.
Injection | Accuracy | Episodes/query | Prompt tok/query | Completion tok/query | Share of k=20 prompt |
|---|---|---|---|---|---|
core-only | 91.00 | 1.95 | 1,946 | 2,470 | 23% |
k=3 | 90.00 | 3.00 | 2,315 | 2,661 | 27% |
k=5 | 92.20 | 5.00 | 3,034 | 2,785 | 35% |
k=10 | 93.40 | 10.00 | 4,891 | 3,004 | 57% |
k=20 | 93.40 | 20.00 | 8,594 | 3,312 | 100% |
Retrieval quality on that run: MRR 0.9768, MAP 0.9524.
Injection layer (Top-k) | k=1 | k=3 | k=5 | k=10 | k=20 |
|---|---|---|---|---|---|
hit@k | 0.9640 | 0.9860 | 0.9940 | 0.9960 | 0.9960 |
Recall@k | 0.6199 | 0.9372 | 0.9686 | 0.9854 | 0.9895 |
NDCG@k | 0.9640 | 0.9357 | 0.9455 | 0.9574 | 0.9650 |
Small k really does run short of evidence, and the second table measures it. At k=1, hit@1 is 0.9640: one episode almost always contains something relevant. But Recall@1 is 0.6199, so it rarely contains everything the answer needs. Recall only reaches 0.9854 at k=10, which is why accuracy climbs to 93.40 there and not before. To get enough evidence reliably from a fixed k, k has to be opened to at least 10, and then every query pays the k=10 bill.
Large k really is waste, and the first table prices it. Going from k=10 to k=20 doubles the episodes and adds 76% to the prompt (4,891 to 8,594 tokens) for exactly zero accuracy. Completion tokens grow too, 3,004 to 3,312, because a longer context makes the model produce more. Those extra ten episodes are redundancy, paid for on both the input and the output side.
Core selection sits outside that trade. It injects 1.95 episodes per query on average, one tenth of k=20’s budget, and scores 91.00: 97.4% of the peak accuracy on 23% of the prompt. In production that last column is the input bill on every request, so this is a quarter of the cost for 97.4% of the result. Against the fixed setting nearest its own size it wins outright, beating k=3 on accuracy (91.00 against 90.00) while using fewer episodes and fewer tokens.
The reason is that the decider is choosing rather than counting. A fixed k is a configuration value, too small for the complex queries or too large for the simple ones. Rounds let the budget follow the query: 1.95 episodes on average because most queries genuinely need one or two, with more spent only where the evidence is actually spread out.
Results
The section above is about spending less for the same accuracy. This one is about the accuracy itself. Four benchmarks, four different things they are good at measuring, all numbers accuracy in percent.
LoCoMo
Long multi-session dialogue. 1,540 questions, GPT-4.1-mini answering, LLM judge, adversarial category excluded.
Method | Single Hop | Multi Hop | Temporal | Open Domain | Overall |
|---|---|---|---|---|---|
MemoryOS | 67.30 | 59.34 | 42.26 | 59.03 | 60.11 |
Mem0 | 68.97 | 61.70 | 58.26 | 50.00 | 64.20 |
MemU | 74.91 | 72.34 | 43.61 | 54.17 | 66.67 |
MemOS | 85.37 | 79.43 | 75.08 | 64.58 | 80.76 |
SimpleMem | n/a | n/a | n/a | n/a | 82.92 |
RF-Mem | n/a | n/a | n/a | n/a | 83.83 |
Zep | 90.84 | 81.91 | 77.26 | 75.00 | 85.22 |
RippleMem | 92.75 | 77.67 | 85.67 | 70.83 | 87.14 |
Mandol | 95.36 | 92.20 | 87.85 | 79.17 | 92.21 |
EverOS | 96.55 | 96.10 | 92.21 | 78.12 | 94.42 |
Overall 94.42, 2.21 points above the next system. The multi-hop column is where rounds show up: 96.10, against 92.20 for the next system and 77.67 for the one after. Multi-hop questions are exactly the case where the evidence sits in two places, so a fixed k either misses one of them or drags in a pile of unrelated episodes to avoid missing it. Temporal at 92.21 is the same effect: answering when something changed means finding the state before and the state after.
EverMemBench
Nine memory behaviours. 2,400 questions, GPT-4.1-mini answering, gemini-3-flash judge, top-20. Avg. is the unweighted mean over the nine types.
Method | Single | Multi | Temp | Const | Proact | Update | Style | Skill | Role | Avg. |
|---|---|---|---|---|---|---|---|---|---|---|
Full Context | 83.57 | 2.41 | 7.00 | 63.43 | 25.06 | 42.54 | 39.20 | 35.50 | 38.27 | 37.44 |
MemoBase | 60.09 | 12.85 | 18.00 | 64.68 | 36.77 | 30.60 | 17.05 | 29.59 | 38.78 | 34.27 |
Mem0 | 55.40 | 11.24 | 6.33 | 66.17 | 52.46 | 51.87 | 22.73 | 31.36 | 36.22 | 37.09 |
Zep | 73.71 | 8.03 | 13.00 | 67.16 | 47.54 | 43.66 | 26.70 | 35.50 | 44.39 | 39.97 |
MemOS | 71.36 | 18.88 | 15.67 | 69.90 | 51.99 | 45.15 | 28.98 | 32.54 | 48.47 | 42.55 |
RippleMem | 92.02 | 22.09 | 21.33 | 78.11 | 71.66 | 58.96 | 31.25 | 36.69 | 53.06 | 51.69 |
EverOS | 94.37 | 28.11 | 20.33 | 86.07 | 68.62 | 84.70 | 39.77 | 42.60 | 52.04 | 57.40 |
Average 57.40, 5.71 points above the next system, and highest on six of the nine types.
Update is the widest gap on any benchmark here, 84.70 against 58.96. Update questions ask what the current state is after it has changed, which requires finding the change and knowing it superseded something. Rounds help because the first query usually finds the old state, the decider can see that it is not the answer, and it searches again. Const (86.07) and Multi (28.11) are the same kind of gain.
One row here is worth reading on its own: Full Context is handed the entire context and still scores 2.41 on multi-hop and 7.00 on temporal. Opening k all the way is not the answer, because redundancy hurts accuracy by itself.
On comparability: RippleMem’s paper reports 54.75 as a size-weighted mean; computed as an unweighted mean over the same nine types it is 51.69, which is the figure in this table.
SubtleMemory
Evidence that has to be combined or reconciled. 1,522 instances, grouped by how the evidence relates. The + OpenClaw rows add an agentic reader on top of the memory system.
Method | Compl. Multi-evi. | Compl. Any-one | Compl. Overall | Nuanced Temporal | Nuanced Context. | Nuanced Overall | Contradictory | All |
|---|---|---|---|---|---|---|---|---|
n | 211 | 150 | 361 | 396 | 388 | 784 | 377 | 1522 |
MemoBase | 26.5 | 43.3 | 33.5 | 33.3 | 44.6 | 38.9 | 16.7 | 32.1 |
MIRIX | 47.9 | 52.0 | 49.6 | 51.8 | 69.3 | 60.5 | 14.6 | 46.5 |
MetaClaw | 15.6 | 20.0 | 17.5 | 17.7 | 26.8 | 22.2 | 19.1 | 20.3 |
MemOS | 51.2 | 58.0 | 54.0 | 70.2 | 77.8 | 74.0 | 23.9 | 56.8 |
MemOS + OpenClaw | 57.3 | 66.7 | 61.2 | 67.7 | 80.2 | 73.9 | 15.9 | 56.5 |
OpenClaw | 62.6 | 55.3 | 59.6 | 80.3 | 83.0 | 81.6 | 25.5 | 62.5 |
Mem0 | 61.1 | 61.3 | 61.2 | 81.3 | 85.8 | 83.5 | 46.2 | 69.0 |
A-Mem | 58.3 | 61.3 | 59.6 | 83.1 | 85.3 | 84.2 | 50.4 | 70.0 |
Mem0 + OpenClaw | 70.1 | 61.3 | 66.5 | 86.4 | 85.3 | 85.8 | 45.6 | 71.3 |
EverOS | 74.88 | 71.33 | 73.41 | 86.36 | 89.43 | 87.88 | 36.60 | 71.75 |
Oracle | 79.6 | 87.3 | 82.8 | 95.5 | 93.8 | 94.6 | 68.7 | 85.4 |
The Complementary block is this approach in its clearest form: evidence spread across instances that must be gathered before the question can be answered, and how many pieces is not something you can set in advance. Overall 73.41 against 66.5 for the next system, and on the hardest sub-column (Multi-evi., where more than one piece is required) 74.88 against 70.1, close to that column’s Oracle bound of 79.6. Nuanced overall at 87.88 is also the highest in the table.
Worth noting: + OpenClaw does not reliably help. It lifts Complementary for both MemOS and Mem0 and lowers their Contradictory numbers. An agentic reader on top of retrieval is not a substitute for retrieving the right thing.
LongMemEval-S
500 questions. This table varies something else: the model that writes the stored episode. Rows are extraction backbones, columns are answer models, everything else fixed. Oracle answers from gold evidence and bounds any retriever.
Extraction backbone | gpt-4.1-mini | gemini-3.6-flash | deepseek-v4-flash | gpt-5.6-terra | claude-sonnet-5 | Avg. |
|---|---|---|---|---|---|---|
DeepSeek-v4-pro | 90.4 (91.8) | 94.0 (94.6) | 93.2 (94.0) | 91.4 (93.4) | 93.4 (94.4) | 92.48 (93.64) |
Qwen3.6-27B | 87.2 (86.4) | 92.4 (92.2) | 90.6 (91.2) | 91.6 (89.6) | 89.4 (89.8) | 90.24 (89.84) |
GPT-4.1-mini | 88.6 (87.2) | 91.6 (91.0) | 91.0 (89.2) | 89.8 (90.2) | 88.8 (89.6) | 89.96 (89.44) |
Gemini-2.5-flash | 86.4 (89.4) | 91.2 (91.6) | 90.0 (91.6) | 89.0 (90.6) | 89.6 (91.2) | 89.24 (90.88) |
Oracle | 96.2 | 96.6 | 96.2 | 96.8 | 96.6 | 96.48 |
The parenthesised figure in each cell is that row’s own ceiling: the answer model is handed the extracted episodes corresponding to the gold evidence, so retrieval is effectively perfect and only the extraction backbone’s own quality limits the score. The bottom Oracle row is the harder bound, answering from the gold evidence itself with no extraction in the path.
Two ceilings means the remaining gap can be split. The first figure to the parenthesised one is retrieval loss; the parenthesised one to Oracle is extraction loss.
Extraction backbone | Retrieval | Own ceiling | Retrieval loss | Extraction loss |
|---|---|---|---|---|
DeepSeek-v4-pro | 92.48 | 93.64 | 1.16 | 2.84 |
Qwen3.6-27B | 90.24 | 89.84 | -0.40 | 6.64 |
GPT-4.1-mini | 89.96 | 89.44 | -0.52 | 7.04 |
Gemini-2.5-flash | 89.24 | 90.88 | 1.64 | 5.60 |
Retrieval loss is at most 1.64 points on any backbone, and on two of the four the retrieval path scores slightly above its own ceiling. That is not a contradiction: the ceiling row hands over only the episodes tied to the gold evidence, while the retrieval path returns its core set, which can carry adjacent detail the answer model finds useful. Read it as a reference point rather than a hard bound.
The split is the useful part. Almost all of the distance left to Oracle on this benchmark is extraction loss, between 2.84 and 7.04 points, while multi-round retrieval gives up about a point. Picking the extraction backbone is worth as much here as anything done at retrieval time, and DeepSeek-v4-pro is the one to pick: it leads both on retrieval (92.48) and on its own ceiling (93.64).
What it all says
Fixed top-k costs something at both ends, and not something a parameter sweep can remove: at k=1 Recall is 0.6199 and the evidence is short; at k=20 the prompt is 76% larger than at k=10 for no gain at all. And k is a configuration value, chosen before any query arrives.
Handing the budget to the model avoids both ends. Core selection averages 1.95 episodes and 23% of the prompt per query, reaches 97.4% of peak accuracy, and beats the fixed setting of comparable size outright. That is saved on every request, not once.
The accuracy is also the highest. The largest margins are all on the kinds of query where the evidence is spread out: multi-hop on LoCoMo (96.10), Update on EverMemBench (84.70), and Complementary multi-evidence on SubtleMemory (74.88). These are the same shape of question, where the answer needs two or more pieces of evidence that sit far apart in any single ranking.
EverOS is first overall on all four: LoCoMo 94.42, EverMemBench 57.40, SubtleMemory 71.75, and on LongMemEval-S the best configuration reaches 92.48, about a point off its own extraction ceiling.
You may also like these
Related

Do public SKILL.md files actually make agents better?
SkillCorpus,SKILL.md,agent skills,skill curation,skill retrieval,LLM agents,SkillsBench,GDPVal,agent harness

CRAFT: learning how to fuse video tokens, not just which to drop
CRAFT,video token compression,vision-language models,video VLM,KV cache,prefill cost,token merging,token pruning,temporal reasoning

Self-evolving agents have a measurement problem
self-evolving agents,agent harness,HarnessBank,credit assignment,LLM agents,agent evaluation,harness optimization,significance testing

Skill Hub: a measured foundation for community-powered agents
skillhub,skill benchmark,SKILL.md,community skills,ai agent


