Error results now include the reason startup failed#
When Claude Code returns an error result, the error now carries the last recorded reason startup failed
You can now set oidc.user_id_claim to choose which sign-in token field holds the user ID for the OIDC gateway. It defaults to sub. Among the other shipped changes, the prompt asking whether Claude may use a skill now shows the skill's description in a scrollable box. Usage messages now call your short-term limit the "5-hour limit". Programs that embed Claude Code can now mark a question as skipped, answered in chat or dismissed with the ask_user_question_unanswered_v1 capability. Remote control can now ask a session to start a shell command in the background, and the usual permission checks still apply.
Several features are in this build but are not switched on yet. Cloud sessions can enforce a policy on model and effort changes, but only when a worker policy is set to enforce. Auto mode gains a remote list that can turn off its extra safety checks. A tip about Claude Design shows only if a flag is switched on from Anthropic's servers. A note telling Claude that staged files are still being copied is also off by default.
Among the fixes, agent calls cut off by a container restart now resume, or Claude is told plainly why they cannot. Skills supplied by MCP servers can no longer be run through the Skill tool and now return an "Unknown skill" error. Plan mode is read-only again because its workshop and prototype offers are removed. Signed policy documents are no longer rejected for being older than one already accepted. Mantle is gone from the built-in list of model providers.
Written by our agent from the shipped bundle, not by Anthropic.
AskUserQuestion's instructions now say the user may see only the question dialog, and hosts can mark a question skipped, replied in chat or dismissed
ExtensionsWhen loading an MCP skill needs permission, Claude Code can now hold the request until a person answers it
ExtensionssubA new oidc.user_id_claim setting picks which sign-in token field holds the user ID, defaulting to sub
/effort now reads 'default' and 'auto' from what you typed, its auto keyword comes from a helper, and sessions record the effort sent each turn
ElsewhereA queued message can now show a send-now hint, and in the fullscreen display you can click it to send the message straight away
Sessions & agentsWant the reasoning? Read walks the 24 entries that probably matter to you, each one opening to what changed and why.
Read this release → Every row →5 more of these are in What probably matters to you, on page 1.
When Claude Code returns an error result, the error now carries the last recorded reason startup failed
A new refusal says a host is not in the sandbox's allowed domains and auto mode does not approve connections to other hosts
Unclear It is not clear when this message is shown, or whether it is in use at all.
When building an MCP tool result fails or is too big, Claude Code now tries smaller forms and fails only if none of them fit
The message after resetting effort now names the effort level in use rather than always saying "auto"
The usage warning can now read 'Over N% of your usage limit used' instead of only saying you are close to the limit
sources field, and Config tool wording changes#A schema that carries a shell value now also requires sources, and the Config tool says its live values reflect what the next message will use
toolWindowStartedAt; key handlers announce changes#The spinner now measures 'running tool for' time from a new toolWindowStartedAt start, and key handlers now report when they are added or removed
Feedback drafts Claude queues no longer include request ids from failed replies, and count replies without an id
A keyboard hint is no longer shown when you have set your own key for chat:sendNow
One display path now marks tool results as interrupted, and refusals caused by safety checks are now labelled as such
The messages shown when fast mode turns off for lack of usage credits now say you are out of credits or they are not available
On Windows, Claude Code now resolves alternate path spellings before writing to its protected folders, and may refuse a write it cannot trace
Unclear It is not clear which of the new checks depend on the server setting, or which run outside Windows.
When a publish is rejected because of a conflict, the closing advice now differs depending on whether a forced publish was refused
Unclear Which Claude Code feature this publish step belongs to is not known.
Claude Code reworked how it fixes up a tool's input before passing it to hooks, now keeping extra fields and checking more tools
Unclear It is not clear what a hook now receives that it did not before.
Claude Code now watches only the single main markdown file for a plan, not a list of files for that plan
Unclear It is not clear whether plans ever had more than one file in practice, so the effect for you is unknown.
On macOS, sandboxed commands can no longer bind to or accept connections on the proxy ports, but can still connect out to them
When moving a session to the cloud fails with a sign-in error, Claude Code can now retry even if the sign-in token did not change
The short notice shown when you switch to paying with credits now reads "Now using credits" instead of "Now using usage credits"
A token cancellation at logout is no longer counted as confirmed when the success reply lacks an Anthropic request id
A hook on another machine that changes a tool call now gets the same "rewrote the input, the call was refused" warning for every hook type
The git credential setting Claude Code writes for its local proxy now names 127.0.0.1 instead of localhost
The status marker beside a tool call can now show a neutral state: dim, uncolored, and not announced as an error
In the sandbox, Claude Code now points proxy variables at 127.0.0.1 instead of localhost when an authentication value is set
The message while moving a session now reads "Moving this session to the cloud…" and says it continues from your branch's last push
A JSON request Claude Code sends now fails if the server tries to redirect it, instead of following the redirect
The file watcher for synced cloud sessions now also watches the parent folder and handles setgid and symlinked folders
A remote chat that cannot show usage now says so and links to Settings → Usage on claude.ai
Unclear Which command or chat surface shows this message is not established.
When starting a remote control session is refused as unauthorised, Claude Code reuses the token it sent and records why
When a remote host's tools are withdrawn, tool calls to it return a host_offline error with the reason instead of a generic message
Claude Code's own requests to Anthropic now stop with an error if they are redirected to a different site
When a remote machine has signed off, the unreachable message for its tools now says what it left for, and remote request activity is tracked
The display of a refused tool call now knows whether it was interrupted or rejected
The warning shown when you switch models now ends at "means the full history gets re-read." without "on your next message"
When organization-managed settings fail to load, the error no longer always says "Retrying" and instead reflects what Claude Code will do
1 more of these is in What probably matters to you, on page 1.
If a container restarts mid-turn, Claude Code resumes interrupted agent calls or tells Claude plainly why it cannot
/clear keeps agents' settings and survives a deleted working folder#/clear now carries over each agent's settings file and falls back to a safe folder if the original one was deleted
Subagents started through a 'call' path are flagged reapsShellsUnlessMoved, so their shells are cleaned up even when they run in the background
Unclear Which subagents carry the setting to clean up their shells unless moved is not stated.
The logs, attach, respawn, rm and stop commands, and --bg, now wait for any sign-in refresh to finish before exiting
When Claude Code compacts a conversation, the messages it keeps now come from the same compaction result as the rest of the outcome
Unclear The two values may always have been the same, in which case nothing changes for users.
A rejected request whose credential was deliberately withheld no longer triggers a token refresh or the sign-in failure path
Accepting the opt-in in the data policy dialog now leaves an existing data-sharing preference unchanged
A path safety check now allows unusual Unicode spaces inside a path but still rejects them at the end of a path segment
If no WorktreeRemove hook runs because the folder is untrusted and the worktree still exists, removal now reports a failure
After a sign-in failure, Claude Code now applies the token from the SDK callback only if it differs from the one already in use
When a stored session starts again, Claude Code now passes along its saved autocompact state
Claude Code now tracks which turns were answered, so it does not re-send the effort level for turns that got no reply
The WebFetch note saying an answer covers only part of a page now builds its character range and page length from different values
When a remote session request sent without credentials is refused as unauthorised, Claude Code now asks for credentials again and resends it once
If a remote session's live connection is refused because it carried no sign-in token, Claude Code now waits for one and reconnects
When the Skill tool runs a skill passed along from an MCP server, it now carries that skill's name and description
Unclear Where these passed-along MCP skills come from, and whether this is switched on, is not established.
Pull request calls that fail with an authorization error now check the right response, and some requests echo ticket headers back
Claude Code now checks whether a subtitle fits on one row, and vim dot-repeat now keeps the column the cursor aims for
In vim mode, gj and gk, alone or after an operator, now check whether there are rows left to move to and place the cursor accordingly
4 more of these are in What probably matters to you, on page 1.
A new note tells the model that staged files are still being copied, behind a remote switch that is off by default
Claude Code now checks a new remotely controlled switch that stays off when the server sends nothing; what it controls is not yet visible
Unclear What feature or behaviour this switch controls is not known.
Claude Code now checks three new switches that Anthropic controls from its servers; what they do is not known
Unclear What the three switches control is not known.
A hidden feature check now depends on a different remote switch, and stays off unless that switch is turned on from the server
Unclear It is not known what behaviour this check controls.
6 more of these are in What probably matters to you, on page 1.
Plugin MCP server configs now record whether an official source vouched for them and whether their endpoint uses substituted variables
Unclear It is not clear whether anything acts on these new records yet.
The counter that limits chains of messages between agents can now be preset, list who was messaged, and report when it is reset
Claude Code now records how much CPU time Bash and Monitor shells used in each turn, read from a Linux cgroup, in optional internal fields
Claude Code now treats version strings containing "-aot." like dev and engine builds, and an internal list gains "content-link-long-sessions"
One model check now passes only for claude-opus-4-5, claude-opus-4-6 and claude-opus-4-7, with no fallback for other models
Unclear Which feature this model check controls is not stated.
Claude Code stops reading handed_listing from MCP server settings and --mcp-config entries; only the config, errors and as-written entries remain
Helpers serving tools to a cloud session now number their events and report a live count that ignores helpers being stopped
The /proc reader for shell command CPU time now runs only on Linux and WSL, takes a process limit, and stops on unexpected read errors
Opening a plugin's homepage or repository link now records which link was used; plugin source comparison is also memoized
One restricted permission check used with the sandbox no longer passes along your current permission mode
Unclear It is not stated how, or whether, permission decisions differ as a result.
Claude Code now finds a plan's link in more kinds of tool result, and some workshop snapshot tracking was removed
Unclear It is not clear what these changes mean for what you see when using plans.
Requests on a served channel now trigger optional start and end signals around each request
Web fetch reports now carry the tool call's id, a skill shows a menu line, and blank memory-limit values are trimmed
Claude Code now reports counts and sizes of hot, cold and unknown startup code when the runtime provides them
Claude Code no longer sends an early-access flag when a model restore is declined, and drops a consent field from an account check
The usage report sent when a resumed session restores its model no longer includes a field about early access
The usage data Claude Code sends when a tool call is allowed or rejected now includes a scrambled ID for that specific tool call
Claude Code now sends usage data when a redelivered message is closed and there is no earlier point to rewind to
Choosing a marketplace plugin is now tracked, resolved approval requests are recorded, and one more session field is kept
For MCP servers marked as withheld, usage reports now send a scrambled tool name instead of the real one
When the network refuses Claude Code's Datadog log uploads, Claude Code now also records that refusal as confirmed
When a shell command is stopped or times out, Claude Code's usage data now records who stopped it
The setting behind usage reports on permission decisions now falls back to off instead of on when the server sends nothing
When a remote session is launched without disk access, tool lookups can now fall back to a second set of handlers
Remote sessions can now end with the reason "released", and can carry details of a separate copy of the working folder
One part of the check that decides whether an interrupted turn can be resumed no longer consults a server-side switch
Unclear It is not clear which part of resuming an interrupted turn the removed switch controlled.
Claude Code now groups the steps that add or remove messages in the saved session record under the turn they belong to
Unclear It is not clear whether this changes anything you can see when resuming a session.
Remote sessions no longer hold uploads back behind start rows, leaving only the waits for settings answers and start-up
In remote sessions, API error messages in the uploaded transcript can now keep their request ID, which makes failures easier to trace
Unclear It is not clear what decides whether the request ID is kept, so it may not apply to every remote session.
When Claude Code removes a message from a session, it now records the removal as part of the turn and waits for it to be saved
The connection to a remote worker now switches off compression after failures that suggest compression is breaking it
The tips for /statusline, /permissions and plan mode are now built in a way that lets their wording vary, though the current text is unchanged
The tip suggesting git worktrees for running several Claude sessions at once is now built through an extra step
--agent can now vary its wording#The startup tip about --agent now gets its text from a step that can vary it, instead of using fixed text
The startup tip about pressing Esc twice to restore code is now built in a way that lets its wording differ between users
The "You can also drive this session from..." tip still depends on a server setting that is off unless switched on remotely
The focus view tip still shows by the same rules; this release only renamed internal parts of that code
/claude-api tip still appears only under narrow conditions#The tip suggesting /claude-api still needs no API key, over 10 startups and a remote switch that is off by default
The goal command nudge tip now gets its text through a shared helper; the text itself has not changed
When an attachment upload is resent, its size cap and deadline now come from remote settings instead of fixed values
Creating a cloud session can now pass a pool, a correlation ID and a no-monorepo option, plus a notice naming an agent that needs a repository
Unclear It is not clear which commands or options let you set these values, or whether they are in use yet.
Claude Code's worker connection can now offer compression when it connects, and a fault in how the connection was stored is fixed
Usage reports about the remote worker connection closing now note whether compression was offered and used, and sort closes differently
Published verbatim by Anthropic for v2.1.312. 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 39 bullets, 5 name something an entry on this page also names, 8 name something no entry here does, and 26 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.
oidc.user_id_claim to the Claude apps gateway, to identify people by an id_token claim other than sub, such as Microsoft Entra ID's oid
Probably oidc-proxy-gains-oidcuser-id-claim paths: skills not being found after a Bash cd deeper into a git repository
Nothing to match on #105250[BUG] Skill paths: globs match against the Bash tool's current directory, so a persisted cd hides path-scoped skills (rules unaffected) Open
claude -p with no output
No entry names this effort values and transcripts naming a newly picked effort level during a task before the model applied it; they now show the level in force
Nothing to match on /model and /effort cache warning saying the re-read waits for your next message; a change made while Claude is working can trigger it sooner
Probably effort-usage-text-uses-a-function-provided-label-instead-of, effort-reset-message-names-the-effective-default-instead-of, effort-auto-keyword-now-produced-by-a-helper, effort-command-accepts-more-default-values, agent-view-model-matching-fix-scroll-speed-ui-rework ! input
Nothing to match on d, c and y with a gj or gk count larger than the lines left deleting or copying text; like Vim, they now only move the cursor
Nothing to match on /verify showing a long description meant for Claude in /help and the / command menu instead of a short one
No entry names this CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0 to keep the full prompt
No entry names this CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK=1 to turn them off
No entry names this timeout under 1 second now counts as 1 second
Nothing to match on autoCompactWindow to lower the window set by CLAUDE_CODE_AUTO_COMPACT_WINDOW, where it had no effect before; it still never raises that window
Probably auto-compact-window-env-override-no-longer-bypasses-the-ceil mcp_server.name to report the real name of fixed-URL remote MCP servers declared by plugins from the official Anthropic marketplace, instead of custom
No entry names this claude_code.safety_event OpenTelemetry event
No entry names this A model matched these bullets to the GitHub issues they fix, so a link can be wrong.
1 of 30 tool descriptions changed.
Claude Code, interactive mode
One prompt change in this release could not be quoted from the build, so no entry on this page describes it.
473 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.
Every time above is when this site's poller recorded the change, which is up to half an hour after the edit on an ordinary read and up to a day after it on a full sweep. Upstream's own edit time is used instead wherever a capture carries one. None of these do.
The 25 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?