Session journal recovers from a half-written last line before adding more#
Before adding to its on-disk journal, Claude Code now closes off a broken last line so new entries are not merged into it
Sessions can now start in a sandbox VM by default when an option is set. The new --unsandboxed flag opts out of that and of cloud-by-default too. Setting CLAUDE_CODE_ATTACHMENTS_BY_PATH turns on the send-file tool and stops Claude Code uploading the files it sends you. On self-hosted runners, all session traffic can now go through a proxy you run. Admins get a beta selfHosted section in managed settings for self-hosted session hosts. A new codeAllowedRepositories setting lists the git repositories Claude Code may work in on those hosts.
Claude Code is now listed as a reader of organization-managed settings, but those settings are not served to it yet. Organization config also gains an Allow Quick Write setting that is not switched on. Claude Desktop accepts codeAllowedRepositories but does not apply it to on-device sessions yet. The memory dialog has a new cloud memory option that does nothing yet. A new check for one tool in a permission mode called arbiter stays off unless the server turns it on.
An MCP tool whose parameter description the API rejects no longer breaks the conversation. Claude Code now blanks that description, warns you and retries, so the tool stays callable. Starting with --worktree now loads plugin WorktreeCreate hooks first, so a plugin can handle worktree creation. Command hooks now stop when their configured timeout runs out. The CLAUDE_CODE_FORCE_SANDBOX environment variable is removed. Passing --sandbox or --no-sandbox to claude remote-control is now an error instead of being silently accepted.
Written by our agent from the shipped bundle, not by Anthropic.
Setting CLAUDE_CODE_ATTACHMENTS_BY_PATH enables the send-file tool without its usual checks, skips uploads and counts the session as remote
ElsewhereAdmin config gains a selfHosted block and a codeAllowedRepositories list for self-hosted sessions; the repo list isn't applied on-device yet
Settings & configSession start can now place a session in a sandbox VM by default, and a new --unsandboxed flag opts out of that and of cloud-by-default
Permissions & safetyThe prompt draft can now tag edits with their origin and report changes, and extensions reach it through composer.attribute and attributeDraft
ExtensionsNew ui.view plugin capability switches the main view to an agent's transcript, and plugin calls judged under an outdated policy are refused
ExtensionsCLAUDE_CODE_FORCE_SANDBOX no longer existsPermissions & safetyWant the reasoning? Read walks the 47 entries that probably matter to you, each one opening to what changed and why.
Read this release → Every row →Before adding to its on-disk journal, Claude Code now closes off a broken last line so new entries are not merged into it
When a response uses both prompt cache lengths, Claude Code now labels its cache time as 5 minutes instead of 1 hour
Launching a cloud agent no longer starts sign-in recovery for errors that already explain themselves, and remote launches return the right result
When compaction keeps some messages, Claude Code now removes any on that list that are no longer in the conversation
When writing session details again, Claude Code can now first close off a session log that ends mid-line
Claude Code now corrects the measured width of wrapped text that contains non-ASCII characters in one wrapping mode
Slash commands that run straight away are now saved to input history once, as /name plus arguments when what ran differs from what you typed
3 more of these are in What probably matters to you, on page 1.
Text telling Claude that Claude in Chrome needs no enabling has moved, and a new remote switch now sits where it was
Unclear It is not clear what the new switch controls.
9 more of these are in What probably matters to you, on page 1.
A new output_limit_note reminder tells selected models that thinking and reply share one token cap, so they should plan rather than draft twice
Unclear Which models, if any, receive this note is not stated.
Each model entry gains a supportsThinkingOff field telling programs whether that model allows thinking to be switched off
Claude Code now reads whether an incoming channel message was edited and what it replies to, alongside its text
Unclear It is not clear which feature uses these details or whether it is switched on.
Claude Code's startup state now passes along a reason for keeping a sandbox virtual machine running, with no visible effect yet
Unclear What sets this reason and what it changes for a session is not stated.
Hosted claude-code-server sessions now use a key store that never saves a device key to disk
Automatic replies to artifact comments now record a reason when the checker that decides on replies is unavailable and the reply is handed off
Unclear Whether this handoff changes anything you see in artifact comments is not clear.
Claude Code now records which environment values in settings a person wrote, and works out a launch credential from the environment it started in
Unclear What this changes for someone who sets environment values in their settings is not stated.
Remote-control and worker code drop the uploadPaths stream: flush no longer waits on it and the server's upload_stream offer is ignored
Unclear Which messages are left out of debug output is not stated.
When a PDF is too long to read whole, the read result now includes totalPages, and the count is kept when results are combined
Claude Code now counts how its checks on changed files end, and a settingsPrime disabled message has new wording
When purging history, Claude Code's log now says history.jsonl is rewritten directly if replacing its records fails
To decide if a process ID belongs to a Claude Code daemon, Claude Code now reads its command line, falling back to ps if that fails
The web-fetch helper now reports when a URL failure is permanent and resending it would fail again, and its fetch shortcut has an extra skip check
When Claude Code reads a credential or token, it now records which route it used, such as a file or a passed-in descriptor
When a paste over 10,000 characters is collapsed, the update to the input box is now handled through a different step
Unclear It is unclear whether this changes anything you would notice when pasting large text.
pr- number name after a parsing change#Claude Code now reads more from a pull request reference, but still names its worktree pr- followed by the PR number
Remote sessions now handle a claim_session control request, and two usage-data events about cloud sessions were added
Unclear What claiming a session does is not known.
The remote sessions connection can now be told not to load or renew the trusted-device token
Cloud session setup now looks up your sign-in token and organization through shared code, and the missing sign-in message may read differently
Unclear It is not clear whether ways of signing in other than claude.ai now work for cloud sessions.
When a session's events are uploaded, control replies marked live-only are treated as temporary and oversized ones are replaced by an error
Remote sessions now track some requests as live-only and record how MCP tasks are delivered or dropped on rewind
Unclear It is not clear what this changes for someone using a remote session.
Claude Code no longer looks a file up on disk for its timestamps when the file is not on this machine
When Claude Code fetches a cloud session's log to resume it, it can now skip reading the trusted-device token
The remote session client can now leave out the trusted-device token, and the parsed sign-in token now includes organization and account IDs
When staged files fail to land, the warning now counts how many failed for lack of space and how many because the name was too long
Before handing a session over to the cloud, Claude Code now waits for another pending task to finish instead of starting at once
Several cloud session checks now get your sign-in token a new way and share one error message when you are not signed in
Unclear The wording of the new shared message is not given, so it is unclear whether it still tells you to run claude auth login.
When you resume from a cloud session, Claude Code now includes your account profile when it fetches the session's history
Claude Code now uses an extra check to sort errors, so some now count as host problems instead of conversation problems
Unclear It is not clear which errors the new check catches.
When an internal queue-recording option is on, Claude Code no longer takes a queued prompt's raw text directly
Unclear What this changes for someone using Claude Code, and what turns the queue-recording option on, is not stated.
Claude Code running as a hosted worker now records a count of what fills its memory, at most three times, when memory use passes set limits
When Claude Code cannot replace its own process with another program, it now reports the error instead of starting the program separately
When Claude Code installs its IDE extension, the result now also says whether the extension was installed before
A new Linux-only entry for the spellcheck dictionary download is covered by the disableNonessentialServices setting
When the set of deferred tools changes, tools already loaded are no longer listed to the model again as newly added
The code that stops processes now reports permission problems early, can send a chosen signal, and double-checks a process has exited
The check that decides when a failed gateway request is retried on the default model now lives in a shared helper
Unclear Whether the new check retries on the same error statuses as before is not settled.
When Claude Code names a session automatically, it can now limit the messages it bases the title on instead of always using all of them
Two internal text caches now hold at most 8192 entries, and one also has a total size cap
Claude Code now uses a call's origin to tell whether a plugin's own tool call was rewritten by another hook
Unclear It is not clear what this changes in practice for someone using plugins with hooks.
When a hook runs its own agent, Claude Code now keeps the result of that agent's first reply as well as counting its turns
When a hook runs, a timeout given for that run now takes the place of the timeout written in the hook's definition
Unclear It is not clear where the replacement timeout comes from or which hooks it applies to.
When a plugin hook is skipped to avoid running inside itself, the skip can now be recorded as "rewritten" as well as "lent"
Hook checks can now look only at hooks that plugins hold back, and plugin hook matching now handles those held hooks explicitly
Unclear It is not clear what makes a plugin hook held, or whether held hooks now fire differently for users.
Claude Code now records more internal data, including time spent waiting for organization hooks and when background tasks are evicted
A hook sent to run on another machine can now include an optional time limit, and its error message no longer says plugin
Each hook's record can now include the settings source it was defined in
The summary Claude Code builds of your hooks now also stops at a limit on the total length of hook matchers
When prompt hooks give no decision, the run is cut short, or a slash command is handed on, the prompt is now marked as having no verdict
When a session starts, Claude Code now finishes a step tied to SessionStart hooks before it begins processing messages
Part of a bundled data-checking library is now locked against changes when Claude Code loads, with no visible effect
Claude Code's bundled data-checking library now recognises IBAN bank account numbers and has some internal rework
Claude Code's bundled data-checking library was updated, and some text-format checks no longer add pattern details to generated schemas
The bundled Zod library is updated, adding checks such as IBAN and changing how some object and union checks behave
The library Claude Code uses to check data now locks a shared list and builds error details only when needed
Claude Code's bundled copy of zod has a rewritten email check and locked format patterns
The schema-checking library bundled with Claude Code now has a properties schema type, with no visible effect described
Claude Code's bundled validation library has been updated, with little visible effect
A restricted context object now exposes tools, messages, the message queue, MCP clients and the permission phase, and drops file-read state
Unclear It is not shown whether hooks or anything else a user writes can read this object.
When Claude Code first starts, its plugin policy check now waits if an answer is still pending before it checks remote managed settings
A plugin that holds ownership of an item but has stood down is now left out when commands and hooks are loaded
Unclear What causes a plugin to stand down is not stated.
Plugin hooks now reload when admission text is present and a condition holds, not only when policy or user settings change
The check for mods that hook prompt submission now applies an extra test, so some mods that counted before no longer do
Unclear It does not say what the extra test checks, so it is unclear which mods are no longer counted.
When Claude Code looks up a loaded module by name, it now also checks the module is valid, so inactive ones are no longer returned
Unclear It is not clear what makes a module count as inactive, so which hooks this affects is unsettled.
When plugin auto-update holds back a refresh, its log now says if it is waiting for organization settings rather than blocked by them
Claude Code adds codes for MCP server entries with no transport or malformed OAuth scopes, and a new ccs_repo_rules entry
Unclear Whether these codes are shown to you when an MCP server entry is rejected is not clear.
A check that matched MCP servers against a remote list can now read a single on/off switch instead, depending on how it is called
Unclear What being on the list turns on for an MCP server is not stated.
Relayed MCP connections now wait a limited time for a server's offer and report more specific reasons when they cannot connect
Restoring saved MCP task data now gets the session ID and a snapshot of the conversation, and a matching save step runs from start-up
When signing back in to an MCP server fails, Claude Code now records whether it was refused again or had no refresh token
Each session now has a place to remember tool schemas that the API refused
When a session is launched by a host, Claude Code can fetch managed settings using a token or API key that host provides
Unclear It is not clear what switches a session into this host-launched mode.
The managed-settings gateway check now fails with a reason when no voucher comes back, and passes the voucher on when one does
The check on signed cached settings now returns whether they are trusted and a reason, such as an unknown organization pin
Unclear What this changes for someone whose settings are managed by an organization is not shown.
Claude Code's list of results for checking signatures on managed settings and policy limits has changed
Unclear Whether these signature checks run, and in which mode by default, is not stated.
The bootstrap settings schema now records what Claude Desktop does when a key's value is invalid, and lists only the programs that read the bootstrap
The organization policy that controls MCP servers is now marked for special handling when managed settings cannot be read
Unclear What Claude Code does with MCP servers when the managed settings cannot be read is not stated.
Claude Code now records when a command creates a GitHub repo, plus new events for prompt edits, remote control and idle compaction
Claude Code's usage data can now record the length of a prompt, and one event also carries a prompt-check setting when it is not off
Some analytics events now record how the credential was supplied, such as an environment variable, a file descriptor or none at all
Tracing data now marks a tool call that failed without being interrupted with error.type set to tool_error
Claude Code's usage reports can now include three new details about rewinding a conversation and signing in to cloud sessions from the console
Claude Code's startup timing report now includes one more measurement about resuming a session and waiting on hooks
In sessions that run without disk storage, Claude Code keeps pasted content in memory instead of writing it to a file
In hosted claude-code-server sessions, Claude Code now refuses to refresh OAuth login tokens and skips creating its memory folder
In sessions that don't write settings to disk, Claude Code saves settings through a separate store and refuses changes that would make them too large
Unclear Which sessions count as not writing settings to disk is not stated.
In sessions without disk storage, Claude Code now skips refreshing its sign-in token and never creates the lock file for it
Under one condition, several session storage helpers now skip saving to disk and report no storage location
Unclear What triggers this condition, and so when session data stops being saved, is not known.
A permission mode can now carry a marker saying it came from the creator's settings rather than being chosen at launch
A turn handed off after an unanswered permission request now records which turn and messages it came from
Unclear What this changes for someone using Claude Code is not stated.
Records of permission decisions can now say which setting and which decider produced the decision
The permission check for tool calls Claude Code serves to other programs is now wrapped in a tracing step, and one release step was removed
Unclear It is not clear whether removing the release step changes what happens when a served call has to ask for permission.
Published verbatim by Anthropic for v2.1.300. 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 88 bullets, 18 name something an entry on this page also names, 28 name something no entry here does, and 42 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.
virtualText to a mod's prompt decorations: text drawn in the prompt box that never enters the draft or the submitted prompt
No entry names this cache_creation_5m_tokens and cache_creation_1h_tokens to the OpenTelemetry api_request event, splitting cache writes by lifetime
Probably cache-creation-5m1h-token-split-in-api-telemetry $.ui.view({ agentId }) for mods: shows an agent's transcript in the main view when you ask, and $.ui.view({}) goes back
No entry names this dir prop on a mod's Text for right-to-left text: on Windows and in VS Code's terminal its rows read in that direction and sit flush right
No entry names this /advisor on Claude Platform on AWS; no advisor runs until you pick one with /advisor, advisorModel or --advisor, and CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1 turns it off
No entry names this gen_ai.provider.name, gen_ai.conversation.id, gen_ai.tool.name and error.type
Probably tool-error-span-attribute-for-failed-non-interrupted-tool-c, otel-spans-get-gen-ai-attributes-prompt-redaction-handle, tool-and-llm-telemetry-spans-gain-gen-ai-attributes prompt and model in the agent.spawn mod hook, which could only refuse workflow agents before
No entry names this prompt.change mod hook, raised when the prompt box's text changes without a typed edit: a recalled history entry, a clear, an undo, or a plugin's fill
Probably new-telemetry-and-event-names, mod-event-table-gains-promptchange-policy-decision-gets-se, prompt-change-hook-dispatcher-with-loop-stall-guard /autocompact warning about high token usage when you choose a smaller auto-compact window
Probably autocompact-telemetry-expanded-and-the-high-token-warning-m claude --help naming a removed tool in its description of --restricted
Probably restricted-help-text-no-longer-names-repl claude agents not refreshing any pull request's status when the data for one of them came back incomplete
No entry names this /tasks shortly after finishing, leaving no way back to the conversation
No entry names this ENABLE_TOOL_SEARCH=auto) turning off part-way through a conversation, for example while MCP servers reconnect after a resume
No entry names this forceLoginOrgUUID leaving the refused organization's token stored, or live after /login
Probably remote-control-credential-renewal-explains-sign-in-failures, cloud-agents-not-logged-in-error-can-carry-a-custom-message, oauth-login-paths-gain-an-org-pin-verification-step-before-c, forceloginorguuid-check-refactored-with-a-reusable-verifier, cloud-session-creation-has-a-separate-console-profile-path Artifact("(unprintable path)") while a call's input arrives; its row now shows "Waiting…" and "Running…" as Bash's does
No entry names this /branch dropping messages, and claude purge skipping subfolder projects, when they contain a Unicode line or paragraph separator (U+2028, U+2029)
No entry names this WorktreeCreate and WorktreeRemove hooks not running when Claude Code starts with --worktree (not yet with --tmux)
Probably worktree-pr-creation-supports-a-forge-and-uses-head-commit, worktree-creation-plugin-worktreecreate-hooks-registered-fi, pr-worktree-fetch-verifies-the-fetched-ref-tengu-melodic-oc, plugin-worktreecreate-hooks-are-now-registered-before-work #100905[BUG] Plugin `WorktreeCreate` hook still ignored for `claude --worktree` on 2.1.296 (#46664 closed as stale, never fixed) Open
tool_result events missing git_commit_id after git commit -q in repositories using reftable ref storage
No entry names this prompt.submit hook rewrote or dropped still being recorded as typed in the OpenTelemetry user_prompt event and interaction span, and in session title requests
Probably user-prompt-telemetry-helper-and-orphan-answer-skip-flag-att, userpromptsubmit-hook-detection-restricted-by-a-new-module-c, mod-event-table-gains-promptchange-policy-decision-gets-se model: aliases like haiku now resolve, a subagent's model no longer overrides it, and an unavailable model falls back to the caller's instead of allowing the action
Nothing to match on --worktree sessions sometimes starting from the wrong commit when a tag or branch was named like a commit ID, and their starting git status naming a branch other than the new worktree's
Probably worktree-pr-creation-supports-a-forge-and-uses-head-commit, worktree-creation-plugin-worktreecreate-hooks-registered-fi, pr-worktree-fetch-verifies-the-fetched-ref-tengu-melodic-oc, plugin-worktreecreate-hooks-are-now-registered-before-work --worktree failing to reopen a worktree in repositories using git's reftable ref storage
Probably worktree-pr-creation-supports-a-forge-and-uses-head-commit, worktree-creation-plugin-worktreecreate-hooks-registered-fi, pr-worktree-fetch-verifies-the-fetched-ref-tengu-melodic-oc, plugin-worktreecreate-hooks-are-now-registered-before-work #96060[BUG] Reftable repos: CLI reads .git/HEAD directly, branch resolves to ".invalid" and PR status is dropped from the statusLine payload Open
claude remote-control servers giving up on renewing their connection after a brief sign-in error, such as a locked keychain; they now retry, and warn when you need to run claude /login
Probably remote-control-credential-renewal-explains-sign-in-failures, cloud-agents-not-logged-in-error-can-carry-a-custom-message, remote-control-asks-about-unattended-tool-calls-up-front-in, remote-control-rejects-sandbox-no-sandbox-instead-of-acc, cloud-session-creation-has-a-separate-console-profile-path #95262remote-control session permanently 401s after token refresh fails; /login cannot reach the process Open
--worktree failing in a worktree of a bare repository when origin's default branch can't be fetched; the fallback base is now the current checkout's HEAD, not the main repository's
Probably worktree-pr-creation-supports-a-forge-and-uses-head-commit, worktree-creation-plugin-worktreecreate-hooks-registered-fi, pr-worktree-fetch-verifies-the-fetched-ref-tengu-melodic-oc, plugin-worktreecreate-hooks-are-now-registered-before-work prompt.edit hook not being raised for a newline entered with the chat:newline keybinding (Ctrl+J, or a rebound Enter)
No entry names this claude daemon stop --any printing "stopped" while a stuck background service kept running: it now waits, force-kills the service, and says so with exit 1 if it is still there
No entry names this claude daemon stop exiting with no output, and leaving sessions listed as running, when telemetry is turned off
Probably daemon-stop-now-escalates-sigterm-to-sigkill-and-explains-st /healthz or SIGTERM shutdown) while nobody reads their output; logs keep the latest 256 KiB and count drops (not on Windows)
No entry names this plugin-authoring skill: Claude scans a mod's files for keys before opening them, and asks before scanning a folder outside the project
Probably secret-scan-tool-for-the-plugin-authoring-mods-built-in-pl CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST sessions to ignore CA-bundle, tool-proxy, git TLS and git config variables like SSL_CERT_FILE in settings; under Claude Desktop, only in project settings
No entry names this forceLoginGatewayUrl names an Anthropic-operated gateway that serves the session's hostname; that gateway must be reachable at start
No entry names this claude gateway to stop at start, naming the key, on a desktop: policy key that Claude Desktop cannot use from a gateway, where it earlier started with a warning
No entry names this CLAUDE_CODE_GZIP_REQUEST_BODIES=0 to turn it off
No entry names this claude-api skill to leave Managed Agents sessions in place unless you ask to archive or delete them
No entry names this /sandbox mode options to read "Sandbox commands" instead of "Sandbox BashTool"
Probably sandbox-option-label-renamed, sandbox-menu-labels-renamed PermissionRequest hooks in Cowork cloud sessions: a setMode update in a hook's allow is now ignored; the rest of the approval still applies
Probably hook-updatedinput-rewrites-are-now-validated-against-the-too, managed-settings-startup-message-distinguishes-unloaded-hook, permissionrequest-hook-setmode-dropped-in-cowork-cloud-cod, hook-load-failures-a-managed-settings-hook-that-cant-be-lo updatedInput from PreToolUse and PermissionRequest hooks is now validated like Claude's own input: unknown keys are dropped, and input the tool rejects denies the call
Probably hook-updatedinput-rewrites-are-now-validated-against-the-too, updatedinput-refusal-message-varies-by-settings-source --sandbox and --no-sandbox flags from claude remote-control, which had no effect; passing either now exits with an error. Set sandbox.enabled in settings to sandbox sessions
Probably remote-control-asks-about-unattended-tool-calls-up-front-in, remote-control-rejects-sandbox-no-sandbox-instead-of-acc, gateway-inference-settings-are-now-read-by-claude-code-cod claudeCode.attachSelection setting to stop text selected in the editor from being added to your messages
No entry names this /c:/… path instead of a mention relative to the working directory
No entry names this /bin/ps directly instead of searching PATH for ps on every check
No entry names this @claude review comments from people with write access whose GitHub organization membership is private; their comments now start a review
No entry names this A model matched these bullets to the GitHub issues they fix, so a link can be wrong.
1 of 27 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.
647 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 57 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?