v2.1.217
Added
- Add emoji shortcode autocomplete in the prompt input to insert emojis by typing shortcodes like `:heart:` for ❤️, with suggestions available and disable option via `emojiCompletionEnabled` setting
- Add warnings when transcript writes are failing (e.g. disk full) or when session saving is off due to an inherited environment variable
- Add a cap on concurrently-running subagents with a default of 20, configurable via `CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS`
Changed
- Change the login-expiry warning to appear 3 days before expiry instead of 5
- Change the frontend-design plugin suggestion tip to cap at 3 lifetime impressions instead of repeating indefinitely
- Change subagents to no longer spawn nested subagents by default, with `CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH` allowing deeper nesting
- Improve footer PR badge links to be clickable hyperlinks even when terminal support can't be detected, with `FORCE_HYPERLINK=0` to opt out
Fixed
- Fix a memory leak where truncated MCP tool outputs kept the full untruncated result in memory for the rest of the session
- Fix Windows auto-update failures that could leave `claude.exe` missing by automatically restoring the preserved executable on failed updates
- Fix background session isolation not canonicalizing symlinked working directories, which could let sessions escape their workspace folder
- Fix auto-compact never triggering for Claude Opus 4.8 on Bedrock and `/compact` failing once over the limit
- Fix corporate mTLS, TLS-verify, OAuth scope, and proxy settings being ignored in Claude Desktop sessions
- Fix screen reader mode's startup announcement being cut off by the first prompt render
- Fix the thinking status row re-rendering every few seconds to update elapsed time and token counts
- Fix managed settings that set `OTEL_EXPORTER_OTLP_ENDPOINT` not governing all signals, with lower-scope signal-specific overrides no longer redirecting telemetry away from the managed endpoint
- Fix `--resume`/`--continue` and `/resume` failing with a TypeError when a transcript has a malformed attachment entry
- Fix Remote Control sessions not showing a pending permission prompt or dialog to viewers that connected after it appeared
- Fix background shells sometimes becoming impossible to stop after a session is sent to the background or when the session exits on a heavily loaded machine
- Fix `CLAUDE.md` or `SKILL.md` paths frontmatter value with many brace groups OOM-killing or stalling the CLI at startup by budget-bounding brace expansion
- Fix the transcript preview sitting flush against the input area when attaching to a starting background session by leaving the same one-line gap as the live layout
- Fix `--max-budget-usd` not stopping background subagents by denying new spawns and halting running background agents once the cap is reached
What's changed
- Added emoji shortcode autocomplete in the prompt input: type
:heart:to insert ❤️, 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←) 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