Claude Code 2.1.269
98changes- Add /output-style [name] to list and switch output styles from any surface, including Remote Control and headless sessions.
- Add a Hooks dialog in VS Code to view, add, edit, and remove hooks without leaving the IDE.
- Add a Permission rules dialog in VS Code to list, add, and remove permission rules without leaving the IDE.
- Add claude plugin eval to run a plugin's eval suite and get scored, reproducible results.
- Speed up long sessions by no longer re-processing the whole transcript to build tool-use summaries.
New features
14List and switch output styles
Added /output-style [name] to list and switch output styles, including over Remote Control and in cloud and other headless sessions
▤ In the docs[VSCode] Manage hooks from the command menu
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] Manage permission rules from a dialog
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
▤ In the docsRun and score plugin eval suites
Added claude plugin eval: run a plugin's eval suite against Claude Code and get scored, reproducible results (JSON + HTML report); see claude plugin eval --help
Show a diff of Bash file edits
Added a diff of the files a Bash command changed to the Bash tool result when the Bash tool handles file edits (setting bashEditDiffEnabled)
▤ In the docsMore changes (9) Fewer changes
Tag OpenTelemetry data with repository info
Added OTEL_METRICS_INCLUDE_REPOSITORY to tag OpenTelemetry metrics and events with vcs.* repository attributes; commit events get vcs.ref.head.* with OTEL_LOG_TOOL_DETAILS
▤ In the docsExtend the gateway model discovery timeout
Added CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS to extend the LLM gateway /v1/models discovery timeout (default 3s)
▤ In the docsSuggest /focus in the spinner tip
Added a spinner tip suggesting /focus for a view with just your prompt, a one-line work summary, and the response
Raise the Workflow tool's agent concurrency limit
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
▤ In the docs[VSCode] View and stop sub-agents from a map
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] Show live subagent progress in Focus view
Added live progress rows for running subagents under the tool-call groups in Focus view
[VSCode] Cancel switching accounts
Added a Cancel button to the Switch account screen that returns to your session as the current account
[Claude Code on the web] Take back queued messages
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 Tag] Confirm before Connect all or Disconnect
Added a confirmation dialog before Connect all or Disconnect on a GitHub installation in admin settings, to guard against accidental organization-wide changes
Improvements
17More changes (16) Fewer changes
Open /diff fully rendered
Improved the /diff panel to open fully rendered in one step instead of showing a loading state first
Refine CJK prompt suggestion filtering
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
Name the plugin skill in Unknown skill errors
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
Extend keyboard support to more terminals
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
▤ In the docsUse late-connecting MCP servers sooner
Improved first-party sessions with telemetry disabled: an alwaysLoad MCP server that finishes connecting mid-conversation is usable on the next turn without a tool-search round trip
Post /ultrareview comments directly
Changed /ultrareview --post to post the PR comment directly when the findings arrive and print the comment link, instead of starting a second cloud session to post it
Skip approval for scratchpad database reads
Changed artifact database reads that save into the session scratchpad so they no longer stop for working-folder approval
Rename synced skills to anthropic-skills:<name>
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
▤ In the docs[VSCode] Write for the intended audience
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] Improve accessibility across the UI
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
▤ In the docs[VSCode] Remove the current-file chip with X
Changed the current-file chip in the message box: an X now removes it, replacing the Hide toggle
[Claude Code on the web] List every cloud environment
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] Offer upgrades to Free-plan users
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] Speed up admin settings load time
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] Reply to routines in existing threads
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] Show progress timestamps in local time
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
Bug fixes
66Preserve cache after mid-thought interrupts
Fixed a case where resuming a session after interrupting Claude mid-thought could change how earlier context was re-sent, hurting prompt-cache reuse
Report background agents as still running
Fixed remote and headless sessions reporting "waiting for your input" while background agents were still running (set CLAUDE_CODE_BG_TASKS_REPORT_RUNNING=0 to restore the old behavior)
Close the tee write-path bypass
Fixed Edit() deny rules and the write-path check not applying to the file a Bash tee command writes; a Bash(tee:*) allow rule no longer covers destinations outside the working directories
Scope ! permission rules to their source
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
Load org policy limits during concurrent logins
Fixed organization policy limits not loading for the session when another Claude Code process refreshed the login at the same moment
More changes (61) Fewer changes
Preserve cache after auto-resumed replies
Fixed the prompt cache being partially invalidated on the turn after a response was cut off at the output-token limit and automatically resumed
Fix terminal key handling regressions
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)
Hide terminal capability-query replies
Fixed the terminal's replies to capability queries (^[[?1;2c) appearing as stray text at startup in some terminals
Fix blank rows after resizing fullscreen
Fixed rows at the top or bottom of the transcript going blank in fullscreen after resizing the terminal
Refresh git status after compaction
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
Connect synced plugin MCP servers on resume
Fixed synced plugin MCP servers not connecting when a remote session resumes
Preserve replies when resuming headless turns
Fixed resumed headless sessions losing a turn's replies when the model was switched or a request was retried mid-turn
Clean up background task list text
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
Attach CMYK JPEG images
Fixed CMYK JPEG images failing to attach with "cannot decode"; they are now converted and resized like other JPEGs
Name gRPC collectors in the approval dialog
Fixed the managed settings approval dialog not naming the collector for a gRPC telemetry endpoint set without a scheme
Clarify headersHelper consent prompt URLs
Fixed plugin headersHelper consent prompts showing a URL path that could be misread as a different host
Fix redacted paths in plugin errors
Fixed plugin errors showing [redacted URL] in place of a relative Windows path with a folder name that starts with @
Show the cursor in more text fields
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
Background sessions on repeated /fork clicks
Fixed repeated clicks on a /fork receipt, each under a second apart, never backgrounding the session right away while it waited for the current tool to finish
Stop LSP servers that reject shutdown params
Fixed plugin LSP servers that reject shutdown params (e.g. rust-analyzer) being left running at session end; exit is now sent even if shutdown fails
Respect no-attribution CLAUDE.md rules
Fixed the attribution reminder overriding a CLAUDE.md or memory rule against commit and pull request attribution; lines set by managed settings still apply
Suggest prompts for unspaced languages
Fixed prompt suggestions being dropped for text in Japanese, Chinese, Thai and other languages written without spaces between words
Detect synchronized-output support correctly
Fixed synchronized output being assumed from the terminal's name in GNOME Terminal and Konsole versions that do not support it
Report path-scoped denials in stream-json
Fixed permission_denials in --output-format stream-json results omitting Read, Edit and Write calls blocked by a path-scoped deny rule
Show correct status for SDK and Desktop sessions
Fixed sessions run through the SDK or the desktop app showing an unknown status in other sessions' agent list
Fall back /insights to the session model
Fixed /insights failing on Bedrock, Vertex, Foundry, and gateway deployments whose account can't reach the default Opus model by using the session model there instead
Show contextual notifications on Bedrock/Vertex
Fixed Claude Desktop sessions using Bedrock, Vertex, or a gateway not getting the contextual "what Claude needs" turn-end notification text
Skip reconnects for reordered MCP query params
Fixed MCP servers reconnecting when an updated config only changed the order of the server URL's query parameters
Fix prompt box borders for long agent names
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
Recover from stuck auto-compaction failures
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)
Retry or explain stalled /goal runs
Fixed /goal runs 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
Avoid early prompt-cache misses in the cloud
Fixed prompt cache misses in cloud sessions by waiting briefly for server configuration before the first request
Flag fabricated tool calls in /btw answers
Fixed /btw answers 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
Limit how old a resumed turn can be
Fixed CLAUDE_CODE_RESUME_INTERRUPTED_TURN re-running a turn that had failed with an API error over 6 hours earlier, or longer ago than CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS when set
Load managed plugins in headless and Desktop
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
Restrict access to extracted plugin files
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
Filter stray startup characters over slow links
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)
Hide the stray cursor under the interface
Fixed the terminal's block cursor showing under the interface in rxvt-unicode after leaving or re-entering fullscreen
Hide the cursor after the external editor
Fixed the cursor block staying visible after returning from an external editor in fullscreen mode on rxvt-unicode
Fix double redraw after the external editor
Fixed the interface being drawn twice after returning from an external editor (Ctrl+G) outside fullscreen mode
Fix double redraw in Konsole
Fixed the interface being drawn twice in Konsole after returning from an external editor
Keep PowerShell background commands running
Windows: Fixed PowerShell tool commands sent to the background stopping when Claude Code exits
[VSCode] Separate plain-text prompt turns
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] Show cache clock minutes when narrow
Fixed the footer's prompt cache clock hiding its minutes when the panel is narrow
[VSCode] Filter sessions by CLAUDE_CONFIG_DIR
Fixed the session list keeping sessions from the default folder when CLAUDE_CONFIG_DIR is set in a settings file or the environmentVariables setting
[VSCode] Fix late-loading plan previews
Fixed a plan preview that finished loading late sometimes hiding its comment box or showing an older plan
[VSCode] Block comments after the tab closes
Fixed a plan preview accepting comments that went nowhere after its Claude tab closed
[VSCode] Show compacted sessions as cold on reopen
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] Sync renames to claude.ai/code
Fixed a session renamed in the extension while Remote Control is on keeping its old name on claude.ai/code
[VSCode] Reflect Remote Control resets from terminal
Fixed the "Enable Remote Control for all sessions" toggle keeping its last position after the setting was reset to default from a terminal
[VSCode] Count restored tabs as open
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] Keep dismissed usage warnings after switching back
Fixed Switch account making a tab forget its dismissed usage-limit warnings when you sign back in as the same account
[VSCode] Preserve renames made during long turns
Fixed a session rename being replaced by the generated name after a window reload when the session was renamed during a long turn
[VSCode] Remove stale weekly limit rows
Fixed the sidebar usage meter keeping a stale per-model weekly limit row after the account loses that limit
[VSCode] Fix delayed @-mention insertion
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] Stop the session list jumping on open
Fixed the session list jumping down when the Account & usage header appeared a moment after opening the Claude side bar
[Claude Code on the web] Fix /model default in restricted orgs
Fixed /model default in a cloud session leaving every later message failing in organizations that restrict which models Claude Code can use
[Claude Code on the web] Prevent duplicate one-off runs
Fixed one-off scheduled routines occasionally running a second time after a transient server error
[Claude Code on the web] Fix early-finish routine runs
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] Fix file links from subfolders
Fixed file links in cloud session transcripts opening a GitHub 404 when Claude was working from a subfolder of the repository
[Claude Tag] Retry rate-limited failure notices
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] Decline switches to disabled models
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] Render tables when files are attached
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] Ignore !restart with no active session
Fixed @Claude !restart at 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] Name plugins in Slack access settings
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] Name the Slack channel as the audience
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