Release notes
If you want several Claude instances to collaborate, you no longer have to create a team first. Just set the environment variable (a hidden switch you set before launching) CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS to 1, and every session automatically gets one built-in team — you spawn teammates directly with the Agent tool's name parameter (a setting that assigns a name), skipping the old setup step. The old TeamCreate and TeamDelete tools are gone, and while the Agent tool's team_name parameter can still be filled in, it's now ignored. Like how forming a study group used to require registering a club at the academic affairs office, but now you just raise your hand and your classmates instantly form your built-in study group, no paperwork required.
Two safety gaps in permissions and subagent management are closed. Permission rules (settings that decide which actions ask you first and which go through automatically) now support a Tool(param:value) syntax that matches against a tool's input parameters (what you hand the tool when you call it), with * wildcard support; for instance Agent(model:opus) can block Opus-model subagents. And in auto mode (the mode where Claude acts without asking step by step), spawning a subagent (an agent Claude splits off for small chores) used to let it potentially request a blocked action without review; now the subagent is evaluated by a classifier (a mechanism that judges an action's risk automatically) before it ever launches, closing that gap. Like airport security that used to wave whole people through or block them, but now goes precise — "water is fine, but not over 100ml" — and where contractors could once slip into the secure zone unscanned, now everyone gets scanned before starting work.
Configs you tuck deep inside a project now take effect more easily. Skills (a skill, a capability bundle Claude can pull up to use) inside a nested (nested, one layer wrapping another) .claude/skills directory now auto-load when you're working on files in that folder; on a name clash with another layer, the inner one shows up as <dir>:<name> (directory:skill-name) so both stay available. Across the whole nested .claude/ setup, when agents, workflows (workflow), or output styles collide in name, the one nearest to your current working directory wins; and project-scope workflow saves now land in the closest existing .claude/workflows/. Also fixed: nested skills' directory-qualified names used to get blocked by permission prompts in non-interactive runs (non-interactive run, a mode like the SDK that runs straight through without prompting); they work now. Like staying at a hotel where every floor keeps a guest guide, a clash on the 2nd floor is labeled "2F:guide," and whichever floor you're staying on, that floor's guide is the one that governs.
A few small interface and reporting improvements. /doctor (the health-check feature) now uses a consistent flat tree (flat tree, an unindented, flattened-out tree diagram) layout across every section, with clearer status icons and highlighted command names. When the skill list gets too long and is truncated, the truncation warning now tells you exactly how many skill descriptions are affected. The workflow (workflow, a predefined multi-step task) trigger keyword now glows with a purple shimmer, and only fires on explicit phrases like "run a workflow" or "workflow:" — not on any casual mention of the word. Finally, /bug (the bug-report feature) now requires a description before submitting, and no longer uses the model's refusal text as the GitHub issue title. Like a hospital health-check report switching to a clear tree layout, an emergency button that only arms on a specific code getting more visible, and a complaint form that no longer accepts just the three words "it's broken."
When Remote Control (steering the desktop app from your phone) goes wrong, you no longer have to guess. On a connection failure, the footer now shows a persistent red "/rc failed" marker instead of flashing and vanishing. And when you hit the "not yet enabled" error, it now spells out exactly which cause is blocking you: a gate (a feature gate that hasn't been opened), a check failure, a stale entitlement (an expired usage right), or org policy (a rule your company set). Like calling customer service where a busy line used to ring once and cut off and "why can't I use it" got only "not activated yet" — now the missed-call indicator stays lit and it tells you plainly whether it's unpaid bills, equipment failure, expired permissions, or a company policy block.
A batch of authorization issues that left you disconnected or crashed are fixed. The CLI (command-line interface) used to crash from running out of memory if it inherited a stale websocket/OAuth file-descriptor (file-descriptor, the number a program uses to access a file or connection) environment variable from its parent process (the program that launched it); it survives now. Claude in Chrome (the browser edition) used to silently fail to connect when the OAuth token belonged to a different account than the Claude Code login; it handles that properly now. claude agents workers (the child processes that do the work) used to fail with "401 Invalid bearer token" when the daemon (a program that stays resident in the background) had been started from a shell with a custom API gateway (API gateway, a self-hosted API endpoint) via ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN; that's fixed. Also, compaction (the feature that summarizes and shrinks old conversation) used to ignore --fallback-model (a fallback model, the lesser model it falls back to when the main one is swamped); it now follows the configured fallback chain on overload or model-availability errors. And when credentials (the keys proving you're a legitimate user) were refreshed outside the session, the app used to keep failing with auth errors due to a stale cached request config; it updates now. Like a company where one employee's expired badge used to crash the whole floor's systems, a misaddressed delivery was silently dumped, and the backup-staff system existed in name only — now an expired badge can't take the system down, packages are only accepted at the right address, and backups actually show up to work.
This batch fixes a pile of issues around viewing subagents, background tasks, and environment config. Viewing a subagent's (an agent Claude splits off for small chores) transcript (the verbatim full conversation) now shows tool results and live progress; messages you sent while it was still finishing its turn used to get dropped, and now they're kept; and backgrounding a running subagent with ctrl+b used to restart it from scratch, and now it keeps going as-is. Background sessions created with /bg or ←← after a turn used to read "Working" forever in the agents list; their status updates now. On Linux, the sandbox (the mechanism that traps a program in a restricted zone) used to fail to start when .claude/skills or .claude/hooks was a symlink (a file pointing elsewhere, like a shortcut); it starts fine now. The environment variable CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1 (a switch to preserve the plugin marketplace on failure) used to actually block fresh marketplace installs from cloning; that's fixed. And MCP server-level rules (mcp__server, mcp__server__*, mcp__*) written in a subagent's disallowedTools (the forbidden-tools list) used to be silently ignored — as if you'd never set them — and now they take effect. Like a department where delegated progress used to be invisible, shelved projects glowed "in progress" forever, and certain badges and procurement settings were dead letters; now progress is transparent, status is honest, and the rules actually stick.
Three small keyboard-related bugs are fixed. In vim mode (vim, an editor style built around not touching the mouse), pressing u to undo (undo, retracting a just-made action) used to merge several consecutive actions into a single undo — so one press wiped out a whole chunk; it now steps back one NORMAL/VISUAL-mode command at a time. In the claude agents view, statusline (statusline, the row showing status at the bottom) links using a custom URI scheme (a self-defined web-address protocol like vscode://) used to do nothing when clicked; they open now. And in the VSCode extension, pressing Esc to dismiss a CJK IME (CJK IME, the little candidate window that pops up when typing Chinese/Japanese/Korean) candidate window used to also cancel the Claude task currently running; it no longer does. Like a typewriter whose backspace key used to gobble a whole sentence at once, a sticky-note link on your desk that wouldn't peel off, and dismissing an input-method reminder accidentally canceling a document mid-print — now backspace eats one character, the note peels, and dismissing the reminder leaves the print job alone.
Original changelog
Original changelogAgent teams need no setup: flip the experimental switch and spawn teammates directly
Agent teams: removed the `TeamCreate` and `TeamDelete` tools. With `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` set, every session now has one implicit team — spawn teammates directly with the Agent tool's `name` parameter, no setup step needed. The `team_name` parameter on the Agent tool is still accepted but ignored.
Original changelogPermission rules can now target tool parameters, and auto mode reviews a subagent before launch
Added `Tool(param:value)` syntax for permission rules to match a tool's input parameters (with `*` wildcard), e.g. `Agent(model:opus)` to block Opus subagents
Improved auto mode: subagent spawns are now evaluated by the classifier before launch, closing a gap where a subagent could request a blocked action without review
Original changelogNested .claude configs auto-load, and the closest one wins on a name clash
Skills in nested `.claude/skills` directories now load when working on files there; on a name clash, the nested skill appears as `<dir>:<name>` so both stay available
Nested `.claude/` directories: the agent, workflow, and output-style closest to the working directory now wins when names collide; project-scope workflow saves now target the closest existing `.claude/workflows/`
Fixed nested `.claude/skills` skills with directory-qualified names being blocked by permission prompts in non-interactive runs
Original changelogThe doctor view is neater, the workflow keyword is clearer, and bug reports must include a description
Improved `/doctor` with consistent flat tree layout across all sections, clearer section status icons, and highlighted command names
Improved the skill listing truncation warning to show how many skill descriptions are affected
Changed the workflow prompt keyword to use a purple shimmer highlight and trigger only on explicit phrases like "run a workflow" or "workflow:", not on any mention of the word
`/bug` now requires a description before submitting, and no longer uses model-refusal text as the GitHub issue title
Original changelogRemote Control failures are louder, and the "not yet enabled" error explains exactly what's blocking you
Improved Remote Control error messages: connection failures now show a persistent red "/rc failed" indicator in the footer, and the "not yet enabled" error now explains whether it's a gate, a check failure, stale entitlement, or org policy
Original changelogConnections and credentials are steadier: no more OOM crashes, matching accounts, and the fallback model actually kicks in
Fixed a crash (out-of-memory) when the CLI inherits a stale websocket/OAuth file-descriptor environment variable from a parent process
Fixed Claude in Chrome silently failing to connect when the OAuth token belongs to a different account than the Claude Code login
Fixed `claude agents` workers failing with `401 Invalid bearer token` when the daemon was started from a shell with a custom API gateway via `ANTHROPIC_BASE_URL` and `ANTHROPIC_AUTH_TOKEN`
Fixed compaction not honoring `--fallback-model`: compaction now falls back to the configured fallback model chain on overload or model-availability errors
Fixed model requests continuing to fail with auth errors after credentials were refreshed outside the session, due to a stale cached request configuration
Original changelogSubagent transcripts show more, background tasks stop saying "Working" forever, and Linux/plugin configs stop jamming
Fixed several subagent issues: viewing a subagent's transcript now shows tool results and live progress, messages sent while it finishes its turn are no longer dropped, and backgrounding a running subagent (ctrl+b) no longer restarts it from scratch
Fixed background sessions created with `/bg` or `←←` after a turn finished showing "Working" forever in the agents list
Fixed Linux sandbox failing to start when `.claude/skills` or `.claude/hooks` is a symlink
Fixed `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1` preventing fresh marketplace installs from cloning
Fixed MCP server-level specs (`mcp__server`, `mcp__server__*`, `mcp__*`) in subagent `disallowedTools` being silently ignored
Original changelogvim undo steps back one command at a time, statusline custom links open, and VSCode's IME close stops killing your task
Fixed vim mode undo: `u` now steps through NORMAL/VISUAL-mode commands one at a time instead of merging commands in quick succession into a single undo step
Fixed statusline links with custom URI schemes (e.g. `vscode://`) not opening when clicked in `claude agents`
[VSCode] Fixed pressing Esc to dismiss a CJK IME candidate window canceling the running Claude task