What's changed
- Added the
/claude-apiskill for building applications with the Claude API and Anthropic SDK - Added Ctrl+U on an empty bash prompt (
!) to exit bash mode, matchingescapeandbackspace - Added numeric keypad support for selecting options in Claude's interview questions (previously only the number row above QWERTY worked)
- Added optional name argument to
/remote-controlandclaude remote-control(/remote-control My Projector--name "My Project") to set a custom session title visible in claude.ai/code - Added Voice STT support for 10 new languages (20 total) — Russian, Polish, Turkish, Dutch, Ukrainian, Greek, Czech, Danish, Swedish, Norwegian
- Added effort level display (e.g., "with low effort") to the logo and spinner, making it easier to see which effort setting is active
- Added agent name display in terminal title when using
claude --agent - Added
sandbox.enableWeakerNetworkIsolationsetting (macOS only) to allow Go programs likegh,gcloud, andterraformto verify TLS certificates when using a custom MITM proxy withhttpProxyPort - Added
includeGitInstructionssetting (andCLAUDE_CODE_DISABLE_GIT_INSTRUCTIONSenv var) to remove built-in commit and PR workflow instructions from Claude's system prompt - Added
/reload-pluginscommand to activate pending plugin changes without restarting - Added a one-time startup prompt suggesting Claude Code Desktop on macOS and Windows (max 3 showings, dismissible)
- Added
${CLAUDE_SKILL_DIR}variable for skills to reference their own directory in SKILL.md content - Added
InstructionsLoadedhook event that fires when CLAUDE.md or.claude/rules/*.mdfiles are loaded into context - Added
agent_id(for subagents) andagent_type(for subagents and--agent) to hook events - Added
worktreefield to status line hook commands with name, path, branch, and original repo directory when running in a--worktreesession - Added
pluginTrustMessagein managed settings to append organization-specific context to the plugin trust warning shown before installation - Added policy limit fetching (e.g., remote control restrictions) for Team plan OAuth users, not just Enterprise
- Added
pathPatterntostrictKnownMarketplacesfor regex-matching file/directory marketplace sources alongsidehostPatternrestrictions - Added plugin source type
git-subdirto point to a subdirectory within a git repo - Added
oauth.authServerMetadataUrlconfig option for MCP servers to specify a custom OAuth metadata discovery URL when standard discovery fails - Fixed a security issue where nested skill discovery could load skills from gitignored directories like
node_modules - Fixed trust dialog silently enabling all
.mcp.jsonservers on first run. You'll now see the per-server approval dialog as expected - Fixed
claude remote-controlcrashing immediately on npm installs with "bad option: --sdk-url" (#28334) - Fixed
--model claude-opus-4-0and--model claude-opus-4-1resolving to deprecated Opus versions instead of current - Fixed macOS keychain corruption when using multiple OAuth MCP servers. Large OAuth metadata blobs could overflow the
security -istdin buffer, silently leaving stale credentials behind and causing repeated/loginprompts. - Fixed
.credentials.jsonlosingsubscriptionType(showing "Claude API" instead of "Claude Pro"/"Claude Max") when the profile endpoint transiently fails during token refresh (#30185) - Fixed ghost dotfiles (
.bashrc,HEAD, etc.) appearing as untracked files in the working directory after sandboxed Bash commands on Linux - Fixed Shift+Enter printing
[27;2;13~instead of inserting a newline in Ghostty over SSH - Fixed stash (Ctrl+S) being cleared when submitting a message while Claude is working
- Fixed ctrl+o (transcript toggle) freezing for many seconds in long sessions with lots of file edits
- Fixed plan mode feedback input not supporting multi-line text entry (backslash+Enter and Shift+Enter now insert newlines)
- Fixed cursor not moving down into blank lines at the top of the input box
- Fixed
/statscrash when transcript files contain entries with missing or malformed timestamps - Fixed a brief hang after a streaming error on long sessions (the transcript was being fully rewritten to drop one line; it is now truncated in place)
- Fixed
--setting-sources usernot blocking dynamically discovered project skills - Fixed duplicate CLAUDE.md, slash commands, agents, and rules when running from a worktree nested inside its main repo (e.g.
claude -w) - Fixed plugin Stop/SessionEnd/etc hooks not firing after any
/pluginoperation - Fixed plugin hooks being silently dropped when two plugins use the same
${CLAUDE_PLUGIN_ROOT}/...command template - Fixed memory leak in long-running SDK/CCR sessions where conversation messages were retained unnecessarily
- Fixed API 400 errors in forked agents (autocompact, summarization) when resuming sessions that were interrupted mid-tool-batch
- Fixed "unexpected tool_use_id found in tool_result blocks" error when resuming conversations that start with an orphaned tool result
- Fixed teammates accidentally spawning nested teammates via the Agent tool's
nameparameter - Fixed
CLAUDE_CODE_MAX_OUTPUT_TOKENSbeing ignored during conversation compaction - Fixed
/compactsummary rendering as a user bubble in SDK consumers (Claude Code Remote web UI, VSCode extension) - Fixed voice space bar getting stuck after a failed voice activation (module loading race, cold GrowthBook)
- Fixed worktree file copy on Windows
- Fixed global
.claudefolder detection on Windows - Fixed symlink bypass where writing new files through a symlinked parent directory could escape the working directory in
acceptEditsmode - Fixed sandbox prompting users to approve non-allowed domains when
allowManagedDomainsOnlyis enabled in managed settings — non-allowed domains are now blocked automatically with no bypass - Fixed interactive tools (e.g.,
AskUserQuestion) being silently auto-allowed when listed in a skill's allowed-tools, bypassing the permission prompt and running with empty answers - Fixed multi-GB memory spike when committing with large untracked binary files in the working tree
- Fixed Escape not interrupting a running turn when the input box has draft text. Use Up arrow to pull queued messages back for editing, or Ctrl+U to clear the input line.
- Fixed Android app crash when running local slash commands (
/voice,/cost) in Remote Control sessions - Fixed a memory leak where old message array versions accumulated in React Compiler
memoCacheover long sessions - Fixed a memory leak where REPL render scopes accumulated over long sessions (~35MB over 1000 turns)
- Fixed memory retention in in-process teammates where the parent's full conversation history was pinned for the teammate's lifetime, preventing GC after
/clearor auto-compact - Fixed a memory leak in interactive mode where hook events could accumulate unboundedly during long sessions
- Fixed hang when
--mcp-configpoints to a corrupted file - Fixed slow startup when many skills/plugins are installed
- Fixed
cd <outside-dir> && <cmd>permission prompt to surface the chained command instead of only showing "Yes, allow reading from /" - Fixed conditional
.claude/rules/*.mdfiles (withpaths:frontmatter) and nested CLAUDE.md files not loading in print mode (claude -p) - Fixed
/clearnot fully clearing all session caches, reducing memory retention in long sessions - Fixed terminal flicker caused by animated elements at the scrollback boundary
- Fixed UI frame drops on macOS when using MCP servers with OAuth (regression from 2.1.x)
- Fixed occasional frame stalls during typing caused by synchronous debug log flushes
- Fixed
TeammateIdleandTaskCompletedhooks to support{"continue": false, "stopReason": "..."}to stop the teammate, matchingStophook behavior - Fixed
WorktreeCreateandWorktreeRemoveplugin hooks being silently ignored - Fixed skill descriptions with colons (e.g., "Triggers include: X, Y, Z") failing to load from SKILL.md frontmatter
- Fixed project skills without a
description:frontmatter field not appearing in Claude's available skills list - Fixed
/contextshowing identical token counts for all MCP tools from a server - Fixed literal
nulfile creation on Windows when the model uses CMD-style2>nulredirection in Git Bash - Fixed extra blank lines appearing below each tool call in the expanded subagent transcript view (Ctrl+O)
- Fixed Tab/arrow keys not cycling Settings tabs when
/configsearch box is focused but empty - Fixed service key OAuth sessions (CCR containers) spamming
[ERROR]logs with 403s from profile-scoped endpoints - Fixed inconsistent color for "Remote Control active" status indicator
- Fixed Voice waveform cursor covering the first suffix letter when dictating mid-input
- Fixed Voice input showing all 5 spaces during warmup instead of capping at ~2 (aligning with the "keep holding…" hint)
- Improved spinner performance by isolating the 50ms animation loop from the surrounding shell, reducing render and CPU overhead during turns
- Improved UI rendering performance in native binaries with React Compiler
- Improved
--worktreestartup by eliminating a git subprocess on the startup path - Improved macOS startup by eliminating redundant settings-file reloads when managed settings resolve
- Improved macOS startup for Claude.ai enterprise/team users by skipping an unnecessary keychain lookup
- Improved MCP
-pstartup by pipelining claude.ai config fetch with local connections and using a concurrency pool instead of sequential batching - Improved voice startup by removing imperceptible warmup pulse animations that were causing re-render stutter
- Improved MCP binary content handling: tools returning PDFs, Office documents, or audio now save decoded bytes to disk with the correct file extension instead of dumping raw base64 into the conversation context. WebFetch also saves binary responses alongside its summary.
- Improved memory usage in long sessions by stabilizing
onSubmitacross message updates - Improved LSP tool rendering and memory context building to no longer read entire files
- Improved session upload and memory sync to avoid reading large files into memory before size/binary checks
- Improved file operation performance by avoiding reading file contents for existence checks (6 sites)
- Improved documentation to clarify that
--append-system-prompt-fileand--system-prompt-filework in interactive mode (the docs previously said print mode only) - Reduced baseline memory by ~16MB by deferring Yoga WASM preloading
- Reduced memory footprint for SDK and CCR sessions using stream-json output
- Reduced memory usage when resuming large sessions (including compacted history)
- Reduced token usage on multi-agent tasks with more concise subagent final reports
- Changed Sonnet 4.5 users on Pro/Max/Team Premium to be automatically migrated to Sonnet 4.6
- Changed the
/resumepicker to show your most recent prompt instead of the first one. This also resolves some titles appearing as(session). - Changed claude.ai MCP connector failures to show a notification instead of silently disappearing from the tool list
- Changed example command suggestions to be generated deterministically instead of calling Haiku
- Changed resuming after compaction to no longer produce a preamble recap before continuing
- [SDK] Changed task creation to no longer require the
activeFormfield — the spinner falls back to the task subject - [VSCode] Added compaction display as a collapsible "Compacted chat" card with the summary inside
- [VSCode] The permission mode picker now respects
permissions.disableBypassPermissionsModefrom your effective Claude Code settings (including managed/policy settings) — when set todisable, bypass permissions mode is hidden from the picker - [VSCode] Fixed RTL text (Arabic, Hebrew, Persian) rendering reversed in the chat panel (regression in v2.1.63)