TL;DR
/code-reviewnow runs as a background subagent. Your conversation stays clear while the review runs, and stacked slash commands keep working as the review target./deep-researchno longer launches on its own. If you relied on Claude deciding to deep-research mid-task, you now need to invoke/deep-researchmanually (more below).Subagents no longer spawn nested subagents by default. Set
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTHif your workflows depend on agents delegating to child agents (more below).Skills with
context: forknow run in the background by default. Addbackground: falseto the skill frontmatter to opt out.Concurrent subagent cap is now 20. Override with
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTSif your workflows fan out wider than that.
New in 2.1.218, 2.1.217
2.1.218 (July 24, 2026)
- Changed
/code-reviewto run as a background subagent, so review work no longer fills your conversation and keeps stacked slash commands as its review target - Added screen-reader announcements of deleted text for word and line deletions (
Option+Delete,Ctrl+W,Cmd+Backspace,Ctrl+U,Ctrl+K) in--ax-screen-readermode - Fixed Windows paths with
\u-prefixed segments (likeC:\Users\unicorn) being corrupted into CJK characters in tool inputs, which made those files inaccessible - Fixed the left arrow key discarding the conversation with no undo: presses right after editing now ask to confirm, and Esc in the agent view returns to the conversation it backgrounded
- Added HTTP status and error text to
claude mcp listand/mcpwhen a server fails to connect, and a warning for MCP config values with hidden leading or trailing whitespace - Fixed multi-line paste collapsing into one line with
jin place of newlines in terminals that encode pasted newlines as Ctrl+J - Fixed
/contextreporting stale pre-compact token usage after compacting from the message picker - Fixed
/ultrareviewfailing on descriptive arguments like "review my auth changes", they now run a review of your current branch with the text applied as a note to the findings - Fixed
/code-review ultrasilently running a local review in non-interactive sessions, it now launches the cloud review - Fixed gateway spend metering to price Bedrock application-inference-profile ARNs and other config-mapped upstream model IDs at the configured model's rates
- Fixed mojibake when a long IDE selection was truncated mid-emoji, and a case where a tool executor error could be silently dropped
- Fixed an engine teardown race that could start and abandon a phantom turn, and made input pushed after close consistently rejected
- Fixed spurious "[Request interrupted by user]" messages after interrupted tool calls, and an unpaired
tool_useblock left in the transcript when a tool aborted mid-response - Fixed VoiceOver reading "new line" instead of echoing the typed space at the end of the input in
--ax-screen-readermode - Fixed plugin and settings panels not moving the terminal cursor to the focused row, so screen readers and magnifiers can follow arrow-key navigation
- Fixed crashes (maximum call stack exceeded) when a deeply nested watched directory tree was deleted or moved, and when rendering deeply nested UI trees
- Fixed pull request events occasionally being lost when a session exited immediately after creating or linking a PR
- Fixed the Bedrock setup wizard failing profile verification for assume-role profiles in partitioned AWS regions and on proxy-only networks
- Fixed rare negative or incorrect turn duration measurements after a system clock adjustment by timing turns with a monotonic clock
- Fixed the "N MCP servers need authentication" startup notice over-counting claude.ai connectors that aren't connected in claude.ai
- Fixed prompt history entries being dropped or duplicated when history writes raced or failed
- Fixed a retry loop that re-sent identical doomed requests after a context-overflow error with a large thinking budget;
Ctrl+Bbackgrounding now applies the same background-shell caps as other paths - Fixed agent frontmatter hooks running from untrusted folders: hooks now require the agent file's own folder to have accepted workspace trust
- Fixed fork-session lineage being lost after compaction in headless and SDK sessions
- Fixed a resumed session failing every turn, or crashing on resume, when its history held a malformed delta attachment
- Improved
/ultrareviewerror feedback so Claude can correct an invalid argument instead of retrying it unchanged - Improved auto mode: the dangerous-rm, background-
&, and suspicious-Windows-path checks no longer open permission dialogs; the auto-mode classifier adjudicates them instead - Improved sandbox command restrictions for IDE interactions
- Improved trust dialogs to name the repository root the grant covers
- Changed
/deep-researchto start only when invoked manually; Claude no longer launches it on its own - Changed plan mode with auto to no longer prompt for Bash commands the static analyzer can't prove read-only; the auto-mode classifier judges them instead
- Added an announcement when fast mode changes as a result of switching models via
/config model=<x>or Remote Control - Changed server-managed settings so benign feature and cost toggles no longer trigger the settings-approval prompt
- Changed agent markdown files to reject agent names containing
:, which is reserved for plugin namespacing - Changed skills with
context: forkto run in the background by default; opt out per skill withbackground: false - Added
yes/no/on/off/1/0(case-insensitive) as accepted values for skill and plugin frontmatter booleans, alongsidetrue/false - Fixed remote sessions continuing to send heartbeats after their worker was replaced, which left long-lived desktop and IDE processes retrying a rejected request every few seconds forever
2.1.217 (July 24, 2026)
- Added emoji shortcode autocomplete in the prompt input: type
:heart:to insert a heart, or:heafor suggestions, disable with theemojiCompletionEnabledsetting - Added warnings when transcript writes are failing (e.g. disk full) or when session saving is off due to an inherited environment variable, instead of losing transcripts silently
- Fixed a memory leak where truncated MCP tool outputs kept the full untruncated result in memory for the rest of the session
- Fixed Windows auto-update failures that could leave
claude.exemissing; failed updates now restore the preserved executable automatically - Fixed background session isolation not canonicalizing symlinked working directories, which could let sessions escape their workspace folder
- Fixed auto-compact never triggering for Claude Opus 4.8 on Bedrock and
/compactfailing once over the limit - Fixed corporate mTLS, TLS-verify, OAuth scope, and proxy settings being ignored in Claude Desktop sessions
- Fixed screen reader mode's startup announcement being cut off by the first prompt render, and the thinking status row re-rendering every few seconds to update elapsed time and token counts
- Fixed managed settings that set
OTEL_EXPORTER_OTLP_ENDPOINTnot governing all signals, lower-scope signal-specific overrides no longer redirect telemetry away from the managed endpoint - Fixed
--resume/--continueand/resumefailing with a TypeError when a transcript has a malformed attachment entry - Fixed Remote Control sessions not showing a pending permission prompt or dialog to viewers that connected after it appeared
- Fixed background shells sometimes becoming impossible to stop after a session is sent to the background (
/backgroundor left arrow) or when the session exits on a heavily loaded machine, most visible on Windows - Fixed a
CLAUDE.mdorSKILL.mdpaths frontmatter value with many brace groups OOM-killing or stalling the CLI at startup, brace expansion is now budget-bounded - Fixed the transcript preview sitting flush against the input area when attaching to a starting background session; it now leaves the same one-line gap as the live layout, so the transcript no longer shifts when the session takes over
- Improved footer PR badge links to be clickable hyperlinks even when terminal support can't be detected (e.g. over ssh/tmux); set
FORCE_HYPERLINK=0to opt out - Changed the login-expiry warning to appear 3 days before expiry instead of 5
- Capped the frontend-design plugin suggestion tip at 3 lifetime impressions instead of repeating indefinitely
- Added a cap on concurrently-running subagents (default 20, override with
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS) so one message can't fan out unbounded background agents - Changed subagents to no longer spawn nested subagents by default; set
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTHto allow deeper nesting - Fixed
--max-budget-usdnot stopping background subagents: once the cap is reached, new spawns are denied and running background agents are halted
Notes
Subagent guardrails are tightening in stages
2.1.212 added a per-session spawn cap (default 200). 2.1.217 disables nested spawning entirely and caps concurrent subagents at 20. This is a deliberate ratchet: Anthropic is closing the paths that let a single message fan out unbounded agents. If you have custom workflows or skills that delegate through multiple agent layers, test them after this update. The environment variables (CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH, CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS) are the escape hatches, but the defaults now assume flat fan-out only.
/deep-research and /code-review follow the same pattern as /verify
2.1.215 stopped Claude from auto-running /verify and /code-review. 2.1.218 extends the principle to /deep-research (manual-only) and moves /code-review to a background subagent. The trend is clear: expensive multi-agent operations are being moved behind explicit invocation and out of the foreground conversation. If you built prompts that assumed Claude would decide to deep-research on its own, they need updating.