Bench
FreshBench asks coding assistants about changes in the versions a project installed, and a judge grades each answer against a key checked against primary sources. Every count comes with its 95% Wilson interval, and each part of this page says what it counts.
What each model knows, lesson by lesson
One square per lesson (57). Filled: the model answered the change right both times, with no tools. Empty: it didn't. Dotted: not measured yet.
Claude Haiku 5.5 doesn't know 27 of 29 measured lessons; 28 not measured. 95% interval 78% to 98%.
Claude Sonnet 5.5 doesn't know 28 of 29 measured lessons; 28 not measured. 95% interval 83% to 99%.
Claude Opus 5.5 doesn't know 28 of 29 measured lessons; 28 not measured. 95% interval 83% to 99%.
In a project, with and without ludion sync
FreshBench B questions (45, one per change), asked to Claude Code in a project with the new versions installed. Each cell: answers graded correct out of questions. With sync, the project got the 31 seed lessons frozen at commit 7d61ed1.
+27pointsDifference between Without ludion sync and With ludion sync, in percentage points.
Not measured in a project: Claude Haiku 5.5, Claude Sonnet 5.5.
By subject
| Model | Condition | agents | vitest | wrangler | All |
|---|---|---|---|---|---|
| Claude Opus 5.5 | Claude Code's read-only toolsweb search onludion sync off | 11/1595% interval 48% to 89% | 6/1595% interval 20% to 64% | 7/1595% interval 25% to 70% | 24/4595% interval 39% to 67% |
| Claude Opus 5.5 | Claude Code's read-only toolsweb search onludion sync on | 14/1595% interval 70% to 99% | 11/1595% interval 48% to 89% | 11/1595% interval 48% to 89% | 36/4595% interval 66% to 89% |
| Claude Haiku 5.5 | Not measured | ||||
| Claude Sonnet 5.5 | Not measured | ||||
Knowledge dates
Each dot is a lesson, placed on the day npm published the first version it is about. Filled: the model knows it. Hollow: it doesn't. Dotted: not measured. The gray band is a model's reliable knowledge cutoff, where its maker publishes one. A break in the axis is a stretch with nothing in it, shortened.
56 lessons are dated, from Oct 22, 2025 to Oct 7, 2026. Claude Haiku 5.5, reliable knowledge cutoff Jun 2026; Claude Sonnet 5.5, reliable knowledge cutoff Jun 2026; Claude Opus 5.5, reliable knowledge cutoff Jun 2026.
Publish dates from the npm registry · Cutoffs as Anthropic's model overview publishes them · 1 lesson isn't about an npm package and has no date here.
Every lesson
57 of 57
- agents >=0.20.0 changed what `createMcpHandler` does.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- agents >=0.20.0 changed what `MCPClientConnection` does.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- agents >=0.21.0 changed what `useAgentChat` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- agents >=0.22.0 changed the default of `throttle`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- agents >=0.22.0 added `Scheduler`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- agents >=0.22.0 changed what `Agent` does.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- agents >=0.23.0 deprecated `subAgent()`; use `this.dynamicAgents.get()` instead.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- agents >=0.23.0 changed what `browser_execute` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- agents >=0.24.0 changed what `queue()` does.Claude Haiku 5.5: knowsClaude Sonnet 5.5: knowsClaude Opus 5.5: knows
- agents >=0.24.0 added `transport`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- agents >=0.25.0 deprecated `CdpSession`; use `CdpConnection` instead.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- agents >=0.25.0 changed what `loadCdpSpec` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- agents >=0.27.0 added `npx agents tui`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- agents >=0.27.0 changed what `browserTool` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- agents >=0.27.0 changed what `MCPClientManager.removeServer` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- Python 3.12 removed the distutils module from the standard library (PEP 632); use setuptools or packaging instead.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- vitest >=4.0.0 changed what `vi.restoreAllMocks` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- vitest >=5.0.0 changed what `-t` does.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- vitest >=5.0.0 changed the default of `extends`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- vitest >=5.0.0 added `vi.when`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- vitest >=5.0.0 added `-p`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- vitest >=5.0.0 changed what `vitest list` does.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- vitest >=5.0.0 changed what `toHaveTextContent` does.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- vitest >=5.0.0 changed the default of `--merge-reports`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- vitest >=5.0.0 added `--repeats`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- vitest >=5.0.0 changed what `vitest.config` does.Claude Haiku 5.5: knowsClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- vitest >=5.0.0 changed the default of `clearMocks`.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- vitest >=5.0.0 changed what `vi.fn` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- vitest >=5.0.0 changed what `Duration` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- vitest >=5.0.0 renamed `experimental_parseSpecifications` to `parseSpecifications`.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- vitest >=5.0.0 changed what `attachmentsDir` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- vitest >=5.0.0 changed what `projects` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- vitest >=5.0.0 changed the default of `browser.locators.exact`.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- vitest >=5.0.0 changed the default of `HTML reporter`.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.113.0 changed what `wrangler dev` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.113.0 changed what `deploy` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.116.0 changed what `wrangler check startup` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.116.0 changed what `deploy` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.117.0 renamed `/cdn-cgi/handler/scheduled` to `/cdn-cgi/local/scheduled`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.118.0 changed the default of `X_LOCAL_OBSERVABILITY`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.121.0 added `--jurisdiction us`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.121.0 changed what `DO_NOT_TRACK` does.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.121.0 changed what `wrangler preview` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.122.0 changed the default of `nodejs_compat`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.124.0 changed what `--latest` does.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.125.0 added `connect`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.126.0 changed what `.cloudflare/output/v0/config.json` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.127.0 added `workflows[].concurrency.limit`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.129.1 changed what `bundle size reporter` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.131.1 changed what `deployed trigger output` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.136.0 changed what `wrangler preview --json` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.141.0 changed the default of `durable_objects.code_update_strategy`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.145.0 renamed `WRANGLER_R2_SQL_AUTH_TOKEN` to `WRANGLER_BASIN_SQL_AUTH_TOKEN`.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.145.0 renamed `wrangler r2 sql` to `wrangler basin sql`.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.148.0 changed what `wrangler versions secret bulk` does.Claude Haiku 5.5: doesn't knowClaude Sonnet 5.5: doesn't knowClaude Opus 5.5: doesn't know
- wrangler >=4.148.0 changed what `--temporary` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
- wrangler >=4.148.0 changed what `wrangler types` does.Claude Haiku 5.5: not measuredClaude Sonnet 5.5: not measuredClaude Opus 5.5: not measured
How this was measured, and how to run it again
How it was measuredThis table as JSON
Run it again
node tools/bench/src/projects.ts <projects> && [LUDION_SITE=<site built at 7d61ed1, served locally>] node tools/bench/src/freshbench.ts run docs/bench/2026-10-11-done3/questions.json <out> B-project[-sync] --set B --condition project --projects <projects> --model claude-opus-5-5 [--sync <cli built at 7d61ed1> --ludion-home <empty dir>] && node tools/bench/src/freshbench.ts judge docs/bench/2026-10-11-done3/questions.json <out> B-project[-sync]The parts in brackets are the run with sync. Its CLI and lessons are the ones frozen for the run, served from the repository at that commit, not today's ludion.ai. Setup: docs/bench/2026-10-11-done3/README.md.
Without tools
FreshBench A questions for the 29 measured lessons, each asked twice with no tools. A cell counts the lessons whose change the model answered right both times; ludion sync leaves those lessons out for that model.
| Model | Condition | agents | vitest | wrangler | All |
|---|---|---|---|---|---|
| Claude Haiku 5.5 | No toolsweb search offludion sync off | 1/995% interval 2% to 43% | 1/995% interval 2% to 43% | 0/1195% interval 0% to 26% | 2/2995% interval 2% to 22% |
| Claude Sonnet 5.5 | No toolsweb search offludion sync off | 1/995% interval 2% to 43% | 0/995% interval 0% to 30% | 0/1195% interval 0% to 26% | 1/2995% interval 1% to 17% |
| Claude Opus 5.5 | No toolsweb search offludion sync off | 1/995% interval 2% to 43% | 0/995% interval 0% to 30% | 0/1195% interval 0% to 26% | 1/2995% interval 1% to 17% |