Claude Code 2.1.280 shipped this week and quietly moved the goalposts. The changelog reads innocently: Claude Opus 5.5 (claude-opus-5-5) was added, it is now the default Opus model, and it brings 1M context at $4/$20 per Mtok with $0.20/Mtok cache reads. The part that affects more people is the plan default. Per reporting on the release notes, Pro ($20/month) and Team Standard ($25/seat) now open on Opus instead of Sonnet, matching Max, Team Premium, and Enterprise. If you never ran /model, your next session is a different model than last week's.
I care about this because defaults are config. A model flip you did not choose changes token burn, thinking behavior, and cache economics for every agent session your team runs. Here is what actually changed and what I would pin down today.
What changed, exactly
Opus 5.5 launched September 22 at $4 per million input tokens and $20 per million output, with cache reads at $0.20. The next day, Claude Code 2.1.280 made it the default Opus model, and the plan-level default on the two cheapest paid tiers moved from Sonnet to Opus. Anthropic also raised the five-hour usage limits on subscription plans and added a rate-limit reset you can save for later, but published no figures for either. So on a subscription nothing extra is invoiced, the burn shows up as how fast you eat the window.
Three facts from the platform docs matter more than the price cut:
- Thinking is always on and cannot be disabled. You control depth with the effort parameter, nothing more.
- Default effort is
medium. For comparison, the same docs table lists Sonnet 5 athigh. - Thinking tokens are billed as output tokens, at the $20 rate on the API.
The catch: always-on thinking, medium effort
On the API, always-on thinking means every response carries thinking output you cannot turn off. At $20 per million output tokens that adds up in long agent loops, where the model narrates between tool calls. The default effort of medium keeps the per-turn volume lower than Sonnet 5's high, which softens it, but the knob is depth, not on/off.
On a Pro or Team subscription the mechanics differ. You are not invoiced per token inside your seat allowance, so thinking eats the five-hour window instead of your wallet. Anthropic raised those limits alongside the launch, but without published numbers you cannot verify the raise covers the extra thinking volume. If your team measured "how many refactor turns fit in a window" on Sonnet, that number is stale this week.
The cache math that pays off
The genuinely good news is the cache read price. Base input is $4/Mtok and cache reads are $0.20/Mtok, which the docs confirm is 5% of base. Run the arithmetic on a 50k-token working context, typical for a mid-length agent session:
- Cached read of that prefix each turn: 50,000 / 1,000,000 x $0.20 = $0.01
- Same prefix uncached: 50,000 / 1,000,000 x $4 = $0.20
A 20x difference on the line item that dominates agent bills, because an agent loop's input is mostly its own transcript. I wrote about the mechanism in why your agent bills spike mid-task: anything that invalidates the prefix mid-session re-prices every subsequent turn at full input. If your config keeps cache discipline, Opus 5.5 is disproportionately cheap for agentic work. If it does not, the base price cut masks the problem.
Two cache bugs fixed in the same release
Buried lower in the 2.1.280 changelog, two fixes matter if you ever benchmarked cache hit rates:
- Switching the model from a host app (Claude Desktop, VS Code, SDK) while Claude was working caused a prompt-cache miss on the next prompt.
- Resumed fork subagents rebuilt their tool list instead of re-sending the original, which broke prompt caching for that agent.
Both silently degraded the cache economics you thought you were measuring. If you have old numbers showing bad hit rates from host-app workflows or forked subagents, re-measure before concluding your config is the problem. The config might have been fine and the client was invalidating the prefix for you.
Pin your model, don't ride the default
Anthropic's own cost guidance still says Sonnet handles most coding tasks well and costs less than Opus, and to reserve Opus for complex architectural decisions or multi-step reasoning. That is reasonable advice, and it means the new default does not fit every session. Two moves:
/model # switch the current session
/config # set your preferred default
Or pin it in settings.json so the choice survives reinstalls and new machines:
{
"model": "sonnet"
}
Treat the model field like any other config value: deliberate, reviewed, versioned. A default you inherited is a decision you did not make. This is the same discipline we apply to rules files and MCP wiring in our version-pinned agent config kits, because an unpinned default is drift waiting for the next release note.
One env var if you run many MCP servers
The same release added CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH, which changes the 2,048-character cap on MCP tool descriptions and server instructions for every server in a session. I measured 41k tokens of context consumed by MCP servers before the first prompt on a default setup. If you run a wide MCP fleet, that cap is now a budget knob you can turn, in either direction.
export CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH=1024
What I changed today
- Ran
/modelon every long-lived project and confirmed what was actually loaded, not what I assumed. - Pinned
sonnetas the default for routine work in settings, leaving Opus 5.5 for the multi-step refactors where it earns its slot. - Re-baselined cache hit rates on one host-app workflow, since the old numbers included a client bug.
- Noted the effort default (
medium) so nobody on the team reads always-on thinking as always-heavy thinking.
Defaults are decisions made by someone else's release process. Every silent flip like this is a good prompt to make your own explicit.
Top comments (0)