The task
Every run got the same working folder and the same one-sentence request:The data
- The sources are two weeks of one team’s real work. Calls were kept when they involved one of the seven customers.
- Automated notes that already summarized knowledge-base changes were removed, because they contain the answers.
- Everything was anonymized before any run. A model listed the identifying strings in each file and a script made every replacement, so no model rewrote the sources. People, companies, places, emails, links and long numbers were swapped for invented ones.
- This is name swapping, not formal de-identification, which is why the corpus is not published.
The planted facts
Twenty facts with known answers were added to the sources as extra lines in calls, Slack threads and one email. Each uses an invented name that appears nowhere else.The setups
The models are Claude Opus 5.5, Claude Sonnet 5.5, Claude Haiku 5.5 and DeepSeek V4.1 Flash.- Lead is the model that receives the request. Workers are the model its subagents use; “none” means subagents were left on the lead’s model.
- Runs used OpenCode 1.19.4 without a UI, each in its own empty folder and home directory inside a sandbox, with no access to the answer key or to other runs. Web access was off.
- In the setups with workers, subagents were set to the worker model and one instruction was added to the folder:
You lead; subagents do the reading. For source files, start general subagents with the task tool and give each a small batch of files to read in full and report back on, with the file path for every finding. Run several at once. Do not read source files yourself except to check a specific finding. You decide what is correct and you write the final files.
Grading
Planted facts. A script reads the seven update logs and checks each planted fact by its kind, as in the table above. A row counts when it names the planted fact or states the fact itself. Not backed. A second model from a different vendor, Gemini 3.8 Flash, reads 15 random log rows per run together with every file each row cites. A row is backed only if the source states that fact, about that customer, with a status that fits. Otherwise it is marked as wrong customer, not a fact, contradicted or not found. The quality rule. A setup holds quality when its averages are at most one planted fact and one sampled row worse than Opus alone. The rule was fixed before the runs.Changes to grading during the benchmark
Four fixes were made to the script and the judge after runs had started. None changed what counts as a pass, and every run was regraded with the final version.- The script first matched planted facts only by their invented names. It marked correct rows as missing when a model left the name out, for example “Pilot group cut from 40 to 25 users”. It now also recognizes the fact itself.
- The judge first read only the first file a row cited. It now reads all of them.
- A note in the wrong customer’s log that only records the correction no longer counts as putting the fact there. This changed one run.
- “Out of pilot scope” was not recognized as turning an idea down. This changed two runs.
Cost
Cost is token usage times OpenRouter list prices, read between 10 and 12 November 2026, for every model call in a run including subagents.
Prices are in US dollars per million tokens. For the router setups, the per-call cost the provider reported was within 3% of this calculation when Opus led and within about 30% either way when DeepSeek led. The router’s own judgment calls are not included; each took 0.2 to 0.6 seconds.
The skill
One generic skill was written by hand from the rules already printed on the knowledge-base pages. It was written once and not tuned against the results.The full skill
The full skill
The router
The router in this benchmark is a prototype. It is not the Smart Model Router, which routes by the tasks an admin names and does not read skills. It sits between the agent and the model provider and decides once per session. A session is the main request or one subagent’s task; later steps in that session keep the same model. For each new session it asks Jev, a small judgment model, whether the prompt is clearly each of four kinds of work:
The model whose two kinds score higher gets the session. Ties go to Opus, and so does any failure to get an answer.
In skill-aware mode the router also sends the name and description of every skill in the workspace and asks one more question: does one of these skills cover the work asked for? If yes, DeepSeek gets the session whatever the other scores say.
Limits
- One task and one corpus. Everything here is one kind of work: turning calls, messages and email into structured records.
- Two or three runs per setup. Single runs led by DeepSeek ranged from 16 to 20 planted facts.
- Twenty planted facts cover five ways the task goes wrong. They do not measure how many real facts a run found, or whether a row was worth adding.
- The judge samples 15 rows per run, and different runs produce different rows.
- The skill and the router’s four descriptions were each written once. Different wording would give different results.
- Minutes are not comparable between runs, because runs shared sandboxes.