Withdrawn attachments now remove files and Read results, not just pictures#
When attachments are withdrawn or deleted in a Remote Control session, files, PDFs, @-mention references and Read results are now replaced too
You can now move a session on your computer into a new cloud session. Claude Code copies the newest turns after checking the move is safe. A new /project command names the claude.ai Project for usage reports, and --save keeps that choice. Admins can set disableReplyCheck in managed settings to stop Claude being re-prompted when a turn ends without a reply. Setting CLAUDE_CODE_ULTRAREVIEW_LAUNCH_RECORD to a file path makes each successful ultrareview launch write its session id there. This release has 425 entries, and 240 of them are usable today.
26 entries are in the build but not switched on yet. The biggest is an experimental REPL mode, where Claude writes JavaScript that calls its tools. It comes with an opt-in dialog and limits on resuming and moving sessions. More pieces of a code-running mode landed this time, including script tracking and a tool that waits while idle. A check that can skip compacting a long conversation is also here, but it stays off unless switched on remotely. Session-long "always allow" choices for MCP connector tools, which link Claude to outside services, are recorded only when a remote switch is on.
Some of this release's fixes make broken config files safer to deal with. If the config file is corrupt or empty, Claude Code looks for the best backup and tells you what it did. A global config file that cannot be read is now left alone instead of being overwritten. A failed message send in a remote session no longer leaves it stuck sending. Cloud sessions that fail during setup now wait for the refusal message, so you can see why the launch failed. Saving over a file mounted into a container now works when the file is busy.
Written by our agent from the shipped bundle, not by Anthropic.
A new path moves a local session to a cloud session by copying its recent turns, via /teleport and claude --cloud, with many safety checks
Sessions & agentsSelf-hosted runner reply-check behaviour can now be turned off with a managed disableReplyCheck setting or shaped by a CLAUDE_CODE_REPLY_GATE_POLICY variable
ElsewhereSetting CLAUDE_CODE_EXPERIMENTAL_CODE_MODE asks Claude Code to switch on an experimental Code Mode, which it can refuse for several reasons
A new /project command, gated by tengu_gentle_cupcake, sets attributionProject for usage reports; IDs may start with chan_ and --settings is a source
ExtensionsCLAUDE_CODE_MEMORY_PUSH_DELETE_MODE now accepts recorded, and Claude is told how to delete a shared-memory file with a plain rm command
Sessions & agentsWant the reasoning? Read walks the 46 entries that probably matter to you, each one opening to what changed and why.
Read this release → Every row →9 more of these are in What probably matters to you, on page 1.
When attachments are withdrawn or deleted in a Remote Control session, files, PDFs, @-mention references and Read results are now replaced too
When you branch a conversation with /branch, the new copy now keeps the original session's REPL mode instead of losing it
The /mcp list of cloud MCP servers shows a second count per server, and failed forked slash commands now return their result text
Unclear What the extra per-server number in the /mcp list counts is not stated.
Claude Code can take image size limits from the model's own limits, and an ID check now accepts a chan_ prefix as well as claude_proj_
In headless use, Claude Code can now send an empty success result with zero turns and the session's cost totals while no turn is in progress
Unclear It is not clear in which situations Claude Code sends this empty result.
In some cases a sandboxed command's request to reach a website is now checked automatically with a time limit, and denied if no answer comes
Unclear It is not clear which condition triggers the time-limited check or whether it applies to ordinary sessions.
In REPL mode, pressing stop while code is running now interrupts it and ends the turn after a short wait instead of straight away
Unclear It is not clear whether REPL mode is switched on by default or how a reader turns it on.
git commit -F -#Under a server switch, Claude's commit instructions use git commit -F - with the message fed in, instead of the -m form
When pulling shared team memory, Claude Code now skips writing held-back files and replays recorded removals before writing a conflict notice
The notice shown after a mod is reloaded can now say a mod's hooks modules did not load, and that /reload-plugins will not load them sooner
When moving a session to a cloud session, branch checks can ask GitHub, and the no-shared-history message now names the remote's default branch
Unclear Whether the new branch lookup path runs at all, since its condition is switched off in this build.
A scheduled task whose connector no longer matches now fails with connector_changed and a message naming the connector
When a prompt is submitted, plugins' checks now run a second validation step, which can also drop the prompt
Unclear What each of the two checks looks for is not clear.
Compaction retries now rebuild the summary request cleanly, and a reply with no summary now fails instead of passing
Claude Code now refuses to read a resource from an MCP server unless a loaded skill from that server lists its address
A hook capability description gains takesMcpToolHooks and organizationLists, and the init and maintenance matcher no longer names a trigger field
Unclear It is unclear whether either new field does anything yet for people writing hooks.
The AskUserQuestion dialog can now hide its free-text 'Other' option, and does so for certain engine-confirm prompts
When you resume a session with --print, Claude Code stores a record of where it came from and deletes that record if the resume fails
Unclear What, if anything, this changes that you can see when resuming with --print is not clear.
A login refresh can no longer push out refreshTokenExpiresAt, and the expiring-login warning now works from a validated date
Claude Code can read a session's transcript ahead of resuming it; set CLAUDE_CODE_DISABLE_TRANSCRIPT_READ_AHEAD to skip this
Unclear Another condition also decides whether the read-ahead runs, and what it checks is not stated.
The prompt offering usage beyond your limit no longer requires one particular mode and may show for more people
Unclear What the replacing condition checks is not stated, so who now sees the offer is unclear.
Where an attached file has since been deleted, Claude now sees a marker saying so and a notice not to try to recover it
The time limit on an MCP tool call now takes pauses into account and has a separate limit tied to questions, reported as question_bound_timeout
Unclear It is not clear how long the question time limit is or how pauses change when a call times out.
When a feature check passes, collapsed file reads and searches are gathered into one open group that counts them, instead of one line each
Unclear It is not clear what decides the feature check or whether it passes for anyone.
When safeguards stop an agent, Claude Code now explains it and, for cybersecurity cases, suggests a clearer prompt or the Cyber Verification Program
When fetching a full-size image, Claude Code can also use a smaller server-made copy and send that to the model if it fits the limits
Unclear It is not clear whether anything uses this yet.
Permission prompts now warn when a resource Claude wants to change can be seen outside your organization
When checking a task's status fails too many times with a certain error, Claude Code now asks the server to cancel it
When a cloud session is refused because the owner has no working GitHub connection, Claude Code says so and gives a link to connect GitHub
The resume hint now includes an environment variable a session needs, prefixed to the command outside Windows and named in text on Windows
Unclear It is not clear which environment variable is involved or which sessions show this hint.
Claude Code can now take your organization ID from CLAUDE_CODE_ORGANIZATION_UUID when signed in by token, and has new owner and organization markers for sessions
Unclear It is not clear whether Claude Code writes these session markers yet or what it does with them.
Before moving a session to the cloud, Claude Code now checks whether REPL mode would carry over and refuses the move if it would not
Unclear It is not clear which sessions fail this check or what message is shown.
A check that filters CLAUDE_CODE_DISABLE_MCP_TASKS now covers several names, and media that is not sent is replaced with a note
Unclear It is not clear which environment variables besides CLAUDE_CODE_DISABLE_MCP_TASKS are now covered, or what the off-by-default project document setting controls.
A deniedMcpServers URL entry now also blocks a server whose address carries that URL in its mcp_url part, and command allow rules are stricter
Every stream-json run now writes a startup-failure result for three org and config failures, without needing an opt-in variable
/clear now saves a record of the tools used and undoes it if the clear fails, and PostModelSwitch hooks can be held back
A step that used to switch the diff panel on now restarts Claude Code, using the same program file that is already running
Unclear It is not clear which action triggers this restart.
On macOS with /bin/bash, the Bash tool now checks a remote switch that defaults to on for a change involving heredocs on input
Unclear It is not clear what the Bash tool does differently when this check is true.
If Claude Code was paused or asleep, the Remote Control connection now reopens at once instead of waiting through the usual retry delay
~/.claude.json now applies to everyone#Claude Code now always guards your config file when it reads as missing, and CLAUDE_CODE_CONFIG_LOCK_WAIT_MS sets how long some saves wait for the lock
Config and credential file saves now flush to disk, retry once when needed, and refuse to treat a doubtful missing config as empty
Claude Code now keeps the readable certificates from a partly broken NODE_EXTRA_CA_CERTS file and explains certificate problems in far more detail
When Claude Code is shutting down and waiting on an OAuth token refresh, a repeated exit request now shortens that wait
The remote session stream adds a monotonic liveness clock, a sleep listener and a frame-wait timer, and clears them all when the connection closes
Unclear It is not settled whether time spent asleep is now actually excluded from the disconnect check.
Cloud sessions that are refused at start now show a start_refused warning and explain that messages already sent are saved on the session
The Claude in Chrome settings screen under /chrome can now show a warning line in some cases
Unclear What the warning says and when it appears is not known.
When a command exactly matches one of your allow rules, Claude Code now runs a further check before deciding instead of returning the earlier decision
Unclear It is not clear what the extra check tests or in which cases it changes the outcome for a matching allow rule.
If a connector changed under an unfinished MCP task, Claude is told retrying would reach the new connector and to ask you first
Claude Code has a new notice telling Claude to treat a saved copy as data, not instructions, since others may have written it
Unclear Where this notice is shown.
The reconnect action in the Claude in Chrome menu now stops with a warning in certain situations
Unclear It is not clear in which situations reconnecting is blocked.
Claude Code can now show "Agent's script not run" instead of a general label
When a held-back first message to a cloud session fails, you may now be warned that the cloud session may not have your conversation
Stopping a certain kind of task from the background tasks dialog now uses Claude Code's standard stop path, when an internal check passes
Unclear It is not clear which kind of task this applies to or what switches it on.
The git status Claude Code gives Claude at the start of a session can now end with an extra section after the recent commits
Unclear It is not clear what the extra section contains.
A command written out in a REPL script is auto-approved as read-only only if it runs in the foreground and avoids several shell features
Unclear Whether REPL mode is available to users in this release is not stated.
Instead of an empty reply, a command in the sandbox now says its feature stays off until you quit Claude Code
Unclear Which feature this message is about is not stated.
Prompt-type skills are now allowed without asking only when an extra condition also passes
Unclear What the extra check tests is not clear, so it is unknown which skills will now ask for permission.
When connecting to a URL-based MCP server fails, the failure can now include a message saying the address was not forwarded
Unclear It is not clear whether this message is shown to you or only recorded.
Permission and confirmation prompts gained an optional framed layout with a title, and the reason text can now wrap across lines
Unclear Which permission or confirmation prompts actually use the new framed layout is not known.
Claude Code has a new tip about security review and records when it is shown or fails to show
The notice that thinking is always on now adds "thinking always on for this model" and disappears after 3 seconds
When MCP tools run through the REPL, the message after adding a server says they are callable inside the REPL environment
Running a Claude-only skill command, or a command that fails, now returns its message as the result text, and failures are marked as failed
--permission-prompt-tool now explains when it cannot approve an MCP tool because another tool on the same server gets the same name
A new note tells Claude that heredocs inside $(...) are unreliable in macOS's bash 3.2 and to pass multi-line text on standard input instead
When Remote Control stops, Claude Code now tells you what to do next, such as running /login or /remote-control again
If a Remote Control session cannot start because its working folder is missing, the error now says "working folder not found"
Tool results sent to Remote Control apps are rebuilt as text, oversized ones are replaced with a message, and long tool inputs are shortened
Unclear It is not clear whether this applies to all tool calls or only to tools called from scripts.
The /remote-control dialog now shows when Remote Control isn't connected or needs a claude.ai sign-in, instead of assuming it is connected
When no diff can be shown, Claude Code now says why, such as no repository, a busy repository or a failed diff
Saving a file now retries once when an NFS network drive reports the file as busy, and no longer clobbers a file another program has replaced
When auto mode blocks an unapproved network host, Claude is told why, not to retry, and that you can allow it in sandbox network settings
A fresh, not-resumed session on a model that fails Claude Code's check shows a notice that it isn't tested and suggests /model
Unclear Which models fail the check that triggers this notice is not stated.
When /ide cannot find the JetBrains plugin, it now says to install it from the JetBrains Marketplace if needed
In claude -p, a Stop that names messages Claude Code has read but not yet queued no longer interrupts the current turn
tail now stops when disk space runs low#The file that keeps what was piped into tail now checks free disk space and gives up when space is low
Errors now cover output-token cutoffs, take the image pixel limit from the server, and drop the retry hint on one kind of server error
Claude Code now tracks a backup made when its config file cannot be read at startup, and whether it left an unreadable file alone
The signature check during updates now retries on rate limits, server errors and network errors, instead of trying only once
Claude Code now recognizes a plugin marketplace file in more cases, so fewer valid ones are wrongly reported as invalid plugins
When auto mode's safety check is down, any action that can show a dialog now falls back to asking you, not only Claude's own questions
Stopping a waiting tool call now adds 'The user stopped this call.' to the result and marks it as rejected by you
Unclear It is not clear which kinds of waiting tool calls this applies to, or whether it is switched on for all users.
Many hook events, including SessionStart, PreCompact, PostCompact and StopFailure, drop fieldToMatch from their matcher details and keep only values
Unclear It is not clear whether this only changes descriptions or also how hook matchers are applied.
The ctrl+x hint in the background-tasks panel no longer always says "delete"; the action word now depends on where the task runs
The note telling Claude that an MCP server's tools should now be available is now empty, so Claude no longer sees it
The task panel's confirmation hint now names what pressing ctrl+x again will do, instead of always saying delete
Claude Code now logs a separate API tool-call block cut off error when the model's request to use a tool arrives incomplete
The instructions for summarizing a long conversation no longer add a sentence about extra summarization instructions at that point
Unclear It is not clear whether the sentence was dropped from summaries or only moved elsewhere.
When a multi-key shortcut is left unfinished too long, its notice now includes a hint saying the key sequence timed out
Claude Code now also scans the raw text of shell commands for protected settings paths, so more commands may ask for approval
When Claude in Chrome refuses a file upload, the usage data now records a reason such as a read deny rule or a network path
The exit hint now says "Press Ctrl+C twice" under a second set of conditions too; otherwise it still tells you to run /exit
Gateway warnings now say to list a load balancer in listen.trusted_proxies only if it adds the client address to X-Forwarded-For itself
Where Claude Code shows a tool count, it can now show "a of N tools available" when only some tools are usable
The Runtime shown in the details of a background shell or monitor now leaves out time the task spent paused
A blocked keypress hint now reads "Your prompt box has text in it. Send or clear it, then try again." instead of blaming a dialog
Claude Code's ssh command checks now look at more options and test commands hidden in options like ProxyCommand against every host
When a usage report times out, the error now suggests narrowing it with actor_ids[] (up to 100 a call) instead of rbac_group_ids[]
Unclear It is not clear whether rbac_group_ids[] is still accepted as a filter.
The Notification hook's matcher details no longer say it matches on notification_type, though its list of values stays
Unclear It is not clear whether Notification matchers match any differently now.
Claude Code now spots zsh errors like command not found: =foo, which come from a word starting with =
Unclear It is not clear what Claude Code does once it recognises the error.
Published verbatim by Anthropic for v2.1.318. 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 84 bullets, 26 name something an entry on this page also names, 22 name something no entry here does, and 36 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.
assume_role on mantle upstreams of the Claude apps gateway, for a role in another AWS account and for per-developer AWS cost attribution
Probably bedrock-style-assume-rolebearer-token-check-extended-to-ma, mantlebedrock-gateway-attribution-warning-reworded-and-made effort option to a mod's $.model.fork, so a quick side job can run at low whatever effort the session uses; the result reports the effort sent
Probably hook-matchers-mcp-tool-name-matching-and-modelfork-effort claude auth status (loginExpiresAt) and to claude -p JSON results (credential_expires_at)
Probably stop-message-uuid-description-extended-to-claude-p, result-messages-gain-credential-expires-at claude -p text output, starting 10 days before a stored claude.ai sign-in ends
Probably stop-message-uuid-description-extended-to-claude-p --continue sometimes losing the earlier conversation after a malformed tool call's retries ran out (regression in 2.1.314)
No entry names this #96628[BUG] After a tool call fails to parse, the retry notice can point `parentUuid` at a row that is never written, so `--resume` loses everything before it Open
/logout, claude auth logout and claude mcp remove reporting 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
No entry names this Not logged in when another terminal or host signs in again to the same account and organization on the same home
Probably auth-status-output-gains-an-extra-line claude mcp add and remove writing the config without its lock: they now wait for it or exit 1, though another job's save can still replace a saved server
Probably claude-mcp-add-web-add-a-claudeai-connector-from-the-cli claude plugin commands exiting before a slow token refresh was saved, which could sign you out on the next run
No entry names this #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
claude plugin validate passing a custom-named marketplace file that claude plugin marketplace add rejects
No entry names this allowedProviders list that another login on the same machine had stored
No entry names this claude -p and SDK sessions
Probably stop-message-uuid-description-extended-to-claude-p claude -p and Agent SDK sessions reporting success when an API error cut off a reply while a mod hooked turn.step
Probably stop-message-uuid-description-extended-to-claude-p claude remote-control hosts, 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
No entry names this sudo claude) being treated as dead by version cleanup, which could delete its binary
No entry names this /remote-control showing a session as available after a failed connection
Probably remote-control-failure-messages-tell-the-user-how-to-recover, remote-control-callout-flow-refactored-remote-control-dial /design revoke reporting success when the request failed with a 404
No entry names this Setup hook writes to CLAUDE_ENV_FILE not reaching the Bash tool in some cloud sessions
No entry names this NODE_EXTRA_CA_CERTS file is empty, not PEM, or starts with a damaged certificate: readable certificates are now used, with a warning on stderr
Probably much-longer-node-extra-ca-certs-diagnostics-two-new-cases, node-extra-ca-certs-partial-load-of-unparseable-ca-files, ca-cert-drop-message-expanded /mcp in cloud sessions counting tools the model can't use; a server's row now shows how many of its tools are available
Probably mcp-listing-and-ultrareview-credits-refactor-forked-slash turn.step hook making a stopped reply finish as a success in headless runs
No entry names this claude -p with no ~/.claude.json backup: it now takes a fresh backup before deleting the last good one
Probably config-lock-only-saves-and-lock-wait-env-var, stop-message-uuid-description-extended-to-claude-p, config-file-backup-and-empty-file-recovery setup-token being refused at start on machines with forceLoginOrgUUID, when the token belongs to a permitted organization
Probably warning-when-the-oauth-sign-in-is-near-its-end, expired-login-messages-login-reached-its-time-limit #106324[BUG] forceLoginOrgUUID is incompatible with setup-token OAuth tokens Open
~/.claude.json that isn't valid JSON with defaults; the start now fails, says how to restore the file, and leaves it as is (anthropics/claude-code#87551)
Probably config-lock-only-saves-and-lock-wait-env-var, config-file-backup-and-empty-file-recovery ~/.claude.json with no backup being reported as corrupted; Claude Code now starts as it does when the file is missing
Probably config-lock-only-saves-and-lock-wait-env-var, config-file-backup-and-empty-file-recovery ~/.claude.json naming an empty or cut-off backup, or failing on a read-only file
Probably config-lock-only-saves-and-lock-wait-env-var, config-file-backup-and-empty-file-recovery claude -p names claude auth login and claude setup-token
Probably warning-when-the-oauth-sign-in-is-near-its-end, stop-message-uuid-description-extended-to-claude-p, expired-login-messages-login-reached-its-time-limit ~/.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
Probably config-lock-only-saves-and-lock-wait-env-var, config-file-backup-and-empty-file-recovery /bin/bash
Probably bash-heredoc-on-stdin-teaching-macos-binbash-only-flag-d claude -p, SDK apps) to stop rewriting ~/.claude.json on every run when nothing in it changed
Probably config-lock-only-saves-and-lock-wait-env-var, stop-message-uuid-description-extended-to-claude-p, config-file-backup-and-empty-file-recovery /ide from an outside terminal or your editor's extensions view
Probably awayidle-jetbrains-plugin-not-found-message-now-tells-user prompt.submit to stay in the user's turn rather than go out as a system message
No entry names this deniedMcpServers URL 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
Probably mcp-deniedmcpservers-matches-mcp-url-parameter-addresses /permissions rule 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
No entry names this /claude-api managed-agents-onboard to give a new agent's built-in tools, and a quickstart template's MCP tools, the auto permission policy ("Judge risky actions") by default, matching the Claude Console; say "run without asking" to opt out
No entry names this external_account) credentials file is about to expire
No entry names this listen.trusted_proxies: they now say to list only a proxy that adds the connecting address to X-Forwarded-For itself
Probably gateway-guidance-on-x-forwarded-for-and-trusted-proxies-rewo CLAUDE_RUNNER_SPAWN_REASON to the orchestrator's spawn-runner hook environment: why Anthropic sent the request (e.g. runner_lost, resumed); unset when none was sent
Probably cloud-sessions-and-spawn-reason-in-the-runner --release-idle-session-min is the last argument with no value (still ignored) or has a value of only spaces (still read as 0)
Probably self-hosted-runner-server-sent-idle-session-release, self-hosted-runner-idle-limit-from-anthropics-control-plan ok session=… now prints at every log level on stdout (was debug only, stderr) with reason=… after jti=…, and nack session=… ends its fields with reason=… after retryable=…; update scripts that match retryable=true: or retryable=false:
No entry names this gh run view --log and gh api log requests now get the log in most environments, not an unreachable redirect
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.317.
Claude Code, interactive mode
No prompt capture for v2.1.318, so this release's prompt surface is unknown.
482 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 62 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?