Repository navigation
Releases
Releases Β· anthropics/claude-code
v2.1.325
Immutable
release. Only release title and notes can be modified.
What's changed
- Fixed a security issue in how zstd-compressed responses are decoded
- Added a spinner tip in VS Code and similar integrated terminals about re-running a notebook cell, shown once Claude has read or edited a Jupyter notebook
- Added a line under the error shown when your organization's policy blocks a request, saying how to continue: run
/rewindand change the message, or run/clear - Added a note for Claude when a sandboxed
git checkout,git stashor autostash pull cannot update protected files such as those in.claude - Fixed
/security-reviewand skills' inline git commands stopping with an error in worktrees of bare repositories,--separate-git-dircheckouts and Androidrepocheckouts - Fixed subagents with their own model being moved to the plan-mode model when the model setting is
opusplanorhaiku - Fixed subagents on a different model sizing file reads and MCP results with the main session's model
- Fixed sessions on many third-party gateways and Foundry stopping with a context length error on every turn instead of compacting
- Fixed recent turns sometimes going missing from a resumed session after Claude Code stopped without a clean exit
- Fixed shell commands running in the launch directory after the working directory was deleted; the command now fails with a message and can be re-issued
- Fixed an approved plan edit being lost when the
plansDirectoryfolder can't take it: the plan is now saved in the default plans folder, and a warning says where and why - Fixed a saved
sonnet[1m]model setting being rewritten on a new install to a model id the API rejects - Fixed focus view hiding the reply to your prompt when a scheduled task replied after it
- Fixed the prompt sometimes missing from a background subagent's view when fullscreen is off
- Fixed long options in lists and permission prompts being partly overwritten when they wrap, and first-run screens losing lines on narrow terminals
- Fixed startup warnings about permission rules and the "N MCP servers need authentication" notice being recorded as seen when they were scrolled out of view
- Fixed the welcome header showing control characters or splitting across lines when an agent's name or the working folder contains them or a line break
- Fixed the red error shown when Claude tries a command only you can run: a dim line now says it runs only when you type it at the prompt
- Fixed
/statsshowing an Active days total that was one day too high - Fixed
/insightssaying a report was ready when no session qualified for analysis, and writing two values into its HTML report without escaping them - Fixed
/voicesaying voice mode changed when managed settings,--settings, or the project's.claude/settings.jsonor.claude/settings.local.jsonkept it as it was; it now says what holds it - Fixed the IDE welcome dialog showing Cmd+Esc for Quick Launch on Windows and Linux
- Fixed Slack app tips showing when your organization's policy denies cloud sessions
- Fixed
claude purgehanging silently when there is no terminal to read keys from, and its project picker and-iprompts ignoring the keyboard when stdin is piped - Fixed
claude plugin eval --output-dir ''writing the report into the current folder; it now exits with an error - Fixed
claude -ptext output on a terminal passing control sequences other than text styling; pipes and files are unchanged - Fixed leftover
.oauth_refresh.lock.owner.tmp.*files piling up in the config directory - Fixed
/fastsaying "Fast mode has been disabled by your organization" under the keyless Console sign-in, where Claude Code had not asked the server - Fixed
/modelsaying that your organization restricts a model when Claude Code could not check that, for example with no network - Fixed "Sign in with your Console account" in
/loginreplacing your existing login when you pressed Esc right after the browser step - Fixed the browser showing the sign-in success page in some cases where sign-in failed or was canceled
- Fixed
claude auth statusand other short commands leaving a lock behind on a Console profile, which made the next session hang for about a minute - Fixed background sessions started on your claude.ai login using (and billing) an API key or token from the shell that started the background service
- Fixed more cases of a session moving to another sign-in in the background; these moves are now refused, with a message saying what works
- Fixed a second Enter in the exit dialog stopping background work after the move to the background was refused
- Fixed token counting on Amazon Bedrock sending the conversation to Bedrock when the
allowedProvidersmanaged setting does not allow it - Fixed AWS
credential_processhelpers and Google Cloud default credentials failing when Claude Code is started without aHOMEenvironment variable - Fixed a session sometimes going back to an earlier permission mode after a subagent's plan was approved
- Fixed one invalid value in an Agent SDK
applyFlagSettings()call silently discarding all settings from earlier calls; a call that would do this is now refused with an error - Fixed sessions showing as waiting for input when a finished pull request only needed your own review or merge
- Fixed an unrecognized
teammateModesettings value being ignored without a warning:claude -p, the startup warning andclaude doctornow list it as a skipped entry (still not applied) - Fixed
--worktreeskipping aWorktreeCreatehook from a plugin inCLAUDE_CODE_PLUGIN_SEED_DIRon the first run in a new home directory - Fixed brief-mode sessions, such as Dispatch, sending a reply again after the turn had already replied
- Fixed Claude saying a working Atlassian, Asana or Sentry connector had failed in cloud sessions when a plugin listed it at a different URL
- Fixed Claude Desktop and SDK sessions listing a folder's own MCP servers (
.mcp.json, local) as host-added or not at all, and not connecting WebSocket ones, after a folder move or pre-warmed start - Fixed
/mcpstill listing a plugin's MCP server after a plugin reload removed it while it was connecting - Fixed an MCP server staying "needs authentication", and its
mcp_toolhooks being skipped, after a token refresh that was refused only for a moment - Fixed MCP elicitation requests being cancelled without asking in headless mode after a server's connection was replaced during a tool call
- Fixed MCP tool calls from an SDK host answering "Not connected" after a tool call had reconnected the MCP server
- Fixed an MCP task getting stuck after its question was closed with Esc or asked again: the footer now says it needs your input, and Enter in
/tasksshows the question again - Fixed background MCP tasks that stopped updating after another call to the same server lost the connection, when a later call reconnects
- Fixed a background MCP task's question opening over a message you were still typing; it now waits until you send or clear the draft, and the spinner and turn timer keep running
- Fixed
worktree.sparsePathsand sparse plugin and marketplace clones leaving out the repository's root files on older git versions, such as 2.34 - Fixed self-hosted runner sessions with several repositories being unable to use a repository added mid-session
- Fixed Claude asking for permission before reading your own artifact or its data
- Fixed deny and ask permission rules and hooks for the Artifact tool not applying in some cloud sessions
- Fixed Code Mode scripts ignoring a worktree entered with
EnterWorktree, writing~paths into the project, and leaving/mcpshowing an MCP server as connected after its sign-in expired - Fixed words typed with a Yes at a permission dialog or plan approval not reaching Claude in Code Mode
- Fixed Claude starting work by itself when you resumed a session that ended during a Code Mode script; it now waits for your next prompt
- Fixed a missing OpenTelemetry
user_promptevent for a message sent while tool calls run. The event hasdelivery.mode: "mid_turn"and the running turn'sprompt.id - Fixed the OpenTelemetry
user_promptevent leaving out earlier messages' text when queued messages merged into one turn in VS Code, or when one message had an image - Fixed a slash command's
allowed-toolsgrants applying to background agents woken during or after its turn - Fixed
/feedbackand/bugto upload other sessions only when they were recorded by the signed-in account or organization - Fixed relative deny and ask permission rules (e.g.
Read(./.env)) no longer covering the project after acd; they now also apply in added directories - Fixed deny and ask permission rules starting with
mcp__plugin_*_missing a plugin's MCP server or tool spelled in another letter case - Fixed deny rules not being applied to a permission approval that arrives after Claude Code restarts, in self-hosted runner and
claude remote-controlsessions - Fixed a case where a committed
.claude/settings.local.jsoncould be treated as the user's own when Claude Code was started in certain subfolders of a repository - Fixed some deny and ask rules not applying to certain Bash commands
- Fixed a gap in Bash permission checks where some compound commands could run without asking; these now ask for permission
- Fixed a case where a Bash allow rule could run a different program than the one it names
- Fixed a connector tool's approval prompt in cloud sessions being answered automatically while plugins were still loading
- Fixed some subagents changing an artifact that people outside your organization can see, or uploading files to it, without asking first when an allow rule is set or uploads were approved earlier
- Fixed some artifact publishes skipping the confirmation for pages that people outside your organization can see when "don't ask again" had been chosen for Artifact
- Fixed auto mode judging only the first change to an artifact that people outside you...
v2.1.323
Immutable
release. Only release title and notes can be modified.
What's changed
- Added Code Mode, an experimental opt-in in which Claude writes JavaScript to call its tools; see https://code.claude.com/docs/en/code-mode to turn it on, or to turn it off for an organization
- Added
engines["claude-code"]toplugin.json: plugins outside their stated Claude Code version range are not installed, updated or loaded, and install and update pick the newest version that fits - Added type checking of a plugin's TypeScript hooks module to
claude plugin validate; each finding is a warning, and--strictfails on it - Added to
claude plugin validatethe$nouns a mod'sengine.createhook adds, withholds or replaces - Added support for
CLAUDE_CODE_AUTO_MODE_MODELin managed settings for Claude Desktop sessions on third-party providers (takes effect once Claude Desktop includes this version) - Added an options menu (stop, switch to usage credits, upgrade) when a model needs usage credits that are turned off or used up
- Added a progress heartbeat every 30 seconds while hooks run long in
claude -pand SDK sessions, so a host such as Claude Desktop won't end the turn as hung (once it includes this version) - Added
.docxsupport to Artifact tool asset uploads - Added a
/diff to closehint to the diff panel, and the keys that focus and close a panel to the?shortcut guide - Added a start-up warning for Bash allow rules with a
*in a variable's value, such asBash(PORT=* npm run dev) - Added a warning when a plugin's language server can't start, naming the server and what to check
- Added a one-time startup notice naming
CLAUDE_CODE_PERFORCE_MODEwhen Perforce settings are found and the mode is off - Added
CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES(available since 2.1.318): set it to1to turn off subagent progress summaries and the requests that write them (#86879) - Added
CLAUDE_CODE_RESUME_HINT_COMMAND, which a program that starts Claude Code can set to have the exit hint name its own resume command - Added
unsetOptionCountto theclaude plugin install --jsonresult: how manyuserConfigoptions are not yet set - Added
isPromptCoveredto the props a mod's pane is drawn with, telling it when a dialog or a field above the prompt covers the prompt - Fixed running
/compactagain, or after a command such as/context, summarizing away a message that Claude had not answered yet - Fixed a resumed session joining your next message to an old interrupted message that was not resumed
- Fixed a memory spike at the next prompt after Claude changed a very large file
- Fixed a setting saved in a running session undoing a hand edit made to
settings.jsonmoments earlier; a settings file you delete during a session now stays deleted - Fixed
claude plugincommands andclaude mcp listsigning you out of a Console profile when they ended while the token was being renewed - Fixed Edit and Bash running out of memory on certain
/procfiles, and Edit hanging or running out of memory on devices and named pipes - Fixed Claude Code failing to start, or to clear stored credentials at sign-out, when saving its configuration file failed with "Out of memory"
- Fixed requests sent without streaming failing on errors that streamed requests recover from, such as a rejected image, thinking block or beta header
- Fixed
ExitWorktree, the worktree exit dialog and/resumeleaving the session in the wrong folder when the folder the shell was in before entering the worktree had been deleted - Fixed accents and other combining marks sometimes landing left of the text, leaving stale copies on screen, or silently disappearing when text wraps
- Fixed the last key of a key chord, such as Enter in ctrl+x enter, acting on a dialog's text field when the chord's own action isn't available there
- Fixed
psprocesses piling up when the process listing Claude Code runs before stopping a command takes too long - Fixed subagent transcripts and large tool results being saved apart from the session's transcript after entering a worktree created by a
WorktreeCreatehook or belonging to a nested repository - Fixed a session on a named Anthropic profile moving to another sign-in when
/fork, the Left arrow or--bgcontinued it in the background; reopen any session that was open during the update - Fixed a background session sending a conversation under another sign-in when its named Anthropic profile is missing, changed or overridden; it now stops and says so
- Fixed a session on an API key, auth token or workload identity from its shell (not a setup token) moving to another sign-in in the background; it now stops and says so
- Fixed MCP tool calls ending in the sign-in server's error, such as
TOKEN_EXPIRED, instead of asking you to sign in again - Fixed an expired claude.ai login showing "Credit balance too low" when a saved Console key or
ant auth loginprofile without credit was used instead - Fixed a session on a named Anthropic profile being handed to an older background service that could not keep its sign-in; it now says to restart the service
- Fixed a background session's sign-in leaving the previous account's login or other credentials in place; it now clears them for every session on the computer, and a refused sign-in can leave no login
- Fixed background sessions moving between a profile and the stored login when an update restarted them
- Fixed sessions opened before a sign-in keeping signed-out feature flags after the sign-in
- Fixed sessions that kept failing after a Claude apps gateway sign-in expired: once you sign in again with
/loginin another terminal, they carry on at the next message - Fixed the billing notice naming your
ant auth loginorganization when a customX-Api-Keyheader is set - macOS: Fixed "Not logged in Β· Please run /login" coming back right after a successful
/loginor a token refresh when the keychain was slow to answer - Fixed turns failing in Claude Desktop when an organization's gateway answers an expired token with 403: Claude Code now asks Desktop for a fresh token and retries
- Fixed the error shown when Amazon Bedrock refuses your account a model: it no longer says to refresh your AWS credentials, it says to enable the model
- Fixed the
awsAuthRefreshorgcpAuthRefreshcommand sometimes running twice for one request when three or more sessions needed a fresh sign-in at once - Fixed the
claude -pwarning about an ended claude.ai login to say thatclaude auth logoutalso removes saved MCP server logins and plugin secrets - Fixed Bash permission prompts offering "don't ask again" for commands that write to sensitive paths such as
.gitor.claude, where the saved rule did not stop the next prompt - Fixed a case where some
lsofcommands ran without a permission prompt - Fixed Bash commands that write a file with
cat > file <<EOFbeing shown as "Read 1 file" - Fixed a case where Bash permission checks judged an
rmfrom the wrong folder and skipped the dangerous-removal prompt under bypass permissions or a Bash allow rule - Fixed
--permission-mode autoor a settingsdefaultMode: autostarting in a mode that could allow more when auto mode was unavailable. It now starts in Manual mode, which asks first - Fixed plan files sometimes being written outside the project when
plansDirectoryis set; a write that can't be shown to stay inside the project is now refused - Fixed a permission prompt when Claude read the output of its own background command or agent after entering a worktree
- Fixed a case where Bash permission checks missed part of a command
- Fixed a case where the Bash sandbox could switch off during a session
- Fixed Bash allow rules with an attached wildcard, such as
Bash(ls*), skipping the permission prompt in some cases; a rule that names a variable, such asBash(NODE_ENV*), now asks - Fixed auto mode running behind a gateway at
ANTHROPIC_BASE_URLon a model whose gateway name contains "haiku"; such a model, other thanclaude-haiku-5-5, is now refused, as Haiku 4.5 is - Fixed Bash deny and ask rules missing some commands run through
sudo,envand similar wrappers - Fixed Bash allow rules written with combined
sudoflags skipping the permission prompt in some cases - Fixed
sandbox.excludedCommandsletting a command that it does not name run outside the sandbox in some cases - Fixed a case where the Write and Edit tools could write to a path covered by a
Readdeny rule - Fixed a case where a Bash command ran without a permission prompt for zsh users with certain non-default shell options set
- Fixed the Bash sandbox not fully protecting Claude Code's own config on installs still using the legacy config file
- Fixed a permission prompt from a mod's
tool.checkhook naming every plugin hooked on the tool instead of the one that asked - Fixed sandboxed commands being able to read Claude Code's file checkpoint copies under the config directory
- Fixed a rewind sometimes changing your permission mode
- Fixed project settings sometimes being read through a symbolic link that leads to a different folder than the one Claude Code checked
- Fixed HTTP hooks failing with HTTP 500 on Linux when
CLAUDE_CODE_SUBPROCESS_ENV_SCRUBis set andsandbox.enabledis off - Fixed
claude -pand the Agent SDK running Bash unsandboxed when--settingsor SDK settings that turn the sandbox on fail validation; Claude Code now stops at start-up and names the invalid setting - Fixed
/exportsilently stopping early after a long run of calls to an MCP tool that is no longer loaded - Fixed earlier MCP tool calls missing from a resumed conversation, and lines repeating in scrollback, when the server connects late
- Fixed
claude mcp add --helpsplitting long example commands across lines in narrow terminals and pipes, so a pasted example ran without its header - Fixed plugins with
defaultEnabled: falsestaying off in a claude.ai chat's cloud session after you turn them on in c...
v2.1.322
Immutable
release. Only release title and notes can be modified.
What's changed
- Added fast mode on Vertex in the global, us and eu regions, falling back to standard speed if Vertex refuses it
v2.1.321
Immutable
release. Only release title and notes can be modified.
What's changed
- Added Claude Fable 5.2 (
claude-fable-5-2), now the default Fable model β 1M context, $8/$40 per Mtok with $0.20/Mtok cache reads - Added
--settings <file>toclaude remote-control, which applies a settings file to every session it starts; if the file changes, no new session starts until you restartclaude remote-control - Fixed MCP OAuth requests sending secrets such as refresh tokens to another host when a server redirected them
- Fixed a case where a read-only Bash command ran outside the sandbox without a permission prompt
- Fixed a case where Bash permission checks judged a file write from the wrong folder and didn't prompt
- Fixed deny rules and protected-file prompts not applying to the file that a
cpormvinto a directory writes - Fixed the "Draws from usage credits" note showing after a switch to Fable on Enterprise seats whose plan includes Fable
- Fixed the fallback model sometimes declining a request or mentioning a stopped response when the first model was blocked before replying
- Fixed
claude mcp loginprinting a SEP-2352 issuer warning each time you sign in again to a server that Claude Code registered with - Fixed
NotebookEditdeleting or overwriting a notebook's first cell when the call named no cell, on network paths (UNC shares, WSL folders,/netmounts) - Fixed Edit changing the first of several matches, replacing a whole file on an empty
old_string, or editing a notebook as text, on network paths (UNC shares, WSL folders,/netmounts) - Fixed
/configshowing Manual as the default permission mode when new sessions start in auto mode; pressing Space on "Auto (default)" now saves Don't Ask, not Plan - Windows: Fixed
FileChangedhooks stopping for paths set throughwatchPathsafter the first shell command, when the session's working directory had a lowercase drive letter - Fixed
--plugin-dir .and--plugin-dir ./builtinwriting generated type files for Claude Code's built-in plugins into abuiltinfolder - Fixed context usage estimates overcounting tool definitions when exact token counts are unavailable
- Fixed
/compactshowing twice in Remote Control on web and mobile - Fixed plugin auto-updates and
/pluginmarketplace updates downloading a plugin again for each worktree or folder of a repository - Fixed auto mode losing a background subagent's report that had started a turn when the conversation was compacted before Claude answered it
- Fixed project skills, commands and agents staying missing after their folder was removed and came back mid-session, such as with
git stash, including after entering a worktree - Fixed
claude -psometimes telling Claude that background commands get 30 minutes when they are stopped after 10 - Fixed
pkill,pgrepandpidwaitin cloud sessions matching the session's own parent processes - Fixed Claude in Chrome and computer use server processes staying alive after their parent exits behind a proxy that stalls connections
- Fixed a large hook output pointing Claude to a file that held another hook's output from the same tool call
- Fixed apps that embed Claude Code getting their own PreToolUse hook's
askreason instead of another hook's when both asked - Fixed a PreToolUse hook's
askbeing lost when another hook'sdeferfinished first and could not be honored - Fixed a rare crash on permission prompts and background tasks
- Fixed project skills, commands and agents disappearing from the menu in SDK and desktop sessions after Claude entered a worktree
- Fixed
/desktopon macOS saying Claude Desktop is not installed when it is in~/Applications - Fixed OpenTelemetry repository attributes (
vcs.*) missing from Claude Desktop sessions that start on a pre-started process - Fixed WebFetch passing "No response from model" to Claude as page content when the model reading the page returned no text; the call now fails with a clear error
- Fixed screen reader mode delaying the prompt at startup when the system clock moved back while Claude Code was starting
- Fixed a command's panel sometimes not coming back after a dialog closed, leaving no panel or prompt on screen until the next redraw
- Fixed a project's MCP server being disconnected after the first message in a Claude Desktop Code tab session when the desktop app has an MCP server or extension of the same name
- Fixed a turn ending with "API Error: EPROTO: The TLS handshake failed" when the connection broke partway through a reply; the partial reply is kept or the request is retried, as before 2.1.302
- Fixed high memory use in long sessions that repeatedly read single lines from large files
- Fixed fast mode losing replies, switching models or retrying for minutes when fast serving is rate-limited, overloaded or failing; it now tries standard speed on the same model first
- Fixed one request carrying far more background agent reports than intended after Claude was stopped while several were waiting
- Fixed messages from a Claude Desktop Code tab session to your other sessions staying paused after you typed while Claude was still working
- Fixed
claude agentsignoring--permission-mode,--dangerously-skip-permissions,--model,--effortor--agenttyped beforeagentswhen a flag such as--verbosewas also on the line - Fixed a case where Remote Control showed as off with "login expired" in the desktop app while its connection was still up, because the app was briefly unable to hand over a sign-in token
- Fixed a Remote Control message sent with "Queue for later" reaching Claude in the middle of the running turn
- Fixed the git status given to Claude at session start reading as clean when git status failed; it now reads as unavailable
- Fixed the git status given to Claude at session start showing the first listed file as staged when its changes were not staged
- Fixed a hang or out-of-memory crash when a connector in a cloud session lists resources with very long names
- Fixed Remote Control showing as connected after its connection closed for good while the session's history was still uploading
- Fixed screen reader mode turning off when you return to a conversation from agent view
- Fixed screen reader mode y/n questions taking as yes a stray "y" at the end of text typed as the question opened
- Fixed cloud sessions telling Claude that a host is probably not allowed when it is allowed and the network proxy could not connect to it
- Fixed an MCP server sometimes showing as connected with no tools after it was reconnected or the session's directory changed while its tools were still loading
- Fixed Bash commands sometimes running in the wrong folder when Claude sent several at once and an earlier one changed folders
- Fixed files Claude sends from cloud and Remote Control sessions failing at once when an upload gets an HTTP 507 from a proxy; the upload now gets a second try
- Fixed new messages not being saved, and
claude -p, SDK and VS Code sessions hanging, when memory ran out while the transcript was being read - Fixed sign-in, token refresh and logout waiting indefinitely when something on the network accepts the connection but never answers the TLS handshake
- Fixed a sent file showing under a different name in the Claude apps when its name hid text-direction or control characters; Claude now refuses to send such a file
- Fixed sub-agent progress summaries running a request to its end after the model replied with a tool call
- Fixed Bash reads such as
grep -r foo "$PWD/src"asking for permission when the same command with the path typed out runs without asking - Fixed Claude apps gateway refusing to start when a
desktopsetting holds a field newer than the gateway, such as a managed MCP server'soauth.omitResource; it now warns and serves it - Fixed Bash commands coming back empty for zsh users whose
.zshrcsetsKSH_OPTION_PRINT - macOS: Fixed "Unable to read managed policy settings" at startup when a valid MDM profile was slow to read: the read is retried once, and a timeout is now reported as a timeout
- Fixed agent view erasing another agent view's saved input text when it restarted for an update with nothing typed
- Fixed remote sessions giving no reply after a restart when a
UserPromptSubmithook blocked a replayed permission answer; these hooks no longer run on that replay - Fixed
claude remote-controlaccepting aytyped without Enter at its first-run question when the terminal's input ended - Fixed Claude Desktop not showing spend limit warnings behind a Claude apps gateway whose policy has no
code:rules - Fixed fullscreen sessions with some plugins ending with an error when a tool result that had got shorter scrolled off the top of the screen
- Fixed prompt suggestions making extra API requests when the model replied with a tool call
- Fixed
PreToolUsemcp_toolhooks on stdio and HTTP MCP servers being skipped when their answer was over 16 MiB; the tool call is now refused - Fixed skill and command names holding a Bamum letter that some fonts draw as blank: they are now refused
- Fixed
claude -pon Linux exiting 0 in silence when a full NFS export or a used-up NFS quota lost transcript lines: it now prints an error and, in text and json output, exits 1 - Fixed background agents being reported as stopped by the user, and refused a resume, when a service interrupted a cloud session and nobody pressed Stop
- Fixed NotebookEdit reporting success to hooks and telemetry when the edit failed, for example when the notebook changed while the permission prompt was open
- Fixed a blank screen or no answer at startup, and empty
claude mcp listoutput, when a stored MCP sign-in record was null - Fixed the Artifact tool telling Claude to add filters when an artifact's database collection is too large to sort; it now says to read the collection page by page and sort the results
- Fixed a restarted cloud session dropping a message with a large image when the restart came before Claude's first re...
v2.1.319
Immutable
release. Only release title and notes can be modified.
What's changed
- Changed auto mode with telemetry or feature flags off, including behind LLM gateways: calls the server can't check are asked about or denied, with no fallback to the built-in classifier; set
CLAUDE_CODE_AUTO_MODE_SERVER=0to keep using it (Bedrock, Vertex and Foundry are unchanged) - Changed auto mode behind an LLM gateway:
CLAUDE_CODE_AUTO_MODE_SERVER=1turns on the server-side check even withCLAUDE_CODE_DISABLE_EXPERIMENTAL_BETASset; if managed settings set the latter, they must set the1too - Added support for MCP tasks in the terminal: when an MCP server runs a tool call as a task, Claude Code moves it to the background right away and tells Claude the result when it finishes
- Added the
CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUNDenvironment variable to make Claude Code wait for an MCP task inside its tool call instead of moving it to the background right away - Added
permissions.denyInsteadOfPromptingsetting: a tool call that would wait on a permission prompt is denied and the turn continues, in terminal sessions, subagents and teammates - Added
/claude-api latency-optimizeto find where your Claude API code makes people wait and try faster settings against your eval - Added the
CLAUDE_CODE_DISABLE_FEATURE_FLAGSenvironment variable, which stops feature-flag fetching without turning off telemetry; every flag then uses its built-in default - Added spend for today, this week and this month to
/usagefor developers behind a Claude apps gateway who have no spend limit, when the gateway runs this version or later - Added
admin.pooled_conflict_ruleandadmin.pooled_priority_orderto the Claude apps gateway, to set which pooled group budget pays first for a developer in several groups - Added an optional
login_noticesetting to the Claude apps gateway that shows an operator-defined message on the gateway's browser verification page and on Claude Code's sign-in screen - Added
CLAUDE_GATEWAY_LOG_FORMAT=jsonto the Claude apps gateway: operational log lines become JSON withseverity,timeandmessage, for log collectors that read the level from a field - Added a Claude apps gateway boot warning for a case where another policy's
availableModelsalso allows a custom model id that one policy lists by name - Added start-up warnings to the Claude apps gateway for policies with no
desktopHomethat rely oncoworkTabEnabled: falseorchatSessionRetentionDays, ahead of Claude Desktop's November 10 change - Added a warning when your claude.ai login ends and Claude Code continues on the sign-in from
ant auth login, which bills usage to your Claude Console organization - Added a line at startup naming the Claude Console organization that is billed in a case where Claude Code uses the sign-in from
ant auth login - Added an "Earlier in this session" row to
/tasksthat lists finished subagents, so you can reopen one and message it even after it leaves the list or you restart - Added a note to
/loopconfirmations in cloud sessions that a timer stops with its container, with an offer of a loop that survives - Fixed MCP servers on the older handshake failing to connect, or returning empty results, because Claude Code declared an extension that it only uses with newer servers
- Fixed a long-running MCP tool call on a claude.ai connector sometimes never reporting its result after
--resume - Fixed a session's diff failing to load on claude.ai and the mobile apps when the folder Claude Code runs in has a file or folder named
HEAD - Fixed
/diffshowing "Diff unavailable" when a git repository has a file or folder namedHEADat its top level - Fixed the
/diffpane opening blank in sessions where 64 or more turns edited files - Fixed slash commands typed after a leading space, tab or newline being sent to Claude as plain text instead of running
- Fixed a request that kept failing with a 401 refreshing your login on every retry and causing 401s in your other sessions
- Fixed
/contextsending its full visual grid to Claude on every later turn; Claude now reads only the table - Fixed
claude -pexiting 0 in auto mode when its actions were refused because no safety check was available: text and JSON output now exit 1 - Fixed a case where Claude Code listed every project file at start on Linux for projects on a network file system (NFS, SMB, Lustre and similar)
- Fixed a case where auto mode was wrongly refused when a client sent a model change and a request for auto mode back to back
- Fixed
/statusshowing "Auto mode server: Enabled" when the server-side review isn't reaching the session, for example behind an LLM gateway that drops it - Fixed Claude-drafted feedback, surveys and
/feedbackcontinuing to appear after the server refused feedback for your organization - Fixed Claude drafting feedback on third-party gateways, where it can't be sent
- Fixed auto mode refusing actions without saying why when permission rules or
autoModesettings are very large: it now explains and, unlessautoModedeny rules are set, asks you in the terminal - Fixed a case where Bash deny and ask rules missed commands written with quoted words
- Fixed subagent hand-back reports showing an internal marker and provenance note when expanded outside verbose mode
- Fixed
claude -p --resumewith a prompt losing a deferred tool call when its MCP server is missing: the run now exits 1, keeps the call and refuses later input - Fixed a case where text was dropped from informational messages sent to SDK clients
- Fixed a case where Agent SDK hosts got a generic exit-code error instead of a failed run's own error message when the disk was full
- Fixed
CLAUDE_CODE_RESUME_INTERRUPTED_TURNre-running a turn that was interrupted in plan mode when the session resumes in another permission mode - Fixed edits to a settings file being ignored when made within a few seconds of Claude Code writing that file
- Fixed a config file left at the legacy name hiding your setup with no warning: Claude Code now says on stderr when a home holds two config files, and which is in use
- Fixed
~/.claude.json, settings and edited files ending up empty or cut off when the disk fills during a save in a read-only folder or to a bind-mounted file (one session saving at a time) - Fixed Write ending the turn as a refusal when it couldn't read the file to overwrite
- Fixed background Bash commands that finish almost instantly losing their output while being reported as completed
- Fixed the Bash tool's diff of changed files missing a file that the command wrote just before it ended
- Fixed a mistyped model name, such as
opus-5-5, telling you to update Claude Code instead of suggesting the model you meant - Fixed a case where
NotebookEditchanged the wrong cell when the notebook changed while a permission prompt was open - Fixed a ~0.5s hang after pressing Enter on the
/loginsuccess screen: the dialog now dismisses immediately and the post-login refresh runs in the background - Fixed Ctrl+G not opening the external editor while typing an "Other" answer to a question in screen reader mode
- Fixed Monitor's WebSocket watch failing with "could not resolve" behind a proxy when
CLAUDE_CODE_PROXY_RESOLVES_HOSTSis set and the machine has no DNS of its own - Fixed
claude plugin evalwarnings suggestingmax: 0for a tool that must not be called, which could never pass - Fixed background plugin auto-update not installing a dependency added by the updated plugin version
- Fixed Cmd+click not opening links in Ghostty over tmux in sessions opened from the agents view
- Fixed a mod's hot reload in
.claude/skillsmissing a file that was deleted just after it appeared, and missing its return - Fixed
/rewindfailing with "No files were restored" when restoring code to a checkpoint from before/branch - Fixed the
/claude-apiskill saying Console web settings don't apply to Managed Agents sessions, and tightened its credential and permission examples - Fixed needless permission prompts for read-only commands wrapped in a plain
timeout DURATION, such astimeout 30 rg foo - Fixed WebFetch describing claude.ai shared-chat links as empty pages; it now says shared chats can't be read and to paste the conversation instead
- Fixed Artifact database calls being re-sent to artifacts without a database; errors now say whether republishing helps
- Fixed a case where artifact database reads that save to a folder (
out_dir) were refused - Fixed detailed beta tracing not presenting
CLAUDE_CODE_CLIENT_CERTto collectors that require a client certificate - Fixed the OpenTelemetry
claude_code.session.countmetric counting Agent SDKprewarm()processes that were never claimed; a pre-started process now counts once, when it is claimed - Fixed
/clearkilling running commands of background agents, teammates and workflows that keep running, and foreground subagents of background agents and teammates - Fixed a terminal whose Claude apps gateway sign-in had expired sending telemetry and managed-settings requests that the gateway refused and logged as
invalid_token - Fixed the agents view appearing to send a reply to a background session waiting on a permission prompt; the reply now stays in the box with a hint to open the session and answer
- Fixed agent view removing a draft saved by another agent view in the same directory when exiting
- Fixed a case where agent view came back with another agent view's input text after restarting itself for an update
- Fixed the agents view preview cutting off long commands, results and status lines without an ellipsis, and dropping
**, backticks and tags from commands waiting for approval - Fixed Claude in Chrome reporting the extension as not connected when the connection dropped mid-action; Claude now checks the page before repeating an action that may have run
- Fixed Remote Control sessions still showing "Limit reached" on other devices after a usage limit was lifted outside...
v2.1.318
Immutable
release. Only release title and notes can be modified.
What's changed
- Added a record of your answer when Claude Code asks to turn on the mods it writes in a session
- Added
assume_roleonmantleupstreams of the Claude apps gateway, for a role in another AWS account and for per-developer AWS cost attribution - Added an
effortoption to a mod's$.model.fork, so a quick side job can run atlowwhatever effort the session uses; the result reports the effort sent - Added the date a stored claude.ai sign-in ends to
claude auth status(loginExpiresAt) and toclaude -pJSON results (credential_expires_at) - Added a one-line stderr warning to
claude -ptext output, starting 10 days before a stored claude.ai sign-in ends - Fixed
--continuesometimes losing the earlier conversation after a malformed tool call's retries ran out (regression in 2.1.314) - Fixed macOS sessions with many running Bash commands stalling while memory grew
- Fixed permission prompts being answered by keys typed just after sending a message, or before a slow prompt appeared
- Fixed
/logout,claude auth logoutandclaude mcp removereporting success, and changes to trust, consent or MCP settings being dropped with no word, when the config file could not be updated on a shared network home directory - Fixed jobs exiting with
Not logged inwhen another terminal or host signs in again to the same account and organization on the same home - Fixed
claude mcp addandremovewriting the config without its lock: they now wait for it or exit 1, though another job's save can still replace a saved server - Fixed
claude plugincommands exiting before a slow token refresh was saved, which could sign you out on the next run - Fixed
claude plugin validatepassing a custom-named marketplace file thatclaude plugin marketplace addrejects - Fixed stdio MCP servers that exit on the version probe being re-probed on every start; a server that dies in under 3s for its own reason is also pinned to the legacy handshake for 7 days
- Fixed sessions being refused at startup by an
allowedProviderslist that another login on the same machine had stored - Fixed idle compaction replacing a conversation with a reply that was not a summary
- Fixed the "Now using usage credits" notice reappearing about every 30 seconds while a background subagent is running
- Fixed custom slash commands that fail, or that only Claude can invoke, printing nothing in
claude -pand SDK sessions - Fixed
claude -pand Agent SDK sessions reporting success when an API error cut off a reply while a mod hookedturn.step - Fixed a message sent right after a model change still running after Stop in headless sessions: Stop now cancels or stops it as it would a queued message
- Fixed a deleted session transcript being re-created with its last prompt when an idle non-interactive session exited
- Fixed
claude remote-controlhosts, the background daemon and self-hosted runners failing to start new sessions (spawn ENOENT) after an update or version cleanup removed the binary of a still-running process - Fixed a running Claude Code process owned by another user (for example one left by
sudo claude) being treated as dead by version cleanup, which could delete its binary - Fixed
/remote-controlshowing a session as available after a failed connection - Fixed
/design revokereporting success when the request failed with a 404 - Fixed a shell command approved after a self-hosted runner or cloud session restart running in the session's start folder, not the folder it was asked in; if that folder can't be entered, it is not run
- Fixed Claude not being told when an approved connector tool was unavailable after a cloud session restart
- Fixed cloud sessions being stopped in the middle of a turn when the service refuses uploads for several minutes
- Fixed variables a
Setuphook writes toCLAUDE_ENV_FILEnot reaching the Bash tool in some cloud sessions - Fixed the iPhone app showing a cloud session's turn as finished while it kept running, after a response was cut off at a tool call or a refused image or document was removed
- Fixed a restarted session re-sending a message that failed with an API error, ahead of the newer message waiting behind it
- Fixed a restarted session dropping its interrupted turn when the restart came right after Claude read a large image or retried a tool call
- Fixed every connection failing when the
NODE_EXTRA_CA_CERTSfile is empty, not PEM, or starts with a damaged certificate: readable certificates are now used, with a warning on stderr - Fixed workflows re-running finished agents when resumed after a usage limit
- Fixed
/mcpin cloud sessions counting tools the model can't use; a server's row now shows how many of its tools are available - Fixed a duplicate notification when Claude left the status field out of a PushNotification call
- Fixed the error for a too-large image in a request with more than 20 images always saying the limit was 2000px; it now shows the API's limit
- Fixed the runtime in background shell details not updating while the dialog is open
- Fixed a mod's
turn.stephook making a stopped reply finish as a success in headless runs - Fixed retention cleanup leaving a home that only runs
claude -pwith no~/.claude.jsonbackup: it now takes a fresh backup before deleting the last good one - Fixed the stored login being replaced by an empty file when a network home directory has no room left for data but still takes new files
- Fixed tokens from
setup-tokenbeing refused at start on machines withforceLoginOrgUUID, when the token belongs to a permitted organization - Fixed non-interactive launches replacing a
~/.claude.jsonthat isn't valid JSON with defaults; the start now fails, says how to restore the file, and leaves it as is (#87551) - Fixed an empty
~/.claude.jsonwith no backup being reported as corrupted; Claude Code now starts as it does when the file is missing - Fixed the restore command printed for a damaged or missing
~/.claude.jsonnaming an empty or cut-off backup, or failing on a read-only file - Fixed the sign-in failure when a stored claude.ai login reaches its time limit: it now says so, and in
claude -pnamesclaude auth loginandclaude setup-token - Improved how
~/.claude.json, settings files and the stored login survive saves on shared network home directories: they are less often deleted, briefly emptied or replaced by a near-empty or older copy - Improved sessions on network file systems to look again when the configuration file is wrongly reported as missing, so fewer start without your MCP servers and trusted folders
- Improved MCP tool errors: a call made before the tool is loaded now returns its input schema
- Improved the reliability of git commits and pull request creation when the Bash tool runs macOS's built-in
/bin/bash - Improved "Ask your admin for more usage" in the usage limit menu to send the request in one step
- Improved how fast remote sessions reconnect after a pause or sleep
- Improved You should know toasts to say "try again" instead of "press 2", which only works in the terminal
- Improved auto-update reliability: a brief network failure while verifying a release is now retried right away instead of waiting for the next check
- Improved unattended runs (
claude -p, SDK apps) to stop rewriting~/.claude.jsonon every run when nothing in it changed - Changed Claude Code to no longer install or update the IDE extension when started in an IDE terminal; use
/idefrom an outside terminal or your editor's extensions view - Changed subagents to stop instead of switching models when "Switch models when a message is flagged" is set to "Ask each time"
- Changed background subagents to move a shell command to the background after 3 minutes on all providers, so the prompt cache doesn't expire while it runs
- Changed subagent progress summaries on Bedrock, Vertex, Foundry, or with telemetry off: on a cold prompt cache, one can now wait up to 5 minutes for the subagent's pending response
- Changed what a mod attaches at
prompt.submitto stay in the user's turn rather than go out as a system message - Changed
deniedMcpServersURL entries to also block Anthropic-provided servers whose upstream URL matches, and connectors in cloud sessions and on self-hosted runners, where the session is given the connector's own URL; otherwise deny a connector by name - Changed the
/permissionsrule details, built-in rules and delete confirmation views to use the standard dialog; pressing Ctrl+C twice there now goes back or cancels instead of quitting - Changed
/claude-api managed-agents-onboardto give a new agent's built-in tools, and a quickstart template's MCP tools, theautopermission policy ("Judge risky actions") by default, matching the Claude Console; say "run without asking" to opt out - Removed the 2.1.288 fix that kept the model's earlier thinking when resuming a conversation started on 2.1.286 or earlier; that thinking can now be dropped
- Gateway: Added a log warning when the Google access token from a federation (
external_account) credentials file is about to expire - Gateway: Improved the log hints about
listen.trusted_proxies: they now say to list only a proxy that adds the connecting address toX-Forwarded-Foritself - Gateway: Improved the warning when AWS CountTokens fails on Amazon Bedrock: it says Claude Code, not the gateway, counts after the 501, and points at IAM only when AWS denies access
- Self-hosted runner: Added
CLAUDE_RUNNER_SPAWN_REASONto the orchestrator's spawn-runner hook environment: why Anthropic sent the request (e.g.runner_lost,resumed); unset when none was sent - Self-hosted runner: Added a startup warning when
--release-idle-session-minis the last argument with no value (still ignored) or has a value of only spaces (still read as0) - Self-hosted runner: Changed the orchestrator's log lines:
ok session=β¦now prints at ...
v2.1.317
Immutable
release. Only release title and notes can be modified.
What's changed
- Added a warning to
/schedulewhen a new cloud scheduled task gets connectors you did not ask for, with how to remove them - Added a check that asks before a web or shell tool call sends your account email address to the network
- Added
onFailure: "block"for Agent SDK hook callbacks, so a callback that fails blocks the action instead of letting it run - Added a notice in Claude Desktop's Code tab when your organization's remote managed settings haven't loaded for the session, and another once they do
- Added a notice when auto mode's check has no answer for a subagent's tool call, which used to leave nothing in the main view
- Added
anthropic.plan,anthropic.seat_type,anthropic.providerandanthropic.custom_base_urlto OTel metrics, events and spans - Added a cost report to the Claude apps gateway admin API,
GET /v1/organizations/analytics/cost, for reading past spend over a date range in total, per developer, per day or per IdP group - Added a daily record of each developer's IdP groups on Claude apps gateways with
admin:set, kept foradmin.identity_retention_days, which the cost report groups by - Added
CLAUDE_CODE_DISABLE_NESTED_SESSION_ID: set it to1on a self-hosted runner to haveclaude -prun inside a session use that session's ID and transcript, as in earlier versions - Fixed project and local MCP servers disconnecting after the first turn in some Claude desktop sessions
- Fixed auto mode failing every turn when an LLM gateway set as the base URL answers 403 or 422 to its server-side safety check (a 403 with an apiKeyHelper is unchanged)
- Fixed
claude auth statusexiting before a slow token refresh was saved, which could sign you out on the next run - Fixed a project's
effortLevelsetting being ignored by sessions that an app starts ahead of time and then opens in the project, such as new sessions in the desktop app's Code tab - Fixed
claude --from-prreporting "No conversations found" in projects with many sessions when the linked session was older than the first page - Fixed the second of two simultaneous permission prompts showing no file path or command on claude.ai and the mobile apps
- Fixed Remote Control and SDK hosts offering "don't ask again" on a mod's tool calls
- Fixed session titles being lost in cloud and SDK sessions when a new message or Stop arrived while the title was generating
- Fixed self-paced
/loopwakeups sometimes not being scheduled when Claude left a field out of its request - Fixed auto mode in cloud sessions stopping for approval when the Artifact tool uploaded, wrote to a database or saved a file through the outputs folder
- Fixed skills synced from claude.ai being lost or downloaded again every ten minutes when they can't be written to disk
- Fixed
/scheduleleaving a cloud scheduled task's next run time and link out of its results after creating or updating it - Fixed screen readers speaking a running subagent's elapsed time and token count on every change in screen reader mode
- Fixed a region or network block (HTTP 403) being shown as a sign-in failure; the error now explains the block
- Fixed Claude saying a working claude.ai connector needed authorization or had failed in cloud sessions when a synced plugin included the same server
- Fixed
claude -pexiting 0 when a full disk or quota lost its transcript or ~/.claude.json writes; it now prints an error and, in text and json output, exits 1. Full NFS exports may be missed - Fixed edits to settings files made in the first second or so after launch not taking effect until a settings file changed again
- Fixed old transcripts not being cleaned up on machines where some runs skip cleanup, such as runs using
--setting-sources - Fixed deleted agent team inboxes being re-created by a teammate's late message
- Fixed a re-created agent teammate being removed from its team by an earlier shutdown approval
- Fixed stored scheduled tasks being impossible to list or delete after scheduled tasks were turned off
- Fixed Claude deleting your most recently updated
/team-onboardingguide when asked to delete one without naming which - Fixed Claude saying a
/team-onboardingguide was deleted when the server refused the delete - Fixed the Claude apps gateway hiding Amazon Bedrock's "Input is too long." error, which left sessions failing every turn with "upstream rejected the request" instead of compacting
- Fixed self-hosted runner sessions losing recent turns or the whole conversation when restarted while a plan waited for approval
- Fixed "Prompt is too long" after automatic compaction in sessions whose very large CLAUDE.md changed since it was last sent
- Fixed high memory use and slow startup in headless sessions with many plugins that register commands
- Fixed stdio MCP servers receiving an empty
AWS_BEARER_TOKEN_BEDROCKwhen their env config sets it to empty; the variable is now unset, so the server can use the machine's own AWS credentials - Fixed API requests failing with "unable to get local issuer certificate" behind some TLS-inspecting proxies after a root certificate renewal
- Fixed very long conversations losing their earlier summary when compaction had to shorten its own request
- Fixed a PDF's own metadata being able to make Read and @-mentions under-count its pages
- Fixed
DISABLE_PROMPT_CACHING_OPUSandDISABLE_PROMPT_CACHING_SONNEThaving no effect on[1m], other-region and undated spellings of the default model - Fixed
/artifactsand the Artifact tool's shared list showing no shared artifacts when you have 200 or more of your own - Fixed Claude treating partial Grep and Glob results as complete when a search hit its time limit
- Fixed OpenTelemetry exports to an
https://endpoint through a proxy never being sent when they started while another export was still in progress - Fixed a flood of connection attempts to a proxy that blocks (HTTP 403) OpenTelemetry exports to an
http://endpoint - Fixed OpenTelemetry exports hanging indefinitely behind a proxy that never answers; they now time out after 10 seconds, or
OTEL_EXPORTER_OTLP_TIMEOUTup to 30 seconds - Fixed resumed sessions telling Claude again about a file change it already knew about
- Fixed Claude sometimes not using a built-in tool in a resumed session after an earlier call failed because the tool was switched off
- Fixed
/remote-controlanswering "Unknown command" instead of saying that Remote Control is turned off by thedisableRemoteControlsetting - Fixed agent team teammates in tmux or iTerm2 panes starting in auto mode when the lead session was in manual mode
- Fixed a background session sometimes losing a just-made change of permission mode when it was upgraded or retired
- Fixed Ctrl+C stopping all running background agents when pressed to clear typed text at the prompt
- Fixed /feedback showing "Enter to confirm" while a report is being sent
- Fixed child processes of a stopped shell command sometimes being sent SIGTERM twice, which could make some programs skip their cleanup
- Fixed
claude -prun inside a cloud or self-hosted runner session sharing that session's ID: it wrote into the session's transcript, and a restart could resume the wrong conversation - Fixed
claude -prun inside a cloud or self-hosted runner session generating a title of its own and sending it to that session - Improved the error shown on Microsoft Foundry when Azure credentials can't be loaded: it now says to check or refresh them, and reports as
cloud_credential_error - Improved
/design-syncto say up front when your design system has moved to Claude, and stop before building instead of failing at upload - Improved the startup error when a required Claude apps gateway can't be reached: it points to the network instead of a sign-in, and says when the gateway's TLS certificate can't be verified
- Improved the "Resume this session with" hint shown at exit to repeat the flags you launched with (for example
--chrome --debug) ahead of--resume - Improved how self-hosted runners recover from server errors: after a 5xx other than 501 or 529, a runner's next poll now opens a new connection instead of reusing the one that failed
- Improved how self-hosted runner sessions recover from server errors: after a 5xx other than 501 or 529, a session now opens new connections instead of reusing the one that failed
- Improved how self-hosted runner sessions recover when connections stop answering: after a heartbeat gets no answer, a session now opens new connections instead of trying each idle one in turn
- Changed SendMessage so a message to a running background agent arrives earlier: its running command moves to the background, without being stopped
- Changed subagents and teammates on a different model from the main conversation to use that model's saved effort level or its default, instead of the session's effort level
- Changed exit to skip the "Background work is running" prompt for plugin monitors
- Changed the built-in
plugin-authoringskill to offer once, after a mod you built works, to help share the mod - Removed the Read tool's "file unchanged since your last Read" stub: reading an unchanged file again returns its content
- Windows: Fixed every tool call being refused on some volumes where the native path lookup fails; the working-directory check now compares the folder's identity instead
- Windows: Fixed the session scratchpad and other temporary paths growing with your project's path length in sessions not started by Claude Desktop, which made repositories cloned into them hit the 260-character path limit
- Gateway: Fixed the status line and
/usageshowing a developer's own spend limit as 100% used after their group's pooled budget ran out - Self-hosted runner: Fixed Claude not seeing the interrupted tool call when a session moves to a new runner and the turn is older than
CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS - Self-hosted runner: Fixed an MCP server that was switch...
v2.1.316
Immutable
release. Only release title and notes can be modified.
What's changed
- Added
CLAUDE_CODE_DISABLE_ULTRATHINK, which turns theultrathinkkeyword off - Added pooled group budgets to the Claude apps gateway: one monthly budget that a group's members share, on top of each member's own limit, set with
pooled_budgeton the spend limits admin API - Added
CLAUDE_CODE_DISABLE_LOOPED_CROSS_CERT_DROPto keep system cross-certificates that certify each other in a loop, for servers whose private CA needs one - Added
CLAUDE_CODE_SUBAGENT_EFFORTto set the effort level subagents run at when nothing else names one, instead of inheriting the session's - Added
managed.policy_mode: layeredto the Claude apps gateway: every policy that matches a developer applies, each merged over the ones listed below it, not only the first - Added
guardrail.input_taggingon Claude apps gateway Bedrock upstreams, which wraps prompts in the input tags that an Amazon Bedrock guardrail's prompt attacks filter needs;all_messages_and_systemalso tags the system prompt - Deprecated fast mode for Opus 4.8 as of October 30, 2026; it will be removed on November 30, 2026. After removal, fast mode requests on Opus 4.8 return an error and do not fall back to standard Opus 4.8. Migrate to Opus 5.5 to keep the speedup
- Fixed shell commands being left running on macOS and Linux when Claude Code exits by itself, for example when credentials are refused or a cloud session is archived
- Fixed bash aliases with line breaks in their value (except in Git Bash), and functions whose names start with a dash, being garbled or lost in the Bash tool's shell
- Fixed bash scripts started from the Bash tool stopping after their first command when
SHELLOPTSis exported - Fixed PowerShell hooks not blocking on exit code 2 when the command begins with a type cast,
param,usingor an attribute - Fixed some network requests hanging when a compressed response was cut off or corrupted
- Fixed
sonnet,opusandhaikuon Vertex AI and Amazon Bedrock showing an error mid-session instead of switching to an older model when the newest is not yet available to the account or region - Fixed the Claude apps gateway not checking every model a request names against
availableModels,deniedModelsandmodels; a request that names a blocked model now gets a 400 naming the field - Fixed
claude auth loginrefusing to run where managed settings require a Claude apps gateway; in a terminal it now shows the gateway sign-in - Fixed
--restrictedsessions uploading files from outside the working directories when a Read allow rule covered them - Fixed prompts containing invisible characters needing a second Enter to send; plain prompts now send cleaned on the first Enter, and commands still wait for review
- Fixed sub-agents that inherited a parent sub-agent's model moving to the main model when a background job or message woke them
- Fixed a managed
autoMode.allowlist without"$defaults"getting the built-in exceptions back from a host app's--settings, a first rule added in/permissions, or/auto-mode-setup - Fixed cloud sessions and cloud scheduled tasks not being marked as failed when auto mode stopped a turn because the server returned no safety verdict
- Fixed
claude -ptext output sometimes not saying why auto mode stopped a turn when a background agent was still running - Fixed
CLAUDE_CODE_AUTO_MODE_SERVER=1being ignored in sessions started by a host application (such as Claude Desktop) behind a proxy or LLM gateway with experimental betas turned off - Fixed plugin MCP
headersHelperscripts receiving a corruptedCLAUDE_PLUGIN_ROOTand server URL when a credential-named environment variable was set to a switch value such as1 - Fixed the SDK
register_repo_rootcontrol request not loading the CLAUDE.md of a directory outside the working directory (withCLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1) - Fixed the Artifact tool showing
?for artifact database access rules at theselflevel, and not quoting those rules back when it refuses a republish that would drop them - Fixed
/model <id>not warning when the model isn't recognized by this version and auto-compact will assume a 200K context window - Fixed the "hold space to speak" hint using up its three showings in one session, and showing an empty key when push-to-talk is unbound
- Fixed Grep and Glob never returning when the search process is killed at the timeout but does not exit, seen on Windows
- Fixed a rare case where resuming a conversation did not restore its plan, when
/clearor/resumehad been run while part of that conversation was still being saved - Fixed first-run setup dropping words from the security notes and the terminal-setup explanation in narrow terminals
- Fixed the Enterprise survey card taking a typed 1 or 0 after a short pause; a typed answer now needs Enter
- Self-hosted runner: Fixed a message sent while Claude was working being answered after a Stop, once the session's process had been replaced
- Self-hosted runner: Fixed an MCP server's on/off switch sometimes being lost when a session moved to a new machine
- Windows: Fixed the Bash tool losing your aliases and functions in Git Bash when the rc file sets errexit and pipefail and only winpty aliases, or none, are defined
- Improved
/code-reviewstarted from the Code tab in Claude Desktop or on the web: cloud andclaude remote-controlsessions now show the findings card, not a plain-text list - Improved
/diffon large repositories: each refresh usually runs one fewer full-repository git command, and refreshes are spaced out when git is slow - Improved the messages shown when
/ultrareview, a cloud session or a cloud agent finds no GitHub remote: they now say to create a repository at https://github.com/new, and/ultrareviewno longer suggests aghcommand thatghrejects - Improved SSL certificate errors to name the likely causes, among them a server that leaves out an intermediate certificate, and the fix for each
- Changed auto mode so that an
autoMode.allowlist without"$defaults"no longer removes the built-in rule on scheduled-task prompts - Changed server-managed settings for Team and Enterprise logins: settings fetched from Anthropic's API now apply without an approval prompt, and a stored copy that doesn't verify is refused
- [VSCode] Added sign-in to a Claude apps gateway from the chat panel, with no terminal needed
- [VSCode] Changed
ultrathinkto run its turn atxhigheffort and show in a rainbow in the chat box, as in the terminal - [VSCode] Fixed the missing Effort slider, Ultracode switch and model name when the model setting has the
[1m]tag, such asopus[1m] - [VSCode] Fixed saved
/btwside-question history being deleted too early while a settings file has errors - [VSCode] Fixed a conversation coming back in Auto mode after a reload or restart when its plan was approved with "Yes, and manually approve edits"
- [Cloud sessions] Added a form card to cloud sessions, so you can fill in or decline a form an MCP server asks for instead of the request being canceled without you seeing it
- [Cloud sessions] Added a "Catching upβ¦" line that shows while a cloud or Remote Control session you switch back to is still bringing its messages up to date
- [Cloud sessions] Changed network secrets so Enterprise members can add and delete them on their own cloud environments, instead of only viewing them
- [Cloud sessions] Improved the Changes pane for cloud sessions: the note about what the list leaves out is now a badge beside the branch name, not a row above the diff
- [Cloud sessions] Fixed file search in a cloud session's Files pane showing folders as ../.. paths after Claude changed directory; results now show their path from the project's root
- [Claude Tag] Fixed Claude refusing to edit or append to a canvas it made in a Slack channel, from that channel, once the canvas was also shared to another channel or a DM
- [Claude Tag] Fixed untagged replies going unanswered in a Slack Connect thread when both organizations have installed Claude and Slack delivered the reply to the other organization's app
- [Claude Tag] Fixed a cloud scheduled task's live status checklist in Slack staying half-done; a run can now edit the top-level messages it posted during that run
- [Claude Tag] Changed a Slack channel's Respond automatically switch to a "How Claude participates" choice on the channel's Configure page and in Claude Tag admin settings
- [Code Review] Added a findings-by-severity card to the Code Review analytics page, showing the period's total findings, a daily chart stacked by severity, and each severity's count
v2.1.314
Immutable
release. Only release title and notes can be modified.
What's changed
- Added
permissions.blockWritesOutsideWorkingDirectories: Write, Edit and NotebookEdit refuse paths outside the working directories in every permission mode - Added an optional
groupslist to Claude apps gateway upstreams: only developers in the listed IdP groups are sent to that upstream, on failover too - Added
guardrail_traceto Claude apps gateway Bedrock upstreams, to log which Amazon Bedrock guardrail filter fired on a request, without the matched text - Added idle compaction to VS Code and Claude Desktop's Code tab: a 200K+ token conversation left idle is summarized, and the summary is used on your next message if the prompt cache has expired
- Fixed sessions failing turn after turn with "Invalid effort level" when an organization's admin caps a model's effort: Claude Code now lowers the effort, retries, and says which level it uses
- Fixed
claude -pexiting with code 0 and no output when startup failed; it now prints the error and exits 1 - Fixed Bedrock sessions with many images failing every turn and
/compactwith "400 Input is too long." instead of removing older images and compacting - Fixed Microsoft Foundry sessions failing when the resource has no deployment for the default Sonnet, Opus or Haiku model: Claude Code now falls back to an older model of that family
- Fixed repeated refused requests behind a gateway that doesn't accept tool search's
tool_referenceblocks: the request is sent again once without tool search, and the session remembers - Fixed TLS connections failing with
UNABLE_TO_GET_ISSUER_CERTwhen the system certificate store holds a renewed root certificate that is cross-signed with its predecessor - Fixed MCP servers that also work without sign-in showing "needs authentication" after their stored sign-in stopped working; they are now used signed out
- Fixed
claude mcp logoutreporting success when the MCP sign-in was not removed, for example while the macOS keychain is locked over SSH - Fixed extra sign-in renewals when several sessions share an Anthropic profile login and the credentials lock is busy
- Fixed
claude ultrareviewandclaude remote-controlasking the workspace trust question in a CI job that has a terminal; withCIset they now refuse an untrusted folder at once - Fixed an administrator's TLS trust settings in managed settings not being applied in Claude Desktop sessions
- Fixed model switching being refused on machines with managed plugin settings when one of your own
--plugin-diror--plugin-urlplugins had a broken manifest or failed to download - Fixed the Bedrock and Vertex model upgrade offer coming back at every start when managed settings pin the model
- Fixed
forceRemoteSettingsRefreshset only in remote managed settings no longer applying once the stored copy had expired, which let sessions start without policy when the server could not be reached - Fixed "Continue automatically at usage limit" continuing more than three times without a prompt from you when a task restarted itself between waits (a /goal check-in, a background or scheduled task)
- Fixed background and cloud sessions started with Ultracode turning it back on at their next start after it had been switched off
- Fixed the last broken reply and its retry prompts staying in the conversation after Claude gave up on a tool call that could not be parsed
- Fixed a PreCompact hook with very large output making compaction fail or repeat; each hook's output is now cut at 10,000 characters
- Fixed background diff refreshes briefly taking the repository's index lock, which could make a git command run at the same moment fail with "Unable to create '.git/index.lock': File exists"
- Fixed markdown tables jumping between grid and stacked layouts on half-typed rows while streaming, and long tables falling back to raw pipes
- Fixed the /resume picker showing the text of CLAUDE.md or CLAUDE.local.md as a session's title when the session only ran slash commands
- Fixed
/btwanswering from the main conversation when asked from a subagent's open transcript - Fixed pasting an image over SSH to a Linux machine doing nothing silently; the prompt now says to copy the file over and paste its path
- Fixed
claude remote-controlsessions that failed to start when the session service was slow for a moment: the worker's registration is now retried with growing waits - Fixed model switches over Remote Control that take over 8 seconds getting a "still pending" error instead of the final result
- Fixed the
sandbox.excludedCommandssetting description saying listed commands always run outside the sandbox; it now says every command in a call must match an entry - Fixed shell and MCP calls that auto mode, a deny rule or a PreToolUse hook blocked, or that otherwise did not run, reading as if they ran in a collapsed tool group
- Fixed sandbox protections not applying to a worktree entered by
claude -p --resumeor--continue - Fixed hooks matching Bash not running on shell commands started by the Monitor tool; such hooks can block or ask, but not approve or rewrite those commands
- Fixed a settings file excluded with
--setting-sourcesstill supplying some settings, such as auto mode rules and saved permission consents - Fixed auto mode reporting a call as blocked, and listing it in
/permissions, when its safety check gave no verdict - Fixed a Claude apps gateway Vertex upstream hanging for minutes when a Google token endpoint accepts the connection and never answers
- Fixed the Claude apps gateway's start-up warning for a deprecated Claude Desktop key that it still serves as written saying "stops being accepted" after the key's end date
- Fixed
/upgradeopening the browser and starting a new login for plans billed through the App Store or Google Play; it now says where to change the plan - Fixed
--resume, and rewinding past a switch to another model after a refusal, moving a session on a model name Claude Code doesn't recognize to a different model - Fixed requests failing when a gateway or cloud provider refuses one of Claude Code's beta headers by name: the request is sent again without it
- Fixed model IDs spelled with a dot behind an LLM gateway, such as
claude-opus-4.8, being treated as an older model with the wrong context window, output limit, effort, thinking mode and cost - Fixed Remote Control clients showing a stray "Compacted (ctrl+o to see full summary)" row after /compact
- Fixed the cloud sessions tip and the Remote Control idle notice showing when an organization's policy turns those features off
- Fixed a resumed claude.ai cloud session making a model call nobody asked for when the previous worker stopped just after receiving a new chat's files
- Fixed WebFetch in Cowork cloud sessions silently dropping a PDF's text past 100,000 characters; it now says how much was unread and where to read on
- Fixed Claude being told only that a command was declined after you stopped it with Esc or Stop in a cloud session or the IDE; it now also hears that the command may have run
- Fixed blank lines at the top of a code block disappearing when the code block opens a quote
- Fixed a blank line appearing above some
βΏrows in the transcript view (Ctrl+O) - Fixed vim mode
dw,dW,ywandyWcarrying on past the end of the line, and madewandWstop on empty lines - Fixed x and Enter in the agent panel sometimes acting on the wrong agent when another agent started or finished
- Fixed pasted text and dragged-in files being lost in Claude's question dialog unless the "Other" row had focus
- Fixed pasted text being lost when a row in the prompt footer was selected
- Fixed vim mode
pover a character selection ignoring whether the yanked text was whole lines - Fixed vim mode
awandiwtaking the line break at the end of a line - Fixed β selecting footer items hidden by the ? help menu, the command list or a paste hint
- Fixed Esc on a command's panel, such as
/btw, also interrupting the subagent whose transcript is open - Fixed the welcome header in fullscreen mode showing the session's model while viewing a subagent or teammate that runs on a different model
- Fixed the fullscreen transcript being left mid-conversation after "Restore conversation" in the rewind menu while scrolled up
- Fixed a rare case where a deleted session could reappear in the resume list as an almost empty entry
- Fixed prompts containing tags such as
<bash-stdout>or<local-command-stdout>not being acknowledged to a local stream-json host - Fixed sessions staying untitled when the first prompt failed (for example on a usage limit) and the conversation continued afterward
- Fixed the skill file watcher checking every removed skill kept in
~/.claude/skills/.trash, which added file system load that grew with each removal - Fixed the session name from /rename disappearing while Claude asks for permission or a plan decision, so side-by-side sessions stay identifiable
- Fixed background sessions that fail to start being reported as a deleted daemon binary when the binary is still on disk
- Fixed the tip and idle reminder about push notifications appearing when the push settings in
/configare hidden or your organization has turned off Remote Control - Fixed
~/.claude/skills/.trashand~/.claude/plugins/.trashgrowing without limit: each now holds about 1024 entries, whatevercleanupPeriodDayssays - Fixed the Bash edit diff listing a whole file as changed when a CRLF file under git's line-ending conversion was re-saved unchanged or had one line edited
- Self-hosted runner: Fixed an idle session moving to another runner instead of pausing when the runner's request to pause it lost its connection before Anthropic answered
- Improved memory use in long headless and SDK turns that run many subagents: the parent session no longer keeps each subagent's tool results until the turn ends
- Improved prompt history: Ctrl+R now matches text inside collapsed
[Pasted text]pil...
v2.1.312
Immutable
release. Only release title and notes can be modified.
What's changed
- Added
oidc.user_id_claimto the Claude apps gateway, to identify people by an id_token claim other thansub, such as Microsoft Entra ID'soid - Added click to send: in fullscreen, clicking the "to send now" hint under a queued message sends it right away, as its key does
- Fixed managed settings and organization policy not being fetched for the rest of the session after signing in from the VS Code extension
- Fixed Claude overwriting a very large CLAUDE.md, rules file or @-included file in a subdirectory after seeing only its start; Write now asks Claude to read it all or edit in place
- Fixed per-directory and
paths:skills not being found after a Bashcddeeper into a git repository - Fixed a rare case where the first reply after resuming a session in the terminal could be missing the next time the session was resumed
- Fixed a command with an invalid name stopping all commands from loading, which could leave
claude -pwith no output - Fixed the Read tool sometimes failing on PDF pages with "pdftoppm failed: Could not write image" when the clean-up of old session files ran at the same time
- Fixed the spinner, OpenTelemetry
effortvalues and transcripts naming a newly picked effort level during a task before the model applied it; they now show the level in force - Fixed the
/modeland/effortcache warning saying the re-read waits for your next message; a change made while Claude is working can trigger it sooner - Fixed some sessions showing as waiting on you when the last message only mentioned items waiting on you mid-sentence
- Fixed agent view restoring input text on the next launch after it was cleared with Ctrl+C just before exiting
- Fixed agent view reopening in shell mode after exiting with Ctrl+D from an empty
!input - Fixed vim mode
d,candywith agjorgkcount larger than the lines left deleting or copying text; like Vim, they now only move the cursor - Fixed
/verifyshowing a long description meant for Claude in/helpand the/command menu instead of a short one - Improved the prompt's effort indicator: a change made mid-task now says it may wait for your next message, and the note clears when it no longer applies
- Improved WebFetch errors in cloud sessions: a host that does not resolve is now explained as possibly outside the allowed network domains, so Claude names the host to allow
- Changed Bedrock, Vertex, Foundry and Mantle to use the shorter system prompt for model names Claude Code doesn't recognize, such as custom deployment names and inference profile ARNs, even when they front Sonnet or Haiku; set
CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0to keep the full prompt - Changed automatic model switches after a flagged message to also cover model names Claude Code doesn't recognize, such as custom deployment names; set
CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK=1to turn them off - Changed usage limit messages to call the 5-hour window the "5-hour limit" instead of the "session limit"
- Changed cloud sessions started from the CLI to get their names and branch names from the server
- Changed prompt and agent hooks to run at most 24 at a time per session, sub-agents included, plus at most 12 that have waited longer than their event's timeout; a
timeoutunder 1 second now counts as 1 second - Changed a subagent's
autoCompactWindowto lower the window set byCLAUDE_CODE_AUTO_COMPACT_WINDOW, where it had no effect before; it still never raises that window - Changed OpenTelemetry
mcp_server.nameto report the real name of fixed-URL remote MCP servers declared by plugins from the official Anthropic marketplace, instead ofcustom - Changed Claude Code to stop sending the
claude_code.safety_eventOpenTelemetry event - [VSCode] Fixed sessions ending on a bare exit code when your organization's settings couldn't be loaded or were refused at startup; the tab now says why and offers Retry or Sign in again
- [VSCode] Changed usage limit resets to show a clock time ("Resets at 3:10 PM") and to say "5-hour limit"
- [Cloud sessions] Added an effort level to the model picker when you create or edit a routine that runs in the cloud
- [Cloud sessions] Added a Bash editor with colors, line numbers and a Copy button to the setup script box in cloud environment settings
- [Cloud sessions] Improved the step shown when Claude adds a repository to a cloud session: opening it now shows a short table of what happened instead of raw JSON
- [Cloud sessions] Fixed resending an unchanged message after a failed send in a cloud session sometimes running it twice
- [Cloud sessions] Fixed a failed cloud environment creation showing its error only as a toast outside the open dialog; it now appears inside the dialog
- [Cloud sessions] Fixed Edit in a routine's menu on the Routines page going to the routine's page without opening its edit dialog
- [Remote Control] Fixed an unarchived Remote Control session showing as working until a computer reconnected; it now shows as idle
- [Claude Tag] Improved Claude Tag's retry notice in Slack to name the model in use, or say rate limits were hit, instead of a generic API error
- [Claude Tag] Fixed a Claude Tag channel's on/off switch and agent settings falling back to workspace defaults when an older private Slack channel goes public and gets a new ID
- [Claude Tag] Fixed Claude in Slack not replying in channels whose environment has network access set to None
- [Claude Tag] Fixed Claude in Slack sometimes posting a file in the wrong thread when it was answering in another thread of the same channel
- [Code Review] Fixed Code Review reviewing an outdated commit, or none at all, when GitHub delivered a push event late; it now reviews the pull request's current commit