New controls for the reply check: disableReplyCheck and CLAUDE_CODE_REPLY_GATE_POLICY#
Self-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
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 →Anything you can use today, anything that visibly changes, and anything worth poking at. One line each, open for detail.
Self-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
A new /project command, gated by tengu_gentle_cupcake, sets attributionProject for usage reports; IDs may start with chan_ and --settings is a source
Unclear It is unclear whether the /project command is actually available to type in this release.
claude.ai connector configs gain an optional urlReportable field, passed through when the server reports url_reportable as true
A new self-hosted-runner work-look subcommand checks session checkouts for uncommitted, unpushed or stashed work before a session is released
Unclear What work-look does and whether it can be run directly is not stated.
Claude Code can now disable remote tools with the reason device_policy_not_enforced when a device has no enforced policy
Unclear What makes Claude Code decide a device has no enforced policy is not stated.
The remote session client can now tell whether a device-verification policy is being enforced, and has a hook for explaining why a call was not sent
Remote runners now publish a session_turn_state metric that shows each session as busy, waiting, rest or lost
Self-hosted runners now set CLAUDE_RUNNER_SPAWN_REASON, and the --cloud remote backend choice needs one more condition
What would fix it?
Smaller changes and internals, grouped as the pipeline found them. Nothing is dropped, it is only further down.
9 more of these are in What probably matters to you, above.
The self-hosted runner can release idle sessions on a limit Anthropic sends, using a server turn signal and keeping sessions with unsaved work
Configuration checks on assume_role now cover mantle as well as bedrock providers, and the session_name mismatch warning works in both directions
In acceptEdits mode, Claude Code can lift policy rules that would ask before using an MCP tool, unless CLAUDE_CODE_EVAL_CONFINED is set
Unclear It is not clear which MCP ask rules are lifted, or whether this is active yet.
The organization's HTTP hook rules gain flag and organization lists plus a fallback, so a machine with no sign-in no longer always errors
Claude Code now merges mcpServerPolicy entries into its always-allow rules and uses them for a set of ask rules
Unclear It is not stated which mcpServerPolicy entries become ask rules rather than allow rules.
When two tools from one MCP server get the same name in Claude Code, allow rules are refused for them with a warning, and connector servers are labelled
Remote session spawns now pass a spawn_reason, and the self-hosted runner's spawn-hook log lines include it
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.
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.
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
Claude Code now keeps the readable certificates from a partly broken NODE_EXTRA_CA_CERTS file and explains certificate problems in far more detail
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
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 dialog for asking your admin for usage credits now always shows the same text instead of text sent from the server
9 more of these are in What probably matters to you, above.
A remote switch that already skipped HIPAA organisations is now also skipped under one more condition
5 more of these are in What probably matters to you, above.
Claude Code now logs a one-time diagnostic warning when a session's writer information is missing, in certain set-ups
The self-hosted runner now starts a tool host for tool-server processes and passes per-session checkouts and a session folder to them
Unclear What this changes for someone running a self-hosted runner is not clear.
A feature switch can now report no device policy and stay off when the sending side doesn't enforce a device policy
Unclear It does not say which feature this switch controls.
Claude Code can now compare the saved identity behind managed policy with the current one and report whether it changed or couldn't be read
Claude Code can now report that a feature is unavailable because a device policy disabled it
Unclear It is not known which feature or features this reason can apply to.
Claude Code dropped the failure reason it gave when the hosted egress proxy could not be reached at startup
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?