What's changed
- Added
claude plugin eval: run a plugin's eval suite against Claude Code and get scored, reproducible results (JSON + HTML report); seeclaude plugin eval --help - Added
/output-style [name]to list and switch output styles, including over Remote Control and in cloud and other headless sessions - Added a diff of the files a Bash command changed to the Bash tool result when the Bash tool handles file edits (setting
bashEditDiffEnabled) - Added
OTEL_METRICS_INCLUDE_REPOSITORYto tag OpenTelemetry metrics and events withvcs.*repository attributes; commit events getvcs.ref.head.*withOTEL_LOG_TOOL_DETAILS - Added
CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MSto extend the LLM gateway/v1/modelsdiscovery timeout (default 3s) - Added a spinner tip suggesting
/focusfor a view with just your prompt, a one-line work summary, and the response - Added
CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS(1–256) to raise the Workflow tool's per-run concurrent agent limit for inference-bound fan-outs - Fixed the prompt cache being partially invalidated on the turn after a response was cut off at the output-token limit and automatically resumed
- Fixed a case where resuming a session after interrupting Claude mid-thought could change how earlier context was re-sent, hurting prompt-cache reuse
- Fixed F1/F2/F4 not working in kitty-protocol terminals and Delete in st, Alt+arrows acting as Escape in rxvt-unicode, and Shift+punctuation typing the unshifted key in WezTerm (regression in 2.1.247)
- Fixed remote and headless sessions reporting "waiting for your input" while background agents were still running (set
CLAUDE_CODE_BG_TASKS_REPORT_RUNNING=0to restore the old behavior) - Fixed the terminal's replies to capability queries (
^[[?1;2c) appearing as stray text at startup in some terminals - Fixed rows at the top or bottom of the transcript going blank in fullscreen after resizing the terminal
- Fixed a deny or ask permission rule starting with
!applying beyond the settings source that wrote it; such a rule now applies only within its own source, and a bare!negation is ignored - Fixed the git status Claude is told after a compaction: it is now the current status, not the one from the start of the session
- Fixed synced plugin MCP servers not connecting when a remote session resumes
- Fixed resumed headless sessions losing a turn's replies when the model was switched or a request was retried mid-turn
- Fixed terminal escape codes, line breaks and oversized text from a background task's on-disk record reaching the task list and task notifications when work is resumed
- Fixed CMYK JPEG images failing to attach with "cannot decode"; they are now converted and resized like other JPEGs
- Fixed the managed settings approval dialog not naming the collector for a gRPC telemetry endpoint set without a scheme
- Fixed plugin
headersHelperconsent prompts showing a URL path that could be misread as a different host - Fixed plugin errors showing
[redacted URL]in place of a relative Windows path with a folder name that starts with@ - Fixed missing cursor in the permission-rule, auto-mode-rule, add-directory, session-rename and feedback-review text fields when the terminal's native cursor is enabled
- Fixed repeated clicks on a
/forkreceipt, each under a second apart, never backgrounding the session right away while it waited for the current tool to finish - Fixed plugin LSP servers that reject
shutdownparams (e.g. rust-analyzer) being left running at session end;exitis now sent even ifshutdownfails - Fixed the attribution reminder overriding a CLAUDE.md or memory rule against commit and pull request attribution; lines set by managed settings still apply
- Fixed prompt suggestions being dropped for text in Japanese, Chinese, Thai and other languages written without spaces between words
- Fixed synchronized output being assumed from the terminal's name in GNOME Terminal and Konsole versions that do not support it
- Fixed
permission_denialsin--output-format stream-jsonresults omitting Read, Edit and Write calls blocked by a path-scoped deny rule - Fixed sessions run through the SDK or the desktop app showing an unknown status in other sessions' agent list
- Fixed
/insightsfailing on Bedrock, Vertex, Foundry, and gateway deployments whose account can't reach the default Opus model by using the session model there instead - Fixed organization policy limits not loading for the session when another Claude Code process refreshed the login at the same moment
- Fixed Claude Desktop sessions using Bedrock, Vertex, or a gateway not getting the contextual "what Claude needs" turn-end notification text
- Fixed MCP servers reconnecting when an updated config only changed the order of the server URL's query parameters
- Fixed the prompt box's top border splitting into extra lines when viewing a background agent whose name or description has line breaks or is wider than the terminal
- Fixed sessions getting permanently stuck on "Prompt is too long" when auto-compaction had no complete earlier exchange to summarize (mostly Agent SDK sessions with very large prompts)
- Fixed
/goalruns silently stalling after API errors, network drops, or token limits: the goal now retries with backoff, or pauses and says why, including until a usage limit resets - Fixed prompt cache misses in cloud sessions by waiting briefly for server configuration before the first request
- Fixed
/btwanswers that contained made-up tool calls and output: the side question is now told not to write them, and any that appear are flagged as not executed - Fixed
CLAUDE_CODE_RESUME_INTERRUPTED_TURNre-running a turn that had failed with an API error over 6 hours earlier, or longer ago thanCLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MSwhen set - Fixed organization plugins enabled through managed settings not loading in headless sessions and on Claude Desktop (once Desktop bundles this CLI version); they load from the next session
- Fixed plugin archives extracted for a session being readable by other local users, extracted files keeping world-writable bits from the archive, and stale files surviving re-extraction
- Fixed
Edit()deny rules and the write-path check not applying to the file a Bashteecommand writes; aBash(tee:*)allow rule no longer covers destinations outside the working directories - Fixed stray characters like
22c, or a terminal's color or version reply, being typed into the prompt at startup over slow connections (ssh, browser terminals) - Fixed the terminal's block cursor showing under the interface in rxvt-unicode after leaving or re-entering fullscreen
- Fixed the cursor block staying visible after returning from an external editor in fullscreen mode on rxvt-unicode
- Fixed the interface being drawn twice after returning from an external editor (Ctrl+G) outside fullscreen mode
- Fixed the interface being drawn twice in Konsole after returning from an external editor
- Windows: Fixed PowerShell tool commands sent to the background stopping when Claude Code exits
- Improved the
/diffpanel to open fully rendered in one step instead of showing a loading state first - Improved prompt suggestion filtering for Japanese, Chinese and Korean text: mixed-script and single-word suggestions are kept, and meta or evaluative text is dropped as it is for English
- Improved the Skill tool's "Unknown skill" error to name the plugin skill's full name when a bare name matches exactly one plugin skill
- Improved keyboard support over SSH and in unrecognized terminals: terminals that answer the kitty keyboard query (such as foot and Alacritty 0.16+) now get Shift+Enter and Ctrl+Shift shortcuts
- Improved responsiveness in long sessions: transcript updates no longer re-process the whole conversation to build the collapsed tool-use summaries
- Improved first-party sessions with telemetry disabled: an
alwaysLoadMCP server that finishes connecting mid-conversation is usable on the next turn without a tool-search round trip - Changed
/ultrareview --postto post the PR comment directly when the findings arrive and print the comment link, instead of starting a second cloud session to post it - Changed artifact database reads that save into the session scratchpad so they no longer stop for working-folder approval
- Changed skills synced from claude.ai in cloud sessions to be named
anthropic-skills:<name>, matching Claude Desktop; the bare name still works when nothing else uses it - [VSCode] Added an agent map: an "N agents" footer pill opens a map of the session's sub-agents with per-agent cards, Stop agent, and read-only transcripts
- [VSCode] Added a Hooks dialog to the command menu for viewing hooks and adding, editing, or removing them in user, project, and local settings; managed, plugin, and session hooks stay read-only
- [VSCode] Added live progress rows for running subagents under the tool-call groups in Focus view
- [VSCode] Added a Permission rules dialog that lists permission rules and adds or removes them in user, project, and local settings; startup-option, session-only, and managed rules stay read-only
- [VSCode] Added a Cancel button to the Switch account screen that returns to your session as the current account
- [VSCode] Fixed Focus view showing a turn started by a delivered plain-text prompt, such as a scheduled task's, as part of the previous turn
- [VSCode] Fixed the footer's prompt cache clock hiding its minutes when the panel is narrow
- [VSCode] Fixed the session list keeping sessions from the default folder when
CLAUDE_CONFIG_DIRis set in a settings file or theenvironmentVariablessetting - [VSCode] Fixed a plan preview that finished loading late sometimes hiding its comment box or showing an older plan
- [VSCode] Fixed a plan preview accepting comments that went nowhere after its Claude tab closed
- [VSCode] Fixed the prompt cache clock and reopen notice for a session compacted after its last reply and then closed, which now reads as cold when reopened
- [VSCode] Fixed a session renamed in the extension while Remote Control is on keeping its old name on claude.ai/code
- [VSCode] Fixed the "Enable Remote Control for all sessions" toggle keeping its last position after the setting was reset to default from a terminal
- [VSCode] Fixed restored Claude tabs not counting as open in the session list after a window reload until clicked, and their row opening a second tab
- [VSCode] Fixed Switch account making a tab forget its dismissed usage-limit warnings when you sign back in as the same account
- [VSCode] Fixed a session rename being replaced by the generated name after a window reload when the session was renamed during a long turn
- [VSCode] Fixed the sidebar usage meter keeping a stale per-model weekly limit row after the account loses that limit
- [VSCode] Fixed a rare case where an @-mention sent with the keyboard shortcut while a new chat view was still starting could be inserted into the input long after the keystroke
- [VSCode] Fixed the session list jumping down when the Account & usage header appeared a moment after opening the Claude side bar
- [VSCode] Improved documents and messages written for someone other than the user: Claude now writes them for that audience and names it at the top of its reply
- [VSCode] Improved screen reader and keyboard accessibility in the slash-command menu, @-mention menu, output-style picker, Send/Stop button, permission and question cards, and onboarding checklist
- [VSCode] Changed the current-file chip in the message box: an X now removes it, replacing the Hide toggle
- [VSCode] Removed the Claude Code items from a session tab's right-click menu and the editor title bar's "..." menu; they could not act on the tab the menu was opened on
- [Claude Code on the web] Added taking back a queued message in a cloud session before Claude reads it: remove it from the queue, or press Esc or Up, and the text returns to the message box
- [Claude Code on the web] Fixed
/model defaultin a cloud session leaving every later message failing in organizations that restrict which models Claude Code can use - [Claude Code on the web] Fixed one-off scheduled routines occasionally running a second time after a transient server error
- [Claude Code on the web] Fixed routine runs that use subagents sometimes being treated as finished too early, which could skip the retry after a real failure or start a duplicate run
- [Claude Code on the web] Fixed file links in cloud session transcripts opening a GitHub 404 when Claude was working from a subfolder of the repository
- [Claude Code on the web] Changed the Cloud environments admin page to list every environment instead of capping each table at five rows behind a Show more control that could be unreachable
- [Claude Code on the web] Changed claude.ai/code for Free-plan users to open the plans page with a path to upgrade, instead of a "Disabled by org admin" page with no way forward
- [Claude Tag] Added a confirmation dialog before Connect all or Disconnect on a GitHub installation in admin settings, to guard against accidental organization-wide changes
- [Claude Tag] Fixed threads occasionally going silent after a failed turn because the failure notice was dropped when Slack briefly rate-limited it; the notice is now retried
- [Claude Tag] Fixed Claude accepting a switch to a model your organization hasn't enabled and then quietly answering with a fallback model; it now declines and says an admin can enable it
- [Claude Tag] Fixed a table posting as raw pipe text when Claude attached files to the same message; the table now posts as a normal reply and the files follow with a plain caption
- [Claude Tag] Fixed
@Claude !restartat the top level of a channel where Claude isn't active starting an unrelated conversation; it now privately says there is nothing to restart - [Claude Tag] Fixed plugin rows in Slack access settings showing an unlabeled raw ID with no way to turn the plugin off; they now show its name and link to the bundle that manages it
- [Claude Tag] Fixed the shared-session banner and Share dialog on sessions started from Slack claiming the whole organization could open the link; they now name the Slack channel's audience
- [Claude Tag] Improved load time of the admin settings page and its Slack channel picker, most noticeably for organizations with many channels or several connected workspaces
- [Claude Tag] Improved scheduled routines in Slack channels: a routine run can now reply in an existing thread instead of always posting a new top-level channel message
- [Claude Tag] Improved the timestamp on Claude's live progress checklists to show each reader's local time and how long ago it was updated, instead of a fixed UTC time