Release notes

FEATURE

Opus 5 lands as the default, and fast mode moves with it

Claude Opus 5 (claude-opus-5) takes over as the default Opus model, with a 1M context window and fast-mode pricing of $10 in and $50 out per million tokens. Two things move with it: /fast no longer covers Opus 4.7 and now applies to Opus 5 and Opus 4.8, and the claude-api skill defaults to Opus 5 with a documented path over from Opus 4.8. A school switching to a new edition of a textbook works the same way: what you are handed at the start of term is the new one, but a reading list with the old ISBN written into it will order nothing. You get the new model without changing anything; only scripts with an older model id hard-coded need a second look.

BUGFIX

Three ways the `/model` picker misled you, now fixed

Picking a model is a glance-and-click action, which is exactly why a wrong list hurts. Three fixes here: the merged Opus row read plain "Opus" instead of "Opus (1M context)"; the Fable row claimed "Requires usage credits" on plans that already include it, because a stale cache had baked that label in; and the highlight, which used to mark an arbitrary subset of the list, now marks only the newest model's name so you can see at a glance which release is new. A menu with the wrong prices and the chef's-special marker next to the wrong dish — the kitchen is fine, the menu is misleading you.

FEATURE

Subagents can now spawn subagents, three layers deep

You send one assistant off to do a job; halfway through it realises the work should be split between two more people — and until now it could not do that, it had to swallow the whole thing itself. Subagents can now spawn their own subagents, three levels deep by default, up from one. If you would rather not have work subcontracted down a chain, set CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH=1 to switch nesting off. The deeper ones are no longer a black box either: with --forward-subagent-text, subagents spawned at depth two and below show up in stream-json, keyed to the agent tool_use id that spawned them, so you can see who dispatched whom. Building trades subcontract the same way — one level used to be the limit, three is now allowed, and every level is logged against whoever hired it.

FEATURE

Dynamic workflows now aim for under 15 agents by default

Workflows the system plans for you had no size guidance, so one task could fan out into dozens of agents running in parallel, leaving you unable to see the shape of it or estimate the cost. The default is now a medium guideline — aim for fewer than 15 agents — and it is advisory, not a hard cap. There are two ways to change it. Ad hoc: pick Dynamic workflow size in /config for another size or unrestricted. Permanently: set workflowSizeGuideline in any settings file, for example

{"workflowSizeGuideline": "medium"}

While a settings file specifies that key, the /config row hides itself so the two cannot disagree. A running workflow also shows the current size in its status line, with a pointer to /config if you want to change it. Think of a tour with no stated cap on group size: the absence of a limit is not freedom, it just means you find out how many people showed up when you get there.

FEATURE

Sandboxed commands can now block unlisted hosts silently

When a command running inside the sandbox — the restricted area commands are confined to — tries to reach a host that is not on your allowlist, you used to get a prompt asking whether to permit it. In an automated run there is nobody at the keyboard, so that prompt is where the whole pipeline stops. The new sandbox.network.strictAllowlist setting lets you deny outright, without asking. To turn it on, add this to a settings file:

{"sandbox": {"network": {"strictAllowlist": true}}}

The nesting reads as one box inside another: sandbox contains network, and network contains strictAllowlist. It is a building switching to strict door policy — unregistered visitors simply do not get in, and the guard stops phoning upstairs to ask. Some visitors are turned away, but nobody gets woken at three in the morning.

FEATURE

When an MCP server fails, you finally hear why

When an MCP server would not connect, you knew it had failed and nothing more. Three additions here. claude mcp list and /mcp now report the HTTP status and error text, so an expired credential looks different from a mistyped address; and config values with hidden leading or trailing whitespace now raise a warning — the most maddening class of error, because the screen looks entirely correct. The headless stream-json init event gained mcp_server_errors, listing the --mcp-config entries that config validation skipped, and terminal runs print a startup warning too. A returned letter used to come back stamped only "undeliverable"; now the slip tells you which line of the address is wrong.

FEATURE

Managed MCP lists stop reading variables from the settings file

Centrally managed MCP allowlists and denylists often contain ${VAR} entries that get substituted at run time. The catch was where the substitution read from: the env block of a settings file — a file that sits in the user's own hands, which meant a rule set by an administrator could be rewritten by one local line. Those entries now resolve from the startup environment and the managed-settings env instead, and the settings-file env no longer participates. Think of dosage rules in a hospital: they used to be copied onto a whiteboard at each nurses' station, where anyone could rub a figure out. Now they are scanned straight from the system's master copy each time.

FEATURE

Add a folder mid-conversation and a hook wakes up

Halfway through a conversation you remember that another folder needs to be in scope, so you bring it in. The new DirectoryAdded hook wakes up at exactly that moment and notifies the tools around you. A new DirectoryAdded hook fires whenever a new working directory is registered mid-session — whether you type the /add-dir command or issue a register_repo_root control request via the SDK. Secondary tools learn right away that the folder list has changed. Think of an exhibition hall opening an extra booth mid-event: the moment the new space is registered, the information desk and public address system get an instant update so services can adjust without delay.

BUGFIX

Three faults you only meet the moment you press a key

All three of these only show up at the instant your finger presses a key, which is what makes them grating. Text highlighted inside GNU screen now copies properly instead of dumping raw base64 strings into your terminal. Pressing the left arrow (←) on an empty prompt in Vim mode now returns to the agent view from NORMAL mode as well as INSERT mode. Finally, screen-reader mode echoes only the single typed character per keystroke rather than re-reading the entire input line. Like using a control panel with miswired button feedback: selecting text prints extra code, pressing back feels stuck, and typing echoes the entire line — every action produces the wrong immediate response.

FEATURE

No more stale remote status, and errors that name the setting

Operating something through another device, the thing you dread is the screen disagreeing with reality. Three such gaps in Remote Control are closed here. Remote Control clients no longer hold onto a stale fast-mode status after switching models, reconnecting, or failing an organization check. When the error "Remote Control is only available via api.anthropic.com" appears, the diagnostic text now explicitly names the specific setting that triggered it. Finally, running claude --teleport when your current checkout repository differs from the session's repository now prints which repository your current checkout actually points to. Like a remote cockpit dashboard: switch toggles update in real time, error lights pinpoint the exact faulty breaker, and location mismatches show the actual hanger where your vessel is parked.

BUGFIX

Invalid Git Bash paths now raise warnings, and mid-stream errors preserve output

Mistyped path settings and mid-stream network drops will no longer wipe out your progress in an instant. Two essential fixes are included: on Windows, if CLAUDE_CODE_GIT_BASH_PATH points to a file that is not a bash or sh binary, it no longer crashes or gets misused as bash, but instead ignores the invalid path with a warning. Furthermore, when running claude -p (the headless mode that prints text output), if a turn dies due to a mid-stream API network error, Claude Code no longer discards the answer already generated, but preserves and prints it completely. Think of a car navigation system: it issues a warning about an invalid shortcut while keeping you on the main highway, and even if signal drops mid-trip, it preserves the route segment already downloaded.

Original changelog

Original changelogOpus 5 lands as the default, and fast mode moves with it
Added Claude Opus 5 (`claude-opus-5`), now the default Opus model — 1M context, fast mode at $10/$50 per Mtok
Removed Opus 4.7 from fast mode; `/fast` now applies to Opus 5 and Opus 4.8
Updated the claude-api skill to default to Claude Opus 5, with a migration path from Opus 4.8
Original changelogThree ways the `/model` picker misled you, now fixed
Fixed the Fable model row showing "Requires usage credits" for plans that include it, when a stale cache had baked the label in
Fixed the `/model` picker showing the merged Opus row as plain "Opus" instead of "Opus (1M context)"
Changed the `/model` picker to highlight only the newest model's name, so the highlight marks the new release rather than an arbitrary subset of the list
Original changelogSubagents can now spawn subagents, three layers deep
Subagents can now spawn nested subagents up to depth 3 by default (was 1); set CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH=1 to disable nesting
Added nested subagent forwarding in stream-json: subagents spawned at depth-2+ now appear when `--forward-subagent-text` is set, keyed by their spawning Agent `tool_use` id
Original changelogDynamic workflows now aim for under 15 agents by default
Added the `workflowSizeGuideline` settings key so the advisory Dynamic workflow size guideline can be set from any settings file; the `/config` row is hidden while one does
Changed dynamic workflows to default to a medium size guideline (aim for fewer than 15 agents); pick another size or unrestricted with Dynamic workflow size in `/config`
Added the current default workflow size to the running-workflow status line, with a pointer to `/config` for changing it
Original changelogSandboxed commands can now block unlisted hosts silently
Added `sandbox.network.strictAllowlist` setting to deny non-allowlisted hosts for sandboxed commands without prompting
Original changelogWhen an MCP server fails, you finally hear why
Added `mcp_server_errors` to the headless stream-json init event, listing `--mcp-config` entries skipped by config validation; terminal runs print a startup warning
Added HTTP status and error text to `claude mcp list` and `/mcp` when a server fails to connect, and a warning for MCP config values with hidden leading or trailing whitespace
Original changelogManaged MCP lists stop reading variables from the settings file
Changed managed MCP allowlist/denylist `${VAR}` entries to resolve from the startup environment and managed-settings env instead of settings-file env
Original changelogAdd a folder mid-conversation and a hook wakes up
Added `DirectoryAdded` hook that fires after `/add-dir` or the SDK `register_repo_root` control request registers a new working directory mid-session
Original changelogThree faults you only meet the moment you press a key
Fixed copy-on-select inside GNU screen printing base64 into the terminal instead of copying the selection
Fixed Vim mode: pressing ← on an empty prompt now returns to the agent view from NORMAL mode, not just INSERT
Fixed screen-reader mode rewriting the entire input line on every keystroke instead of echoing only the typed character
Original changelogNo more stale remote status, and errors that name the setting
Fixed Remote Control clients keeping a stale fast-mode status after a model switch, reconnect, or failed org check
Improved the "Remote Control is only available via api.anthropic.com" error to name the specific setting that caused it
Improved `claude --teleport` to show which repo your current checkout points at when it doesn't match the session's repo
Original changelogInvalid Git Bash paths now raise warnings, and mid-stream errors preserve output
Fixed `CLAUDE_CODE_GIT_BASH_PATH` on Windows exiting or being used as bash when the path isn't a bash/sh binary; it's now ignored with a warning
Fixed `claude -p` text output dropping the answer already produced when a turn dies on a mid-stream API error