Private beta becos is in private beta. To get access, join the waitlist — or . Join the waitlist:
Benchmark

becos memory benchmark

Does becos memory help Claude Code? We took questions our engineering team had already answered in previous work and asked Claude Code to answer them again, with and without becos memory. We measured two things: whether Claude got the answer right, and how many tokens and dollars it took to get there.

Updated 2026-11-04 · 10 questions

Results in brief

  1. Questions answerable only from past sessions. becos made the difference. Across the 3 questions in this category, memory reached the correct answer in 8 of 9 runs. Neither of the two alternatives, working without memory or repeating the original investigation, succeeded in any of their 15 runs.
  2. Questions requiring a long investigation. becos helped Claude reach the same correct answers with 82% fewer tokens and 70% lower cost.
  3. Questions answerable from commit and log messages. Little difference. becos used 5% fewer tokens but cost 5% more.
  4. Questions answerable directly from code. Memory offered little advantage. becos used 15% more tokens and cost 24% more because the answers were already easy to find.

A small sample: 10 questions from our own team's work, with three runs per setup. The 82% saving includes one question (Q5) measured against a single run, because only 1 of 3 runs without memory got it right. See Limitations.

How we ran the experiment

The questions

Every question came from a real investigation in our team's work. We then asked Claude the same question again, as if a teammate had returned to the problem a few days later.

Three ways to answer

Each question ran on two or three of these setups.

With memoryClaude Code with the becos plugin, which recalls relevant past sessions into each prompt.
Without memoryClaude Code without the plugin, working only from the code in its workspace.
Redo the investigationNo plugin. Claude first repeats the original request, then answers the question. This measures the cost of reconstructing the work from scratch.

The memory

We used a frozen export of our team's becos memory, taken on 31 October 2026. It contained 467 captured coding-agent turns from 10 August to 31 October 2026 and 13,141 facts extracted from them. Most of those facts are about the becos plugins (Claude Code, OpenCode, Cursor, Codex), our server code and our planning notes.

For each question, we cut the memory off at the time the question was originally asked, so it contained only information available at that point. A local copy of the becos stack served it, and nothing in the experiment touched becos.ai.

The workspace

Repositories were checked out at the commits that existed when each question was originally asked. This prevented later code changes from revealing the answer.

Model and tools

Every run used Claude Code on Sonnet 5.5, with read, search and git tools only, restricted to the relevant workspace. Runs that accessed anything outside it were discarded.

How we judged answers

Each question's answer key lists only what the question asks, one checkable yes/no fact per line. Every fact was verified in the code at that commit or, for a plan or decision, in the session where it was made, and a person approved each key before any run. An answer is correct when every fact is there. A wrong claim is a statement the code shows to be false; leaving something out, or adding a true fact the key doesn't mention, doesn't count.

Before grading, a separate small model rewrote every answer on every side to remove references to memory, past sessions, dates and information sources, changing no technical claim. Claude Opus 5.5 then evaluated each answer fact by fact and quoted the sentence it matched.

If an answer wasn't fully correct, Claude received a neutral follow-up ("a reviewer says your answer is incomplete or wrong in places; keep investigating"), up to three times. The follow-up never said what was missing.

Two answer keys

Each question had two keys. A session key captured what the original discussion concluded, and graded whether recall delivered it. A truth key captured what was actually correct according to the code or original decision, and graded the answers. The two could differ: Q10's original discussion said login might work on Windows, while the code showed that it didn't.

How we measured cost

We counted tokens and dollars up to the first correct answer, including recall text and any repeated investigation. Token counts included cached and uncached tokens alike, so the order of the runs can't change them. We repeated each setup three times in alternating order.

How we calculated savings

We compared memory's median cost and token usage against the alternatives that also reached a correct answer. We calculated cost savings and token savings separately, using the alternative with the lowest median cost for the cost comparison and the alternative with the lowest median token usage for the token comparison. Choosing the best alternative makes the saving as small as it can honestly be.

Runs that never produced a correct answer were excluded. A cheap wrong answer isn't a saving.

Results by category

Each card shows the latest complete round: how many runs reached a fully correct answer, and the median cost and tokens to get there. Cost is only compared between runs that got the answer right.

1Questions answerable only from past sessions

These questions tested whether Claude could recover information that existed only in previous discussions: experimental findings, plans that were never implemented, and decisions made during earlier investigations. The code and documentation didn't contain the answers.

Runs that reached a correct answer, all questions in this group together. Red: never got there, with what each run spent trying
Q1–Q3
With memory
8/9 correct · $0.09 each
Without memory
0/9 correct · $0.23–$0.67 spent, no answer
Redo the investigation
0/6 correct · $0.34–$0.89 spent, no answer
only memory reached a correct answer, so this is a can-versus-can't result, not a percentage saving. Memory's cost is the median per correct answer
Q1 · Session-only: a cause found by experiment
Why does vonic_query return no answer text?
With memory
3/3
correct
$0.10 · 103k
Without memory
0/3
correct
— · —
Redo the investigation
0/3
correct
— · —

Memory was correct on the first answer in all 3 runs, at $0.09-0.20 and 8 tool calls.

Details
Q2 · Session-only: a plan never built
What did we plan for expired sign-ins?
With memory
3/3
correct
$0.06 · 52k
Without memory
0/3
correct
— · —
Redo the investigation
0/3
correct
— · —

Memory was correct on the first answer in all 3 runs, at $0.05-0.07 and 4-7 tool calls.

Details
Q3 · Session-only: an approach rejected in discussion
When we moved the repos, what came up, and was each transferred or copied?
With memory
2/3
correct
$0.34 · 413k
Without memory
0/3
correct
— · —

Memory reached a correct answer in 2 of 3 runs ($0.20 and $0.48). Without memory, no run did, after $0.23-0.25 each.

Details

2Questions requiring a long investigation

The answer can be worked out from the code, but it took a long cross-repo investigation. Memory carries the conclusion; the other sides have to redo the work.

Average of the 3 questions' savings: memory against the best alternative that also got a correct answer (medians, to the first correct answer)
Q4–Q6
Tokens
82% saved
Cost
70% saved
Q4: tokens 78% saved, cost 60% saved (vs without memory) · Q5: tokens 91% saved, cost 78% saved (vs without memory) · Q6: tokens 77% saved, cost 72% saved (vs redo the investigation)
Q4 · Cross-repo analysis
Why are todos never stored?
With memory
3/3
correct
$0.10 · 72k
Without memory
3/3
correct
$0.25 · 323k
Redo the investigation
3/3
correct
$0.26 · 363k

Every side reached a correct answer; memory did it for about 60% less money and 78% fewer tokens.

Details
Q5 · Cross-repo analysis
How does recall reach the model, and is there a size limit?
With memory
3/3
correct
$0.13 · 93k
Without memory
1/3
correct
$0.61 · 1.09M
Redo the investigation
3/3
correct
$1.07 · 2.22M

Memory was correct on the first answer in all 3 runs, at $0.12-0.15 and 6-8 tool calls.

Details
Q6 · Cross-repo analysis
Why does file history throw away real answers?
With memory
3/3
correct
$0.14 · 142k
Without memory
0/3
correct
— · —
Redo the investigation
3/3
correct
$0.51 · 615k

Memory was correct on the first answer in all 3 runs, at $0.10-0.16 and 9-18 tool calls.

Details

3Questions answerable from commit and log messages

Why we included these questions: the answers are already recorded in commit messages, changelogs or decision logs. An agent can find them without memory, so these questions help measure whether becos adds value when the information is already accessible.

Average of the 2 questions' savings: memory against the best alternative that also got a correct answer (medians, to the first correct answer)
Q7–Q8
Tokens
5% saved
Cost
5% more
Q7: tokens 2% saved, cost 31% more (vs without memory) · Q8: tokens 8% saved, cost 20% saved (vs without memory)
Q7 · Control: answer written in the changelog
What did a teammate decide about the static instructions?
With memory
3/3
correct
$0.05 · 40k
Without memory
3/3
correct
$0.04 · 41k

Both sides were correct on the first answer in every run, at $0.04-0.05.

Details
Q8 · Control: answer written in a commit and the team's TODO list
Why does recall list the same fact several times?
With memory
3/3
correct
$0.11 · 156k
Without memory
3/3
correct
$0.14 · 170k

Memory was correct on the first answer in all 3 runs, at $0.08-0.15; without memory 3 of 3, one on its second answer, at $0.13-0.24.

Details

4Questions answerable directly from code

Why we included these questions: the answers were directly available in the code. These questions tested whether memory adds unnecessary overhead when a simple code search is enough.

Average of the 2 questions' savings: memory against the best alternative that also got a correct answer (medians, to the first correct answer)
Q9–Q10
Tokens
15% more
Cost
24% more
Q9: tokens 43% more, cost 21% more (vs without memory) · Q10: tokens 13% saved, cost 28% more (vs redo the investigation)
Q9 · Control, and a case where memory misled
How is a fact's author decided?
With memory
3/3
correct
$0.16 · 155k
Without memory
3/3
correct
$0.14 · 108k

Without memory: correct on the first answer in every run, at $0.09-0.20. With memory: every first answer repeated a conclusion the original session had withdrawn, and the runs recovered after 2-3 answers by reading the code, at $0.14-0.23.

Details
Q10 · Control
Will the plugin work on Windows?
With memory
3/3
correct
$0.13 · 94k
Without memory
3/3
correct
$0.14 · 113k
Redo the investigation
3/3
correct
$0.10 · 109k

All three sides were correct on the first answer in every run. Memory cost $0.13, no memory $0.14 and redoing the investigation $0.10, so memory cost 28% more than the cheapest side.

Details

Category 1

Questions answerable only from past sessions

These questions tested whether Claude could recover information that existed only in previous discussions: experimental findings, plans that were never implemented, and decisions made during earlier investigations. The code and documentation didn't contain the answers.

Q1: Why does vonic_query return no answer text?

Session-only: a cause found by experiment

Question. “When I call vonic_query from Claude Code through the becos connector it says outcome answered but there's no answer text. Why, and what's the fix?”

The cause isn't in any repository: Claude Code shows the model only a tool's structured receipt and drops the text that holds the answer. The original session saw it live. Asked with no code, Claude scored 0 of 2.

Original investigation: 2026-10-05. · Workspace: the API server and the Claude Code plugin, at the commits current when the question was asked

What a correct answer contains (every fact required)

  • 1Why: the server sends the answer as text plus a status receipt, and Claude Code shows the model only the receipt, so the answer never reaches it.
  • 2Fix: get the answer text to where Claude Code shows it without breaking the plugins, e.g. change only the external connector.

What recall delivered

Of the 2 facts, recall's 8,896 characters delivered 2 fully, 0 partly, and 0 not at all. Both facts were in the recalled memory.

What we read from it

  • Memory was correct on the first answer in all 3 runs, at $0.09-0.20 and 8 tool calls.
  • Without memory and when redoing the investigation, no run got there in 4 answers, after spending $0.60-0.89 each.
  • The code shows the server sends both parts; it can't show that Claude Code drops one. One redo run saw the split and ruled it out.

Results · 2026-11-01

Yes/no facts; Claude Code's behaviour verified with a local MCP probe on 2.1.316.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory3 of 3 (answer 1, 1, 1) $0.10, $0.09, $0.2083k, 103k, 120k 100%, 100%, 100%0, 0, 0 $0.10 · 103k—
Without memory0 of 3 —— 0%, 0%, 0%0, 0, 0 $0.18 · 220k$0.67, $0.65, $0.60 · 1.50M, 1.34M, 1.34M
Redo the investigation0 of 3 —— 0%, 0%, 0%1, 1, 2 $0.28 · 413k$0.89, $0.81, $0.85 · 2.39M, 1.90M, 2.06M
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q1-on-r1Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.1083k8
Q1-on-r2Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.09103k8
Q1-on-r3Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.20120k8
Q1-off-r1Answer 1 ✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✗ 0% of key · 1 wrong claim
Answer 3 ✗✗ 0% of key · 2 wrong claims
Answer 4 ✗✗ 0% of key · 2 wrong claims
$0.671.50M47
Q1-off-r2Answer 1 ✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✗ 0% of key · 3 wrong claims
Answer 3 ✗✗ 0% of key · 3 wrong claims
Answer 4 ✗✗ 0% of key · 3 wrong claims
$0.651.34M44
Q1-off-r3Answer 1 ✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✗ 0% of key · 2 wrong claims
Answer 3 ✗✗ 0% of key · 2 wrong claims
Answer 4 ✗✗ 0% of key · 3 wrong claims
$0.601.34M45
Q1-off-full-r1Answer 1 ✗✗ 0% of key · 1 wrong claim
Answer 2 ✗✗ 0% of key · 3 wrong claims
Answer 3 ✗✗ 0% of key · 1 wrong claim
Answer 4 ✗✗ 0% of key · 1 wrong claim
$0.892.39M62
Q1-off-full-r2Answer 1 ✗✗ 0% of key · 1 wrong claim
Answer 2 ✗✗ 0% of key · 2 wrong claims
Answer 3 ✗✗ 0% of key · 2 wrong claims
Answer 4 ✗✗ 0% of key · 2 wrong claims
$0.811.90M49
Q1-off-full-r3Answer 1 ✗✗ 0% of key · 2 wrong claims
Answer 2 ✗✗ 0% of key · 2 wrong claims
Answer 3 ✗✗ 0% of key · 3 wrong claims
Answer 4 ✗✗ 0% of key · 3 wrong claims
$0.852.06M59

Q2: What did we plan for expired sign-ins?

Session-only: a plan never built

Question. “install.sh just says 'already signed in' even when someone's becos sign-in has expired. What did we plan to do about that?”

The plan was made in a session and never built, so no code or doc contains it. Asked with no code, Claude scored 0 of 2.

Original investigation: 2026-10-31. · Workspace: the public plugin marketplace and the Claude Code plugin, at the commits current when the question was asked

What a correct answer contains (every fact required)

  • 1A connect.py check command that asks the gateway whether the saved sign-in still works (works / rejected / unreachable).
  • 2install.sh re-runs the browser sign-in only when the sign-in is rejected; if the gateway is unreachable it keeps the sign-in and warns.

What recall delivered

Of the 2 facts, recall's 6,539 characters delivered 1 fully, 1 partly, and 0 not at all. Recall carried the re-sign-in rule in full and the check command in part.

What we read from it

  • Memory was correct on the first answer in all 3 runs, at $0.05-0.07 and 4-7 tool calls.
  • Without memory and when redoing the investigation, no run got there; they proposed their own designs instead, at $0.34-0.72 each.
  • Several no-memory answers said 'no plan exists', which the judge counted as a wrong claim: the plan existed, but only in a past session.

Results · 2026-11-01

Yes/no facts from the session's final plan.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory3 of 3 (answer 1, 1, 1) $0.05, $0.07, $0.0637k, 81k, 52k 100%, 100%, 100%0, 0, 0 $0.06 · 52k—
Without memory0 of 3 —— 0%, 0%, 0%2, 0, 1 $0.11 · 93k$0.38, $0.39, $0.37 · 664k, 709k, 639k
Redo the investigation0 of 3 —— 0%, 0%, 0%2, 0, 0 $0.22 · 261k$0.57, $0.72, $0.34 · 1.09M, 1.58M, 625k
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q2-on-r1Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.0537k4
Q2-on-r2Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.0781k7
Q2-on-r3Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.0652k6
Q2-off-r1Answer 1 ✗✗ 0% of key · 2 wrong claims
Answer 2 ✗✗ 0% of key · 1 wrong claim
Answer 3 ✗✗ 0% of key · 1 wrong claim
Answer 4 ✗✗ 0% of key · 1 wrong claim
$0.38664k39
Q2-off-r2Answer 1 ✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✗ 0% of key · 0 wrong claims
Answer 3 ✗✗ 0% of key · 0 wrong claims
Answer 4 ✗✗ 0% of key · 1 wrong claim
$0.39709k41
Q2-off-r3Answer 1 ✗✗ 0% of key · 1 wrong claim
Answer 2 ✗✗ 0% of key · 1 wrong claim
Answer 3 ✗✗ 0% of key · 1 wrong claim
Answer 4 ✗✗ 0% of key · 0 wrong claims
$0.37639k38
Q2-off-full-r1Answer 1 ✗✗ 0% of key · 2 wrong claims
Answer 2 ✗✗ 0% of key · 2 wrong claims
Answer 3 ✗✗ 0% of key · 1 wrong claim
Answer 4 ✗✗ 0% of key · 1 wrong claim
$0.571.09M47
Q2-off-full-r2Answer 1 ✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✗ 0% of key · 1 wrong claim
Answer 3 ✗✗ 0% of key · 2 wrong claims
Answer 4 ✗✗ 0% of key · 1 wrong claim
$0.721.58M52
Q2-off-full-r3Answer 1 ✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✗ 0% of key · 1 wrong claim
Answer 3 ✗✓ 50% of key · 1 wrong claim
Answer 4 ✗✓ 50% of key · 2 wrong claims
$0.34625k33

Q3: When we moved the repos, what came up, and was each transferred or copied?

Session-only: an approach rejected in discussion

Question. “When we moved the plugin repos (Claude, Codex, OpenCode) to the becos-ai org, which approaches came up, and was each repo actually transferred or copied?”

Git shows the outcome (two repos were copied and froze). Only the session shows that forking was considered and rejected, and that the Codex repo was transferred.

Original investigation: 2026-09-15 to 09-16. · Workspace: the Claude Code plugin, at the commits current when the question was asked

What a correct answer contains (every fact required)

  • 1Forking the repos into becos-ai was considered and rejected in favour of a GitHub ownership transfer.
  • 2The Claude and OpenCode repos were copied into new org repos instead, so their old URLs have no redirect and stopped getting updates.
  • 3The Codex repo was transferred, so its old URL redirects to becos-ai.

What recall delivered

Of the 3 facts, recall's 8,443 characters delivered 2 fully, 1 partly, and 0 not at all. Recall carried the fork rejection and the Codex transfer in full, and the copies in part; the copies are in git anyway.

What we read from it

  • Memory reached a correct answer in 2 of 3 runs ($0.20 and $0.48). Without memory, no run did, after $0.23-0.25 each.
  • Every memory answer had the fork discussion; no answer without memory did, because git doesn't record it.
  • Asked directly whether Codex was transferred or copied, memory answers usually sided with the commit message over memory, and got Codex right only on a later answer, if at all.
A stale commit message against correct memory.

Commit xxxxxxx's message says all three old repos 'were copied, not transferred'. That is true for Claude and OpenCode and false for Codex: GitHub still redirects the old Codex URL, and its org repo predates the move. The message was written with Claude, so it is no more authoritative than the session.

Memory answers said Codex was transferred, then met the commit and either repeated it or called it a conflict they couldn't settle. We grade the Codex fact as present when an answer states the transfer, even if it also notes the commit disagrees, and count 'Codex was copied' as a wrong claim only when it is stated as fact without the conflict.

With the question asking 'was each repo transferred or copied?', the agent had to choose. In 6 of the 10 memory answers, it weighed the two records and chose the commit ('the copied account is probably right'). It can't open the cited memory record in this benchmark, so it had no way to check which one was right.

Latest round · 2026-11-01

The question now asks transferred-or-copied for each repo; graded with the Codex rule below.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory2 of 3 (answer 4, 2) $0.48, $0.20615k, 211k 67%, 67%, 67%0, 0, 0 $0.07 · 44k$0.36 · 479k
Without memory0 of 3 —— 0%, 0%, 0%0, 0, 0 $0.06 · 62k$0.24, $0.23, $0.25 · 351k, 291k, 412k
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q3-on-r1Answer 1 ✓✗✓ 66% of key · 0 wrong claims
Answer 2 ✓✓✗ 66% of key · 0 wrong claims
Answer 3 ✓✓✗ 66% of key · 0 wrong claims
Answer 4 ✓✓✗ 66% of key · 1 wrong claim
$0.36479k18
Q3-on-r2Answer 1 ✓✗✓ 66% of key · 0 wrong claims
Answer 2 ✓✓✗ 66% of key · 0 wrong claims
Answer 3 ✓✓✗ 66% of key · 0 wrong claims
Answer 4 ✓✓✓ 100% of key · 0 wrong claims · correct
$0.48615k21
Q3-on-r3Answer 1 ✓✓✗ 66% of key · 0 wrong claims
Answer 2 ✓✓✓ 100% of key · 0 wrong claims · correct
$0.20211k11
Q3-off-r1Answer 1 ✗✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✓✗ 33% of key · 1 wrong claim
Answer 3 ✗✓✗ 33% of key · 3 wrong claims
Answer 4 ✗✓✗ 33% of key · 1 wrong claim
$0.24351k23
Q3-off-r2Answer 1 ✗✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✓✗ 33% of key · 2 wrong claims
Answer 3 ✗✓✗ 33% of key · 3 wrong claims
Answer 4 ✗✓✗ 33% of key · 1 wrong claim
$0.23291k17
Q3-off-r3Answer 1 ✗✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✗✗ 0% of key · 0 wrong claims
Answer 3 ✗✓✗ 33% of key · 2 wrong claims
Answer 4 ✗✗✗ 0% of key · 2 wrong claims
$0.25412k27

Earlier round · 2026-11-01

Earlier wording ('which approaches went wrong?'), re-graded with the Codex rule; follow-ups were decided by the stricter first grading.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory3 of 3 (answer 1, 2, 2) $0.07, $0.14, $0.1542k, 120k, 126k 100%, 67%, 67%1, 0, 0 $0.05 · 27k—
Without memory0 of 3 —— 0%, 33%, 0%0, 1, 0 $0.07 · 59k$0.41, $0.27, $0.29 · 698k, 348k, 458k
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q3-on-r1Answer 1 ✓✓✓ 100% of key · 1 wrong claim · correct
Answer 2 ✓✓✓ 100% of key · 0 wrong claims · correct
Answer 3 ✓✓✓ 100% of key · 0 wrong claims · correct
Answer 4 ✓✓✓ 100% of key · 0 wrong claims · correct
$0.31340k13
Q3-on-r2Answer 1 ✓✗✓ 66% of key · 0 wrong claims
Answer 2 ✓✓✓ 100% of key · 1 wrong claim · correct
Answer 3 ✓✓✓ 100% of key · 0 wrong claims · correct
Answer 4 ✓✓✓ 100% of key · 1 wrong claim · correct
$0.30278k10
Q3-on-r3Answer 1 ✓✗✓ 66% of key · 0 wrong claims
Answer 2 ✓✓✓ 100% of key · 0 wrong claims · correct
$0.15126k6
Q3-off-r1Answer 1 ✗✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✓✗ 33% of key · 1 wrong claim
Answer 3 ✗✓✗ 33% of key · 1 wrong claim
Answer 4 ✗✓✗ 33% of key · 2 wrong claims
$0.41698k29
Q3-off-r2Answer 1 ✗✓✗ 33% of key · 1 wrong claim
Answer 2 ✗✓✗ 33% of key · 1 wrong claim
Answer 3 ✗✓✗ 33% of key · 1 wrong claim
Answer 4 ✗✓✗ 33% of key · 1 wrong claim
$0.27348k17
Q3-off-r3Answer 1 ✗✗✗ 0% of key · 0 wrong claims
Answer 2 ✗✓✗ 33% of key · 1 wrong claim
Answer 3 ✗✓✗ 33% of key · 1 wrong claim
Answer 4 ✗✓✗ 33% of key · 1 wrong claim
$0.29458k19

Category 2

Questions requiring a long investigation

The answer can be worked out from the code, but it took a long cross-repo investigation. Memory carries the conclusion; the other sides have to redo the work.

Q4: Why are todos never stored?

Cross-repo analysis

Question. “Team activity never shows any todo entries. Why aren't todos being stored in becos_xxxxxx, and what is the right fix?”

The cause sits in another repository (becos_xxxxxx), and the fix was designed in a past session. Memory should help most here.

Original investigation: 2026-10-26: 14 tool calls, 2.2 minutes. · Workspace: the Claude Code plugin, the memory server and the deployment repo, at the commits current when the question was asked

What a correct answer contains (every fact required)

  • 1Why: when becos_xxxxxx extracts facts from a conversation, production gives the model a 7-kind list with no todo, so no fact is ever stored as todo.
  • 2Fix: a change that lets production's extraction store todo, such as adding todo to the short list and its kind map, or switching to the full list.

What recall delivered

Of the 2 facts, recall's 9,375 characters delivered 2 fully, 0 partly, and 0 not at all. Both the cause and the fix were in the recalled memory, which is why the memory runs answered after 5-7 tool calls.

What we read from it

  • Every side reached a correct answer; memory did it for about 60% less money and 78% fewer tokens.
  • Memory needed 5-7 tool calls; the other sides 18-43.
  • Three runs per side: read the size of the saving as a direction, not a measured figure.

Results · 2026-11-01

Yes/no facts checked in code; every answer rewritten neutrally before grading.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory3 of 3 (answer 1, 1, 1) $0.11, $0.10, $0.0997k, 72k, 71k 100%, 100%, 100%0, 0, 0 $0.10 · 72k—
Without memory3 of 3 (answer 1, 2, 1) $0.25, $0.49, $0.19323k, 873k, 253k 100%, 0%, 100%0, 1, 0 $0.21 · 253k—
Redo the investigation3 of 3 (answer 1, 1, 1) $0.30, $0.24, $0.26410k, 315k, 363k 100%, 100%, 100%0, 0, 0 $0.26 · 363k—
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q4-on-r1Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.1197k7
Q4-on-r2Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.1072k6
Q4-on-r3Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.0971k5
Q4-off-r1Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.25323k28
Q4-off-r2Answer 1 ✗✗ 0% of key · 1 wrong claim
Answer 2 ✓✓ 100% of key · 0 wrong claims · correct
$0.49873k43
Q4-off-r3Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.19253k19
Q4-off-full-r1Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.30410k23
Q4-off-full-r2Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.24315k18
Q4-off-full-r3Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.26363k24

Q5: How does recall reach the model, and is there a size limit?

Cross-repo analysis

Question. “If we build another adapter, how does recalled memory actually reach the model in our Claude Code plugin versus the OpenCode plugin, and is there a size limit on the Claude side we have to design around?”

How each plugin delivers recall is in the code. The Claude Code limit on total hook output was known only from past sessions at the asked time.

Original investigation: 2026-09-28: 69 tool calls, 10.2 minutes. · Workspace: the Claude Code plugin and the OpenCode plugin, at the commits current when the question was asked

What a correct answer contains (every fact required)

  • 1Claude Code: recall is injected automatically by the UserPromptSubmit hook as additionalContext; the model calls no recall tool.
  • 2OpenCode: the default is tool-only, so the model has to call codecollab_recall; injecting is optional.
  • 3Claude Code caps total hook output (about 10k characters, then only a preview), and the instruction text counts toward it, so an adapter budgets the whole output.

What recall delivered

Of the 3 facts, recall's 9,206 characters delivered 1 fully, 2 partly, and 0 not at all. Recall carried the hook-output limit in full and the two delivery paths in part; those are in the code anyway.

What we read from it

  • Memory was correct on the first answer in all 3 runs, at $0.12-0.15 and 6-8 tool calls.
  • Redoing the investigation was also correct in all 3 runs, but at $0.98-1.17 and 53-56 tool calls: memory cost about 88% less and used about 96% fewer tokens.
  • Without memory, 1 of 3 runs got there, on its 4th answer ($0.61). The others kept saying Claude Code's limit is 'not on record', and several claimed the recall cap is the only limit.
  • This question's headline saving (91% of tokens, 78% of cost) is against that one run, because without memory was the cheapest side to reach a correct answer. It also feeds the category average, so read it with the comparison above against redoing the investigation, which got there in all 3 runs.
General knowledge didn't help once the code was open.

The hook-output cap is in Claude Code's public docs, and asked with no code and no tools, Claude recalled 'roughly 10,000 characters' in all 3 tries. We expected Q5 to behave like Q10, a control.

It didn't. With the repositories open, the no-memory runs looked for the limit in the repo, didn't find it, and reported it as unknown. Some suggested testing whether 20,000 characters was safe. They trusted the repo over what they knew.

Memory supplied the limit from the original session, so every memory answer had it from the start.

Results · 2026-11-01

Yes/no facts; F3 checked against Claude Code's hooks documentation.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory3 of 3 (answer 1, 1, 1) $0.15, $0.12, $0.13120k, 88k, 93k 100%, 100%, 100%0, 0, 0 $0.13 · 93k—
Without memory1 of 3 (answer 4) $0.611.09M 67%, 67%, 67%0, 1, 2 $0.13 · 129k$0.75, $0.59 · 1.45M, 875k
Redo the investigation3 of 3 (answer 2, 1, 4) $1.17, $1.07, $0.982.24M, 2.22M, 1.76M 67%, 100%, 67%0, 0, 0 $0.90 · 1.34M—
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q5-on-r1Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.15120k8
Q5-on-r2Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.1288k6
Q5-on-r3Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.1393k8
Q5-off-r1Answer 1 ✓✓✗ 66% of key · 0 wrong claims
Answer 2 ✓✓✗ 66% of key · 1 wrong claim
Answer 3 ✓✓✗ 66% of key · 0 wrong claims
Answer 4 ✓✓✗ 66% of key · 1 wrong claim
$0.751.45M47
Q5-off-r2Answer 1 ✓✓✗ 66% of key · 1 wrong claim
Answer 2 ✓✓✗ 66% of key · 3 wrong claims
Answer 3 ✓✓✗ 66% of key · 2 wrong claims
Answer 4 ✓✓✓ 100% of key · 3 wrong claims · correct
$0.611.09M40
Q5-off-r3Answer 1 ✓✓✗ 66% of key · 2 wrong claims
Answer 2 ✓✓✗ 66% of key · 2 wrong claims
Answer 3 ✓✓✗ 66% of key · 0 wrong claims
Answer 4 ✓✓✗ 66% of key · 1 wrong claim
$0.59875k37
Q5-off-full-r1Answer 1 ✓✓✗ 66% of key · 0 wrong claims
Answer 2 ✓✓✓ 100% of key · 0 wrong claims · correct
$1.172.24M56
Q5-off-full-r2Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$1.072.22M53
Q5-off-full-r3Answer 1 ✓✓✗ 66% of key · 0 wrong claims
Answer 2 ✓✓✗ 66% of key · 0 wrong claims
Answer 3 ✓✓✗ 66% of key · 0 wrong claims
Answer 4 ✓✓✓ 100% of key · 0 wrong claims · correct
$0.981.76M56

Q6: Why does file history throw away real answers?

Cross-repo analysis

Question. “What exactly is wrong with how the plugin decides an entity-history answer is empty, and what is the smallest correct fix across the plugin copies?”

The answer can be worked out from the plugin code and its own decision log, but the original took a trace across six repositories. Memory holds the conclusion.

Original investigation: 2026-10-04: 119 tool calls. · Workspace: the Claude Code plugin, the Cursor plugin, the Codex plugin, the OpenCode plugin, the API server and the memory server, at the commits current when the question was asked

What a correct answer contains (every fact required)

  • 1What is wrong: the check strips the file-history header, treats any answer under 12 characters as empty, and counts an answer as empty if a server status message appears anywhere in it, so real answers are thrown away.
  • 2Why it is wrong: the recorded rule says emptiness comes from the server's receipt plus its known status messages, not from header text or answer length.
  • 3Smallest fix: an exact match against the server's known status messages, made once in the shared file and copied into the Cursor, Codex and OpenCode plugins, which are identical to it.

What recall delivered

Of the 3 facts, recall's 9,219 characters delivered 2 fully, 1 partly, and 0 not at all. Recall carried the bug and the rule in full, and the fix without naming the three copies.

What we read from it

  • Memory was correct on the first answer in all 3 runs, at $0.10-0.16 and 9-18 tool calls.
  • Redoing the investigation was also correct on the first answer every time, but at $0.49-0.57 and 41-49 tool calls.
  • Without memory, no run got there after $0.61-0.83 each: every answer found the 'match anywhere' problem but kept the 12-character rule or proposed a prefix match, which the shipped fix removed.

Results · 2026-11-02

Yes/no facts checked against the code; the shipped fix made the check an exact match only.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory3 of 3 (answer 1, 1, 1) $0.14, $0.16, $0.10142k, 163k, 81k 100%, 100%, 100%0, 0, 0 $0.14 · 142k—
Without memory0 of 3 —— 33%, 33%, 0%2, 1, 2 $0.20 · 188k$0.61, $0.64, $0.83 · 1.14M, 1.35M, 1.69M
Redo the investigation3 of 3 (answer 1, 1, 1) $0.51, $0.49, $0.57551k, 615k, 617k 100%, 100%, 100%0, 0, 0 $0.51 · 615k—
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q6-on-r1Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.14142k14
Q6-on-r2Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.16163k18
Q6-on-r3Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.1081k9
Q6-off-r1Answer 1 ✓✗✗ 33% of key · 2 wrong claims
Answer 2 ✓✗✓ 66% of key · 0 wrong claims
Answer 3 ✓✗✓ 66% of key · 0 wrong claims
Answer 4 ✓✗✗ 33% of key · 1 wrong claim
$0.611.14M54
Q6-off-r2Answer 1 ✗✗✓ 33% of key · 1 wrong claim
Answer 2 ✗✓✓ 66% of key · 1 wrong claim
Answer 3 ✗✗✓ 33% of key · 0 wrong claims
Answer 4 ✗✓✓ 66% of key · 1 wrong claim
$0.641.35M56
Q6-off-r3Answer 1 ✗✗✗ 0% of key · 2 wrong claims
Answer 2 ✗✗✗ 0% of key · 3 wrong claims
Answer 3 ✗✓✗ 33% of key · 1 wrong claim
Answer 4 ✗✓✗ 33% of key · 1 wrong claim
$0.831.69M61
Q6-off-full-r1Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.51551k41
Q6-off-full-r2Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.49615k47
Q6-off-full-r3Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.57617k49

Category 3

Questions answerable from commit and log messages

Why we included these questions: the answers are already recorded in commit messages, changelogs or decision logs. An agent can find them without memory, so these questions help measure whether becos adds value when the information is already accessible.

Q7: What did a teammate decide about the static instructions?

Control: answer written in the changelog

Question. “What did a teammate decide when the static instructions were moved out of the per-prompt recall hook?”

The whole answer is in the plugin's CHANGELOG 0.28.0 and decision log, so this shows what written records do without memory.

Original investigation: 2026-10-02. · Workspace: the Claude Code plugin, at the commits current when the question was asked

What a correct answer contains (every fact required)

  • 1The static texts are sent once at session start and again after compaction, not with every prompt.
  • 2Every prompt still carries one short reminder line.
  • 3Setting VONIC_CODECOLLAB_INSTRUCTIONS to legacy switches back to the old behaviour.

What recall delivered

Of the 3 facts, recall's 9,300 characters delivered 1 fully, 2 partly, and 0 not at all. Recall carried part of it; the changelog carried all of it.

What we read from it

  • Both sides were correct on the first answer in every run, at $0.04-0.05.
  • When the answer is written down where the agent looks, memory neither helps nor hurts.
Why memory had little to add: the decision log already says it.

The plugin keeps a decision log (docs/DECISIONS.md) and a CHANGELOG, and the team's decision is written in both, in full. Every no-memory run searched git log and the repo for the change, opened the DECISIONS.md entry, and was done in 4 tool calls.

Memory got there in 2-3 tool calls, but recall carried only part of the decision, so the runs still checked the written record. Two tool calls saved is worth less than a cent: $0.05 with memory against $0.04 without.

So a question whose answer a team already wrote down, where the agent naturally looks, is a control: memory can only repeat what the record says.

Results · 2026-11-01

Written-records control; with and without memory only.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory3 of 3 (answer 1, 1, 1) $0.06, $0.05, $0.0540k, 40k, 41k 100%, 100%, 100%0, 0, 0 $0.05 · 40k—
Without memory3 of 3 (answer 1, 1, 1) $0.04, $0.04, $0.0441k, 41k, 41k 100%, 100%, 100%0, 0, 0 $0.04 · 41k—
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q7-on-r1Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.0540k2
Q7-on-r2Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.0540k2
Q7-on-r3Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.0541k3
Q7-off-r1Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.0441k4
Q7-off-r2Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.0441k4
Q7-off-r3Answer 1 ✓✓✓ 100% of key · 0 wrong claims · correct$0.0441k4

Q8: Why does recall list the same fact several times?

Control: answer written in a commit and the team's TODO list

Question. “A single recall answer lists the same fact several times in slightly different words. Why does memory store reworded copies, and what have we done to fix that?”

The cause and the fix are written in becos_xxxxxx's commit xxxxxxx and in our TODO list, so this shows what written records do without memory.

Original investigation: 2026-10-23: 29 tool calls, about 5 minutes. · Workspace: the memory server and our planning repo, at the commits current when the question was asked

What a correct answer contains (every fact required)

  • 1Why: a turn sent again was extracted again each time, and the reworded copies slipped past the 0.97 dedupe.
  • 2What we did: MemForest now skips a turn it already has (same event id, or same conversation and turn number).

What recall delivered

Of the 2 facts, recall's 8,904 characters delivered 0 fully, 2 partly, and 0 not at all. Recall carried the cause and the fix in part; the commit and the TODO list carried all of it.

What we read from it

  • Memory was correct on the first answer in all 3 runs, at $0.08-0.15; without memory 3 of 3, one on its second answer, at $0.13-0.24.
  • Medians to a correct answer: $0.11 and 156k tokens with memory, $0.14 and 170k without. About even, as a control should be.
  • No answer on either side claimed the fix was made in the plugins.

Results · 2026-11-02

Written-records control; with and without memory only. 'Fixed in the plugins' or 'at both ends' counts as a wrong claim.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory3 of 3 (answer 1, 1, 1) $0.15, $0.08, $0.11185k, 97k, 156k 100%, 100%, 100%0, 0, 0 $0.11 · 156k—
Without memory3 of 3 (answer 2, 1, 1) $0.24, $0.14, $0.13267k, 139k, 170k 50%, 100%, 100%0, 0, 0 $0.13 · 139k—
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q8-on-r1Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.15185k15
Q8-on-r2Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.0897k6
Q8-on-r3Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.11156k12
Q8-off-r1Answer 1 ✗✓ 50% of key · 0 wrong claims
Answer 2 ✓✓ 100% of key · 0 wrong claims · correct
$0.24267k22
Q8-off-r2Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.14139k13
Q8-off-r3Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.13170k13

Category 4

Questions answerable directly from code

Why we included these questions: the answers were directly available in the code. These questions tested whether memory adds unnecessary overhead when a simple code search is enough.

Q9: How is a fact's author decided?

Control, and a case where memory misled

Question. “What did a teammate conclude about how the author on a team-activity entry or fact is determined?”

The answer is in becos_xxxxxx's authorship code. The source session first reached an incorrect early conclusion, then corrected itself seven minutes later.

Original investigation: 2026-10-14. · Workspace: the Claude Code plugin, the memory server and the API server, at the commits current when the question was asked

What a correct answer contains (every fact required)

  • 1The author comes from the verified sign-in, not from anything the client sends.
  • 2[Reworded for publication] A second fact about how the author is set in an edge case; its original wording described an internal detail that may be security-sensitive.

What recall delivered

Of the 2 facts, recall's 9,300 characters delivered 0 fully, 0 partly, and 2 not at all. Recall delivered the session's withdrawn early conclusion, labelled current, and not the correction.

What we read from it

  • Without memory: correct on the first answer in every run, at $0.09-0.20. With memory: every first answer repeated a conclusion the original session had withdrawn, and the runs recovered after 2-3 answers by reading the code, at $0.14-0.23.
  • The first measured case of memory doing harm: a conclusion corrected minutes later is still stored as current, and recall picks it over the correction.
Why memory had nothing to add: the code answers it directly.

How the author is chosen is a few lines of code in becos_xxxxxx (coding/authorship.py). A search for 'author' across the three repos leads straight to it, and every no-memory run read it and answered correctly in 9-15 tool calls.

At best memory could have saved that one search. What recall actually delivered was the session's first, withdrawn conclusion, so the memory runs had to read the same code anyway (10-16 tool calls), and only after their first answer was graded wrong.

When the code states the answer plainly, memory can at most save a search. When what's stored is out of date, it costs a wrong first answer.

Part of this question's answer key is reworded for publication: the original wording described an internal detail that may be security-sensitive. The runs were graded with the original key.

Results · 2026-11-01

Written-records control; with and without memory only.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory3 of 3 (answer 3, 2, 2) $0.23, $0.16, $0.14270k, 144k, 155k 0%, 50%, 0%3, 2, 2 $0.06 · 57k—
Without memory3 of 3 (answer 1, 1, 1) $0.14, $0.20, $0.09108k, 223k, 72k 100%, 100%, 100%0, 0, 0 $0.14 · 108k—
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q9-on-r1Answer 1 ✗✗ 0% of key · 3 wrong claims
Answer 2 ✗✗ 0% of key · 3 wrong claims
Answer 3 ✓✓ 100% of key · 1 wrong claim · correct
$0.23270k16
Q9-on-r2Answer 1 ✓✗ 50% of key · 2 wrong claims
Answer 2 ✓✓ 100% of key · 4 wrong claims · correct
$0.16144k10
Q9-on-r3Answer 1 ✗✗ 0% of key · 2 wrong claims
Answer 2 ✓✓ 100% of key · 2 wrong claims · correct
$0.14155k12
Q9-off-r1Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.14108k12
Q9-off-r2Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.20223k15
Q9-off-r3Answer 1 ✓✓ 100% of key · 0 wrong claims · correct$0.0972k9

Q10: Will the plugin work on Windows?

Control

Question. “Will the becos codecollab Claude Code plugin work on Windows? If not, what blocks it, and what would a port involve?”

The whole answer is in the plugin's own code, and the original took 4 tool calls. Memory can only save reading here, so it should help little.

Original investigation: 2026-10-30: 4 tool calls, 0.7 minutes. · Workspace: the Claude Code plugin, at the commits current when the question was asked

What a correct answer contains (every fact required)

  • 1Will it work: no, not on native Windows.
  • 2Blocker: capture.py imports fcntl, which doesn't exist on Windows.
  • 3Blocker: the hooks and the MCP server are started with python3, which a normal Windows Python install doesn't provide.
  • 4Port: replace the fcntl lock with one that works on Windows.
  • 5Port: start Python in a way that works on Windows.

What recall delivered

Of the 5 facts, recall's 9,361 characters delivered 0 fully, 1 partly, and 4 not at all. Recall carried little on this question, so the memory runs read the code like the others.

What we read from it

  • All three sides were correct on the first answer in every run. Memory cost $0.13, no memory $0.14 and redoing the investigation $0.10, so memory cost 28% more than the cheapest side.
  • That is what a control should show: the answer sits in the plugin's own code, so memory has little to save.
  • Two memory answers called fcntl 'the only hard blocker' while also listing python3; the judge counted that as a wrong claim.
General knowledge does most of the work here.

A coding agent already knows what usually breaks Python on Windows: fcntl, os.fork, chmod, /tmp, a python3 launcher. Every no-memory run searched for exactly those, found python3 in hooks/hooks.json and .mcp.json and the fcntl import in capture.py, and was done in 3-8 tool calls.

Without the code it can't answer: asked with no workspace and no tools, Claude scored 0 of 5 facts in both completed tries, because it can't know which of those this plugin uses.

So the only thing memory could add is 'this plugin uses fcntl and python3', which saves a few searches, a few cents at most. Questions that general knowledge plus a quick look at the code can answer are a control, a check that memory doesn't make things worse, not a test of its value. Memory pays off on project-specific facts neither source gives: decisions, plans, results found by experiment, causes buried in another repo (Q4).

Results · 2026-11-01

Yes/no facts checked in code; every answer rewritten neutrally before grading.

SideCorrectCost to correctTokens to correct1st answer coverage1st answer wrong claims1st answer cost · tokensRuns that never got there
With memory3 of 3 (answer 1, 1, 1) $0.12, $0.13, $0.1483k, 94k, 124k 100%, 100%, 100%1, 1, 0 $0.13 · 94k—
Without memory3 of 3 (answer 1, 1, 1) $0.15, $0.13, $0.14124k, 100k, 113k 100%, 100%, 100%0, 0, 0 $0.14 · 113k—
Redo the investigation3 of 3 (answer 1, 1, 1) $0.10, $0.14, $0.10102k, 125k, 109k 100%, 100%, 100%0, 0, 0 $0.10 · 109k—
Every run, answer by answer

One line per answer. The marks are the key facts in order: ✓ present, ✗ missing. "% of key" counts ✓ as 1 and ½ as a half. An answer is correct when every required point is ✓; the run stops there. Cost, tokens and tool calls are the run's totals.

RunEach answerRun costRun tokensTool calls
Q10-on-r1Answer 1 ✓✓✓✓✓ 100% of key · 1 wrong claim · correct$0.1283k8
Q10-on-r2Answer 1 ✓✓✓✓✓ 100% of key · 1 wrong claim · correct$0.1394k13
Q10-on-r3Answer 1 ✓✓✓✓✓ 100% of key · 0 wrong claims · correct$0.14124k12
Q10-off-r1Answer 1 ✓✓✓✓✓ 100% of key · 0 wrong claims · correct$0.15124k10
Q10-off-r2Answer 1 ✓✓✓✓✓ 100% of key · 0 wrong claims · correct$0.13100k12
Q10-off-r3Answer 1 ✓✓✓✓✓ 100% of key · 0 wrong claims · correct$0.14113k14
Q10-off-full-r1Answer 1 ✓✓✓✓✓ 100% of key · 0 wrong claims · correct$0.10102k6
Q10-off-full-r2Answer 1 ✓✓✓✓✓ 100% of key · 0 wrong claims · correct$0.14125k12
Q10-off-full-r3Answer 1 ✓✓✓✓✓ 100% of key · 0 wrong claims · correct$0.10109k10

Limitations

Three runs per setup is a small sample, so individual runs can significantly affect the median.

Q4 and Q10 can be answered from code, making them tests of how quickly an agent can find existing information. Q5 is mostly answerable from code, but its size limit existed only in past sessions. Its headline saving is measured against a single run, because only 1 of 3 runs without memory reached a correct answer, and that figure feeds the category average.

Q1 and Q2 are different: their answers existed only in past sessions. Without memory, Claude couldn't answer either question.

Data availability

The memory export, session transcripts, answer keys and repositories used in this experiment are private for now. They contain internal information, and we're working on redacting sensitive details before publishing them alongside the benchmark harness.

For now, some details are redacted in this report: private repository names are masked (for example becos_xxxxxx), workspaces are described by role rather than repository and commit, and Q9's answer key has been reworded.

See what your team's agents already know

becos is in private beta. We'll run a pilot on one of your repositories.