---
title: Which Claude Opus 5.5 changes break your code without an error?
url: https://deepthinkingai.org/claude-opus-5-5-silent-breaking-changes/
published: 2026-09-23
author: Shekhar Singh
topic: AI Engineering
tags: claude-opus-5-5, claude-api, migration, thinking, tool-use
site: DeepThinking AI
---

# Which Claude Opus 5.5 changes break your code without an error?

**Summary:** Claude Opus 5.5 launched September 22, 2026 with four breaking changes that return a 400 error: disabled thinking, forced tool_choice, computer_20251124 on the API and Google Cloud, and replayed thinking blocks on newer accounts. A fifth change returns 200: tool-call progress text goes quiet by default, and the effort parameter's default silently drops from high to medium.

## Key takeaways
- Claude Opus 5.5 returns a 400 error for four documented changes, including disabled thinking and forced tool_choice.
- Text Claude writes between tool calls now arrives as an empty thinking block instead of a text block, so a streaming UI goes quiet with no error.
- The effort parameter defaults to medium on Claude Opus 5.5, down from high on Claude Opus 5, whenever a request omits the field.
- Setting thinking.display to updates or summarized restores the progress text, at the cost of a beta header or mixed-in reasoning.
- Amazon Bedrock keeps accepting the older computer_20251124 tool on Claude Opus 5.5; the Claude API and Google Cloud do not.

Claude Opus 5.5 shipped on September 22, 2026, and the migration guide lists
four changes that return a 400 error the first time your code hits them.
Buried past that list is a fifth change that returns 200 and does something
quieter: an application that streams Claude's commentary between tool calls
stops receiving any text to show, with nothing in the response that says so.

## What did Claude Opus 5.5 ship on September 22, 2026?

A model priced at $4 per million input tokens and $20 per million output
tokens, both about 20 percent below Claude Opus 5's $5 and $25, while keeping
the same 1M token context window and 128k max output tokens. Anthropic's own
framing draws a line between two kinds of change: four things that "affect
code already running on Claude Opus 5" by returning an error, and one thing
that "alters the response shape without failing any request." That second
category is the one worth reading closely, because a request that succeeds
gives you no reason to go check what changed inside it. The launch post and
the release notes cover the headline capability gains; the migration guide
and the what's-new page carry the behavior a running integration actually
needs to handle before traffic moves. Opus 5.5 also picks up the [on-demand
compaction beta](/claude-compaction-modes/), which the docs note matters more
here than elsewhere, because compacted turns need to stay valid against a
model whose thinking blocks are tied to the specific conversation that
produced them.

## Which four changes return a 400 error before you ship?

Thinking can no longer be turned off. A request with `thinking: {"type":
"disabled"}` or a manual `budget_tokens` now returns `"thinking.type.disabled"
is not supported for this model`, and the fix is to omit the field and pick an
[effort](https://platform.claude.com/docs/en/build-with-claude/effort) level
instead. Forced tool use is gone too: `tool_choice` types `any` and `tool`
fail with the same error on the token counting endpoint as on a real request,
so a router that forces the first tool by name needs `auto` plus [strict tool
use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/strict-tool-use)
or structured outputs. `computer_20251124`
is rejected outright on the Claude API and Google Cloud, though Amazon
Bedrock still accepts it unchanged. And a thinking block replayed after the
system prompt, tools, or an earlier message changed returns a 400 on accounts
created on or after August 31, 2026, unless the conversation stays
append-only.

**Which Opus 5.5 changes you will notice, and when**

1. thinking.type disabled or enabled
   400, invalid_request_error
2. tool_choice any or tool
   400, also fails token counting
3. computer_20251124, API and GCP only
   400, Bedrock keeps working
4. thinking block after an edited turn
   400, accounts after Aug 31 2026
--- No error returned ---
5. Text between tool calls
   200, thinking field empty by default
6. Effort default drops to medium
   200, no signal anything changed

The first four changes fail on the first request that hits them, in whatever environment you run it. The last two ship silently, because nothing about the response signals that behavior changed.

## Why does tool-call progress text go quiet after you upgrade to Opus 5.5?

Because the short notes Claude writes between tool calls changed content
block type. On Claude Opus 5 that narration came back as a `text` block. On
Claude Opus 5.5, as on Claude Fable 5.1, it arrives as a [progress-update
`thinking`
block](https://platform.claude.com/docs/en/build-with-claude/thinking#progress-updates)
instead, and at the default `display: "omitted"`, a progress-update block's
`thinking` field is empty. No request fails. A chat interface that streamed
that narration to show a user what the agent is doing mid-task simply stops
receiving anything for that slot, turn after turn, with nothing in the
response to explain why. The documentation's own table is blunt about it:
under `"omitted"`, both reasoning blocks and progress-update blocks carry an
empty field. Getting the text back means setting `display` to `"updates"`,
gated behind the `thinking-display-updates-2026-08-18` beta header, or to
`"summarized"`, which mixes the progress notes back in with full reasoning
text.

## Why does Claude Opus 5.5 quietly think less unless you set effort explicitly?

The default value of `effort` changed. Thinking itself did not weaken.
Opus 5 defaulted to `high`; Opus 5.5 defaults to `medium`, so any
call that never set `effort` picks up a shallower setting purely by
upgrading the model string. Anthropic's own guidance complicates a simple
read of that: at a matched effort level, Opus 5.5 tends to think more per
turn than Opus 5 did, most noticeably at `xhigh` and `max`. The two facts
together mean a request run with no `effort` field set can land anywhere
from more thorough to distinctly shallower than the same call on Opus 5,
depending entirely on whether the caller ever specified the parameter. The
same silence applies to Opus 5.5's refusal handling: a declined request
returns HTTP 200 with `stop_reason: "refusal"`, now including a
`reasoning_extraction` category alongside the existing cyber one, so a
status-code check alone will not catch it.

**Claude Opus 5.5 pricing against Claude Opus 5**

| Item | Value (USD per million tokens) |
|---|---|
| Opus 5, input | 5 |
| Opus 5, output | 25 |
| Opus 5.5, input | 4 |
| Opus 5.5, output | 20 |

Opus 5.5 costs 20 percent less per token in both directions than Opus 5, with the same 1M token context window and 128k max output tokens carried over unchanged.

## What should you actually do before moving production traffic to Claude Opus 5.5?

Treat the four 400 errors as a pre-flight check and the two silent changes as
a separate, deliberate review. The errors will surface in staging the moment
a test suite exercises the affected code paths, because Anthropic's error
messages name the exact field at fault. The silent changes will not surface
that way. Nothing about setting `effort` or `thinking.display` is optional
work hiding behind a flag; both need someone to decide the value on purpose,
because the old behavior, high-effort reasoning and visible progress text,
does not come back just because the request still succeeds. Anthropic ships
a `/claude-api migrate` skill that handles the model ID swap and the
mechanical parameter changes across a codebase, which is worth running first,
but it cannot watch your streaming UI go quiet and tell you that matters.
[Claude Code's own system-prompt recording](/claude-agent-sdk-system-prompt-snapshot/)
shipped the same shape of change: a successful response that silently carries
different behavior than the caller expects, catchable only by someone who
goes looking.

<ReadNext
  href="/claude-compaction-modes/"
  kicker="Related"
  title="Which Claude compaction mode should you use, threshold or on-demand?"
  note="Another beta-gated Messages API change with its own silent failure mode: a failed summary returns HTTP 200 and is still billed."
/>

## Does a lower effort default actually make Claude Opus 5.5 worse than Opus 5?

Not necessarily, and the documentation stops short of saying either way.
Anthropic states that Opus 5.5 thinks more per turn than Opus 5 at a matched
effort level, but does not publish a comparison of Opus 5 at `high` against
Opus 5.5 at its new default of `medium`, which is the actual before-and-after
an upgrading caller experiences if they never touch the parameter. Whether
that specific pair nets out ahead, even, or behind is not answered in either
the migration guide or the what's-new page, and treating it as settled in
either direction would be repeating a claim nobody has measured. The safer
position is the one Anthropic's own recommended change already implies:
re-run an effort sweep rather than assume the new default matches the old
one's quality, and pick the level a measured test actually supports.

## Migrate to Claude Opus 5.5 without missing the changes that don't throw

The loud changes get caught the first time you run your test suite. The quiet ones only show up once someone is watching the actual output, so order the work around that difference.

1. **Reproduce all four documented 400 errors in a dev environment first**: Disabled or manually budgeted thinking, forced tool_choice, computer_20251124 on the Claude API or Google Cloud, and a replayed thinking block after an edited turn on a newer account. Each returns an error message naming the exact field, so catching them here costs one failed request in dev rather than a production incident.
2. **Set effort explicitly on every call**: The default moved from high to medium. A request that omits effort now runs shallower reasoning than it did on Claude Opus 5, with no error to flag it. Re-run your effort sweep rather than trusting the old default carried over.
3. **Decide whether your app needs to see text between tool calls, and set thinking.display**: At the default omitted, progress-update blocks return with an empty thinking field. Use updates, which needs the thinking-display-updates-2026-08-18 beta header, for progress text alone, or summarized to get both progress and reasoning mixed together.
4. **Move computer use to the computer_toolset_20260801 toolset on the Claude API and Google Cloud**: Drop the beta header, send a tools entry with no name or display size, and read tool names off member tool_use blocks instead of input.action. Amazon Bedrock keeps accepting the older tool unchanged, so check your platform before you touch this code.
5. **Handle stop_reason "refusal" and configure fallback before switching traffic**: Claude Opus 5.5 adds a biology classifier and a reasoning_extraction category alongside the existing cyber one. A declined request still returns HTTP 200, so code that only checks status codes will not notice it happened.
6. **Test with the streaming UI your users actually see**: A test suite catches the loud changes on its own. The silent ones only show up once you watch what a user watches, so include the progress-update rendering path in whatever you run before moving production traffic.


## Frequently asked questions

### What breaking changes does Claude Opus 5.5 add over Claude Opus 5?

Four return a 400 error someone will see immediately, covering disabled thinking, forced tool_choice, computer_20251124 on the Claude API and Google Cloud, and a thinking block replayed after an edited turn on accounts created on or after August 31, 2026.

### Why did my app stop showing progress text between tool calls after upgrading?

Because that narration now arrives as a thinking block instead of a text block, and thinking blocks return with an empty field at the default display setting. Set thinking.display to updates, a beta feature, or summarized to get the text back.

### Does Claude Opus 5.5 think less than Claude Opus 5 by default?

At a matched effort level it tends to think more, but the effort default itself dropped from high to medium, so a call that omits effort runs shallower than it did on Claude Opus 5 unless you set effort explicitly.

### Does computer use still work the same way on Claude Opus 5.5?

Only on Amazon Bedrock. The Claude API and Google Cloud reject the older computer_20251124 tool outright and accept only the computer_toolset_20260801 toolset, which reads tool names off member tool_use blocks instead of input.action.

### Is Claude Opus 5.5 cheaper than Claude Opus 5?

Yes, $4 per million input tokens and $20 per million output tokens, down from $5 and $25, with the same 1M token context window and 128k max output tokens.


## Sources
- [Migrating to Claude Opus 5.5](https://platform.claude.com/docs/en/models/opus-5-5/migration-guide). Anthropic, 2026-09-22
- [What's new in Claude Opus 5.5](https://platform.claude.com/docs/en/models/opus-5-5/whats-new-opus-5-5). Anthropic, 2026-09-22
- [Thinking: progress updates and the display field](https://platform.claude.com/docs/en/build-with-claude/thinking). Anthropic, 2026-09-22
- [Strict tool use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/strict-tool-use). Anthropic, 2026-09-22
- [Computer use tool, Compatibility](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool). Anthropic, 2026-09-22

---
Canonical HTML: https://deepthinkingai.org/claude-opus-5-5-silent-breaking-changes/