Skip to content

claude-code

Opus 5.5 takes the default seat in Claude Code

Claude News

A file write can spell itself as a path inside your project and still land somewhere else, because the path runs through a symlink. Claude Code 2.1.280 closes that, and the same release notes on Github add Opus 5.5 as the default Opus model: 1M context, $4/$20 per Mtok, cache reads at $0.20/Mtok.

At a glance

  • Pro and Team Standard now start on Opus instead of Sonnet, matching Max, Team Premium and Enterprise; the model behind that default is claude-opus-5-5, with cache reads at $0.20 per Mtok.
  • Two auto-mode loops close: an action a safety check declined to review is denied once, with a note that retrying will not help, and ten unanswered checks in a row end the turn.
  • An effort level saved before /effort became per-model no longer reaches newly released models, so Opus 5.5 runs at its own default until you pick a level for it.

If you have not been following the point releases: /effort turned into a per-model setting, and 2.1.260 taught ctrl+l and cmd+k to clear the transcript view in fullscreen mode. Both come back here. The transcript clearing is reverted, so those keys redraw the screen again, and the per-model split now decides which models an old saved effort level reaches.

Opus 5.5 lands at $4/$20 per Mtok with a 1M context

The new model is claude-opus-5-5, and it takes over as the default Opus model. It carries a 1M-token context window, costs $4 per Mtok in and $20 per Mtok out, and reads from cache at $0.20 per Mtok.

The plan defaults move with it. Pro and Team Standard open sessions on Opus rather than Sonnet, which is where Max, Team Premium and Enterprise already were.

Effort settings get a cleanup at the same time. A level saved before /effort split per model stays with the models it was set for and does not carry to new ones such as Opus 5.5. Opus 4.7, Opus 4.8 and Fable 5 stop holding their launch-default effort over an explicit choice, whether it comes from /effort, from -p or the Agent SDK, from a project, managed or --settings effortLevel, or from a per-model level.

acceptEdits will not approve a write that lands outside the tree

A write whose path runs through a symlink used to be judged by the way the path was spelled, not by where it ended up. The prompt now names the place the write lands, and acceptEdits, allow rules and auto mode do not approve one that lands outside.

Auto mode had two ways to spin. When a safety check declined to review an action, it retried that action endlessly; the action is denied once instead, with a note that retrying will not help. When a check gave no answer at all, retries now back off, and the turn stops with a message after ten in a row.

Three smaller refusals sit alongside: /ultrareview uploads keep renamed copies of key files, such as id_rsa copy or kubeconfig (1).yaml, on your machine; plugin marketplaces whose name imitates a reserved one are refused; and an agent-type PermissionRequest hook no longer runs there, because its answer could never allow or deny the request.

Why did a symlink fool the permission check?

Because the check read the text of the path. A rule, an acceptEdits session or auto mode looked at something like src/config.json, saw a name inside the project, and approved it. A symlink in that path works as a forwarding address: the name stays in your tree while the file system quietly delivers the write to another directory. The parcel is waved through on the label, and the post office sends it to a different street. With the fix, the destination is resolved first and shown in the prompt, so what you approve and where the bytes land are the same place.

Ctrl+C twice in /model quit Claude Code instead of closing the dialog

Press it twice in /model, /effort, /config, /status, /usage, /plugin, /sandbox, /permissions and most other dialogs and the whole session ended; Ctrl+D did the same. Those presses close the dialog now.

Keys were leaking more generally. A stray n closed dialogs and a stray y confirmed them, which is Enter and Esc only from here (bind y and n to confirm:yes and confirm:no in keybindings.json for the old behaviour). Text fields in dialogs dropped a typed letter, digit or Space to a keybinding on that key, and a click that only brought the terminal window to the front also fired the item under the pointer.

Two text fixes are worth naming. The invisible-character cleanup was eating the zero-width non-joiner that Persian and Arabic use to attach a suffix to a Latin word or number, such as the plural of PDF, and on Windows the prompt line stayed scrambled after that cleanup instead of being repainted for review.

In VS Code, six dialogs gained typed commands — /status, /sandbox, /chrome, /export, /skills and /plan — and the extension starts after 60 seconds when the Python extension hangs while activating.

Sessions that failed on every turn until this release

Some conversations were stuck in a loop: an API error saying role 'system' must precede an 'assistant' message; a saved history holding a malformed notice about MCP tools that could not be loaded, which also broke /compact; and, behind a proxy or gateway that does not support it, a 400 on the input tag advisor_20260301. That request now retries without the advisor.

Hangs and crashes got the same pass. A settings file replaced by a named pipe mid-read no longer freezes Claude Code, a damaged cached message list is rebuilt rather than ending a long fullscreen session with an unrecoverable interface error, and /config stops crashing on a preference that moved to settings.json but still holds null or "false" in ~/.claude.json.

On caching and MCP: switching model from Claude Desktop, VS Code or the SDK while Claude works no longer costs a prompt-cache miss on the next prompt, resumed fork subagents re-send the tool list they first used, and CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH changes the 2,048-character cap on MCP tool descriptions and server instructions for every server in the session.

The notes price Opus 5.5 and give its context window, and say nothing about what it does differently from Opus 4.8: no benchmarks, and no word on how the Pro default change meets usage limits. In our view the effort reset is the part that will bite quietly, since a level you chose months ago simply stops at the new model's door while everything else about your setup looks unchanged.

Before your first Opus 5.5 run

Open /effort and set a level for the new model if you care where it sits; until you do, it runs at its default. If you leaned on y and n to answer dialogs, put those bindings back in keybindings.json before the habit costs you a cancelled action. And if an MCP server's descriptions were being trimmed, raise the cap and see what the server was actually sending.

Related stories

  1. Claude Code 2.1.281 adds Bedrock guardrails to its gateway
  2. Claude Fable 5.2 draws its sprites in raw JavaScript
  3. Leak puts expandable usage limits in Claude Code desktop
  4. Claude Code gets a wrap-up budget at the 5-hour limit
  5. Two Claude Code sessions ate 32% of a team's bill
  6. Claude Code cloud sessions go GA with credit outside limits

Comments

No comments yet. Be the first.

Join the conversation

Sign in with Google to leave a comment. Your name and avatar come from your Google profile, and the comment appears after moderation.

We only use your name and avatar from Google. We never store your email address.