Background shells running elsewhere no longer count as an agent's live work#
A background shell marked as running elsewhere no longer counts when Claude Code checks whether an agent still has background work running
You can now set CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS to make a request fail instead of waiting past that time after hitting a usage limit. This release has 272 entries, and 150 of them are usable today. On 1M-context models, a new dialog can offer to auto-compact long conversations sooner. If you accept, the lower size is saved to your user settings. The setting for showing artifacts beside tool results is now CLAUDE_CODE_DAPPER_CUPCAKE, and the old CLAUDE_CODE_SQUISHY_NEWT is ignored. Programs built on the SDK can now block up to 64 MCP tools for a single turn, and they can load more plugins into a running session without a restart.
There are 12 entries in the build that are not switched on yet. Claude Code can build shorter instructions for the Read, Grep and Agent tools, but none are in use. Rewritten instructions for AskUserQuestion, the tool Claude uses to ask you questions, are prepared but not used. A slimmed-down prompt variant sits behind a remote switch that is off by default. Groundwork for routing notifications and for spotting interface freezes is present but changes nothing yet. The browser setup prompt in the desktop app and on claude.ai now uses a newly named switch, so any earlier rollout starts over.
Long-running MCP tasks now wait and retry when the server rejects their ID with error -32602. Before this fix they failed at once. Stopping a background command whose output is saved elsewhere now points the notice to that file. Sending a session to the background mid-turn now keeps pending task notices and a scheduled-job note. Checkpoint commits now skip with a git_error reason when Claude Code cannot tell whether a git operation is in progress. Archiving remote sessions from the session list is removed, and the remove option that replaces it is not switched on in this build.
Written by our agent from the shipped bundle, not by Anthropic.
New CLAUDE_CODE_ATTACHMENTS_IN_USER_DATA variable lets remote sessions keep attachments in a user-data folder, with retention checks and hardened writes
The 'beside tool results' behaviour now reads CLAUDE_CODE_DAPPER_CUPCAKE; the old CLAUDE_CODE_SQUISHY_NEWT variable no longer does anything
The SDK reload_plugins request takes add_plugins to load extra plugin folders without restarting, refused in cloud sessions and under disableSideloadFlags
ExtensionsPrograms hosting Claude Code can set ask or deny rules for individual tools on their in-process MCP servers, at initialize or via mcp_set_servers
ExtensionsA per-turn disallowedTools list now blocks named MCP tools for one turn, feeds deny rules, and suppresses misleading tool-revoked notices
ExtensionsWant the reasoning? Read walks the 38 entries that probably matter to you, each one opening to what changed and why.
Read this release → Every row →8 more of these are in What probably matters to you, on page 1.
A background shell marked as running elsewhere no longer counts when Claude Code checks whether an agent still has background work running
Claude Code now labels each shell command as running in the foreground, kept in the background, or under a permission rule
Unclear What Claude Code does with these labels, and whether it is switched on, is not clear.
Claude Code can now note when a background command's output file is on a different machine from the one it runs on
Claude Code now checks the task ID, output file path and folder note on a background shell command's result, and drops or rewrites any that look wrong
When a certain condition holds, Claude Code now saves a session's alias through a different route instead of the local alias file
Unclear It is not clear what condition makes Claude Code store the alias elsewhere, or where it goes.
The instructions Claude Code gives a background session can now be built a second way, while the default text stays the same
Unclear Nothing was seen choosing the second version, so whether any background session uses it yet is not known.
On exit, Claude Code now shuts down session syncing differently depending on whether the session's resume command was displayed
When a message being saved is not the newest one, Claude Code now waits briefly for other saves to finish and checks again
Claude Code's display of text messages can now mark a message as a notice that the session failed
Claude Code now logs a session store config parse error once in total instead of once for each file path
A check that read CLAUDE_CODE_DISABLE_BACKGROUND_TASKS now reads CLAUDE_CODE_EXIT_AFTER_FIRST_RENDER and a different condition instead
Unclear It is not clear whether CLAUDE_CODE_DISABLE_BACKGROUND_TASKS still turns background tasks off or whether its check only moved elsewhere.
A background task that wakes Claude now passes along where its prompt came from and details about its notices
Unclear It is not clear what the added notice details or the extra MCP information change for users.
Messages that tell Claude a background task has finished no longer include a note naming what produced them
Claude Code now reads a task's type and status from its notifications, not only the summary of a completed task
After Claude Code picks which hooks apply, it now runs one more check that is told whether managedHooksOnly is set
Unclear What the new check does with the matched hooks, and whether it can change which hooks run, is not shown.
Results from PreToolUse hooks now carry the ID of the plugin that supplied the hook as a separate value
When a hook allows or blocks a tool, Claude Code now records the hook's event, where the hook came from and, for plugins, the plugin's ID
Unclear Whether Claude Code sends these details by default is not clear.
Whether a hook counts as your organization's, and so gets CLAUDE_CODE_SHELL_PREFIX, no longer depends on the hook's type or its plugin
Unclear It is not clear what the new check tests, so it is not known which hooks now count as the organization's.
The environment details Claude Code builds can now carry an agentProxy value and take the working folder from a shell-reported value
A tool that reports the working directory now also returns the shell's current folder and whether an agent proxy is in use
Unclear Which tool returns this, and whether it reaches anyone outside remote sessions, is not clear.
The note telling Claude about the agent proxy in cloud sessions is now built from set fields and can say the proxy is no longer active
Claude Code now uses one queue to save its ~/.claude.json settings file, and backs up a corrupted copy before it saves
The helpers that lock and save Claude Code's global settings now always use one settings file location instead of being given one
Claude Code now records a single settings parse error in total, rather than one for each broken settings file
Unclear Whether a second broken settings file still gets its own error message is not stated.
Claude Code now records the older environment-variable settings as they were at start-up, and can show a one-line error or hint in the jobs prompt
Environment variables from Claude Code's global configuration are now applied through a different step than before
Unclear It is not clear whether this changes which environment variables from global configuration are applied or how.
Claude Code now makes a note each time it looks up its temporary folder; which folder it uses is unchanged
When building a working copy from a partial git clone, Claude Code can now contact a named remote after checking its name and command
Claude Code's safety check on git configuration before on-demand fetches can now check a specific named remote
Claude Code's check of a remote git repository can now run in a temporary folder without being attached to your terminal
The check that stops Claude reading files covered by a deny rule now passes straight through when a certain condition holds
Unclear What condition makes the read-deny check end early is not known.
When a safety check refuses a tool, Claude Code can now record the reason as a missing configuration home
When Claude Code automatically turns down a risky action, the record of that decision now includes the reason for the denial
At the start of each turn, Claude Code can now skip waiting for plugin sync if a remotely controlled switch says so
Unclear Which switch allows skipping the wait, and whether it is on by default, is not known.
The maximum number of rows around a plugin dialog now depends on the surface showing it, and some surfaces allow markdown there
Unclear It is not clear which surfaces use which row limits.
In non-interactive runs, the step that brings in your account's plugins now gets the first command and the current command list
Unclear It is not clear what passing the command changes in practice.
When a turn was interrupted, Claude Code now records how many minutes ago it happened and whether a shutdown caused it
When you resume a session, Claude Code now recognizes one more kind of interrupted turn
When a session resumes, Claude Code now reattaches its local agents through a shared step instead of its own separate loop
Unclear It is not clear whether the shared step still skips agents whose owner was not resumed.
The message an SDK session sends at start-up can now include the folder permission checks start from and any added working folders
In the SDK, the message reporting a refusal can now include the API id of the response that was refused
When Claude Code applies permission rules to MCP servers added while it runs, it now skips servers supplied through the Agent SDK
Unclear What skipping SDK-supplied servers here changes for a person using them is not clear.
Claude Code's usage data now records the auto-mode safety check's decision, allow or block, and sometimes a category
Usage data sent when a conversation is compacted now counts the display-only messages that were left out of the precompute step
Claude Code's internal tracking of message delivery now records whether the message came from a subagent
In vim editing mode, the input box now reports when Esc is needed by vim, such as outside normal mode or mid-command
Claude Code's red error lines can now be shown whole, without being cut short
The check on whether a plugin dialog is too tall now matches dialogs by both request and drawing surface, using a measured height limit
Unclear It is not clear what, if anything, changes on screen as a result.
The token-refresh check now reads CLAUDE_CODE_OAUTH_TOKEN through a helper instead of directly from the environment
Unclear It is not known whether the helper changes the value Claude Code ends up using.
The lock Claude Code uses while renewing your sign-in now adds extra settings based on where its lock file lives
Unclear What the extra lock settings change is not shown.
Creating a cloud session now notes the ref you named and whether it came from --on-branch or --ref, plus a new file sync state
Unclear Nothing shows how cloudSessionsByDefault is set or what it changes.
--project refusal message no longer varies#Moving a session to the cloud now reports more about branch handling, and the --project error is always the same message
A switched-off change lets Claude Code recover kept messages from an earlier compaction marker when the usual one is missing
The "Error during compaction:" message is now assembled from a fixed prefix plus the error detail, which can make these errors easier to spot
A session kept alive while waiting on background work now writes a debug log entry with the reasons it is waiting
The keepalive heartbeat debug entry now records the main-loop count and the active reasons, not only the overall count
The checks that detect WSL, a hypervisor or Docker can now return early without probing when a certain condition holds
Unclear It is not clear what condition causes these environment checks to be skipped.
Claude Code's check for Windows Subsystem for Linux now runs an earlier environment check that can rule WSL out first
Unclear It is not clear which environments the new earlier check rules out, so it is unclear who is affected.
A check that scans messages now counts the model's reasoning blocks and no longer reads a stale value for tool calls; subagent side files go under a folder
Unclear It is not stated what the message check decides, so the visible effect of counting reasoning blocks is unclear.
Claude Code's check for messages that carry a tool error now runs through a shared routine, which may be a tidy-up with no visible effect
Unclear Whether this changes behaviour or is only a reorganisation is not shown.
Claude Code now works out the earlier Sonnet, Opus or Haiku versions of the same family as a given model
Claude Code changed the checks that decide when it reads or uses its saved record of what each model can do
Unclear It is not clear under which conditions the lookups now stop early, so the effect on any given setup is unknown.
Forked skills now work out where their side files are stored, and treat storage as diskless when either location can't be found
Claude Code now skips your personal skills folder when none can be found, and diskless mode no longer exempts organization skills
Claude Code now has a second, leaner version of the instructions it gives subagents, used only when a certain condition holds
Unclear It is not clear what decides which version of the instructions a subagent receives.
Resuming a stopped, killed, completed or failed background agent now records that it was revived, so its finished state does not go stale
The Agent tool's instructions can now be built in a second, shorter layout, while the captured default text is unchanged
Unclear It is not clear what switches the shorter layout on.
Text describing the idle-wait tool now says scheduled prompts and held messages arrive only after the turn ends, even if no event was delivered
Unclear It is not clear whether this tool and its new text are in use in any live prompt.
Claude Code now keeps its own running total of input, output and cache tokens spent in a session, separate from model usage
Claude Code now counts time spent waiting because of a usage limit apart from other waiting, and one check now skips API error messages
1 more of these is in What probably matters to you, on page 1.
One part of Claude Code's settings definition no longer lists the deprecated includeCoAuthoredBy setting
Unclear Whether includeCoAuthoredBy is still accepted elsewhere in the settings is unclear.
Stream flushing on the first response piece is now always off, and replay acknowledgements at request time are now always on, for one remote connection type
Published verbatim by Anthropic for v2.1.301. Text is unmodified from the upstream changelog. Everything else on this page came out of the bundle instead, which is why the two lists don't match.
Of these 51 bullets, 8 name something an entry on this page also names, 15 name something no entry here does, and 28 name nothing specific enough to line up either way. The pairings are made on names both sides wrote down, a flag or a setting or a slash command, so read one as probably the same thing rather than as a fact, and read the middle number as candidates rather than as a miss count.
CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS so unattended retry mode (CLAUDE_CODE_RETRY_WATCHDOG) ends a request at a usage limit that resets too far away instead of waiting
Probably new-env-var-caps-how-long-the-retry-watchdog-waits-on-a-usag claude-api skill, including setting up trace destinations with the ant CLI
Probably tip-for-multiple-sessions-is-hidden-in-some-cases-the-claud % motion to vim mode: jump to the matching bracket, alone or with d/c/y
Nothing to match on rows to a mod's Input: a text field of several lines in the terminal, where Enter submits and Shift+Enter or a backslash before Enter starts a new line
No entry names this classifier_verdict and permission_mode to OpenTelemetry tool_decision events, so auto mode classifier decisions can be told apart from permission rules
Probably auto-mode-classifier-verdict-added-to-analytics, tool-decision-telemetry-gains-permission-mode-and-config-dec classifier_category to OpenTelemetry tool_decision events, naming the built-in rule a classifier block matched, when OTEL_LOG_TOOL_DETAILS=1
Probably auto-mode-classifier-verdict-added-to-analytics, tool-decision-telemetry-gains-permission-mode-and-config-dec WorktreeCreate hook without asking when it may hold unpushed commits
No entry names this fable (and best) model alias erroring on the Anthropic API when the newest Fable model is not available to your organization: Claude Code now retries once on the previous Fable model
Nothing to match on >0q covering the folder trust prompt, and >4m before the shell prompt at exit, in terminals built on VTE older than 0.53 such as MATE Terminal on RHEL 8
No entry names this GOK text appearing in the prompt at startup in some versions of iTerm2
No entry names this #100691[Bug] Stray "GOK" appears in prompt at startup in iTerm2 only Open
#99985Text "GOK" appears in the prompt at startup in iTerm2 (kitty graphics query reply not consumed) Open
#98973Startup input box pre-populated with stray text ("GOK") when project CLAUDE.md/AutoMem files are loaded Open
#95448Kitty graphics probe: iTerm2's i=less OK reply fails the response regex and is typed into the prompt as GOK Open
application-inference-profile running your awsAuthRefresh command and delaying model-switch hooks when the provider is not Bedrock
No entry names this claude auth status or claude plugin list exited in the middle of a token refresh
No entry names this #95822Short-lived commands (`claude auth status`, `claude --bg …`) start an OAuth refresh at init and exit without saving it, leaving the profile with a spent refresh token Open
#102265[BUG] Short-lived subcommand (claude plugin validate) exits mid OAuth refresh: the rotated refresh token is never saved, the next process gets invalid_grant and blanks the login Open
/rewind
No entry names this ask decision not showing which plugin or skill the hook comes from
Nothing to match on /diff not noticing a conflicted cherry-pick or revert in reftable repositories when one of its git checks timed out or failed
No entry names this cd in the same session
Nothing to match on $.model.fork returning nothing-to-fork when called before the first response of a new Claude Code process had finished, as in claude -p runs and cloud sessions
No entry names this /compact and auto-compact briefly freezing the UI while the visible transcript is rebuilt
No entry names this deniedMcpServers to keep those tools off
Probably mcp-server-filtering-now-explains-servers-kept-despite-allow [killed] line in their output file
Probably background-shell-exit-marker-replaced-by-a-structured-call, background-shell-kill-output-file-handling-changes-new-aut .catch handler to run only when the hook throws or times out; events raised beneath the hook's own calls now skip that hook without asking its .catch
Nothing to match on $.env.set to resolve with {} once the variable is set or unset, or with { deny } saying why when the write is not made
Probably hook-env-set-denials-now-return-a-deny-result $$ and multi-line \[ … \] blocks and inline $…$ and \(…\) math
No entry names this A model matched these bullets to the GitHub issues they fix, so a link can be wrong.
No change to the system prompt since v2.1.300.
Claude Code, interactive mode
860 documentation changes were recorded within 24 hours either side of this release, nearest first. The closest 12 are below. They're here because they happened near this release in time. That's not a claim that this release caused the edit, or that the page documents anything in it.
The 36 literal strings found in the bundle, with the number of entries that name each one. Picking one searches for it. A name is here because this build's code mentions it, which is not the same as it working or being finished.
What's wrong with this entry?