Releases: anthropics/claude-code
Releases · anthropics/claude-code
Release list
v2.1.241
v2.1.240
What's changed
- Bug fixes and reliability improvements
v2.1.239
What's changed
- Cost estimates (
/cost, status line,--max-budget-usd) now include the 1.1× US-only-inference premium for data-residency workspaces - Added the one-time fullscreen renderer offer on Bedrock, Vertex, Foundry and other previously excluded setups; new installs there now start in fullscreen
- Added
/claude-api upgradeto migrate Python projects fromanthropic0.x to 1.x, and updated the skill's Python reference for 1.x (timeouts useanthropic.Timeout, nothttpx.Timeout) - Cloud sessions: plugins synced from claude.ai now show as
name@synced, work withclaude plugin enable/disable <name>@synced, and never override a same-named plugin you installed - Alpine/musl builds: native image paste, clipboard, and audio-capture add-ons now load (musl-built binaries instead of glibc ones refused by the runtime)
- The usage-limit message shown when your monthly spend limit is already used up now also says when your session or weekly limit resets
- Fixed Bedrock streaming behind proxies that strip the response Content-Type header, which silently doubled billed API calls by re-running every turn non-streaming
- Fixed Claude Code hanging at startup behind an HTTPS proxy when using Bedrock with an SSO profile and
awsAuthRefresh— the credential pre-check now honorsHTTPS_PROXY - Fixed a raw crash dump when starting Claude Code from a directory that no longer exists; it now prints a clear message
- Fixed Edit and Write calls pausing for about 5 seconds in JetBrains IDE terminals when the Claude Code plugin is connected
- Fixed a race where pressing Esc with a prompt queued could let the next turn finish early, leaving the session idle while Claude was still working and letting a later resubmit repeat actions
- Fixed WebFetch retaining expired page content in memory for the whole session instead of the intended 15 minutes
- Fixed cloud sessions (Claude Code on the web, desktop and mobile apps) resuming out of plan mode after an idle worker restart
- Fixed MCP elicitation forms taller than the terminal being clipped in fullscreen mode: the form now fits the window, with hidden fields reachable by scrolling and Accept/Decline always visible
- Fixed remote MCP servers staying failed after a transient 5xx on a mid-session reconnect in cloud sessions or via SDK
setMcpServers() - Fixed custom session titles disappearing from
/resumeafter more than ~64 KB of conversation was written following the rename - Fixed
claude -c/resume picking up sessions from a different directory whose path differed only by characters like_,-, or. - Fixed
/resumeand the agents view showing a session as recently changed (and reordering it) when only its file was touched or it was merely reopened - Fixed
/resumein all-projects mode telling you tocdinto a deleted directory (e.g. a removed worktree); such sessions now resume in the current directory - Fixed the
dark-ansitheme rendering expanded tool results in fullscreen mode with text the same color as the background - Fixed the fullscreen renderer prompt reappearing on every launch when it could never be answered; it now stops after being shown on three launches
- Fixed
.worktreeincludepatterns starting with**/silently matching nothing when the target lived in a gitignored directory - Fixed agents, skills, and commands whose
.mdfile starts with a UTF-8 BOM being silently ignored - Fixed
/insightsechoing literal<message>tags in its response on some models - Fixed marketplace
metadata.pluginRoothaving no effect: bare plugin source names now resolve under it as the docs describe - Fixed mouse movement in browser-based terminals inserting text like
"35;150;7M"into the prompt when a mouse report arrived split across writes - Fixed custom theme overrides for the effort/ultracode status badge colors being ignored
- Fixed OpenTelemetry trace fragmentation: tool executions deferred by a
PreToolUsehook now resume in the original turn's trace instead of starting a new trace - Fixed vim mode in the agent view: Escape now switches to NORMAL mode and keeps your text instead of clearing the prompt
- Fixed the
selection:copykeybinding silently dropping a text selection that had been extended with Shift+Arrow keys - Fixed the
/voicestartup tip still appearing after voice dictation was enabled via thevoice.enabledsetting - Fixed shell-mode (
!) Tab completion dropping the./from a./scriptpath, which left a command the shell couldn't run - Fixed fullscreen mode answering a permission prompt or pressing a button when you clicked the terminal window only to bring it back into focus
- Fixed slash-command panels (e.g.
/config,/model) in fullscreen mode covering the latest messages; the conversation now stays pinned above the panel - Fixed the
/workflowsdetail dialog overflowing the terminal and losing its header off-screen when opened while Claude is still responding - Fixed the Linux sandbox making a nonexistent
.git/config.worktreeunreadable, which broke every sandboxed git command in repos withextensions.worktreeConfigset - Fixed hooks failing with "posix_spawn ENOENT" after the session's working directory was deleted; they now run from the project root or home directory instead
- Fixed
claudeMdExcludesnot excluding a symlinked.claude/rulesfile when the pattern names the rules directory or the symlink rather than its target - Fixed runaway session-title syncing to Remote Control when two Claude Code processes shared one background job's state (2.1.232 regression); title updates are now deduplicated and rate-limited
- Fixed sessions whose title starts with
/being unaddressable bySendMessageand shown as "(untitled)" inListAgents - Fixed Ctrl+W, Ctrl+U, Ctrl+K, Option+Backspace, Option+D and vim
df/dtleaving a broken[Pasted text #N]placeholder when the cursor was inside it - Fixed masked (password-style) inputs such as the login code field letting their text be pasted back with Ctrl+Y elsewhere or saved to prompt history when cleared with double Esc
- Fixed Ctrl+Backspace deleting one character instead of a word in search boxes
- Fixed a request rejected by an organization policy check being re-sent before the rejection was shown
- Improved the reminder shown after compaction so a skill's original arguments are not re-run as a new request
- Long file paths on tool-use rows now truncate in the middle to stay on one line
- Remote sessions keep sending keep-alives while a long
SessionStartorSetuphook runs, so the container is not idle-reaped mid-hook /goal: repeat check-ins on long-running background work now back off (30 min, then 1 h, then every 2 h) instead of repeating every 30 minutes/goal: resuming a session from theclaude --resumepicker now restores its active goalListAgentsnow tells a session its own name (the one peers use to message it), andSendMessageto your own name says so instead of "no agent named …"ListAgentsand/list-agentsnow list your live teammates (previously only subagents and other sessions appeared, so a reachable teammate looked absent)keybindingFlavor: "readline"now also matches Bash for word keys: Alt+F and Ctrl/Option+→ stop at the end of the word, Alt+D deletes to it (Ctrl+Y pastes it back), and punctuation separates words- Persistent retry mode (
CLAUDE_CODE_RETRY_WATCHDOG) now fails immediately on organization spend-limit and out-of-credits errors instead of waiting indefinitely for a reset - Claude in Chrome:
/clearnow closes the session's Chrome tab group, and empty groups are closed on/resumeand when Claude Code exits - Remote sessions: images uploaded from mobile now include their saved file path, so Claude can copy them into files it creates
- Claude Code on the web: requests from Bash and other tools to non-API anthropic.com hosts (e.g. www, docs) now go through the session's network proxy, so your environment's allowed domains apply
- Remote Control: clearer message and
claude doctorwording when Remote Control isn't enabled for your account - Windows: cross-session messaging is now available, so Claude Code sessions across your machines can message each other with
SendMessageand find each other withListAgents, as on macOS and Linux - [VSCode] "View usage" in the usage-limit banner now sits inline with the warning text instead of floating mid-banner
v2.1.238
What's changed
- Added a
keybindingFlavorsetting: set it to"readline"to make Ctrl+W in the prompt delete back to the previous whitespace, as in Bash; the default ("classic") is unchanged - Plugin marketplaces:
headersHelperon a url marketplace or a catalog entry runs a command that mints HTTP headers (e.g. a short-lived token) for catalog and same-origin archive fetches - A catalog entry's
headersHelperruns only when you install or update that plugin, after its command is shown;claude plugin install/updateask[y/N](or pass-y) - Added
claude self-hosted-runner --defer-shutdown-max-min <minutes>: on SIGTERM, keep serving attached sessions, park what is left after that many minutes, then exit - Added
claude self-hosted-runner --proxy-authorization-command/--proxy-authorization-filefor egress proxies that require a freshly issuedProxy-Authorizationheader on every connection - Fixed unbounded memory growth in long interactive sessions: subagent tool results are now released once they leave the recent display window
- Fixed custom, project, and plugin output styles drifting back to the default voice mid-session
- Fixed
CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION=truenot keeping prompt suggestions on when your account is near, but not over, its usage limit - Fixed worktree-isolation Bash refusals telling you to remove a redirect when the command had none
- Fixed self-hosted runners occasionally being removed by the server after a single slow or lost poll request, handing their healthy session to another runner
- Fixed MCP elicitation dialogs showing nothing for URLs longer than 4,096 characters, and permission prompts dropping the "don't ask again" option when the project path didn't fit the terminal width
- Fixed leftover
/tmp/claude-*-cwdfiles when a Bash command is killed, times out, or is interrupted - Fixed held Backspace being ignored on terminals that send Ctrl+H for Backspace when keystrokes arrive in large bursts (slow SSH/mosh links)
- Fixed text-wrapping in permission prompt diffs: lines containing wide multi-code-point characters (such as emoji) or tabs are no longer clipped
- Fixed killing a suspended (Ctrl+Z) session sometimes leaving the terminal in bracketed-paste mode with the cursor hidden
- Fixed stdio MCP servers receiving a
server/discoverrequest beforeinitialize, forcing lazy servers to start their backend on every session open - Fixed a proxy's refusal of a connection being reported as a generic network error instead of naming the proxy
- Fixed the
/modeland/effortcache-miss warning appearing when the prompt cache had already expired - Fixed per-task Stop from the Remote Control tasks panel doing nothing on CLI-hosted sessions
- Fixed remote sessions exiting when a client delivered a user message without a valid role
- Fixed Remote Control sessions started by
claude remote-controlinheriting session-scoped environment variables from the launching shell - Fixed a Remote Control session whose process crashed staying unavailable until
claude remote-controlwas restarted; it can now be reused when you next message it - Fixed Remote Control messages sent from the web or Desktop while Claude is mid-turn disappearing from the transcript after the turn finishes
- Fixed Remote Control model picks made on a phone or web not updating the model shown in the terminal
- Fixed Remote Control disconnecting with "login expired" when a brief network hiccup delays renewing your sign-in; it now retries and stays connected
- Fixed Remote Control reporting a failed reconnect on sign-out; signing out now ends the session with a clear message
- Fixed
ListAgents/SendMessagereporting "Remote Control is not connected" in sessions run byclaude remote-control(server mode) or Desktop/IDE hosts; they now list and reach Remote Control peers - Fixed
ListAgentsandSendMessageexposing the idle worker that the agent view pre-warms for your next background session; it now appears only once a task claims it - Cross-session messaging: sending to a session on this machine that refuses inbound messages (e.g.
crossSessionInbound: "refuse") now reports "refused" to the sender instead of a silent success - Cross-session messaging: a session whose inbox drops your messages (rate limit or full queue) now tells your session, instead of the messages vanishing silently
- Improved startup: bare
claudestarts sooner on macOS - Improved Bash tool permission checking for zsh-specific syntax in shell conditionals
- Improved Remote Control connection resilience: brief HTTP 403 refusals from a network edge, VPN, or proxy are now tolerated for up to 3 minutes, with the refusing party named when a block persists
- Improved startup responsiveness: the automatic update check now runs about 10 seconds after launch instead of competing with startup for CPU
- Updated the bundled
claude-apiskill for the Managed Agents Aug 19 release: web search/fetch domain settings and memory stores on self-hosted sandboxes - Changed Ctrl+L and Cmd+K in fullscreen to always just repaint — the double-press
/clearshortcut was removed, and 1-row nvim terminals no longer trigger automatic/clearloops - Changed
claude mcp listandclaude mcp getto show disabled servers as⊘ Disabledinstead of connecting to them for a health check - MCP
headersHelperin a project.mcp.json, and inline MCP servers in project or--add-diragent files, now require that folder's trust dialog to have been accepted (also underclaude -p) - MCP
headersHelperfrom a project.mcp.json, plugin, or agent file runs without inherited credential env vars; user, managed and claude.ai-scope helpers now run from the Claude config dir
v2.1.237
What's changed
- Fixed prompt caching for sessions using an LLM gateway or custom base URL
- Added a built-in "Concise" output style: Claude leads with results and skips preamble and narration, while doing the work just as thoroughly. Select it under Output style in /config.
v2.1.236
What's changed
- Added
ANTHROPIC_DEFAULT_MODELenvironment variable: sets the model new sessions start on, while a/modelpick still overrides it and persists across restarts (unlikeANTHROPIC_MODEL) - Added
notify_when_idleto cross-sessionSendMessage: ask another Claude Code session on this machine to send one notice when it next goes idle — opt-in, one-shot, no polling (macOS and Linux) - Sandbox: on macOS, wildcard read-deny rules (e.g.
**/.env) now take precedence inside allowed read regions, cover matched directories' contents, and can't be bypassed by renaming the denied file - Fixed clipboard copy, background housekeeping, background sessions, and local MCP logs breaking after the directory a session had switched into was removed (since 2.1.229)
- Fixed the fullscreen renderer failing permanently after a single failed start: it now falls back to the classic renderer instead of exiting on every subsequent launch
- Fixed the
/modelpicker rendering taller than the terminal: it now shows only as many models as fit the window, with the rest reachable by scrolling - Fixed
SendMessagecalls being rejected when a malformed closing tag left the message text inside the summary field - Fixed unhandled promise rejections when a subprocess fails to start, for example
powershell.exeon WSL with Windows interop disabled (regression in 2.1.234) - Fixed fullscreen mode sometimes not showing a newly sent message until the next update after the terminal was resized
- Fixed a blank band that could remain above the prompt after clearing a multi-line prompt, and panes not repainting after resizing the terminal away and back, in fullscreen mode
- Fixed the managed-settings approval prompt sometimes not appearing at startup while still capturing the first keypress as approval
- Fixed terminal tab titles jumping in tmux (iTerm tmux integration): the title is now written only when its text changes instead of animating every 960ms
- Fixed an unclear error when the cloud environments list came back empty or malformed
- Fixed the Fable 5 first-time usage-credits prompt auto-selecting the fallback model after 60 seconds with no answer when using Remote Control
- Fixed spinner tips never appearing, with a repeated background error, when the cached guest-pass reward in
~/.claude.jsonwas malformed - Fixed skills hot-reload in SDK/VS Code sessions raising an error on every skills change after the session's working directory was deleted (2.1.229+)
- Fixed self-hosted runner sessions released on idle, retire, or startup timeout occasionally resuming on another runner before the post-session hook had finished
- Fixed the Clawd mascot's eyes and feet rendering unevenly in iTerm2 at some font sizes
- Fixed occasional runaway session recaps: recap text (automatic and
/recap) is now capped at 400 characters, cut at a word boundary - Improved startup performance: the session counter is now written in the background
- Improved auto mode:
Monitorallow rules are now set aside while auto mode is active, so Monitor commands are reviewed the same way Bash commands are - Improved auto mode on Bedrock, Vertex AI, and Foundry, and when telemetry is disabled: the classifier now uses the same defaults as on the Claude API, including severity-scored classification
- Improved auto mode: the git status check can no longer be fooled by a repo's
status.showUntrackedFiles=nosetting into reporting a clean tree - Changed the
/modelpicker to highlight only the newest model's name, so the highlight marks the new release rather than an arbitrary subset of the list /goal: an idle session whose goal is parked behind long-running background work now checks in automatically after 30 minutes (then 1h, 2h) instead of waiting for you to return/usagenow shows the usage-credits spend row for Team and Enterprise members, and shows a capped row at 0% before anything is spent- SIGTERM in print/SDK mode no longer records an interrupted turn or synthetic tool denials before exiting; running commands are still terminated and the process still exits with code 143
- Pressing Enter on a slash-command typo or a command unavailable in this session now reports it instead of running the closest fuzzy match; prefixes and aliases still run
- Remote Control now marks a session offline within seconds when the CLI exits or its terminal closes
SendMessagenow refuses further messages to a session up front once a rapid burst would exceed what that session's inbox accepts, instead of reporting them sent while they were dropped- Aligned the session title chip on the prompt border with the footer's right edge
- Right-aligned footer items (goal indicator, session state, background agent status) and truncated notices now share a consistent right margin with the rest of the prompt area
- [VSCode] Added screen reader support for the transcript: live announcements for replies, permission requests, errors, and status changes, plus per-turn heading navigation
v2.1.235
What's changed
- Added an optional
spellchecksetting that underlines misspelled words in the prompt input as you type, using your installedaspell,hunspell, orispell - Fixed whole-prompt-cache invalidation when a language server disconnected or reconnected mid-session
- Fixed nested markdown list items misaligning at depth 3+ and added a hanging indent to wrapped list items in the terminal UI
- Fixed prompt input highlights (slash commands, keywords, mentions) appearing shifted by one or more characters in some multi-line prompts
- Fixed Shift+Tab inside the permission prompt's comment field approving the edit and granting session-wide edit permission instead of closing the field
- Fixed the Agent tool advertising a general-purpose default in sessions where that agent is unavailable: an omitted
subagent_typethere now gets a clear error listing the available agents - Fixed notebook cell delete/replace approval dialogs silently omitting the existing cell content when the notebook or cell could not be read; the dialog now says why
- Fixed slash commands run while Claude is responding showing HTML entities instead of the actual characters
- Fixed the prompt footer not showing the "Update installed" restart notice after a background auto-update
- Fixed the expanded task list (
ctrl+t) always starting collapsed when resuming or relaunching into a session that still has open tasks - Improved memory and CPU usage while cloud sessions such as
/ultrareviewor/autofix-prrun in the background — their event streams are no longer re-scanned and re-rendered on every update - Improved permission dialogs: display text and "don't ask again" options now always match what a grant would cover, and "don't ask again" is withheld when contents cannot be fully displayed
- Improved the embedded
grepin native macOS/Linux builds: pathological patterns now fail fast instead of exhausting memory, and-m Nwith-A/-Cprints correct context - Improved the context-limit error to say when auto-compact is off and point to
/configto re-enable it - Vim mode: NORMAL mode and cursor position are now preserved when toggling the detailed transcript (ctrl+o) or closing a panel
- Dialogs: arrow keys and Enter pressed in quick succession now select the option you navigated to instead of the previously highlighted one
SendMessagenow refuses messages too large for cross-session delivery up front instead of silently dropping them- Remote Control:
claude rcnow applies the same enterprise-gateway availability check as interactive startup - [VSCode] Fixed focus jumping between open Claude tabs on its own when a window with several Claude panels is restored or reloaded
v2.1.234
What's changed
- Added the optional
CLAUDE_CODE_PROJECT_DIR_NAMEenvironment variable: hosts that give each session its own config directory can choose a short name for the per-project transcript directory - Added the
selection:clearkeybinding action, so a key can be bound to clear an in-app text selection; also works in the agents view - Added a GitLab merge request badge to the footer and statusline: repos with a GitLab remote and an authenticated glab CLI show MR !N with draft/pending/green states
- Claude Code now continues your session automatically when a claude.ai usage limit resets; turn it off in
/config("Continue automatically at usage limit") - Claude is now told to use your account email only to identify you, and not to send it to unrelated services unless you ask
- Security: remote file reads, session restore, CLAUDE.md includes, workflow scripts and file uploads now reject Windows NT-namespace (
\??\) paths, hardening the remaining pre-approval file accesses against the NTLM credential-leak vector - Fixed auto mode in very long sessions repeatedly re-checking and denying sandboxed commands' network access after the conversation had been compacted
- Fixed session-scoped permission answers (including denies) being dropped when answering background subagent tool permission prompts
- Fixed a crash when an API response on the non-streaming fallback path (typically via third-party gateways) contained a thinking block missing its thinking field or a text block missing its text field
- Fixed markdown rendering becoming extremely slow for some messages containing unusual Unicode sequences
- Fixed
SendMessagerejecting a recipient copied fromListAgentswhen the session name is at the 200-character cap or emoji-heavy - Fixed repository detection mis-reading the host of git remotes with unusual userinfo, producing links and repo-specific behavior for the wrong host
- Fixed MCP diagnostics printing resolved secrets: scope-conflict warnings now show the configured
${VAR}form, and connection-failure details show only the server origin - Fixed
strictKnownMarketplacesallowlists accepting SCP-style git marketplace sources whose host differs from the one git would actually connect to - Fixed modal text such as the
/loginOAuth URL losing characters when copied in fullscreen - Fixed a
---horizontal rule in rendered markdown running into the line after it - Fixed consecutive shell commands splitting into multiple "Ran 1 shell command" rows when todo/task updates were interleaved between them
- Fixed dialogs like
/permissionsopened while a!shell command was running being dismissed when the command finished - Fixed a queued
!shell command being sent to the model as plain text after pressing up-arrow to edit the queued input - Fixed queued messages reappearing in the prompt history while still queued, Esc while selecting a queued message no longer interrupts the turn, and
!mode no longer sticks after a mid-turn submit - Fixed accepting the "Try the new fullscreen renderer?" prompt restarting the session without its permission mode (e.g.
--dangerously-skip-permissions), tool allow/deny rules, model or effort flags - Fixed
/tuidropping launch--allowed-tools/--disallowed-toolsrules when it restarts; it now declines to switch, with the reason, when the session has restrictions a restart can't carry over - Fixed trust prompts omitting the repository-wide scope warning when the directory was first seen before the repository existed there
- Fixed a case where an IDE diff tab closing during a permission re-prompt could answer the new prompt with the previous input
- Fixed: files sent to the user during Remote Control sessions hosted by Claude Code Desktop or VS Code now upload, so they open on phone and web instead of showing an empty card
- Fixed: after
/loginwhileCLAUDE_CODE_OAUTH_TOKENis set, the stale-token reminder no longer leaks into Claude's automatically resumed turn — it now appears only to you - Fixed: permission previews now relay only to channel servers admitted by the inbound trust gate, and a server's explicit permission-capability opt-out is honored
- Fixed: credential masking on relayed permission previews can no longer hide commands, paths, or destinations from the approver; oversized private-key blocks now redact under full-strength redaction
- Fixed: provider API tokens that mask on permission previews now mask even when directly followed by shell delimiters
- Fixed Claude Desktop inter-session messages being silently dropped by the recipient session when cross-session messaging read as disabled, which left the sender's query "thinking" for many minutes
- Remote Control: signing this computer in to a different claude.ai account or organization now stops the running session within seconds and says why, instead of a misleading HTTP 404 hours later
- Remote Control sessions started from Claude Code Desktop or VS Code now keep phones and claude.ai/code updated on the session's permission mode (and claude.ai/code on the model) as they change
- Remote Control: effort picks made on a phone or on claude.ai/code now apply to terminal- and Desktop/VS Code-hosted sessions, and the session publishes its effort level to connected clients
SendMessageandListAgentsnow say when your account's session list was too long to check completely, instead of treating unseen sessions as absent- Expired Anthropic profile credential now points you at
/loginwhen a claude.ai login would take precedence - Improved the transcript: your own prompts now render markdown (highlighted code blocks, inline code, lists) the same way replies do
- Improved the "API returned an empty or malformed response" error to say what came back (content type, body kind, size, request ID) and why the original streaming request failed
- Improved auto-generated session titles to read as short, specific names (e.g. "Login button bug") rather than sentences restating your request (e.g. "Fix the login button on mobile")
- Reduced the context cost of loading the built-in
claude-apiskill from ~200k+ tokens to ~25k by loading reference docs on demand /permissionscan now be opened while Claude is working — rule changes apply to the rest of the current turn/add-dir <path>can now be used while Claude is working;/add-dir,/autocompact,/theme,/help,/configand/advisordialogs open mid-turn in the fullscreen TUI/goalnow clears itself with a notice when a turn dies on an unrecoverable error (e.g. revoked auth, an exhausted credit balance, or a context overflow) instead of staying armed/goal: when background tasks keep a goal waiting for 30+ minutes, Claude now checks in on them instead of waiting indefinitely (setCLAUDE_CODE_GOAL_CHECKIN_MINUTES=0to opt out)claude setup-tokennow rejects unexpected extra arguments instead of silently ignoring them- Changed Esc in fullscreen mode to no longer clear a mouse text selection: it interrupts or dismisses as usual and the selection stays highlighted
- Removed the redundant "Allowed by auto mode classifier" line that auto mode showed under every Agent tool call
- Removed the "Default teammate model" setting from
/config; agent-team teammates now use the leader's model unless the spawn names one - Dimmed the elapsed-time counter on the running tool header so it no longer competes with the bold counts
- Background task notifications delivered between turns are now sent to the model inside
<system-reminder>tags, matching mid-turn delivery - Mantle: skip the admin-pin availability probe at startup when a main-loop model is already picked
- Windows: startup no longer stalls on repeated rename retries when
~/.claude.jsonis read-only
v2.1.233
What's changed
- Added GitLab merge request URL support to the
--worktreeflag and theclaude agentsview (where MRs display as!N) - Added an opt-in
forward_user_identityapps gateway setting on Anthropic upstreams that sends the signed-in user's identity as headers, so a proxy behind the gateway can attribute spend per user - Added opt-in memory cgroup support for Bash tool commands on Linux (
CLAUDE_CODE_TOOL_MEMORY_LIMIT) so a runaway build can't stall the session - Added
CLAUDE_CODE_WEBFETCH_CACHE_TTL_MSenvironment variable to configure the WebFetch session URL cache TTL (default unchanged: 15 minutes) - Fixed cloud sessions occasionally being marked as lost when the environment shut down while Claude was waiting on a permission prompt
- Fixed MCP v2 connections endlessly reopening the subscriptions/listen stream against servers that terminate long-held streams on a fixed timeout (e.g. serverless hosts)
- Fixed Notification hooks not firing for permission prompts when running under Claude Desktop or VS Code
- Fixed idle sessions on Linux sometimes keeping one CPU core at 100% when sandboxing is enabled
- Fixed bundled skill aliases like
/checkupand/reviewreporting "Unknown command" in-pmode or with plugins/MCP loaded when a user or project skill shadows the bundled skill - Fixed skill/command argument substitution to prevent argument values from being re-expanded as template markers
- Fixed Windows paths spelled with the NT
\??\device prefix bypassing UNC path validation, closing an NTLM credential-leak vector - Improved
claude self-hosted-runnersession start time: the session branch is now created without rewriting the working tree, and two server round trips no longer block the agent's launch - Improved apps gateway error forwarding: 400/413 errors from Vertex, Foundry, and Claude Platform on AWS upstreams now carry the upstream's own message; fixes a bug with auto-compact on apps gateway
- Improved
claude plugin validateto check a bare.claude/skillsdirectory, reporting SKILL.md files whose frontmatter fails to parse - Improved screen reader mode: the
/effortselector renders as a numbered list with a typed-number prompt, and hint and dialog text is no longer clipped - Improved print mode diagnostics: a
[claude-code:unrecognized_model]line is written to stderr when a request goes out for a model ID Claude Code doesn't recognize; map it withmodelOverridesto silence - Changed the GitHub app setup tip to no longer appear in repositories whose origin remote is on gitlab.com or bitbucket.org; the enterprise marketplace tip now covers non-GitHub internal git hosts
- Todo/task-tracking tools (TaskCreate/Get/Update/List, TodoWrite) are no longer available on Opus 4.8, Sonnet 5, Fable 5, Mythos 5, and newer models; set
CLAUDE_CODE_ENABLE_TODO_TOOLS=1to bring them back - Windows: fixed auto mode repeatedly stopping for manual approval on ordinary
cd <dir> && <command> > fileBash commands (a 2.1.232 regression) - Reverted the 2.1.232 Bash permission changes for Cygwin-style symlinks on Windows and for input redirections (
< file); a narrower version will return in a later release
v2.1.232
What's changed
- Subagent forking is now on by default: a
subagent_type: "fork"subagent inherits the full conversation and prompt cache, and non-teammate agent spawns in interactive sessions now run in the background by default - Type
@in the prompt to mention another Claude session by name; Claude then usesSendMessageto reach that session directly SendMessagenow delivers to a bare name that exactly matches one live session, instead of asking to confirm with a ref first- Interactive sessions on one machine now keep unique names: starting or renaming a session to a name another live session already uses gives it a
name-word-wordvariant and tells you - Added
/configrows for "Dialog expiry" and "Messages from your other sessions" (cross-session inbound accept/hold/refuse) - Added secret redaction for GitLab token families (
glrt-,gloas-,glptt-,glagent-,glimt-,glsoat-,glcbt-,glft-,glffct-) and full redaction of routableglpat-/gldt-tokens; theglabCLI config store gets the same sandbox and credential-path protection asgh - Added GitLab support to plugin marketplaces: bare
gitlab.comrepo URLs (including nested subgroups) now clone likegithub.comURLs, and clone auth-failure hints name your actual git host - Settings:
additionalMarketplacesandallowedMarketplacesare now accepted as friendlier aliases forextraKnownMarketplacesandstrictKnownMarketplaces - Enterprise policy: a url-typed
blockedMarketplacesentry for a bare repo URL keeps blocking that URL when the CLI classifies it as a git clone - Gateway: the
desktop:overlay now accepts every released Desktop setting (was 11 hand-listed keys), validated at boot against Desktop's own schema; unknown or invalid keys fail boot - Gateway: empty
managed.policies[].match.groups/admin.admin_groupsentries and malformedemail_domainvalues (empty, or containing@, whitespace, or commas) now fail at boot instead of silently matching no one or granting admin access - Fable 5 is offered as an advisor in
/advisoragain for organizations with Fable access, with usage-credits consent set up through/model fable - Fixed a PowerShell permission bypass where variable-writing parameters could silently overwrite
$PSDefaultParameterValuesand redirect later commands' file access - Fixed a Windows permission bypass where Git Bash followed Cygwin-style symlinks that path validation saw as regular files; writes through them now require permission approval
- Fixed nested git repositories inheriting trust from a parent directory; each repository now requires its own trust confirmation
- Fixed MCP connections hanging for the full 30-second connect timeout when a server fails to answer or sends a malformed reply to the protocol-version probe
- Fixed Remote Control sessions hosted by a bridge inside a cloud session inheriting that session's transcript or credentials
- Fixed Remote Control sessions started from Claude Desktop or an IDE appearing as a new claude.ai session each time the local session was resumed; they now reattach to the existing one
- Fixed Remote Control sessions appearing unreachable to newly attached clients while idle
- Fixed Remote Control bridge sessions not restoring conversation history when the session worker restarts
- Remote Control: resuming a conversation whose session was deleted from claude.ai or the app now starts a replacement instead of failing with a message about your login (regressed in v2.1.227)
- Fixed Cloud gateway
/loginexiting silently or leaving an unresponsive terminal after "Press Enter to continue" when managed settings failed to load; the reason is now shown - Fixed voice mode on native builds getting stuck on "listening…" when the voice service rejected the connection; the rejection is now shown immediately
- Fixed mTLS client certificate rotation requiring a restart; Claude Code now reloads the rotated cert and key automatically on connection errors
- Fixed malformed AWS or Vertex region values being used to build request URLs; they now fall back to the default region
- Fixed stream idle timeout errors failing the request instead of recovering on Bedrock, Vertex, and gateway deployments
- Fixed content-sized overlays containing truncated text rendering one column too wide, and start-truncated text collapsing to an ellipsis
- Fixed a stray garbled character where a long shell-command or agent-description preview was cut off mid-emoji
- Fixed a startup race that could silently unregister a plugin marketplace due to concurrent writes to
known_marketplaces.json - Fixed
/updateand/tuirefusing to restart while work that survives the relaunch was running - Fixed usage-limit guidance suggesting unavailable slash commands in SDK and remote sessions
- Fixed the consent message for interactive
--advisor fablelaunches, which told you to run/model fablein an interactive session that had just exited - Improved fullscreen streaming: long sessions stay responsive because the whole conversation is no longer re-normalized on every update
- Improved the managed settings approval dialog: shows endpoint URLs, uses clearer wording for telemetry-only changes, skips routine OpenTelemetry options, and requires approval for server-managed sandbox binary overrides (
sandbox.bwrapPath,sandbox.socatPath,sandbox.ripgrep) /feedbackand/bugnow open immediately when invoked while Claude is responding, instead of waiting for the turn to finish/plugin install plugin@marketplacenow refreshes the marketplace first, so newly published plugins install without a manual marketplace update/code-reviewat high, xhigh, and max effort now runs in a background agent like the other levels- Pasted and clipboard images are read without blocking the event loop
- Remote Control now keeps reconnecting for about 30 minutes after a network blip and no longer drops after a few blips spread across an hour
- Remote Control: resuming a conversation no longer silently takes Remote Control away from another Claude Code on the same machine that still has it; run
/remote-controlthere to move it - Updated agent panel: completed subagents hide immediately with a
/tasksfooter hint, and the "↓ N more" overflow indicator moved left for visibility - Remote Control: the terminal now says whether a session was taken over by another device, ended from another app, or deleted, and stops suggesting a reconnect that would undo it
- Bash input redirections (
< file) are now permission-checked like their argument spellings on all platforms - Shortened the message shown when resuming a completed background agent
- Cowork sessions no longer inline external @-imports from user-scope memory files
- Hardened the auto-generated cross-session messaging socket directory on shared
/tmp: a pre-planted symlink or another user's directory is now refused instead of used - Hardened the Linux filesystem sandbox against a protected-path bypass
- Changed
sandbox.ripgrepto be honored only from user, managed, and--settingssettings; project settings can no longer override the sandbox's ripgrep binary - Removed the startup tip suggesting you create custom subagents, and the matching nudge in the
/poweruptour