What changed
Claude Code 2.1.217 shipped on July 21, 2026. Emoji shortcode autocomplete arrives in the prompt input, and warnings now surface when transcripts are being lost silently. The headline theme is reining in runaway subagents: a concurrency cap, nested spawning off by default, and budget-cap enforcement all land together. The rest of the release is enterprise and stability work — corporate network settings in Claude Desktop, auto-compact over Bedrock, and a memory leak.
New features
-
Emoji shortcode autocomplete
Inserting an emoji meant copying one in from outside the input. Now you can type
:heart:in the prompt input to insert ❤️, or:heato get suggestions. Disable it with theemojiCompletionEnabledsetting. -
Warnings when transcript writes fail
When the disk was full or session saving was off due to an inherited environment variable, transcripts were lost silently with no indication. Now Claude Code warns when transcript writes are failing or session saving is off, instead of losing transcripts silently.
Key improvements
-
Cap on concurrently-running subagents
A single message could fan out unbounded background subagents, so one message could spin up an unexpected number at once. There’s now a cap on concurrently-running subagents (default 20, override with
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS). -
Nested subagent spawning off by default
Subagents spawning their own nested subagents could lead to unexpected fan-out. Subagents no longer spawn nested subagents by default; set
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTHto allow deeper nesting. -
--max-budget-usdnow stops background subagentsReaching the budget cap didn’t stop subagents already running in the background, so costs could run past the cap you set. Now, once the cap is reached, new spawns are denied and running background agents are halted.
-
Clickable footer PR badge links
Over ssh or tmux, where terminal hyperlink support can’t be detected, the footer PR badge wasn’t clickable. It’s now a clickable hyperlink even when support can’t be detected; set
FORCE_HYPERLINK=0to opt out. -
Login-expiry warning moved to 3 days out
The login-expiry warning appeared 5 days before expiry, well ahead of the actual deadline. It now appears 3 days before expiry.
-
Capped the frontend-design plugin tip
The frontend-design plugin suggestion tip repeated indefinitely. It’s now capped at 3 lifetime impressions.
Bug fixes
Sessions and resume
- Fixed auto-compact never triggering for Claude Opus 4.8 on Bedrock, and
/compactfailing once over the limit. - Fixed
--resume/--continueand/resumefailing with a TypeError when a transcript has a malformed attachment entry. - 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.
Background sessions and subagents
- Fixed background session isolation not canonicalizing symlinked working directories, which could let sessions escape their workspace folder.
- Fixed background shells sometimes becoming impossible to stop after a session is sent to the background (
/backgroundor←) or when the session exits on a heavily loaded machine — most visible on Windows.
Enterprise and networking
- Fixed corporate mTLS, TLS-verify, OAuth scope, and proxy settings being ignored in Claude Desktop sessions.
- 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.
Platform and stability
- 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 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 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 Remote Control sessions not showing a pending permission prompt or dialog to viewers that connected after it appeared.
Notes
- Nested subagents are now off by default — 2.1.172 opened nested subagent spawning up to 5 levels deep, but as of this release subagents no longer spawn nested subagents by default. If a workflow relied on multi-level delegation, set
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTHto re-enable deeper nesting. - The default concurrency cap is 20 — if a workflow fanned out large parallel batches from one message, concurrent runs are now capped at 20 by default. Raise
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTSif you need more parallelism. - Disable emoji autocomplete with
emojiCompletionEnabled— if turning:-prefixed input into emoji suggestions gets in the way, this setting turns it off. - Enterprise setups should re-check Claude Desktop network settings — corporate mTLS, proxy, and OAuth scope settings were being ignored in Claude Desktop sessions; if you had workarounds in place, behavior may change after updating.