← blog blog / claude-opus-5-5-day-one.md

Opus 5.5, Day One: Four Models, Two Boring Tasks, Sixteen Runs

Claude Opus 5.5 landed and Claude Code silently made it the default. I ran it against Opus 5, Fable 5.1 and Sonnet 5 on the two small tasks I always use, twice each, and counted seconds, dollars, lines and tautological tests. The 40% cheaper claim came out at 55% on my box.

Opus 5.5, Day One: Four Models, Two Boring Tasks, Sixteen Runs

Claude Opus 5.5 shipped yesterday. Fable 5.1 level on most work, 40% cheaper to run than Opus 5, bigger five-hour limits, a banked reset you can spend when you like. Sonnet 5.5 and Haiku 5.5 to follow. Every model lab dropped something this week, so I am not going to add to the benchmark screenshots.

What I did instead: updated Claude Code, noticed that --model opus now resolves to claude-opus-5-5 with no announcement, and ran my two boring test tasks on four models. Twice each. Sixteen runs, all claude -p, project settings only so none of my CLAUDE.md or plugins leak in.

The two tasks

Same tiny repo as my do-not-overengineer experiment: a constants.ts with four exports and a six-line fetchUser. Task one: “Add retry with exponential backoff to fetchUser. Keep it minimal.” Task two: “Add unit tests for constants.ts using bun test.” I measure wall time, cost from the JSON output, output tokens, lines added, and for the tests task, how many assertions are nothing but the constant restated (expect(MAX_RETRIES).toBe(3)).

One accident made it better. I ran with --permission-mode acceptEdits, which allows file writes but not Bash, so no model could actually run bun test. Every one of them shipped unverified tests. Every one of them also said so, unprompted. Opus 5.5 opened with “I haven’t run it.” Good.

Retry task, averaged over two runs

ModelTimeCostOutput tokensLines added
Opus 529s$0.19212917.5
Opus 5.513s$0.0990412
Fable 5.121s$0.26121110
Sonnet 510s$0.056108.5

Opus 5.5 is the 12-line version. It retries on network errors, 429 and 5xx, throws straight away on other 4xx, reuses the MAX_RETRIES constant it found in the file next door, and does it in four turns. Opus 5 wrote the same logic plus a sleep helper, a comment explaining 4xx, and twice the output tokens. Fable was tighter than both and cost the most. Sonnet was smallest and fastest, and skipped the 429 case.

for (let attempt = 0; ; attempt++) {
  let res: Response | undefined;
  try {
    res = await fetch(`${API_BASE}/users/${id}`);
  } catch (err) {
    if (attempt >= MAX_RETRIES) throw err;
  }
  if (res) {
    if (res.ok) return res.json();
    const retryable = res.status === 429 || res.status >= 500;
    if (!retryable || attempt >= MAX_RETRIES) throw new Error(`fetchUser ${id}: ${res.status}`);
  }
  await new Promise((r) => setTimeout(r, 2 ** attempt * 100));
}

That is Opus 5.5’s whole diff. I would merge it.

Tests task, averaged over two runs

ModelTimeCostTests writtenTautological
Opus 549s$0.24113.5
Opus 5.517s$0.1193.5
Fable 5.127s$0.2810.54
Sonnet 529s$0.077.54

Two things. First, Opus 5.5 is again a third of Opus 5’s time and less than half its cost, with fewer, tighter tests. Second, every model, including Fable, wrote three or four tests that restate the source. API_BASE equals the URL. DEFAULT_TIMEOUT_MS is 30000. This is not a model quality problem, it is a prompt problem. I ran Opus 5.5 once more with three words added, “No tautological tests”, and got eight tests and zero restatements, plus a sentence explaining that asserting the literal would just copy the source. Three words. Put them in your CLAUDE.md.

Totals

Model4 runsWall timeOutput tokens
Opus 5$0.86154s10743
Opus 5.5$0.3960s4870
Fable 5.1$1.0895s6459
Sonnet 5$0.2479s4023

The list price moved from $5/$25 to $4/$20 per million tokens, which is 20% not 40%. The rest of the claim is token efficiency, and on these two tasks it was real. Half the output tokens of Opus 5 for a diff I preferred. Total came out 55% cheaper and 2.5x faster.

What changes for me

Not much, which is the point. opus already means 5.5 in Claude Code, so my routing setup got cheaper without an edit. Fable stays for the hard, long jobs where it earned the extra 20 seconds here. Sonnet stays for one-liners. And I am now watching the five-hour meter with a banked reset in my pocket, which feels a lot like having a free pass on a bad afternoon.

Same tasks, same repo, same prompts. Just cheaper.

Thanks for reading!

I write about frontend craft, React, TypeScript, and the web. Found this useful? Let me know.

@samuellawrentz →

$ echo "enjoyed this post?" · subscribe via rss ↗

$ git log --oneline --grep="ai"

More articles

cd ../blog →
  1. be84d08 Your Claude Code Bill Is 94% Cache Hits. The Rest Is Coffee Breaks.

    Sep 21, 2026 5 min read tag: aitag: claude-code

    Your Claude Code Bill Is 94% Cache Hits. The Rest Is Coffee Breaks.
  2. c53a275 An AI If-Statement You Can Run on a 4-Core VM - Trying Kev

    Sep 20, 2026 5 min read tag: aitag: llm

    An AI If-Statement You Can Run on a 4-Core VM - Trying Kev
  3. 4d4ef6d Claude Code Reads AGENTS.md Now - Here Is Exactly When It Does

    Sep 19, 2026 4 min read tag: aitag: claude-code

    Claude Code Reads AGENTS.md Now - Here Is Exactly When It Does
  4. a986910 Approve Claude Code Permission Prompts From Slack With One Hook

    Sep 18, 2026 4 min read tag: aitag: claude-code

    Approve Claude Code Permission Prompts From Slack With One Hook

$ giscus --load ./comments

00:00

This helps me increase the session time of my site. Thank you!

Can you stay a bit longer?