Claude Code v2.1.268

422 entries read v2.1.267 → v2.1.268 Markdown Unofficial

This build carries 26 dormant additions, most left unswitched. A new allowed_domains parameter lets the model tell a sandboxed Bash, PowerShell, or Monitor command which network hosts it needs, gated behind a flag that isn't confirmed live yet. The sandbox config also gains schemas for routing traffic through a MITM proxy and masking credentials in environment variables, including JWT decoding, alongside experimental in-process TLS termination and upstream parent-proxy support. Other pieces sitting dark include a 'governed git' push-URL relay for self-hosted and cloud sessions, a bounded self-expiring watch mode for the Monitor tool, a disk-space watchdog off by default, and a new bridge dialog that would warn when a tool tries to read outside its allow-list.

Of the 157 shipped entries, Remote Control can now fork a running conversation into a brand-new session, and plugins gain two actions, prompt.fill and prompt.suggest, to fill in or suggest text in the prompt box directly. A new 'Prompt suggestions' setting predicts and pre-fills your likely next prompt after a turn. Org admins get a gatewayInternalNetworks managed setting restricting /login to gateway hosts inside declared private network ranges, and managed plugins can now pin specific plugins to run first or last among hooks via prependPlugins/appendPlugins. The workflow-keyword trigger setting also reveals its internal codename, now labeled 'Ultracode keyword trigger' in settings.

Among 60 fixes, settings.json now validates environment variables, dropping invalid names, values, or NUL bytes with a warning instead of silently using them. Resuming a background teammate now requires folder trust before restoring its custom agent definition, and per-command network allowlists are now enforced against actual sandbox confinement, refusing commands that would otherwise run unconfined. Stale model-access denials are no longer cached forever, with the server re-probed so they can self-heal, and Bash permission checks gain a fallback path-based deny check for when full command parsing fails.

Reading as
Show only
Tier
Flag state
Names
Pick an entry · j / k steps through · rest on a row to peek
44 entries

What probably matters to you

Anything you can use today, anything that visibly changes, and anything worth poking at. One line each, open for detail.

+New
Use it now
Useful5 Signal4
Group of 2 Sessions Notable no docs found unclear

New fork_conversation capability splits a session's history into a new session#

Claude Code and Remote Control can now fork a conversation's history, optionally from a specific point, into a brand-new session.

Unclear Whether this feature is active for a given user is unread, since the gate tengu_cozy_pixel has no recorded reading.

Feature flag
tengu_cozy_pixel Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.268: off

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
fork_conversation

What

  • A new control-request subtype, fork_conversation, lets a host or SDK client fork the current session's conversation — optionally truncated to a specific target message — into a brand-new session created via the SDK backend, seeded with the prior message history and tagged for provenance verification.
  • Remote Control gains a fork_conversation tool implementing this: it can fork from a specific message (target_message_uuid) or the whole transcript, writes a size-capped JSON "seed" file to disk, and uploads/attaches it to the newly created session, which can adopt, discard, or re-verify that seed on session start.
  • Failure cases are surfaced with specific reasons: "turn running", "commands queued", "prompt pending", "target not found", "history suppressed".

Why This lets you branch a conversation into a separate session (for example, to explore an alternative direction without losing the original), whether you're driving Claude Code through the SDK or through Remote Control.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

In dev
Nothing to try yet
Useful5 Signal4
Group of 6 Sandbox Network Notable unclear

Sandboxed Bash/PowerShell commands can declare a per-command network allowlist#

A new allowed_domains option lets sandboxed Bash/PowerShell commands reach specific extra hosts, enforced against the actual sandbox

Unclear Whether this field is active for a given user depends on an unread setting (tengu_flickering_rain), so it's unclear if it's currently enabled anywhere.

Details 0 0 Feedback
allowed_domains

What

  • Bash, PowerShell, and Monitor tool calls can now include an allowed_domains field listing hosts (plain domain, wildcard, or IP, each with an optional port) that a sandboxed command is allowed to reach. In auto mode this list is reviewed together with the command by the auto-mode classifier and applied for that one command; in any other mode it's ignored.
  • The list is checked against anti-spoofing rules that reject loopback/IPv4-mapped addresses and canonical-form mismatches.
  • If a command carries an allowed_domains list but wouldn't actually run inside a confining sandbox, execution is now refused outright instead of silently running unconfined. When it does run sandboxed, the list is registered with the sandbox manager for the life of the process and unregistered on exit or error, via new registerCommandNetworkLists/unregisterCommandNetworkLists sandbox functions.
  • A new canned deny response short-circuits network classification for hosts not in the command's allowed_domains, returning the message "not in this command's allowed_domains — re-run the command with this host listed if it needs it" instead of running the full classifier.
  • The whole capability is gated behind the tengu_flickering_rain flag plus sandboxing being enabled, and applies to both Bash and PowerShell's input validation.

Why

This gives the model a way to ask for specific extra network access a sandboxed command needs (for example, to reach a particular API) without disabling sandbox network confinement altogether, while making sure the allowlist is only honored when a real sandbox is actually enforcing it.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

In dev
Nothing to try yet
Useful5 Signal4
Group of 2 Monitor Tool Notable unclear

Background monitor/watch tool gains a bounded, self-expiring mode#

Behind an experimental flag, the monitor tool's watch timeout can now expire and require a manual re-arm instead of running indefinitely.

Unclear Whether this bounded behavior is active for a given user depends on the tengu_breezy_crescent setting, which is currently off for this site's account and the anonymous baseline, and has not yet been read under this release.

Feature flag
tengu_breezy_crescent Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: off · compiled default in v2.1.268: off

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
timeout_ms

What

  • The Monitor (background watch) tool's timeout behavior changed: behind an experimental flag, it now uses a bounded timeout schema with a capped, defaulted timeout_ms, instead of the previous unbounded schema.
  • When the bounded timeout expires, Claude Code now sends a specific notice that includes how much time elapsed and how many events were delivered (or none), and instructs the model to "re-arm" the watch rather than keep polling.
  • The system prompt text describing background monitors changes to match: instead of saying a monitor sends "one notification per occurrence... indefinitely", it now says "until the monitor expires (re-arm to continue)" when this flag is on.

Why An unbounded watch could run forever consuming resources; a bounded, self-expiring watch forces a periodic check-in ("re-arm") so long-running monitors don't run unattended indefinitely.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal4
Group of 2 AskUserQuestion Notable no docs found

New CLAUDE_CODE_QUESTION_OPTIONAL_DESCRIPTIONS environment variable#

A new env var makes descriptions optional for AskUserQuestion options, limited to specific entry points or remote sessions

Details 0 0 Feedback
CLAUDE_CODE_QUESTION_OPTIONAL_DESCRIPTIONS

What

A new environment variable, CLAUDE_CODE_QUESTION_OPTIONAL_DESCRIPTIONS, makes the descriptions on AskUserQuestion-style options optional instead of required. It only takes effect when CLAUDE_CODE_ENTRYPOINT is one of a fixed set of values (sdk-ts, sdk-py, sdk-cli, local-agent, claude-desktop, claude-desktop-3p) or when the session is remote.

This new variable also acts as an alias for the existing extended-question behavior: setting either CLAUDE_CODE_QUESTION_EXTENDED or CLAUDE_CODE_QUESTION_OPTIONAL_DESCRIPTIONS now turns on that extended AskUserQuestion behavior.

Why

This lets specific integrations (SDKs, local agents, Claude desktop, and remote sessions) skip writing option descriptions for AskUserQuestion prompts when they aren't needed, without affecting other entry points.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
You'll notice
Useful4 Signal4
Group of 7 Self-Hosted Git

Governed git mount and push-URL relay for self-hosted and cloud sessions#

A new 'governed git' system routes repo pushes through a session-scoped mount, with safety checks around it

Details 0 0 Feedback
/remote

What

Claude Code adds a subsystem called 'governed git' that routes a repository's push traffic through a 'git mount' - a relay that uses a session-scoped credential instead of a raw token. This affects self-hosted runners and cloud sessions:

  • The push URL for a governed-git repo is rewritten to go through the mount, and this rewrite is kept in sync ('reconciled') live as the session's token changes, including on every token refresh.
  • Rewriting is restricted to repositories hosted on github.com; for any other host the existing push path is left alone and a notice is logged instead.
  • Before routing a fetch through the mount, the runner checks the local git version against a required minimum; if git is too old, or the runner is running with --capacity greater than 1 (which means git config is shared across multiple sessions), mount routing is skipped and a warning is logged rather than failing silently.
  • Governed-git session config can now also carry a push base URL and a list of "direct upstreams" (repos allowed to bypass the mount and use their plain upstream URL); if this list isn't supplied, or the git mount URL shape doesn't allow it, every source is reset to its normal upstream URL after setup, with a warning.
  • New telemetry (self_hosted_governed_push_url/represent_failed and self_hosted_governed_mount_read/represent_failed) fires when a session's token can't be re-presented to the remote service, warning that git traffic through the mount may be refused (git_token_mismatch) until it succeeds.
  • When a session ends, any branch whose source repo is only reachable through the mount is no longer pushed as part of cleanup - that push is skipped with an explanatory warning instead of failing or going to the wrong URL.

Why

This lets Claude Code enforce credential scoping and access policy on git pushes for governed repositories without changing how users interact with git, while adding fallbacks so that older git versions, shared-config runners, non-GitHub hosts, or mismatched tokens degrade to a safe, explicit warning rather than a silent failure or a push to the wrong place.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful5 Signal3
Group of 3 Prompt Input Notable

New 'Prompt suggestions' feature predicts and can pre-fill your next prompt#

Claude Code can now suggest or pre-fill your next prompt after a turn, controlled by a new Prompt suggestions setting

Details 0 0 Feedback
promptSuggestionEnabled

What

  • A new setting, "Prompt suggestions" (promptSuggestionEnabled), lets Claude Code generate a predicted next prompt after each turn and either suggest it to you or fill it directly into the input box.
  • The input draft controller gained fillDraft and suggestDraft methods that write or propose this suggested text, setting a promptSuggestion state (status: 'generated', the suggested text, and a generation request ID) once a turn ends — but only when the input box is empty and no dialog is open.
  • Plugins gained two new corresponding actions, prompt.fill and prompt.suggest, added to the plugin action-dispatch table alongside existing actions like prompt.submit, tool.call, agent.spawn, and ui.ask, each with their own budget tracking, letting a plugin programmatically fill the prompt box or suggest text to the user.
  • A session-config field promptSuggestions and a telemetry event description ("Predicted next user prompt, emitted after each turn when promptSuggestions is enabled") back the feature.

Why This gives Claude Code the ability to proactively suggest what you might want to type next, saving time on repetitive or predictable follow-up prompts, and gives plugins a supported way to drive the same behavior.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Group of 4 Plugins Notable no docs found

Managed prependPlugins/appendPlugins replace the old secDefault setting for hook ordering#

Orgs now control which plugin's hooks run first or last via prependPlugins/appendPlugins instead of the old secDefault boolean

Details 0 0 Feedback
prependPlugins

What

  • Two new managed-settings keys, prependPlugins and appendPlugins, let an organization list plugin ids (in the form plugin@marketplace) whose hooks must run first (outermost) or last (innermost) among the plugins in the hooks chain.
  • The built-in sec-default hooks module (Claude Code's default security/policy protection hooks) now checks whether the org's prependPlugins list includes sec-default@builtin, and reports its seating reason as "seated by managed prependPlugins at position N" or "not seated: managed prependPlugins does not list it".
  • The old secDefault managed-settings boolean, which used to just seat the bundled sec-default plugin outermost (and had a special warning when shadowed outside managed settings), is removed entirely - no references to it remain.

Why

This replaces a single yes/no switch for the built-in security hooks with a general-purpose ordering mechanism, letting organizations control exactly where any plugin's hooks sit in the chain (not just whether the default security hooks run first), while keeping the ability to opt out of or explicitly retain that default seating.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Group of 5 Gateway Notable

New gatewayInternalNetworks managed setting restricts Cloud gateway sign-in to declared network ranges#

Admins can lock Claude Code sign-in to a gateway that resolves only within their org's declared network CIDR blocks

Details 0 0 Feedback
gatewayInternalNetworks/loginforceLoginGatewayUrl

What

A new admin-only managed-settings key, gatewayInternalNetworks, lets an organization declare the CIDR (network address range) blocks its Cloud gateway login host must resolve within.

  • Up to 4 non-overlapping blocks can be listed; Claude Code validates them and rejects public/documentation/reserved or overlapping ranges, and caps how many can be listed.
  • On /login, Claude Code checks that both DNS resolution and the actual TLS connection to the gateway land inside a declared network, and refuses sign-in with a specific error if the machine's address or the gateway's answer falls outside it.
  • If the resolved gateway host falls inside a declared network but the connection would route through an HTTP proxy, login now refuses to proceed and tells the user to add the host to NO_PROXY instead.
  • The setting is merged using "highest source wins" rules, the same treatment given to forceLoginOrgUUID, forceLoginMethod, and forceLoginGatewayUrl, and it's threaded into the OAuth/gateway login screen.

Why

This lets an organization pin employee sign-in to a gateway that only exists on its own private or approved network, closing off sign-in attempts (or man-in-the-middle style redirects) that resolve or connect outside that network.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Group of 2 Sandbox Credentials Notable

AWS request signing now defaults to deny for unre-signable request types#

Requests using AWS streaming uploads, presigned URLs, or SigV4A signatures are now blocked by default unless explicitly allowed

Details 0 0 Feedback
sigv4

What

A new policy schema governs how Claude Code's credential-masking proxy handles AWS requests it cannot fully re-sign itself, covering three categories:

  • streaming – AWS-chunked streaming uploads
  • presigned – URLs with an embedded signature
  • sigv4a – requests using asymmetric SigV4A signatures

Each of these now defaults to "deny" (the request fails closed with a 403 error) unless explicitly set to "passthrough". This replaces old vendor code that previously implemented an unrelated JSON-schema $recursiveAnchor keyword at this same location.

Why

These request types can't be safely re-signed by the masking proxy, so letting them through by default would risk exposing real credentials. Defaulting to deny closes that gap while still allowing an explicit opt-in via passthrough where it's known to be safe.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Group of 3 Streaming Notable

Interrupted turns now report a resume_reason across streaming, SDK results, and resumed prompts#

Claude Code now explains why an interrupted turn is being automatically resumed, and links it to the original turn

Details 0 0 Feedback
resume_reasonCLAUDE_CODE_RESUME_INTERRUPTED_TURNCLAUDE_CODE_RESUME_REASON

What

  • Streaming partial-message frames can now carry a resume_reason field explaining why the current turn is an automatic re-run of one interrupted by a worker restart: host_draining, checkpoint_restore, container_recreated, or a fallback interrupted_turn. This ties to the CLAUDE_CODE_RESUME_INTERRUPTED_TURN / CLAUDE_CODE_RESUME_REASON mechanism.
  • The SDK/headless turn-result schema gains the same optional resume_reason string, plus an optional result_index integer, in both the streamed and final result message shapes.
  • When Claude Code auto-resumes an interrupted turn at session restart, the reconstructed prompt now includes a resumeReason and, when available, a resumedTurnUserMessageUuid pointing back to the original interrupted turn's user message.

Why This makes it clear, both in the UI/streaming output and in SDK results, why a turn was automatically re-run after an interruption (such as the worker host draining or a container being recreated), and links the resumed turn back to the original one it replaced.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Group of 2 Sandbox Credentials Notable

Sandbox credential masking gains JWT-aware decoding and claim-level control#

Sandbox credential masking can now decode JWTs, mask only specific claims inside them, and scrub duplicate secret values

Details 0 0 Feedback
credentials.filescredentials.envVars

What

The sandbox runtime's environment-variable and file credential-masking configuration gained new options:

  • decode: "jwt" – locates and verifies JWT (JSON Web Token)-shaped values and replaces them with a structurally valid fake token, swapping the real value back on the way out
  • maskClaims – masks only specific named claims inside a decoded JWT instead of masking the whole token value
  • maskDuplicates – also scrubs verbatim repeats of a captured secret that appear outside the original regex match
  • onExtractNoMatch – controls what happens when the configured extract regex doesn't match (warn, deny, or error), defaulting to warn

A separate schema addition also defines a MITM (man-in-the-middle) proxy configuration with socketPath and domains, to route matching traffic through the proxy, and an injectHosts option to narrow which hosts receive the real (unmasked) credential.

Why

Credentials are often embedded inside JWTs rather than being the whole value, so plain regex masking could miss or over-mask them. These additions let sandbox configurations mask JWT contents precisely, catch duplicate leaks, and control proxy routing more finely.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

In dev
Nothing to try yet
Useful4 Signal4
Disk Watchdog Notable unclear

Disk-space watchdog added (gated, off by default)#

A new gated background watchdog can warn or take action when disk space runs low

Unclear Whether this watchdog and its warnings are active for any given user depends on gates (tengu_ccr_disk_watchdog, tengu_disk_low, tengu_disk_drain) that have not been read, so nothing is known about their current state.

Details 0 0 Feedback
What

Claude Code has a new background watchdog that periodically checks how much disk space is used on the drive holding the current working directory. It can emit warning and 'drain' telemetry and log messages when usage crosses 85% or 95%, uses hysteresis (so it doesn't flip back and forth right at the threshold), and uses a lock file shared across processes so multiple Claude Code instances don't duplicate the check.

Why

Running low on disk space can cause hard-to-diagnose failures; a watchdog like this is meant to surface the problem before it does.

In dev
Nothing to try yet
Useful4 Signal4
Sandbox Network Notable

Experimental in-process TLS termination and upstream parent-proxy support added to sandbox network config#

Sandbox can now terminate HTTPS itself and route traffic through an upstream proxy, both experimental

Details 0 0 Feedback
network.tlsTerminate
What

Two new experimental sandbox network settings:

  • network.tlsTerminate lets the sandbox terminate HTTPS connections itself, making request and response bodies visible to request filtering and credential injection; an excludeDomains option opts specific hosts (such as ones using certificate pinning) out of this.
  • network.parentProxy lets the sandbox's proxy route outbound traffic through an upstream HTTP proxy, falling back to the HTTP_PROXY, HTTPS_PROXY, and NO_PROXY environment variables if not explicitly set.

Credential masking now requires tlsTerminate to be turned on, unless you explicitly opt out with allowPlaintextInject (off by default).

Why

Terminating TLS in-process lets the sandbox actually inspect and mask credentials inside encrypted traffic instead of only seeing opaque bytes, but both features are marked experimental, so behavior may still change.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful4 Signal4
Chrome & Browser

New local-pairing protocol for the Chrome extension bridge#

Claude Code adds an encrypted local-pairing handshake for connecting to the Claude-in-Chrome extension

Details 0 0 Feedback
What

Claude Code now includes a new subsystem for establishing a secure, end-to-end encrypted connection to the Claude-in-Chrome browser extension, called "local pairing." It uses ECDH key exchange (a way for two parties to agree on a shared secret) over the P-256 curve, HKDF key derivation, and AES-GCM encryption to build a sealed communication channel, alongside the existing plain local socket bridge.

The system includes:

  • JWT-based attestation checked against an issuer and JWKS endpoint (/api/oauth/local_pairing/attest and /api/oauth/local_pairing/jwks.json)
  • pairing offer/accept/done handshake messages
  • sealed request/response message framing
  • liveness probing to detect a dropped connection
  • pairing-state callbacks (onPairingState) reporting states like pairing, established, refused, and closed
Why

This strengthens the connection between Claude Code and the Claude-in-Chrome extension by encrypting and authenticating the pairing handshake, rather than relying on a plain local socket.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

In dev
Nothing to try yet
Useful3 Signal3
Group of 4 Telemetry Notable no docs found

Telemetry uploads can be held back under a server-controlled flush policy#

Claude Code can now delay sending some telemetry events based on a remote-configured flush policy instead of uploading them immediately

Details 0 0 Feedback
dropUnwatchedStreamEvents

What

  • A new "served policy" hold lets a remote-configured flush policy delay uploading certain internal telemetry events instead of sending them right away. The policy can specify a max age, max bytes, max event count, which event types must always be flushed, and whether to flush on an assistant turn or when sampling ends.
  • A new transcriptRowMayWait check decides, per event row, whether it can wait — plain assistant/user transcript turns can be held, while events carrying tool results or meta/virtual/compact-summary rows are always sent right away.
  • The CCR (client-controlled reporting) worker also gained a separate hold for stream events: when dropUnwatchedStreamEvents is enabled, stream-delta telemetry is dropped (not buffered) and counted when no subscriber/viewer is present, and logging now records when this dropping starts and resumes as a watcher returns or leaves. A warning log fires if a policy-held session closes with undelivered events still queued.
  • The underlying schema that validates flush policies was reworked: the field that used to validate per-model token/effort configuration now validates the event-buffer flush policy fields (max_events, max_age_ms, max_bytes, flush_on_sampling_end, flush_on_assistant, must_flush_types, policy_version).

Why This lets Claude Code's telemetry backend control, from the server side, how aggressively the client batches and delays event uploads, reducing unnecessary network traffic while still guaranteeing important events (like tool results) are never delayed.

In dev
Nothing to try yet
Useful3 Signal4
Sandbox Network unclear

Sandbox system-prompt text rewritten to describe allowed_domains / auto-mode network review#

Sandbox instructions shown to the model were rewritten to explain listing needed hosts and reacting to blocked-host violations

Unclear Whether this rewritten guidance is actually shown to any given user depends on the same unread tengu_flickering_rain setting.

Details 0 0 Feedback
allowed_domains
What

The sandbox instructions built into the system prompt (under a 'command sandbox' heading) were substantially rewritten for when the new network-list capability is active. The model is now told to list every host a command needs, that the sandbox is applied per command at the operating-system level, and to check a <sandbox_violations> block for any denied hosts. If a host was denied, the instructions say to re-run the command with that host added to allowed_domains when in auto mode. Separately, the wording used when sandboxing is fully disabled by policy was softened from a blanket prohibition to language that tells the model to ask the user instead.

Why

This gives the model concrete steps to follow when a sandboxed command is blocked from reaching a network host, instead of leaving it to guess how to retry.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful3 Signal4
Model Catalog unclear

Model family allowlist extended with placeholder future models#

Model list now recognizes placeholder future Claude models like claude-opus-4-6 and claude-sonnet-4-6

Unclear The finding does not say whether these models are actually available or when they might be.

Details 0 0 Feedback
claude-opus-4-6claude-opus-4-7claude-sonnet-4-6
What

The internal list of known first-party Claude model families was extended to include claude-opus-4-6, claude-opus-4-7, and claude-sonnet-4-6, alongside the existing 4.x and 4.5 entries. A helper was also added to check whether a model string contains "application-inference-profile".

Why

This is preparatory groundwork so Claude Code recognizes these model names if and when they become available, rather than treating them as unknown; it does not mean these models are usable now.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful3 Signal4
Plugins no docs found unclear

New virtual plugin "surface" bundling/runtime scheme#

A new "surface" virtual-module system lets plugin desktop UI code import from special surface:/// and claude: URIs

Unclear What plugin authors can now build with this that they couldn't before is not detailed.

Details 0 0 Feedback
surface:///claude:hooks-typesclaude:surface-runtime
What

Claude Code now has a new module-loading scheme for plugin desktop UI components. Plugin source code can import from virtual addresses like surface:///..., surface-unlinked:///computed#..., and virtual modules named claude:hooks-types and claude:surface-runtime. Import statements in plugin source are rewritten to these virtual forms before the plugin code runs inside its sandboxed virtual machine.

Why

This is infrastructure for building plugin UI components, giving plugin code a controlled set of virtual modules to import from rather than reaching into the real filesystem or module system, which fits with running plugin code in a sandbox.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal2
Group of 6 Sessions Notable

Force-remove stuck worktrees, with new safety checks and CLI/fleet-view support#

Sessions and worktrees can now be force-removed when git or hooks can't clean them up, with new safety checks and a fleet-view confirmation

Details 0 0 Feedback
claude rm

What

  • Job/session deletion logic now supports an explicit force-remove path for a worktree's directory, used when the normal removal (via git or the WorktreeRemove hook) can't clean it up.
  • Before force-removing, Claude Code checks for nested git repositories, tracked (not just uncommitted) changes, and verifies the worktree is actually registered in git's own worktree list; the worktree-state check now separately reports trackedChanges (real edits) versus plain dirty (which includes untracked files).
  • If removal is still withheld, the reason is one of tracked_changes, nested_repositories, nested_unverified, or not_registered, and a new aFt message generator produces detailed explanations for every possible refusal reason (dirty, unpushed, unpushed_shared, in_use, live_lock, occupied, shared_record, records_unreadable, unverified, identity_changed, and the remove_failed sub-reasons above).
  • The claude rm CLI command gains two new flags: --discard-unpushed <commit>@<worktree-id> to discard unpushed/uncommitted changes on a worktree still at a given commit, and --force-remove-worktree <worktree-id> to force-delete a worktree directory.
  • The fleet view's job-delete action gained a second confirm-and-retry path for force-removing a worktree (alongside the existing 'discard unpushed changes' offer), and reports whether the branch was preserved.
  • Deletion telemetry and results now distinguish a forced removal from the existing 'left worktree in place' outcome, via a new worktree_force_removed event and a forcedWorktreeRemoval/forceRemoveWithheld result field.

Why

Worktrees (the separate folders git uses for each session's checkout) can get stuck when git or a cleanup hook can't remove them, blocking session/job deletion. This gives users and the CLI an explicit, safety-checked way to force the removal through instead of leaving orphaned directories behind, while refusing to blow away directories with nested repos or real tracked changes without being told to.

+New
Use it now
Useful4 Signal2
Group of 4 Artifacts Notable

Artifacts gain a new icon field, distinct from the favicon/emoji, with more resilient publish retries#

Artifacts can now carry a plain-word icon field alongside their favicon, and publish/deploy retries handle any rejected field, not just one

Details 0 0 Feedback
icon

What

  • Artifacts can now include a new icon field: a single short generic word (e.g. "chart", "calendar") meant as a plain page-type signifier, separate from the existing favicon. It's persisted across redeploys like the favicon, and is explicitly ignored on artifacts created from an Artifact type.
  • When publishing an artifact, if the publish endpoint rejects the request because of an unknown icon or deadline field, Claude Code now automatically strips just that field and retries, instead of failing outright. This generalizes what used to be a retry that only handled a rejected deadline field, so the retry loop now keeps stripping whatever field gets rejected until nothing more is rejected.
  • The notice shown when extra fields are supplied on an Artifact-type create (which are ignored) now refers to the favicon/description as starting from "the type's ... emoji" instead of "icon", to avoid confusion with the new icon field.

Why

This gives artifacts a lightweight, generic type indicator distinct from their favicon, while making publish/deploy more resilient to servers rejecting fields Claude Code doesn't yet know are unsupported, and avoids the two similarly-named concepts (favicon vs. the new icon) being confused in user-facing text.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
Use it now
Useful4 Signal3
Trust Notable

--trust-workspace gains a stricter mode referencing cli#44151, still on by default#

--trust-workspace help text now documents a stricter mode that drops repo-committed permission grants

Details 0 0 Feedback
permissions.allow
What

The help text for the --trust-workspace flag now documents a second, stricter enforcement mode. Setting --trust-workspace (or its environment variable) to false now triggers this stricter gate: permission grants committed to the repository's own settings (via permissions.allow) are dropped, with a warning like "Ignoring N permissions.allow" printed to the terminal. Instead, such grants have to live in the host machine's own settings.json, not the repo's.

Why

This stops a checked-out repository from being able to grant itself extra tool permissions just by having them committed to its settings files. Anyone relying on repo-committed permissions.allow entries needs to move those grants to their local settings.json if they set --trust-workspace to false.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Chrome & Browser Notable no docs found

CLAUDE_CHROME_PAIRED_DEVICE_ID environment override for Claude in Chrome pairing#

A new CLAUDE_CHROME_PAIRED_DEVICE_ID env var pins which paired browser device Claude in Chrome connects to

Details 0 0 Feedback
CLAUDE_CHROME_PAIRED_DEVICE_ID
What

Claude in Chrome (the browser extension bridge that lets Claude Code control a Chrome browser) can now be pointed at a specific paired device using a new CLAUDE_CHROME_PAIRED_DEVICE_ID environment variable. When set, this value is checked against the expected device-id format; if it doesn't match, Claude Code ignores it and logs a warning instead of using it.

Why

This lets you pin bridge setup to one specific browser-extension device rather than letting Claude Code pick automatically, which matters if you have more than one paired device and want predictable connections. The format validation means a mistyped or malformed id fails safely with a warning rather than causing a confusing connection error.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Workflows Notable

Internal codename 'Ultracode' revealed for the workflow-keyword trigger setting#

The setting that lets the word 'ultracode' start a workflow is now labeled 'Ultracode keyword trigger' in settings

Details 0 0 Feedback
workflowKeywordTriggerEnabledultracode
What

The settings panel now shows a row called "Ultracode keyword trigger" (setting id workflowKeywordTriggerEnabled, on by default). It controls whether typing the word ultracode in a prompt automatically starts a workflow — Claude Code's mode for running a multi-step task across several coordinated agents. Related messages tell you when this happened: "Dynamic workflow requested for this turn" when the keyword triggered a workflow, and "Ultracode keyword ignored for this prompt" when it didn't.

Turning the setting off lets you type the word ultracode in a prompt without it starting a workflow.

Why

This gives a name to a setting that already existed, and a way to type the trigger word for other reasons without it kicking off a workflow you didn't intend to run.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Self-Hosted Runner Notable

New --remove-session-state flag for self-hosted runner#

Self-hosted runner can now delete a session's leftover files when the session ends

Details 0 0 Feedback
SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE
What

The claude self-hosted-runner command line tool gets a new --remove-session-state flag (also settable via the SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE environment variable). When enabled, ending a session now removes that session's stored state under its _sessions/ folder, including its Claude config directory (transcript copy, shell snapshots, session environment, file history, debug log), staged uploads, per-session git configuration, and the session's working directory.

  • Accepts true/false/1/0, and defaults to true if you pass the flag with no value.
  • Off by default, so existing behavior is unchanged unless you turn it on.
  • Cleanup is best-effort: files are safely renamed then deleted, and at startup the runner logs whether these per-session files will be removed or kept.
  • The runner logs how many of the targeted paths were actually removed versus already absent, and this also affects whether the debug log tail is sent to server-side session diagnostics or kept on disk.
Why

This lets self-hosted runner operators avoid accumulating leftover session files (transcripts, uploads, git config, working directories) on disk after each session, which matters for storage management and for not retaining session data longer than needed.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Sessions Notable no docs found

New CLAUDE_CODE_RESUME_REASON env var for interrupted turns#

New CLAUDE_CODE_RESUME_REASON env var labels why an interrupted turn was resumed

Details 0 0 Feedback
CLAUDE_CODE_RESUME_REASON
What

A new environment variable, CLAUDE_CODE_RESUME_REASON, can now be set to a short lowercase tag (letters and underscores only, up to 64 characters) that becomes the recorded reason for resuming a turn that was interrupted. If the value doesn't match that pattern, Claude Code falls back to the default reason, interrupted_turn. A new interruptedTurnUserMessageUuid field also now records which prior user message an interruption corresponds to.

Why

This gives tooling built around Claude Code a way to tag and later trace why a particular turn was resumed after an interruption, and to tie that resumption back to the specific user message it interrupted.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Chrome & Browser Notable

New scale parameter for browser screenshot/zoom, extension-version gated#

Browser screenshot and zoom actions gain a scale option to shrink image size and token cost

Details 0 0 Feedback
scale
What

The screenshot and zoom actions in the Claude in Chrome browser tool now accept a scale parameter. Setting it to 0.5 returns a quarter-size image, which reduces the number of tokens the image consumes.

Why

Smaller images cost fewer tokens, so this gives more control over that tradeoff, but it depends on the Claude in Chrome browser extension version installed: only versions that support scale will actually return a reduced image, while older extensions will keep returning the full-size image regardless of the setting.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Plugins Notable

Plugin CLI commands (disable, disable-all, update) gain --json output#

Plugin disable, disable-all, and update commands gain --json output alongside other plugin commands

Details 0 0 Feedback
--jsonclaude plugin disableclaude plugin disable-allclaude plugin update
What

The claude plugin disable, disable-all, and update commands now support a --json option. With it set, they print a single structured result line (fields like command, outcome, plugin, pluginId, scope, message, and for updates, updateOutcome/oldVersion/newVersion) instead of the usual checkmark-prefixed human-readable message.

This is part of a broader rollout across plugin commands:

  • install, enable, disable, and uninstall now support --json for structured output, with uninstall --json refusing to combine with --prune.
  • Several plugin subcommands, including prune and install-related commands, gained the same --json option, all preserving existing exit codes.
Why

This lets scripts and other tools drive plugin management and reliably parse the result, rather than scraping human-facing text, while behaving the same as before for interactive use.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful4 Signal3
Plugins Notable

reload_plugins SDK request gains a hold_on_cache_impact option to avoid silent cache invalidation#

reload_plugins can now hold off reloading if it would invalidate the prompt cache, via a new hold_on_cache_impact option

Details 0 0 Feedback
hold_on_cache_impactreload_plugins/reload-plugins
What

The reload_plugins request (used by the /reload-plugins command and by the SDK) now accepts an optional hold_on_cache_impact flag. When set, if reloading plugins would change the session's tool list in a way that invalidates the prompt cache (the cached record of the conversation-so-far that lets Claude skip reprocessing it), the reload is skipped instead of applied. The response then reports held: true along with a cache_impact breakdown of what would have changed: mcp_servers_added, mcp_servers_removed, or lsp_tool_change. The session keeps its current plugins in that case.

This mirrors a check the interactive /reload-plugins command already makes before it asks for --force. In the Agent SDK, the equivalent reloadPlugins() call now accepts a holdOnCacheImpact flag that gets sent as this same option.

Why

This lets SDK integrations and other callers opt into the same cache-safety check the interactive command already had, avoiding a silent, expensive cache invalidation when plugins change.

Improved
You'll notice
Useful4 Signal3
Hooks

Hooks can now interrupt a running permission-prompt tool call#

Hooks can now cancel a tool call while its permission prompt is still waiting for you to respond

Details 0 0 Feedback
What

A hook is custom code that runs automatically at certain points in Claude Code, such as before a tool is used. Previously, once a tool call reached its permission prompt (the dialog asking you to approve or deny a tool), a hook could not stop it mid-flight. Now, while that permission prompt is waiting, Claude Code races the tool call against the hook's own decision. If the hook finishes first with an outcome, the tool call is aborted and the hook's decision, including any interrupt, is used instead, with a log message noting which tool and hook caused the interrupt.

Why

This lets hooks reliably cancel a tool call that's sitting at a permission prompt, rather than only being able to act before or after that point.

+New
Use it now
Useful3 Signal2
Group of 3 Gateway

Admin pricing overrides can now apply to managed policies#

Admin-configured price overrides can now be validated for and pushed down to managed-policy clients

Details 0 0 Feedback
modelPricing

What

  • The gateway config validator, which previously required an admin: block for pricing settings to take effect, now also accepts a managed: block containing at least one policy, since both the admin spend meter and the modelPricing sent to clients read the same pricing config.
  • The gateway can now compute a per-deployment modelPricing object (a price multiplier plus per-model overrides) from an admin.pricing-style config, and merges it into each managed policy's cli settings, but only for policies that don't already specify their own modelPricing. It logs how many policies received the pushed pricing.
  • The dead-code checker that warns about pricing overrides that can never take effect was updated for the case where there's no admin/meter block: in that case, an override is only considered reachable if it sits on the first upstream that would actually serve that model.

Why This lets pricing overrides configured under admin.pricing reach managed-policy clients automatically, and improves the accuracy of warnings about pricing overrides that would silently never apply.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful3 Signal2
Group of 6 Plugins unclear

Plugins can be marked 'required' by an organization and protected from being disabled or uninstalled#

Org-required plugins can no longer be disabled/uninstalled, and enable/disable failures now report a machine-readable failure code

Unclear Which specific marketplace this applies to is not stated.

Details 0 0 Feedback
installationPreference

What

An organization can now mark a plugin as required via its marketplace/installation preference. Claude Code enforces this in several places:

  • Attempting to disable a required plugin (or its synced counterpart) now fails with Plugin "<name>" is required by your organization and can't be disabled here. Contact your admin to change it. A related check also blocks disabling a plugin that other required plugins depend on, unless a bypassDependentsBlock option is passed.
  • Uninstalling a plugin, and the "disable all enabled plugins" bulk action, now also skip org-required plugins (and anything they depend on), and report how many plugins were skipped as a result.
  • The plugin details screen shows a new " · Required by your org" label next to a required plugin's enabled/disabled status.
  • A new internal helper can force a plugin to be treated as enabled - bypassing user-disable and managed-disable checks - when it's marked required for its marketplace.
  • Plugin enable/disable/uninstall failures now include a machine-readable failureCode field (e.g. not_installed_at_scope, settings_write_failed, already_in_goal_state, required_by_dependents, dependency_missing, dependency_disabled, dependency_policy_blocked, plugin_policy_blocked, ambiguous_marketplace, managed_name_locked, required_by_organization, builtin, not_installed, enabled_at_project_scope, partial_failure) alongside the existing human-readable message.

Why

This lets organizations lock in plugins they consider mandatory (for security, compliance, or workflow reasons) so users and scripts can't accidentally or deliberately turn them off, while giving tooling a stable code to key off instead of parsing free-text error messages.

+New
Use it now
Useful3 Signal2
Group of 2 SDK Permissions no docs found

Permission requests can now carry a browser tool_kind for SDK hosts#

Tool-use permission requests can now be tagged tool_kind: "browser" so SDK hosts can route browser tools to a specialized UI

Details 0 0 Feedback
tool_kind

What The tool-use permission request payload (the can_use_tool control-protocol message) gained an optional tool_kind field, currently only ever set to "browser". This lets SDK hosts — such as Claude in Chrome, Cowork, Claude Desktop, or Remote Devices — recognize browser-related tool calls and show a specialized permission prompt for them, instead of having to guess by matching the tool's name. The field is now actually populated (tool_kind: "browser") on real requests, not just declared in the schema.

Why Browser tools often need a different kind of approval UI than regular tools. Tagging them explicitly lets host applications build that UI reliably instead of relying on fragile name-matching.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful3 Signal2
Group of 2 SDK no docs found unclear

Local slash-command results can now surface a localCommand field#

Both the SDK's final result event and local slash-command dispatch can now include a localCommand field in their output.

Unclear What triggers the condition for including local_command, and what value it carries, is not specified in the evidence.

Details 0 0 Feedback
local_command

What

  • The final "success" result event emitted at the end of an SDK/print-mode query can now optionally include a local_command field, built from a helper call, alongside its existing fields.
  • The command-dispatch return object also gained a conditional localCommand field, included only when the engine did not defer the slash command to the model (i.e. engineDeferredSlash is false).

Why This surfaces which local slash command handled a request directly in the result output, useful for SDK consumers and tooling that need to know a command was resolved locally rather than by the model.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
Use it now
Useful3 Signal2
Group of 2 Skills Notable no docs found

Skills and plugin sync can skip a redundant round on startup#

On startup, skills and plugin sync now skip a full sync round if one finished recently, controlled by CLAUDE_CODE_SYNC_REUSE_WITHIN_MS

Details 0 0 Feedback
CLAUDE_CODE_SYNC_REUSE_WITHIN_MS

What

Both the skills-sync and plugin-sync processes now accept a { startup } option. When Claude Code starts up (and isn't in cloud/XD mode, and no sync was force-requested), each of these now checks a saved timestamp to see whether a sync round already completed recently.

  • If the last skills sync finished within CLAUDE_CODE_SYNC_REUSE_WITHIN_MS milliseconds and the rate-limit "bucket" guard hasn't refused it, the sync round is skipped entirely and a skills_sync_round_reused event is logged.
  • Plugin sync gained an equivalent freshness check; if a recent round is found, it reuses that round instead of re-downloading and re-listing plugins, logging a plugins_sync_round_reused event.

Why

This avoids doing redundant sync work (downloading and re-listing skills or plugins) every time Claude Code starts, when a sync already happened moments ago, making startup faster and cheaper without affecting freshness.

In dev
Nothing to try yet
Useful3 Signal3
Permissions Notable no docs found unclear

New bridge dialog for tools that would read outside the allow-list ('block outside reads')#

A new confirmation dialog appears when a tool tries to read a file outside the allowed list

Unclear Whether this dialog is active for any given account depends on the tengu_compressed_river gate, which is unread for this account, so nothing can be said about whether it is switched on.

Feature flag
tengu_compressed_river Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.268: on

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
offersBlockOutsideReads
What

When a tool tries to read a file path that falls outside your allowed-reads list, Claude Code can now show a dedicated dialog offering to allow it, block it, or ask again later, instead of just denying it outright. The permission system now carries a flag, offersBlockOutsideReads, that decides whether this new dialog appears, and denying through it records that the read was blocked for being outside the allow-list.

Why

This gives you a clearer, more specific choice when a tool asks to read something outside the paths you've allowed, rather than a generic denial.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful3 Signal2
Chrome & Browser Notable

Browser file_upload tool gains a direct base64 upload path#

Browser file_upload tool can now accept file contents directly instead of only file paths

Details 0 0 Feedback
file_upload
What

The browser automation file_upload tool now accepts an optional files array containing base64-encoded file data, a name, and a MIME type, in addition to its existing paths option. The files field is described as meant to be populated by the client itself after it reads the files under its own file-read permissions, not set directly by the model. A reference (ref) and tab ID (tabId) are still required, but paths is no longer required on its own.

Why

This gives the browser tool a way to upload file contents directly when the client has already read them, rather than always relying on a file path that must be resolved separately.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
Use it now
Useful3 Signal2
Sessions Notable

Fork seed size cap and stale-mtime housekeeping#

Fork snapshot files get a hard size cap and a background-wait timer becomes configurable

Details 0 0 Feedback
CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS
What

The snapshot files written when forking a conversation (see the new fork_conversation tool) now have a fixed maximum size, and writing one that exceeds it now fails with a dedicated error instead of succeeding silently. A separate internal helper keeps a snapshot file's modification time fresh, and a new environment variable, CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS, controls a related ceiling on how long a background wait can run.

Why

The size cap prevents oversized conversation forks from being written unbounded, and the new environment variable gives more control over background-wait timing in headless or scripted use.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful3 Signal2
Hooks Notable

Hook-injected transcript entries can now be placed at head or tail, not just prepended#

Hooks can now insert transcript entries at the tail as well as the head

Details 0 0 Feedback
headtail
What

When a hook (custom code that runs at certain points in Claude Code) injects new entries into the transcript, those entries could previously only be prepended to the start. Now the hook can specify a placement of either "head" (the old prepend behavior) or the new "tail," which appends the entries at the end instead and can extend the tracked length of restored transcript.

Why

This gives hook authors control over whether their injected content appears before or after existing transcript entries, useful for hooks that want to append rather than prepend information.

+New
Use it now
Useful3 Signal2
Stream JSON

New num_turns-adjacent 'seq' field documented for stream-json results#

Stream-json results from claude -p now document a 'seq' delivery-order field

Details 0 0 Feedback
seqclaude -p
What

Results returned in stream-json format (used with claude -p) now have a documented seq field, a delivery sequence number counting how many results the run has numbered before this one, starting at 0. It counts in the order results are written, not the order they were produced, and it still increments even if a particular write fails, so a gap in the sequence means a result was lost. This field is absent from the in-process engine surface and from error results built locally by cloud-relay clients.

Why

This gives consumers of stream-json output a way to detect whether any results were dropped in transit, by watching for gaps in the sequence numbers.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful3 Signal2
AskUserQuestion Notable no docs found unclear

New session-config field: questionOptionDescriptionsOptional#

New session-config field lets question options skip descriptions

Unclear What uses this field or what behavior it actually toggles is not stated.

Details 0 0 Feedback
questionOptionDescriptionsOptionalextendedQuestionsEnableddisableFileMentions
What

The session configuration accessor gained a new field, questionOptionDescriptionsOptional, with its own getter (questionOptionDescriptionsOptional()) and setter (replaceQuestionOptionDescriptionsOptional()). It arrives alongside two other new fields in this same area, extendedQuestionsEnabled and disableFileMentions.

Why

The finding doesn't say what consumes this field, but its name suggests it controls whether descriptions are required or optional for question options in a session.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful3 Signal2
Stream JSON

New stream-json result_index field, live for -p/headless output#

Streamed JSON output now includes a result_index showing delivery order

Details 0 0 Feedback
result_index
What

When running Claude Code in headless or -p (print) mode with streamed JSON output, both successful and error result objects can now include a result_index field. This field is actually populated, counting up for each result delivered during a run.

Why

This gives tools consuming streamed JSON output a reliable way to know the order in which results were delivered.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

+New
Use it now
Useful3 Signal2
OTEL Notable

OTEL trace exporter can cap batch size#

OTEL trace export can now cap how many spans are sent per batch

Details 0 0 Feedback
What

When setting up OpenTelemetry (OTEL) trace export, Claude Code can now optionally pass a maximum export batch size to each batch span processor, limiting how many spans are sent together in one export.

Why

This gives control over batch export sizing for telemetry, which can help manage the size and frequency of trace export requests.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
Use it now
Useful3 Signal2
WebFetch Notable

WebFetch requests now enforce a deadline/timeout#

WebFetch requests now enforce a timeout and fail with a clear deadline error if exceeded

Details 0 0 Feedback
CLAUDE_CODE_WEBFETCH_DEADLINE_MS
What

WebFetch requests now have a deadline enforced on them. The deadline comes from the CLAUDE_CODE_WEBFETCH_DEADLINE_MS environment variable if it's set, otherwise from a remote configuration value, capped at a maximum. If a fetch doesn't complete within that time, it's aborted and fails with a "Fetch did not complete within the deadline" error.

Why

This prevents a WebFetch call from hanging indefinitely, giving a clear, specific error when a fetch takes too long instead of leaving it to stall.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
Use it now
Useful2 Signal2
Elsewhere

Todo/task tool availability no longer conditioned on a remote feature flag#

Todo/task tool availability no longer falls back to a remote feature flag; it's decided locally

Details 0 0 Feedback
CLAUDE_CODE_ENABLE_TODO_TOOLS
What

The check that decides whether the todo/task tracking tools are available dropped a remote feature-flag lookup and an associated fallback branch it previously relied on. Now availability is decided purely by local conditions: it's enabled if certain internal checks pass, if the model's capability string is missing or matches specific known patterns, or if the environment variable CLAUDE_CODE_ENABLE_TODO_TOOLS is explicitly set to true, with no separate remote feature-flag fallback anymore.

Why

This makes todo/task tool availability depend only on local, inspectable conditions (the model in use and the CLAUDE_CODE_ENABLE_TODO_TOOLS environment variable) rather than a remote flag fetched from Anthropic's servers.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Were these the right ones to put at the top? 0 answered
Below the fold

Everything else

Smaller changes and internals, grouped as the pipeline found them. Nothing is dropped, it is only further down.

1 entry

New Featuresopen

+New
You'll notice
Useful3 Signal2
Remote Control

REPL bridge (Remote Control) connection status now shown in the header#

The CLI header now shows the connection status of the Remote Control bridge, when your terminal is wide enough

Details 0 0 Feedback
What

The header now shows a small status indicator for the REPL bridge, the connection Claude Code uses for Remote Control. It reflects whether the bridge is connected, reconnecting, in an error state, or has a session active. It only appears when the terminal window is at least 60 columns wide, and it does not show when Remote Control is running in outbound-only mode.

Why

This gives an at-a-glance signal of whether Remote Control is actually connected, instead of leaving that state invisible until something goes wrong.

98 entries

Improvementsopen

Improved
You'll notice
Useful3 Signal3
Group of 2 Model Access

Stale model-access denials are re-checked instead of sticking permanently#

Claude Code now re-probes the server before blocking a model it previously denied access to, letting access restore itself without a restart.

Details 0 0 Feedback
/model

What

  • Claude Code now tracks models the server previously denied access to (confirmedEntitlementDenies).
  • Before re-reporting a denial or finalizing a block, it re-probes the server (with a deadline, forcing a fresh server check) to see whether the deny has since been overturned — for example because your organization or account changed.
  • If the deny is overturned, the cache is updated and the model is evicted from the deny list, so startup or the /model command can resolve to the now-available model without restarting Claude Code.
  • A blocked result now also carries an underEnforcement flag, and failures during this re-probe are tracked distinctly as entitlement_probe_failed versus a normal not_allowed denial.

Why Previously a denied model could stay blocked even after the underlying restriction was lifted, requiring a restart. Re-probing lets access self-heal automatically.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal3
Group of 2 Gateway

Gateway login can recognize and display internal network paths#

Device-code gateway login now checks whether the connection stays inside a declared internal network and shows the path in the trust prompt.

Details 0 0 Feedback

What

  • The interactive gateway login flow (the device-code OAuth sign-in) now accepts a list of declared internal networks (internalNetworks) and resolves the gateway's host against that list before contacting the OAuth endpoint.
  • If the connection matches a declared network, the trust prompt shown to you now displays the actual network path, e.g. "Connecting from to , both inside declared ".
  • The gateway setup screen component was updated to accept this internalNetworks list as a new prop alongside the existing initialUrl and screenLocked props, so the wizard can be told about or restricted to these internal addresses.

Why Seeing the concrete network path in the trust prompt makes it easier to verify a gateway connection is staying inside your organization's declared network rather than silently trusting an unfamiliar route.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal3
Group of 2 MCP

Built-in Slack/Teams bot MCP servers bypass normal allowlist checks under CLAUDE_CODE_REMOTE#

Under CLAUDE_CODE_REMOTE, built-in Slack/Teams bot MCP servers are marked CCR-injected and skip the usual allowlist and type restrictions

Details 0 0 Feedback
CLAUDE_CODE_REMOTEallowedMcpServers

What

When Claude Code is running under CLAUDE_CODE_REMOTE (its remote/bridge mode), MCP server configs that match known built-in Claude-Code-Remote (CCR) endpoints for Slack and Teams bots (slackbot, slackbot_read, ccr-slack-thread, teamsbot) are now marked as CCR-injected.

  • These CCR-injected configs bypass the user's allowedMcpServers allowlist check entirely, instead of being blocked like other unlisted servers.
  • The server reconciliation logic that normally only lets type === 'sdk' MCP servers through in restricted or remote scenarios now also admits these non-sdk, CCR-injected servers (tracked in a ccrInjectedConfigs set), as long as Claude Code is not running as a bridge-carrier child process.

Why

This lets the built-in Slack and Teams bot integrations keep working over MCP in remote mode without requiring users to manually add them to their MCP server allowlist.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal3
Cowork

New Cowork artifact permission-card tracking and stricter file-read denials#

Cowork sessions now show permission cards for artifact actions and block reading files outside connected folders since no one is there to approve

Details 0 0 Feedback
What

New machinery renders human-readable permission cards for actions on artifacts, such as uploading, copying, or editing, derived from the reasoning behind a tool's decision. Alongside this, two new checks deny requests to read a local file from outside a Cowork session's connected folders, through a link, or when the file simply can't be read.

Why

In a Cowork session there's no human present to approve an unusual file-access request, so these reads are now refused outright rather than left waiting on an approval that can never come.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal2
Group of 2 Errors unclear

New "verification required" error message with tracking#

A 403 verification_required API error now shows a dedicated message to users, with telemetry for when it and its link are shown

Unclear Whether this appears to users depends on server-side gates (tengu_ranch_rc_shown, tengu_ranch_rc_link_shown) that have not been read for this release.

Details 0 0 Feedback

What

Claude Code now recognizes a specific kind of 403 error response from the API: one whose body indicates error.type: 'permission_error' with details.error_code: 'verification_required'. Instead of falling through to a generic error message, this is turned into a distinct verification_required error result that shows the server-provided message directly to the user.

Two new telemetry events, tengu_ranch_rc_shown and tengu_ranch_rc_link_shown, were added and fire when this verification-required message (and, separately, its link) are shown. The tengu_ranch_rc_shown event only fires the first time this happens.

Why

This gives users a clear, specific explanation when their account or request needs verification, instead of a generic error, and lets Claude Code track how often users encounter this situation.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal2
Group of 3 Gateway

Gateway warns when it may be reachable from outside a trusted network#

The self-hosted gateway now warns about unrestricted public access and logs how it determines client IPs

Details 0 0 Feedback
access_control.allow_cidrs

What

  • The gateway checks incoming client IPs against an expanded private-address list (now including 169.254.0.0/16 and fe80::/10 link-local ranges) and, if access_control.allow_cidrs is unset and a request arrives from a non-private address, emits a one-time warning that the gateway may be reachable from the public internet, since it can push settings that execute commands on developer machines.
  • Gateway config validation separately emits a warning when access_control.allow_cidrs is empty and the listener isn't otherwise locally-bound, warning that the gateway will accept any client address.
  • Server startup now logs whether client IPs are read from the raw TCP peer address or from the X-Forwarded-For header (based on the configured trusted proxies), including how many trusted-proxy entries are configured.

Why These changes help operators of a self-hosted gateway notice if it's exposed to the public internet or misconfigured around trusted proxies, which matters because the gateway can push settings that run commands on developer machines.

Improved
You'll notice
Useful3 Signal2
Group of 3 Artifacts DB no docs found

read_db/write_db approval logic gains a trusted-source shortcut and a hard deny for unapproved out-of-folder writes#

Artifact database reads can skip approval for recognized trusted sources, while writes outside the working folder are hard-denied with no approver present

Details 0 0 Feedback

What

  • read_db calls now hard-deny outright when they would save documents outside the session's working folders and there's no human present in the session to approve it, returning a dedicated safety-check reason instead of prompting.
  • A new helper can recognize an artifact's slug as coming from a pre-trusted, known source; when it does, a read_db call is now allowed automatically with the message "Reading the database of ... needs no approval", skipping the usual prompt.
  • The equivalent write_db consent check was extended to treat the same trusted-source signal as already-consented, in addition to the existing per-session consent flags.

Why

This reduces unnecessary approval prompts for artifact database reads/writes that Claude Code already knows are safe, while closing a gap where a write outside the session's own folders could otherwise proceed unapproved when nobody is around to confirm it.

Improved
You'll notice
Useful3 Signal3
Projects

Claude Code Projects system prompt extended to shared/multi-member projects#

Claude Code Projects now describes shared, multi-member projects to the agent, not just single-owner ones

Details 0 0 Feedback
What

Claude Code Projects let a Claude Code agent follow a shared timeline of messages. The built-in instructions describing how those timeline messages reach the agent now also cover projects with multiple members, rather than assuming a single project owner. When relaying a timeline message, the generated marker now states whether the message's author was the project owner or a regular member, including that person's account id.

Why

This lets the agent correctly attribute messages in shared projects with several people posting to the same timeline, rather than treating every message as if it came from a lone owner.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal2
Group of 3 Permissions no docs found

Permission prompts now show the network hosts a command is allowed to reach#

Bash and tool permission prompts now list the allowed network hosts, which are also recorded in telemetry

Details 0 0 Feedback
networkAllowHosts

What

  • Permission-request prompts now render the network allow-list (networkAllowHosts) for a pending command or tool, alongside the existing sandbox and tool-type information.
  • The bash-command permission dialog specifically now shows a hosts component next to the command description, driven by the tool call's networkAllowHosts data.
  • When a tool's input carries such a host allow-list, approving it now records the allowed domains (allowed_domains) against that tool use in telemetry, and the list is also attached to the classifier record.

Why This lets you see exactly which network hosts a command or tool will be allowed to reach before you approve it, rather than approving blind, and gives better visibility into what was actually allowed after the fact.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal2
Group of 2 Permissions no docs found

Tool permission prompts can show a structured explanation card#

Permission-ask dialogs can now show a structured 'card' explaining the decision, and addon tools can supply one.

Details 0 0 Feedback
permissionCard

What

  • Tool-permission prompt info can now include an optional structured card (with a question, lines, and values) shown when the permission decision reason is a safety check or similar, there's no matched ask-rule, and no denial-limit fallback applies. The card content comes from the tool's own permissionCard callback.
  • The generic addon-tool factory now includes a permissionCard property in the tool definition it builds, and wraps the finished tool object with a helper before returning it, so addon tools can supply this card.

Why This gives you a clearer, structured explanation (instead of plain text) when Claude Code asks permission to run a tool for safety reasons, and extends that capability to addon tools.

Improved
You'll notice
Useful3 Signal2
Group of 3 Sandbox Network

Sandbox network allowlist gains per-command rules and consolidated strict-allowlist checks#

Sandbox network permission checks can now allow specific commands extra domains and give clearer denial reasons

Details 0 0 Feedback

What

  • A new per-command allowlist map is checked after the global strictAllowlist/config rules fail, letting a specific command's own allowed_domains grant network access ("Allowed by per-command rule"). A companion UI formatter shows these as "Also lets this command reach, beyond the sandbox allowlist: ..." with long host lists truncated at 160 characters.
  • The network-permission gate now consults this per-command allowlist (looked up by an origin key) after global config rules but before falling back to strict-allowlist denial, and the strict-allowlist short-circuit was reordered to run earlier. User-denial callbacks can now return an object with a custom reason string instead of just true/false.
  • The strict network allowlist check (sandbox.network.strictAllowlist) was consolidated into a single helper that replaces an inline chain, and a related combined check now also factors in the CLAUDE_CODE_EVAL_CONFINED environment variable to decide whether allowed domains should be forced empty.

Why This lets individual commands be granted extra network access beyond the sandbox's global allowlist, gives clearer explanations when network access is denied, and tightens how the strict-allowlist and eval-confinement settings interact.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal2
Group of 3 Artifacts

Artifact comment threads now recognize pages that manage their own threads#

Claude Code now detects artifact pages that own their own comment threads and stops trying to auto-react, reply, or resolve on them

Details 0 0 Feedback

What

  • Artifact auto-react logic now checks for pageOwnsThreads: when a thread reports this, auto-react is declined with a "blocked" reason, and a new telemetry event (page_owns_threads, or page_owns_threads_notice_suppressed if the notice can't be shown) is emitted instead of treating it as a normal deactivation.
  • A new terminal reason, page_owns_threads, produces messages like "reply not posted (the page keeps its own comment threads)" and "not resolved (the page keeps its own comment threads)," instead of falling through to the generic "needs thread activation" message.
  • The tool results for posting a reply or resolving a thread now special-case page_owns_threads === true, telling the model that the target page manages its own comment threads and that replying or resolving through the session's relay tool is a no-op it shouldn't retry.

Why Some artifact pages handle their own comments outside of Claude Code's relay. This change stops Claude from repeatedly trying (and failing) to react to, reply to, or resolve threads on those pages, and gives a clear explanation instead.

Improved
You'll notice
Useful2 Signal2
Group of 2 Elsewhere

TUI opt-out reasons now submitted as feedback instead of raw telemetry#

When you opt out of the new fullscreen TUI and explain why, that reason is now sent as proper feedback, not just analytics

Details 0 0 Feedback

What

When a user opts out of the new fullscreen/TUI (terminal user interface) renderer and types a reason, Claude Code now submits that full reason text through its feedback-submission system (with a timeout, credentials, and a character cap), recording whether the submission succeeded.

Afterward, it still sends a tengu_tui_optout_reason telemetry event, but that event now only carries a reason_length and a feedback_id (when submission succeeded) rather than the raw reason text itself.

Why

This keeps the actual free-text explanation out of analytics events, while still making sure it reaches the team as a proper piece of feedback rather than just an anonymized data point.

Improved
You'll notice
Useful2 Signal2
Group of 2 Bash Permissions

Bash permission checks now catch unverifiable redirects and arguments#

Claude Code now asks for permission instead of silently allowing bash commands it can't fully verify against deny rules

Details 0 0 Feedback

What

The permission checker for chained bash commands now also inspects shell redirect targets (like >, >>, <) against Edit deny rules, and detects risky argument rewriting via env/env --chdir. It also stops checking individual arguments once a cap is reached.

When the checker can't fully verify every argument or redirect target against the configured deny rules, it now falls back to explicitly asking the user for permission rather than silently allowing the command. This new state is called denyRulesUnjudged, and it's registered as a new bypass-immune classifier category (alongside existing ones like isolatePeerMachines, restrictedMode, and outsideReadsBlocked), meaning it can't be skipped via normal bypass settings.

Why

Previously, a bash command with a redirect or argument the checker couldn't fully evaluate against deny rules could be let through silently. Now Claude Code errs on the side of asking, closing a gap where a deny rule could be circumvented without the user noticing.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal2
Git Permissions

Default safe git-push allowlist now covers configured remotes, not just "origin"#

Auto-approved git push rules now cover your configured push remote, not just "origin"

Details 0 0 Feedback
remote.pushDefault
What

The default list of git push commands Claude Code will run without asking permission is now built by checking your actual git remotes: it keeps origin if present, and adds remote.pushDefault if it names a single valid remote. It then expands this into allow-list entries for git push <remote> * and git push -u <remote> *, plus a certified form, for every default allow-list used across the app.

Why

Repositories that push to a remote other than origin (such as upstream or a fork remote) will no longer trigger unnecessary permission prompts for ordinary pushes to their normal configured remote.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal2
Settings

Settings env vars now validated: invalid names/values/NUL bytes are dropped with a warning#

Invalid environment variable names or values in settings.json are now dropped with a warning instead of silently used

Details 0 0 Feedback
env
What

Environment variables defined in an env block inside settings.json now go through a validation step before Claude Code applies them. Entries are stripped out, with a one-time warning logged per settings scope, if:

  • the key isn't a valid environment-variable name
  • the value isn't a string, number, or boolean
  • the value contains a NUL character
Why

This catches malformed or invalid env entries in settings files early, rather than letting them silently fail or produce confusing behavior later.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal2
Trust & Teams

Resuming an in-process teammate now checks folder trust before restoring its custom agent definition#

Resuming a background teammate now requires folder trust before restoring its custom agent setup

Details 0 0 Feedback
What

When resuming an in-process teammate (a background agent running as part of a multi-agent team), Claude Code now checks whether the folder that its custom agent definition came from is trusted. If it isn't, the custom definition is no longer restored: the teammate falls back to only the team-essential tools and no custom instructions, and an error is logged (agent_type_untrusted) explaining that the user needs to run Claude Code in that folder and accept the trust dialog.

Why

This prevents a custom agent definition from an untrusted folder from being silently restored with its full instructions and tools when a teammate is resumed.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful3 Signal2
Usage & Limits no docs found

New billing state: organization verification required#

New billing block state: "organization verification required" can now stop a session with its own message and error code

Details 0 0 Feedback
verification_required
What

Claude Code now recognizes a new reason a session can be blocked: verification_required, alongside the existing auth, billing, and context-limit reasons. It shows the label "organization verification required" and carries the error code cleared_verification_required, with matching handling added to the logic that classifies why an operation was blocked, the code that handles API errors, and the screen shown when a session is blocked.

Why

If your organization needs to complete some verification step, Claude Code can now show a specific, accurate message for that situation instead of a generic or mismatched error.

Improved
You'll notice
Useful3 Signal2
Teleport unclear

Teleport-to-cloud now precomputes a GitHub access check before handoff#

Teleporting a session to the cloud now checks GitHub access ahead of time and can fail earlier

Unclear Whether this precheck runs for any given account depends on the tengu_teleport_github_access_precheck gate, which is unread for this account, so nothing can be said about whether it is switched on.

Feature flag
tengu_teleport_github_access_precheck Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.268: on

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
What

Before moving a session to the cloud ('teleport'), Claude Code now looks up the project's git remote, and if it points to GitHub, kicks off a check in the background to confirm access to that repository. If that check finds GitHub isn't connected, or the repository can't be found, the teleport is stopped immediately with a specific message instead of failing later once it reaches the server.

Why

Catching a missing GitHub connection or an inaccessible repository up front means you find out sooner, rather than after the teleport has already started and failed on the server side.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal2
Cloud Sessions

New user-facing message for cloning a repo in the cloud without GitHub connected#

New message explains how to connect GitHub when a cloud session needs to clone a repo

Details 0 0 Feedback
/web-setup
What

When a cloud or remote session needs to clone a repository but no GitHub account is linked to your Claude account, Claude Code now shows a dedicated message explaining this and pointing you to the fix: /web-setup if your local CLI already has a GitHub login, or the web connect-github page otherwise.

Why

This gives a clearer, more direct path to resolving a missing GitHub connection when a cloud operation like cloning a repository needs one, rather than a generic failure.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal2
MCP

MCP-over-HTTP tool exposure disables background tasks and unsandboxed commands#

Listing tools from HTTP-based MCP servers now runs in a restricted context with background tasks and unsandboxed commands disabled

Details 0 0 Feedback
What

When Claude Code lists available tools from an MCP server that uses the 'http' transport, it now does so inside an isolated context that has background tasks and unsandboxed (unrestricted) command execution turned off. This restriction is skipped if those things are already disabled globally.

Why

This limits what an HTTP-based MCP server can trigger just by being asked to list its tools, reducing the risk that listing tools from a remote server could kick off background work or run commands outside the sandbox.

Improved
You'll notice
Useful2 Signal2
Artifacts

Artifact tool: list_files/read_file now resolve and return a type object for type-locked files#

Artifact file listing and reading now include the artifact's declared type when the file is type-locked

Details 0 0 Feedback
What

When the artifact tool's list_files and read_file actions handle a file that is "type-locked" (tied to a specific artifact type), Claude Code now looks up that type's metadata and includes it as a type field in the response, alongside the existing from_type flag. The read action also now records type_named in its internal telemetry when the artifact has a title.

Why

This gives Claude Code more context about what kind of artifact a file belongs to when listing or reading it, which can help produce more accurate handling of type-specific files.

Improved
You'll notice
Useful2 Signal2
Bash Permissions

Bash permission check gets a fallback deny check based on cd/read paths when full AST parsing fails#

Bash permission checks get a fallback path-based deny check when full command parsing fails

Details 0 0 Feedback
What

When Claude Code can't fully parse the structure of a bash command to check permissions, it now runs a secondary check that scans the raw command text for cd directory changes and file reads, comparing any resulting paths against configured Read/Edit deny rules. This only runs when deny rules are actually configured. If this fallback check itself fails, the failure is logged as "semantics-path deny check failed" and Claude Code falls back to asking the user.

Why

This closes a gap where a command that couldn't be fully parsed might have bypassed deny rules entirely; now it gets a best-effort check instead of skipping straight to asking or allowing.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal2
Errors

New 'verification_required' error classification for API errors#

API errors can now be classified specifically as 'verification_required'

Details 0 0 Feedback
What

Claude Code's classification of errors coming back from the Anthropic API now includes a distinct verification_required category. It is checked before the existing repeated_529 check, and sits alongside other existing categories like rate_limit, capacity_off_switch, and prompt_too_long.

Why

Giving this kind of error its own category lets Claude Code (and its error handling and messaging) respond to a verification requirement differently than to rate limits or capacity issues, rather than lumping it in with other error types.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal2
Elsewhere

Bridge session fetch now blocked for third-party providers#

Bridge session fetches are now blocked outright for non-Anthropic providers

Details 0 0 Feedback
What

The internal bridge_session_get helper, used to fetch a session over the bridge, now checks upfront whether the active provider is Anthropic itself (first-party). If it isn't, the fetch is refused immediately, returning session:null and logging a new telemetry reason (bridge_session_get_3p_provider). Separately, this helper gained a useV2 override option, so it no longer always derives whether to use the V2 path solely from isCcrV2SessionCrudEnabled.

Why

This stops session-fetch requests from going out to the bridge when a third-party provider is in use, rather than attempting a fetch that presumably wasn't meant to succeed in that setup.

Improved
You'll notice
Useful2 Signal2
Artifacts no docs found

New artifact wake-subscription failure reason: session_device_bound#

New error explains why artifact wake subscriptions fail on desktop-bound cloud sessions

Details 0 0 Feedback
session_device_bound
What

Artifact "wake subscriptions" (which let a session be woken up by activity on an artifact) now report a specific new failure reason, session_device_bound, when the cloud session is tied to the desktop that started it, such as through Cowork or claude --cloud. This happens because of a trusted-device check, and it's now fully wired up: parsed from the server's response, shown to the user with a specific message, and checked at another point in the code.

Why

Users running a desktop-bound cloud session will now get a clear explanation of why wake subscriptions don't work for them, and know that retrying won't help, while publishing and reading artifacts are unaffected.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal2
Elsewhere

Blocked-content refusal reason can now surface a specific policy category#

Blocked-content refusal messages can now name the specific policy category that triggered them

Details 0 0 Feedback
What

When Claude Code's fast safety classifier blocks some content, it now tries to pull a <category> tag out of the classifier's raw response. If that category matches one of a known set, the refusal message now shows a bracketed category name (like [category name]) instead of always showing the same generic fallback message.

Why

This gives a more specific explanation of why content was blocked, when the classifier's response identifies a known category, instead of a one-size-fits-all message.

Improved
You'll notice
Useful2 Signal2
Telemetry unclear

Tool-call telemetry now suppresses detailed input fields in some sessions#

Tool-call telemetry now skips file paths, commands, and skill/subagent names in some sessions

Unclear What determines which sessions have these fields suppressed is not stated.

Details 0 0 Feedback
What

When Claude Code records telemetry for a tool call, it normally attaches detail fields like file_path, full_command, skill_name, and subagent_type. This now only happens when an additional check passes; in sessions where that check comes back true, none of these detailed fields are attached to the telemetry payload.

Why

This means some sessions send less detailed tool-call telemetry than before, likely to avoid capturing sensitive details like file paths or command text in those cases.

Improved
You'll notice
Useful2 Signal2
Hooks

WorktreeRemove hook result reporting overhauled#

WorktreeRemove hook now reports whether it actually ran, removed the worktree, or failed

Details 0 0 Feedback
WorktreeRemove
What

The WorktreeRemove hook, which can run when a worktree is being removed at session exit, when a subagent finishes, or when you delete a background session, now returns a structured result instead of a simple yes/no: not_configured, removed, or failed, each with a summary. If the hook reports failure or gives no output but the worktree directory is confirmed gone anyway, Claude Code now treats the removal as successful rather than reporting a failure.

Why

This gives clearer feedback about what actually happened during worktree removal, and avoids reporting a false failure when the hook didn't report cleanly but the worktree was in fact removed.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal2
Elsewhere

Short unrecognized model names are now tentatively allowed#

Short, unrecognized model names now get a further chance instead of being rejected immediately

Details 0 0 Feedback
What

When Claude Code encounters a model name it doesn't recognize, it used to reject it right away if it didn't match a known shape. Now, if the unrecognized name is classified as an "other" shape and is short enough, it's allowed to fall through to further allowed/blocked checks instead of being rejected on the spot.

Why

This avoids immediately blocking short model names that don't match a known pattern, giving them a chance to pass other validation instead of being turned away outright.

Improved
You'll notice
Useful2 Signal2
Git Safety

Directory-sync now verifies git config wasn't mutated mid-read before trusting it#

Directory-sync now detects if git config changed while being read and refuses to trust it

Details 0 0 Feedback
What

When Claude Code's directory-sync feature decides whether it's safe to run git in a synced checkout, it now takes a fingerprint of each git config file (its device, inode, size, and change time, plus a hash for small files, following symlinks) both before and after reading it. If the fingerprint changed during the read, or a follow-up check shows the config changed since it was read, Claude Code now refuses to run git there rather than trusting a config that might have been altered mid-read.

Why

This guards against acting on a git configuration that was modified while it was being read, which could otherwise lead to running git with stale or tampered settings.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal2
Sandbox Network

Commands carrying allowed_domains now force an 'ask' via the auto-mode classifier#

Commands with allowed_domains now always prompt for approval instead of being auto-allowed

Details 0 0 Feedback
allowed_domains
What

When a tool call is restricted to a sandbox network list and carries allowed_domains under the relevant sandbox mode, Claude Code's permission check now forces the decision to "ask" rather than letting an allow rule or hook approve it silently. The message explains that allow rules and hook approvals cover the command itself but not the specific hosts it's allowed to reach, and that only the auto-mode classifier can approve the allowed_domains list.

Why

This closes a gap where a command could be pre-approved without the specific network hosts it's allowed to contact also being vetted, ensuring host access still goes through the classifier meant to review it.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal2
MCP

MCP tool telemetry now sends hashed server/tool names even without consent#

MCP tool telemetry now sends hashed server and tool names even when full-name consent is withheld

Details 0 0 Feedback
What

The function that builds the MCP server and tool name fields for telemetry previously sent nothing at all when the user hadn't consented to sharing full names. Now, in that same no-consent case, it sends hashed versions of the server name and tool name (mcpServerNameHash and mcpToolNameHash) instead of omitting the fields entirely.

Why

This lets Claude Code's telemetry distinguish and count distinct MCP servers and tools in aggregate even without consent to see their actual names, since a hash reveals usage patterns without exposing the original name.

Improved
You'll notice
Useful2 Signal1
Group of 3 Background Agents

Background agent messages now depend on whether its output file can still be read#

Claude Code now tracks whether a background agent's output file is still readable and changes its guidance accordingly

Details 0 0 Feedback

What

  • A new canReadOutputFile flag is now tracked on background/async agent launches, defaulting to true, and set explicitly in several agent dispatch and relaunch code paths.
  • Status and notification messages for a stopped or interrupted background agent now check this flag: when it's false, Claude Code tells you to resume the agent and ask it for a status report, instead of suggesting you check its worktree or output file for partial work.
  • The message shown when a background agent from a previous session can't be restarted now also depends on this flag: if the output file can be read, it still suggests checking the worktree/output; if not, it suggests messaging the agent for a status report instead.

Why Not every background agent leaves behind a readable output file. This change makes the guidance Claude Code gives you match what's actually possible, instead of pointing you to a file you can't inspect.

Improved
You'll notice
Useful2 Signal1
Group of 4 Rate Limits no docs found

New group_pool overage scope for teams sharing a rate-limit budget#

Claude Code now recognizes a pooled 'team's shared budget' rate-limit scope with its own messaging, including in Slack

Details 0 0 Feedback
group_pool

What

  • A new overageScope/limitScope value, group_pool, is now recognized alongside the existing org spend-cap and channel scopes, representing a team's shared usage budget rather than an individual member's own cap.
  • Rate-limit messaging now has dedicated copy for this case: "You've hit your team's shared budget. Switch to another model... to continue," and when overage purchasing is available, "Run /usage-credits to raise it and keep using ${model} or switch models..." (otherwise it points to /model to switch models). It also points admins/users at claude.ai/admin-settings/usage.
  • The Claude-in-Slack usage schema (CLAUDE_IN_SLACK_V2) gained an optional limitScope field with values service/channel/group_pool, so denied requests in Slack report which kind of limit was hit.
  • The scope value itself is now parsed generically from a response header via a helper, instead of being hardcoded to the literal string 'channel', so other scope values (like group_pool) can be recognized and propagated through telemetry.

Why

This lets Claude Code tell users precisely when they've hit a team-wide pooled budget rather than their own individual limit, and point them at the right next step (raising the pool, switching models, or contacting an admin) instead of a generic rate-limit message.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Group of 2 Elsewhere unclear

Claude for Enterprise upsell now distinguishes signed-out users#

The Claude for Enterprise slash-command upsell now shows different messages for signed-out, policy-disabled, and org-gated users

Unclear Whether this new messaging is active for any given account is unread for this release; the tengu_c4e_slash_upsell gate was previously read on for this site's account and the anonymous baseline, and tengu_c4e_slash_upsell_shown has no recorded reading at all.

Feature flag
tengu_c4e_slash_upsell Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: on · compiled default in v2.1.268: off

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
/login

What

The upsell message shown for the Claude for Enterprise (C4E) slash command was reworked from a single, unconditional message into separate cases:

  • Users who are fully signed out (no API key and no OAuth credentials) now see a distinct message telling them so, rather than the generic Enterprise upsell.
  • Users whose command is turned off by a managed/policy setting see a policy-disabled message.
  • Users who are signed in but lack a C4E organization still see the original "ask your admin about migrating" message.

Each case now logs its own variant on the tengu_c4e_slash_upsell_shown telemetry event.

Why

Previously all users saw the same upsell text regardless of why the C4E command wasn't available to them, which was misleading for people who simply weren't signed in. Showing the correct message for each situation makes it clearer what a user actually needs to do.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Group of 4 Cloud Sessions no docs found

GitHub access checks now distinguish a 'not connected' account from other failures#

Claude Code now reports a specific github_not_connected reason when your account isn't linked to GitHub, instead of a generic failure

Details 0 0 Feedback
github_not_connected

What

  • GitHub App / linked-account access checks — used for Cloud sessions and background-task remote eligibility — now distinguish the case where the user's linked account simply isn't connected to GitHub at all, surfacing a specific github_not_connected reason/type instead of lumping it in with transient failures.
  • The routine-setup GitHub access check now returns a structured {hasAccess, reason} result instead of a plain boolean, with its own message for the github_not_connected case (separate from the generic "run /web-setup" message).
  • Cloud session bootstrap (teleportToRemote) now checks for this same github_not_connected state during its preflight checks and shows a dedicated failure message instead of the generic "app not installed" one. (This same code path also became better at picking a starting branch/commit when the local branch has diverged from, or shares no history with, the remote.)
  • The github_not_connected state is threaded through to the background-task remote-eligibility check and the cloud-access-reason UI, which shows a dedicated message pointing users to connect their account on the web or run /web-setup.

Why Previously, not having a GitHub account linked could look like the same generic error as a temporary connection problem. Now Claude Code tells you specifically that your account isn't connected and points you to fix it, rather than leaving you to guess.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Group of 3 Hooks

Session resume now carries SessionStart hooks through, including partial-history resume#

Resuming a session now properly forwards its SessionStart hooks, and can resume from just part of the transcript

Details 0 0 Feedback
SessionStart

What

  • Session resume/fork no longer passes hookMessages/hooksPromise directly to the startup path; instead it returns a sessionStartHooks promise wired through a new abortable "tail" queue. Resume also gained a precedingRows option, letting a caller resume from a subset of prior transcript rows instead of the full session.
  • When resuming a session from the picker, the session's recorded sessionStartHooks are captured and threaded through as pendingHookMessages into the resumed UI state.
  • Resumed sessions now propagate this sessionStartHooks field into pendingHookMessages when reconstructing state, alongside the existing sessionHooks field, which was previously missing from the restored-session object.

Why This ensures SessionStart hooks that fired for a session are correctly carried over when that session is resumed, so hook-driven setup isn't silently lost, and it also enables resuming from a partial transcript.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Group of 2 Plugins

Plugin settings now manage reloads automatically instead of telling you to run /reload-plugins#

Saving plugin settings no longer tells you to run /reload-plugins by hand; the app now prompts or queues the reload itself

Details 0 0 Feedback
/reload-plugins

What

  • The plugin settings screen now tracks whether a change you made needs a reload, and when you exit, it either does nothing, queues a deferred reload, or takes you straight into /reload-plugins, depending on what changed.
  • The confirmation message shown after saving plugin configuration (for both the regular schema-based config flow and the MCPB config flow) was shortened from telling you to run /reload-plugins yourself to a simple "Configuration saved." The enable/configure success message now uses a dynamic suffix instead of a hardcoded instruction to run /reload-plugins.

Why Previously you had to remember to manually run /reload-plugins after changing plugin settings. Now Claude Code tracks that need for you and either handles it automatically or prompts you at the right moment.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
MCP

MCP server configs are redacted (headers/env/args) before being surfaced/displayed#

MCP server details like headers, environment variables, and arguments are now redacted before being shown

Details 0 0 Feedback
What

When Claude Code displays or logs an MCP server's configuration, sensitive parts are now masked first. For servers connected over HTTP or SSE, headers are replaced with [REDACTED]. For servers run as local processes (stdio), environment variable values are replaced with [REDACTED] and command-line arguments are cleared. The server's URL or command itself also goes through a separate masking step. This applies to the mcp status, mcp list, and mcp get commands, as well as configuration diffs.

Why

MCP server configs often carry secrets like API keys or tokens in headers or environment variables. Redacting them before display prevents those secrets from being accidentally exposed on screen or in logs.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact file listing/reading now reports the Artifact's declared "type"#

Listing or reading artifact files can now mention the artifact's declared type in its response text

Details 0 0 Feedback
What

When Claude Code lists or reads files through the artifacts tool, the response text can now say the file comes from "an Artifact of type X" when the artifact has a declared type, rather than describing it as a plain artifact.

Why

This gives more descriptive, useful context about type-specific artifacts when their files are listed or read.

Improved
You'll notice
Useful2 Signal1
Sandbox Network

Domain-pattern validation rejects overly-broad wildcards for allowedDomains/deniedDomains#

Sandbox domain lists now reject overly broad wildcard patterns like *.com

Details 0 0 Feedback
allowedDomainsdeniedDomains
What

Entries in allowedDomains and deniedDomains (the sandbox's network allow/deny lists) must now be a real domain name, a single-level wildcard like *.example.com, localhost, or a bracketed IPv6 address. Overly broad patterns such as a bare * or *.com are rejected for allowedDomains; deniedDomains still allows a bare * since that means "deny everything".

Why

This prevents an accidentally or intentionally overbroad allow rule from opening network access far wider than intended, closing off a class of overly permissive sandbox configurations.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Clearer guidance that usage-credit toggles need a restart/new session#

Usage-credit toggle message now clarifies you must restart or start a new session for it to take effect

Details 0 0 Feedback
What

The message shown when 1M-token context usage credits are required now explicitly says that turning credits on only takes effect in a new session or after restarting Claude Code, rather than sounding like it applies immediately.

Why

This prevents confusion where a user enables credits, expects it to work right away, and doesn't realize a restart or new session is needed.

Improved
You'll notice
Useful2 Signal1
Plugins unclear

Plugin marketplace/details view computes a config-warning summary for the selected MCP client#

Plugin marketplace view now computes a configuration-warning summary for the MCP client tied to the selected item

Unclear What the computed warning summary actually displays or triggers in the UI is not stated.

Details 0 0 Feedback
What

In the plugin marketplace/details screen, Claude Code now identifies which MCP client (a connected tool or integration) the currently selected item belongs to, and computes a summary of any configuration warnings for that client.

Why

This appears to prepare the interface to surface configuration warnings relevant to the selected plugin's client, though the finding doesn't describe what is shown to the user as a result.

Improved
You'll notice
Useful2 Signal1
Sandbox

Relaxed sandbox mode gets its own summary text instead of a directory list#

Relaxed sandbox mode now explains itself in plain text instead of listing directories

Details 0 0 Feedback
What

When the filesystem sandbox (the mechanism that confines what files a command can read or write) is set to 'relaxed' mode, the permission-prompt summary no longer lists specific allowed and denied directories. Instead it plainly states that the sandbox does not confine commands to particular directories for reading or writing. Configured working and deny paths are still shown, but only as informational context. The summary also reminds Claude to leave Claude Code's own configuration, hooks, and skills, as well as git's hooks and configuration, untouched unless specifically asked to change them.

Why

A directory list implied restrictions that relaxed mode doesn't actually enforce; the new wording states plainly what relaxed mode does and doesn't do, while still warning against touching sensitive configuration.

Improved
You'll notice
Useful2 Signal1
Chrome & Browser

Chrome DevTools bridge now pushes external config to every connected peer, not just one#

Chrome DevTools bridge now pushes config updates to all connected devices, not just the selected one

Details 0 0 Feedback
What

The bridge relay client used for the Chrome DevTools connection gained two new methods: pushExternalConfigToPeer(deviceId, config) and pushExternalConfigToAllPeers(config). Messages sent over the bridge now carry a target_device_id. When a pairing event ('paired') occurs, the client now calls pushExternalConfigToAllPeers() to update every connected peer, instead of only updating whichever device was currently selected. A newly connected peer also receives its own targeted push.

Why

This keeps configuration consistent across every connected device rather than only the one currently selected, which matters when more than one device is bridged at once.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Artifacts no docs found

Artifact-store write guidance now distinguishes types with vs. without endpoints#

Artifact write guidance now tells the model plainly when a type has no writable store at all

Details 0 0 Feedback
run_script
What

When an Artifact (a piece of generated content Claude Code manages, like a shared document or canvas) declares a shared store, Claude Code gives the model guidance on how to write to it. That guidance now takes into account whether the artifact's type actually declares any endpoints (ways to write to the store). If it doesn't, the model is now told plainly that no store-write call is available for that type, rather than being pointed toward run_script as a possible option regardless.

Why

This stops the model from being nudged toward trying run_script to write to a store when that path doesn't actually exist for the artifact's type, avoiding wasted or confused attempts.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Memory/CLAUDE.md truncation warnings now name where content was cut#

Truncation warnings for CLAUDE.md and memory files now say exactly which line and text got cut

Details 0 0 Feedback
CLAUDE.md
What

When a memory file (such as CLAUDE.md) or its index gets truncated for being too long, the warning message now states exactly which line the cut started at, and where possible, quotes the first roughly 80 characters of that line.

Why

Previously the warning only said a file was too long, without saying where. Naming the exact line and showing its content makes it much easier to find and fix the part of a memory file that's causing content to be dropped.

Improved
You'll notice
Useful2 Signal1
Chrome & Browser

upload_image tool tightened to computer-tool screenshots only, with expiry guidance#

upload_image now only accepts computer-tool screenshots, with guidance on expiry and retry limits

Details 0 0 Feedback
upload_imagefile_upload
What

The upload_image tool's description was rewritten to narrow its scope: it now only accepts screenshots taken via the computer tool's screenshot action, not images a user has directly uploaded. It states that screenshot IDs expire a few minutes after being captured, so a screenshot should be uploaded right after it's taken. It also tells Claude not to reuse the ID from a failed upload, instead retaking the screenshot and retrying at most once, and never retrying after a user has declined. For files a user has attached, Claude is told to use file_upload instead.

Why

This prevents Claude from misusing upload_image for the wrong kind of file and avoids repeated failed upload attempts with a stale or already-rejected screenshot ID.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
WebFetch

WebFetch now explicitly blocks dotless/localhost hostnames with a dedicated error#

WebFetch now gives a specific error for localhost and other dotless hostnames, pointing to curl instead

Details 0 0 Feedback
What

WebFetch (the tool Claude Code uses to retrieve a URL) now throws a specific error when the requested URL's hostname has no dot in it, such as localhost or a bare hostname. The error tells the user to use curl via the Bash tool instead. The tool's own description was also updated with this caveat.

Why

WebFetch was never able to reach local servers, but previously the failure was less clear. Now the error explains why it failed and points directly to the working alternative for hitting something running on your own machine.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Managed Settings unclear

Managed-settings 'notices' surfaced separately from errors#

Managed-settings startup output now separates non-error notices from actual errors

Unclear Whether the tengu_managed_settings_validation_errors gate is on for any account is unread, so nothing can be said about its current state.

Details 0 0 Feedback
What

When Claude Code starts up and reports on managed settings (organization-provided configuration), it now also collects and prints non-error "notices" under their own "Managed settings notices:" heading, separate from the existing reporting of fatal errors and invalid entries.

Why

This lets Claude Code flag things worth knowing about managed settings without implying something is actually broken, and keeps genuine errors from being buried among informational notices.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Plugins

Plugin status listing now flags org-required MCP plugins#

Plugin status now shows "required by your org" when a loaded MCP plugin is mandated by org settings

Details 0 0 Feedback
/pluginclaude mcp
What

The status report shown by /plugin (and claude mcp) now adds the text "required by your org" next to a plugin's status line when that plugin is enabled and your organization's settings mark it as required. This is shown alongside the existing statuses for disabled plugins, plugins that loaded with errors, and plugins that loaded normally.

Why

This makes it clear at a glance which plugins are enabled because your organization requires them, rather than by your own choice, so you understand why a plugin can't simply be turned off.

Improved
You'll notice
Useful2 Signal1
Git Safety

New git-safety instruction in the commit/PR prompt template: avoid bulk git add#

Commit/PR guidance now warns against bulk git add -A or git add .

Details 0 0 Feedback
What

The built-in guidance Claude Code follows when committing changes or creating pull requests now includes a warning to stage files by name rather than using git add -A or git add ..

Why

Bulk-adding all files can accidentally sweep in things like .env files, credentials, or large binary files that shouldn't be committed; staging specific files by name avoids that risk.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Model Access

New "model not available for your account" validation error#

New clearer error when a chosen model isn't available for your account

Details 0 0 Feedback
What

When Claude Code checks whether a requested model can be used, it now tells the difference between a permission problem and a generic API error. If your account simply doesn't have access to the model you asked for, you'll now see a specific message: "Model '...' isn't available for your account."

Why

This makes it clearer when a model failure is because of account access rather than a transient API issue, so you know to check your plan or permissions instead of retrying or debugging a connection problem.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Artifacts unclear

Publish/artifact content-type gate broadened beyond exact text/html#

Live/reseed artifact publishing now accepts a broader set of content types, not just exact text/html

Unclear The finding does not list which other content types are now included.

Details 0 0 Feedback
What

The check that decides whether live or reseed publishing options are available for an artifact now tests the content type against a set of allowed values instead of requiring it to be exactly text/html.

Why

More kinds of published artifact content can now use the live/reseed publishing options, where previously only content typed as exactly text/html qualified.

Improved
You'll notice
Useful2 Signal1
Plugins

Plugin menu shows auto-reload deferred/queued state with new copy#

Plugin menu now tells you when plugin changes are queued to apply after the current response finishes

Details 0 0 Feedback
/reload-plugins
What

A new helper detects when changes to plugins (add-ons that extend Claude Code) need a reload to take effect, and reports it as either "deferred" or "queued" via telemetry. When a response is still being generated, Claude Code now shows: "Plugin changes apply when the current response finishes (/reload-plugins is queued)."

Why

This makes it clear that plugin changes made mid-response aren't lost or ignored; they're just waiting for the current response to finish before /reload-plugins applies them.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Push-default remote detection now returns multiple candidate remotes#

Git push permission rules can now include both origin and a custom pushDefault remote at once

Details 0 0 Feedback
remote.pushDefault
What

When Claude Code figures out which git remotes to grant push permission for (so it can suggest a rule like git push origin *), it now returns multiple candidate remotes instead of picking just one. It includes origin when present, plus whatever remote is configured as remote.pushDefault, as long as that name fits an expected naming pattern.

Why

Repos that push to both origin and a separate configured push remote (like a fork or an upstream) now get permission rules covering both, instead of Claude Code having to choose only one and potentially still prompting for the other.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Monitor Tool

Bash monitor timeout message now reports event count and distinguishes flush/bounded behaviour#

Bash monitor timeout messages now report how many events fired instead of a generic message

Details 0 0 Feedback
What

When a background monitor watching a running bash command times out, Claude Code used to show a flat "[Monitor timed out — re-arm if needed.]" message. Now the message reports how much time passed and how many events the monitor actually delivered before it expired, or says plainly that no events were delivered. Monitors also gained a way to flush pending events and count how many have fired, plus a "bounded"/"quiet" mode that can flush accumulated output right before the timeout fires instead of just cutting off.

Why

This gives a clearer picture of whether a monitor missed activity or simply saw nothing happen, making it easier to decide whether to re-arm the watch or move on.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact publish files copy-by-artifact now infers contentType from destination path#

Publishing an artifact file copy now figures out its content type from the destination path automatically

Details 0 0 Feedback
What

When publishing an artifact and copying a file into it (whether given as a plain source string, a {from, ...} entry, or a {artifact, path} copy), Claude Code now works out the file's content type from where it's being placed, combined with any content type you explicitly set. Previously, the content type was only recorded when you specified it yourself via {from, contentType}; otherwise it wasn't carried through at all.

Why

This fills in a detail that used to require the file's content type to be set by hand for these copy forms, so files copied by path or by referencing another artifact are more likely to be published with the right type without extra input.

Improved
You'll notice
Useful2 Signal1
Artifacts no docs found

New deny path for asset saves outside working folders in no-consent-surface sessions#

Artifact asset saves outside the working folder are now auto-denied when no one can approve the prompt

Details 0 0 Feedback
What

Artifacts can save files (read_asset requests) outside the session's normal working folders, but only with the user's approval. In sessions where there's no way to show that approval prompt at all — such as Cowork or local-agent sessions running without a live user to ask — this request is now automatically denied instead of falling through to whatever the previous logic happened to produce.

Why

This closes a gap where a permission request that can never be answered could previously behave unpredictably; now it's refused outright, keeping asset saves confined to the working folders when there's no one present to grant an exception.

Improved
You'll notice
Useful2 Signal1
Teleport

Teleport failure message now suggests /web-setup and points users to retry#

Teleport failure messages now suggest running /web-setup to reuse your GitHub login, then retrying

Details 0 0 Feedback
/web-setup/teleport
What

When a teleport to the cloud fails or is blocked on a precondition, the error message now suggests running /web-setup (which connects your GitHub account using your local gh CLI login) to reuse your existing GitHub CLI login, then tells you to rerun /teleport (which pulls a Claude Code on the web session into your terminal).

Why

This turns a teleport failure into an actionable message, giving you a concrete next step to fix a missing GitHub connection instead of just reporting that it failed.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
MCP

MCP 'needs auth' servers are now tracked and surfaced once per session/persistently#

Claude Code now avoids repeatedly nagging you about the same MCP server needing authentication

Details 0 0 Feedback
What

When an MCP server (a connected external tool server) needs authentication, Claude Code now keeps track of which servers it has already flagged to you, both for the current session and persisted across sessions (with a cap on how many are remembered). Once a server successfully connects, it is cleared from that list.

Why

This stops the same 'needs auth' notice from being shown over and over for a server you already know about, while still re-flagging it if it later needs attention again.

Improved
You'll notice
Useful2 Signal1
Permissions

Permission-prompt tool cards get structured rendering#

Permission prompts get a new structured 'card' layout with truncated values and an overflow indicator

Details 0 0 Feedback
What

Permission-request prompts (the ones asking whether to allow a tool action) can now render as a structured "card": a bold question, informational lines, and values that are dimmed and truncated to fit the available width, with a "… (+N more lines)" indicator when content is cut off. The prompt display checks whether this card layout fits within a height budget before using it, falling back to the old plain-text rendering if it doesn't fit.

Why

This makes permission prompts easier to scan by giving them consistent visual structure, while still falling back to the simpler text display when there isn't enough room to show the card properly.

Improved
You'll notice
Useful2 Signal1
Elsewhere

@mention file references get a distinct 'not read' rendering#

Files referenced with @-mention but not actually read are now labeled '(not read)'

Details 0 0 Feedback
@mention
What

When a message references a file using an @-mention but that file was never actually read, Claude Code now renders it distinctly as 'Referenced (not read)', listing the mentioned names.

Why

This makes it clear when a file you mentioned wasn't actually opened and read into context, instead of leaving that ambiguous.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful2 Signal1
Auth no docs found

New VerificationRequiredError surfaces its message verbatim during OAuth login#

Login errors that require extra verification now show their exact message instead of a reworded one

Details 0 0 Feedback
VerificationRequiredError
What

The login flow now recognizes a new error type, VerificationRequiredError. When this specific error occurs, Claude Code marks it to be shown verbatim, meaning the original error message is displayed exactly as received rather than being reformatted or summarized.

Why

This ensures that when a login attempt needs extra verification, you see the precise message from the server rather than a generic or altered version of it, which should make it clearer what to do next.

Improved
You'll notice
Useful1 Signal1
Group of 3 Plugins

Plugin manager waits for pending toggles and clarifies when changes apply#

The plugin manager now waits for enable/disable actions to finish and tells you if changes apply immediately or need a reload

Details 0 0 Feedback
/reload-plugins

What

  • Closing the plugin manager menu after toggling plugins used to show a static reminder message immediately. Now it tracks in-flight enable/disable promises and, if any are still pending, waits for all of them to settle before returning to the menu, instead of firing the reminder text before the toggle finished.
  • The reminder text is now conditional on a new changesApplyOnClose flag: when set, plugin-enable confirmations say the change applies as soon as the menu closes; otherwise they still tell you to run /reload-plugins.
  • The installed-plugins management screen now receives this changesApplyOnClose prop, wired to the same "needs refresh" state used for the reload prompt.

Why This avoids showing a misleading confirmation before a plugin toggle has actually finished, and makes clear whether you need to run /reload-plugins or the change already took effect.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful1 Signal1
Group of 3 Teammates unclear

Resumed in-process teammates can show a definition-change notice#

When an in-process teammate is resumed, Claude Code can now tell you its agent definition has changed

Unclear What kind of notice definitionNotice carries or when it is set is not stated.

Details 0 0 Feedback

What

  • resumeInProcessTeammate's return value gained a definitionNotice field, threaded through from a new parameter at the call site, alongside the existing agentId/taskId/resumedMessageCount.
  • When a not-running teammate (subagent) is resumed in-process, the success message shown now appends this definitionNotice text (as a space-prefixed suffix) if present, in addition to the existing text about prior messages or a missing transcript.

Why This surfaces a warning when a teammate's underlying agent definition has changed since it last ran, so resuming it doesn't silently continue under stale assumptions about what the agent does.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful1 Signal1
Group of 2 MCP

MCP server screens show a resolved endpoint instead of the raw command#

Settings screens for MCP servers now display a resolved displayEndpoint rather than the raw config command

Details 0 0 Feedback

What

The Settings screens for MCP (Model Context Protocol) servers now compute a displayEndpoint value for each server, covering stdio, sse, http, and claudeai-proxy connection types. This is used across the server status/detail panel, the tools-list screen, and the individual tool-detail screen.

  • The server detail panel now only shows a "Command:" row when the resolved endpoint actually differs from the raw command written in the config, showing the resolved endpoint in that case instead of the literal config string.
  • The tools-list and tool-detail screens now also receive this computed displayEndpoint value as part of the server information passed to them.

Why

Raw config commands can be less meaningful than the actual resolved connection endpoint. Showing the resolved endpoint (and only showing a separate command line when it adds information) makes it easier to understand what an MCP server actually connects to.

Improved
You'll notice
Useful1 Signal1
Group of 4 Chrome & Browser no docs found

Browser MCP tools gain a global isDisabled kill-switch#

Browser-control tools like switch_browser, list_connected_browsers, and select_browser now check a kill-switch before acting

Details 0 0 Feedback
select_browser

What

The Chrome/browser MCP tool-call path now checks isDisabled?.() before doing any work, across dispatch, tabs_context lookup, switch_browser, list_connected_browsers, select_browser, connection watchers, and tool listing. When it's disabled:

  • list_connected_browsers returns Unknown tool: list_connected_browsers instead of running.
  • switch_browser and the computer-use 'type' action return a disabled/'Unknown tool' response instead of proceeding.
  • select_browser returns Unknown tool: select_browser; its success message also changed from 'Connected to browser' to 'Selected browser'.

Why

This gives Claude Code a single, central way to turn off browser-control tools entirely (for example, in an environment where automated browser control shouldn't be available) rather than needing each tool to fail in its own way.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful1 Signal1
Plugins

Plugin git/marketplace error output now redacts repo URLs#

Plugin and marketplace git error messages now hide repository URLs instead of showing raw output

Details 0 0 Feedback
What

When a git clone, fetch, or checkout fails while installing a plugin or marketplace, Claude Code used to show the raw error text from git, which can include the full remote repository URL and sometimes embedded credentials. Error messages are now passed through a redaction step that masks the URL before it's shown to the user or written to logs. A related helper produces a safe version of the URL for log lines like git clone: url=....

Why

This prevents credentials or sensitive repository addresses from leaking into error messages or log files when a plugin or marketplace git operation fails.

Improved
You'll notice
Useful1 Signal1
Artifacts DB

write_db 'field' parameter validation tightened#

write_db's str_replace 'field' parameter now has a stricter length and character check

Details 0 0 Feedback
What

The field parameter used by write_db's str_replace operation used to be validated with a simple regular expression. It's now checked against an explicit length bound of 1 to 200 bytes plus a named rule: the field must name a single top-level key, with no dots, slashes, brackets, quotes, backslashes, control characters, or invisible formatting characters, and it can't be the reserved __name__ key.

Why

This closes off ways a malformed or crafted field value could reference something other than a simple top-level key, such as by using path-like separators or hidden characters.

Improved
You'll notice
Useful1 Signal1
Elsewhere

Away-summary generator now caps repeated failures and coordinates with a background job scheduler#

The 'away summary' recap now stops retrying after repeated failures and avoids overlapping generations

Details 0 0 Feedback
What

Claude Code can generate a summary recap of what happened while you were away (after the terminal window was blurred/unfocused). This generator now tracks how many times in a row it has failed during a given turn and stops trying again once it fails three times. It also skips starting a new generation if one is already in progress. The way this background work is saved and tracked internally was also reworked.

Why

This prevents the away-summary feature from repeatedly failing and retrying in a loop, or from running duplicate generations at once, making it more predictable when it fails and quieter when it does.

Improved
You'll notice
Useful1 Signal1
Plugins unclear

Plugin enable/disable toast no longer hard-codes "Run /reload-plugins to apply."#

Plugin enable/disable messages no longer always tell you to run /reload-plugins

Unclear It is unclear what determines the replacement fragment shown in each case, or whether it still points to /reload-plugins in most situations.

Details 0 0 Feedback
/reload-plugins
What

When you enable, disable, update, or uninstall a plugin, or disable/uninstall one via a settings file, Claude Code used to always append the fixed instruction "Run /reload-plugins to apply." to the confirmation message. That fixed text is now gone, replaced by a fragment that is supplied separately depending on the situation.

Why

This lets the confirmation message vary by context instead of always pointing you to /reload-plugins, which is useful since /reload-plugins lets you apply plugin changes without restarting Claude Code.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful1 Signal1
Model Catalog

Served model catalog fetch surfaces credential-specific access errors#

Model catalog errors now flag when a credential specifically can't read the served list

Details 0 0 Feedback
What

When Claude Code fetches the server-provided list of models and gets back an error response, it now parses the error body to check whether the problem is credential-related. If so, it appends '(this credential cannot read the served list)' to the logged message and returns this more specific error, instead of a generic HTTP-status error.

Why

This makes it clearer, from the error itself, when the model list failed to load because of a credential permissions problem specifically, rather than an unspecified server error.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
Under the hood
Useful1 Signal1
Chrome & Browser

Chrome-extension bridge tool-call error handling replaced with generic timeout race#

Chrome-extension bridge errors lose their detailed, tailored troubleshooting messages

Details 0 0 Feedback
What

The function that produced specific error messages for failed Chrome-extension bridge tool calls (distinguishing timeouts, disconnects, and generic errors, each with its own troubleshooting advice) has been replaced with a generic timeout wrapper that just races the call against a timeout and returns a plain fallback value.

Why

Users hitting a Chrome-extension bridge failure will now see a generic outcome instead of a tailored explanation of what went wrong and how to fix it.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
Under the hood
Useful1 Signal1
Feedback

Feedback survey followup payload now whitelists included transcript/session fields#

Feedback survey followups now send only a fixed, named list of fields instead of a free-form object

Details 0 0 Feedback
What

When you submit a followup to a feedback survey, Claude Code now builds the data it sends from a fixed list of named fields: latestAssistantMessageId, message_count, datetime, description, surface, platform, gitRepo, commitSha, remoteWorkspace, remoteSessionId, version, transcript, subagentTranscripts, rawTranscriptJsonl, recentSessionTranscripts, and debugLog. Previously the submission passed through whatever object it was given.

Why

Restricting the payload to a known allowlist of fields prevents unintended or extra data from being included in a feedback submission.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful1 Signal1
Elsewhere

Task-status tool result now conditionally omits output file path based on available tools#

Background task status can now omit the output file path depending on which tools are available

Details 0 0 Feedback
SendMessage
What

When reporting the status of a background task, Claude Code now checks which tools are available to it. If that check fails, the report omits the output file path, forcing the task to report back only via SendMessage rather than pointing to a saved output file. This is in addition to an existing check based on webFetchSavedFiles.

Why

This prevents background tasks from referencing an output file path in cases where the tools needed to make use of it aren't actually available.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful1 Signal1
Auth

OAuth API key creation can now surface a verification-required error distinctly#

OAuth API key creation now surfaces a distinct 'verification required' error instead of a generic failure

Details 0 0 Feedback
What

When creating an API key via OAuth fails, Claude Code now checks the underlying error response for a verification-required condition. If found, it throws a specific error carrying that detail instead of falling through to the previous generic 'request failed' error.

Why

This lets Claude Code (and anyone debugging the failure) distinguish a case where additional verification is needed from other kinds of API key creation failures.

Improved
You'll notice
Useful1 Signal1
Elsewhere

Token-cost validation caps values at 10,000 instead of allowing any finite positive number#

Per-model cost figures in config are now capped at 10,000 instead of allowing any finite positive number

Details 0 0 Feedback
What

When Claude Code validates per-model cost settings (input, output, cache-read, cache-write pricing), a cost value now must be no greater than 10,000. Previously any positive finite number was accepted; a config with a cost figure above 10,000 now fails validation instead of being allowed through.

Why

This catches unreasonably large cost values in configuration, which were likely typos or misconfigurations rather than intentional, by rejecting them at validation time instead of silently accepting them.

Improved
You'll notice
Useful1 Signal1
Artifacts unclear

Artifact copy/read blocked-message text consolidated with new "Copying from this artifact is" phrasing#

Artifact copy/read block messages consolidated, plus a new check for a headless capability flag

Unclear The finding does not say what the new headless capability check is used for beyond being checked.

Details 0 0 Feedback
What

The code that builds the error message shown when a deny rule blocks reading or copying from an artifact was consolidated into one shared helper, which now produces one of three phrasings depending on the situation: "Copying from this artifact is", "Artifact reads are", or "Reading this artifact is" blocked by a rule. A separate new helper also checks whether a fetched artifact's capabilities include a headless comment flag.

Why

This is mostly an internal cleanup that produces more precise, situation-specific wording when an artifact read or copy is blocked by a permission rule.

Improved
You'll notice
Useful1 Signal1
Auth

OAuth local-callback port selection now takes a configurable range/fallback and adds a last-resort ephemeral-port bind#

OAuth login's local callback port picking is now configurable and adds a last-resort random free port

Details 0 0 Feedback
What

When Claude Code logs in via OAuth, it opens a temporary local web server to receive the login callback and needs a free network port for it. The function that picks this port now takes a configurable range and fallback port instead of hardcoded values.

  • If no port in the configured range is free, and the fallback port is also taken, Claude Code now tries one more thing: asking the operating system to hand it any free port, before giving up.
Why

This makes OAuth login more resilient on machines where the usual port range or fallback port is already in use, reducing login failures due to port conflicts.

Improved
You'll notice
Useful1 Signal1
Cloud Sessions

Cloud headless session creation surfaces bundling notices#

Creating a cloud headless session now surfaces bundling notices as messages, not just failures

Details 0 0 Feedback
What

When Claude Code creates a remote or cloud headless session, it can now report "notice"-level messages during the bundling step (packaging code to run remotely), in addition to the existing handling for outright bundling failures.

Why

This gives you visibility into non-fatal issues during bundling that previously would have gone unreported unless bundling failed outright.

Improved
You'll notice
Useful1 Signal1
Self-Hosted Git no docs found

Push-on-release message clarifies runner-side credential behaviour and pushInsteadOf skip#

Push-on-release failure message now explains credential and pushInsteadOf behavior more precisely

Details 0 0 Feedback
pushInsteadOf
What

The error message shown when a push-on-release fails for a governed git mount was reworded. It now says "this runner-side push does not use the session's git-mount push URL," replacing older wording that described the governed mount as simply read-only. When a remote name is involved, the message now also explains that git skips every url.*.pushInsteadOf rule, including global and system-level ones, for this particular push, so the credential being used has to work on its own without relying on such a rule.

Why

This gives a more accurate explanation of why a runner-side push might fail with credential errors, clarifying that push-URL rewriting rules don't apply and the credential must work unassisted.

Improved
You'll notice
Useful1 Signal1
Remote Control unclear

Header status badge is clickable and hoverable, with telemetry on click#

The new header status badge can be hovered and clicked, and clicking it sends a telemetry event

Unclear The finding does not say what clicking the badge actually does beyond sending telemetry.

Details 0 0 Feedback
What

The status indicator added to the CLI header (showing Remote Control's connection state) now responds to the mouse: hovering highlights it, and clicking it fires a click telemetry event that records the status label shown at the time.

Why

Making the badge interactive suggests it is meant to do more than just display status; the telemetry lets Anthropic see how often people interact with it.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
Under the hood
Useful1 Signal1
Model Catalog no docs found

Model catalog fetch now reports a distinct 'credential cannot read served list' refusal#

Model list now reports a specific reason when your credential can't fetch the served catalog

Details 0 0 Feedback
credential_scope
What

When Claude Code tries to fetch the current list of available models from the server and is refused specifically because the credential in use doesn't have permission to see it, a new handler now fires a model_catalog_primary telemetry event recording the decision as 'off' with the reason credential_scope, and prints a console note explaining that the built-in, compiled-in model list is being used instead.

Why

This makes it clearer, both to telemetry and to the user via the console note, why the served model list wasn't used and the fallback list is in effect, distinguishing it from other kinds of fetch failures.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful1 Signal0
Artifacts unclear

Comments listing summary text can omit the 'open' count#

Artifact comments list header can now hide the 'N open' count and gains a new leading label

Unclear The condition that suppresses the open count and the content of the new leading text are not specified.

Details 0 0 Feedback
What

The summary line shown at the top of an artifact's comments list can now leave out the "N open, " portion depending on a new condition, and the whole summary line now starts with a new leading piece of text.

Why

This changes what information appears at a glance in the comments list header, though the finding doesn't specify exactly when the open count is hidden or what the new leading text says.

Improved
You'll notice
Useful1 Signal0
Chrome & Browser

Hidden tabs_context_mcp lookup failure message now covers offline/asleep browser host#

Browser tab-lookup timeout error now also suggests the browser's machine may be offline or asleep

Details 0 0 Feedback
What

When a hidden lookup used internally by navigate (tabs_context_mcp) times out waiting for a response, the resulting error message now also mentions that the machine running the Chrome extension's browser could be offline or asleep, in addition to the existing possibility that the extension itself was just slow to start.

Why

This gives a more accurate and actionable explanation when browser-based tools fail to respond, since a sleeping or disconnected machine is a distinct problem from a slow-starting extension and points toward a different fix.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful1 Signal0
Elsewhere

Background subagent progress-check instructions simplified to drop tool-based polling suggestion#

Blocked duplicate subagent launches now only suggest messaging it for a progress update, not a separate polling tool

Details 0 0 Feedback
SendMessage
What

When Claude Code blocks launching a subagent because a duplicate is already running, the instructions it shows no longer mention checking on progress with a dedicated tool. They now simply suggest sending the running subagent a message via SendMessage if you need a progress report.

Why

This simplifies the guidance shown in this situation to a single, consistent way of checking on a running subagent's progress.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful1 Signal0
Artifacts

Artifact fetch "ask" permission message wording changed from URL-fetch framing to artifact-read framing#

The approval prompt for fetching a claude.ai artifact now describes it as reading the artifact, not fetching a URL

Details 0 0 Feedback
What

When Claude Code asks for permission to fetch a claude.ai artifact, the wording of the prompt changed. It previously said an existing "ask" rule covers fetching the URL; it now says the rule covers reading the artifact.

Why

The new wording more accurately describes what's actually happening (reading an artifact) rather than framing it as a generic URL fetch, which should make the permission prompt less confusing.

Improved
Under the hood
Useful1 Signal0
Chrome & Browser

Chrome bridge "Bridge received" debug logging now gated behind isDebugEnabled#

Chrome bridge's verbose "Bridge received" debug log now only prints when debug mode is actually enabled

Details 0 0 Feedback
What

When Claude in Chrome's bridge receives a message it doesn't recognize, it used to always log the full payload (Bridge received: ...) for debugging. Now this logging only happens if debug mode is enabled; if there's no way to check, it defaults to still logging.

Why

This avoids dumping potentially large or sensitive message payloads to logs during normal use, restricting the verbose output to when debugging is actually turned on.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Improved
You'll notice
Useful1 Signal0
Background Agents

Agent 'check output' guidance changed to 'send it a message'#

Guidance for checking a background agent's output now says to send it a message instead

Details 0 0 Feedback
What

When a background agent (a task Claude Code has running in the background) is still in progress, the guidance text shown changed from "You can check its output using the [tool] tool" to "Send it a message with [tool] to retrieve its result."

Why

This changes how Claude is told to interact with a running background agent, framing it as sending a message rather than just checking output, which should make Claude use the tool the way it's actually meant to be used.

Improved
You'll notice
Useful1 Signal0
Artifacts

Artifact page-data publish emoji wording change#

Artifact publish error message now says "emoji" instead of "icon" is kept when updating an existing artifact

Details 0 0 Feedback
What

When you try to publish page data for an artifact and Claude Code asks you to pass the existing artifact's URL to update it instead of creating a new one, the message now says the artifact's "emoji" is kept, where it previously said its "icon" is kept.

Why

This is a wording correction so the message matches what the artifact actually carries forward when it's updated.

26 entries

Bug Fixesopen

Fixed
Under the hood
Useful2 Signal2
SDK

SDK reinit now redelivers pending permission/dialog requests on full reinit too#

SDK session reinit now resends pending permission and dialog requests even on a full reinit

Details 0 0 Feedback
What

When the Agent SDK's control protocol reinitializes a session and has to rebuild the full system prompt and response, it now also includes any pending permission requests and pending user dialog requests in that response. Previously this information was only resent on the lighter-weight reinit path, not the full one.

Why

This closes a gap where a full reinit could otherwise drop or lose track of permission and dialog requests that were still waiting for an answer, so consumers of the SDK see them either way.

Fixed
You'll notice
Useful2 Signal1
Group of 2 Elsewhere

Model picker now backfills default catalog models when catalog source is a flag override#

When the model catalog is served via a flag override, the model picker now also includes the default catalog's models

Details 0 0 Feedback

What When Claude Code builds the list of models shown in the model picker, and the active model catalog came from a "flag" source (a served override), it now also merges in the models from the default catalog that aren't already present. Previously, the default catalog's models were only added when there was no override at all.

Why This prevents models from disappearing from the picker just because a flag-based catalog override is active, keeping the full set of available models visible.

Fixed
You'll notice
Useful2 Signal1
Elsewhere

Command-suggestion suppression while browsing history now respects edits#

Command suggestions no longer disappear when you edit a history entry while browsing past commands

Details 0 0 Feedback
What

While paging through your input history (previous commands you've typed), Claude Code suppresses command/prompt suggestions. Previously this suppression happened any time a history entry was selected. Now it only happens when the selected history entry hasn't been edited by you.

Why

If you pull up a past command from history and start editing it, you'll now get suggestions again as you type, instead of suggestions staying hidden just because you started from a history entry.

Fixed
You'll notice
Useful2 Signal1
Elsewhere

Session-message cache priming now merges into an in-flight cache entry instead of skipping#

Session-message cache priming now merges into an already-in-progress cache load instead of dropping the new data

Details 0 0 Feedback
What

When Claude Code primes its cache of session message UUIDs and a cache entry for that session is already being built, it used to simply skip the new priming request and do nothing further. Now it waits for the in-flight cache load to finish and merges the newly supplied UUIDs into the resulting set.

Why

This prevents UUIDs from being silently lost when two priming calls for the same session overlap, ensuring the cache ends up complete rather than missing entries that arrived while a load was already underway.

Fixed
You'll notice
Useful2 Signal1
Elsewhere

setTimeout/setInterval globally proxied to clamp overflow delays#

Claude Code now clamps overly long setTimeout/setInterval delays instead of letting them silently misbehave

Details 0 0 Feedback
What

Claude Code now wraps the global setTimeout and setInterval functions at startup so that any delay value greater than 2147483647 (Node.js's 32-bit limit for these timers) is automatically clamped down to that maximum before the timer runs. When a clamp happens, it logs a warning and, once per relevant case, records telemetry about it.

Why

Without this, a timer scheduled with too large a delay would silently fire almost immediately instead of after the intended wait, an easy-to-miss bug; clamping it and warning makes that situation visible instead of silent.

Fixed
You'll notice
Useful1 Signal1
Group of 2 Errors

Insufficient-permission errors now classified as 'not_permitted'#

Claude Code now recognizes 403 permission errors distinctly and stops retrying catalog fetches that fail this way

Details 0 0 Feedback

What

  • When a server responds with a 403 error whose body contains the code oauth_scope_insufficient, Claude Code now classifies it specifically as not_permitted (with an errorCode of oauth_scope_insufficient) instead of treating it as a generic HTTP error.
  • When fetching the marketplace/plugin catalog fails for this not_permitted reason, Claude Code now records a servedCatalogNotPermitted flag and short-circuits to using the cached catalog only, instead of retrying the network fetch.
  • Error results throughout this path can now carry an optional errorCode field.

Why

Before this change, a permissions problem could look like a generic network failure and cause Claude Code to keep retrying a fetch that was never going to succeed. Recognizing the specific 'not permitted' case lets it fail fast and fall back to cached data instead.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Fixed
You'll notice
Useful1 Signal1
Elsewhere

Bash command-substitution parsing hardened against untrusted backtick/$() bytes#

Bash command parsing now rejects unclear backtick or $() substitutions instead of guessing

Details 0 0 Feedback
What

The safety parser that analyzes bash commands before running them now specifically detects malformed or unaccounted-for backtick and $() command-substitution syntax, such as an empty or overrun backtick body, or an unsupported escape inside one. When it finds bytes in the command that its parse tree can't account for, it now downgrades the command to "too complex" instead of proceeding on a parse it can't fully trust.

Why

This closes a path where a command containing tricky or malformed substitution syntax could have been misread by the safety parser, by refusing to trust an uncertain parse rather than risk approving something incorrectly.

Fixed
You'll notice
Useful1 Signal1
Git Safety

Git URL validation now masks credentials in error messages#

Git URL validation now masks embedded credentials before showing an invalid-URL error, with clearer messages for wrong schemes

Details 0 0 Feedback
What

The validator for SSH git URLs was reworked so that, when it rejects an invalid URL, it builds a masked copy of that URL before putting it in the error message: any embedded username/password (userinfo) is replaced with ***, and query or fragment content is replaced with ***. Errors about a mismatched protocol now also distinguish between a scheme that's simply spelled wrong and other kinds of malformed input, with more specific messages for each.

Why

This stops credentials that were accidentally embedded in a git URL from being echoed back in plain text inside an error message, while giving clearer feedback about why a URL was rejected.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Fixed
You'll notice
Useful1 Signal1
Rate Limits

Rate-limit overage check now excludes 1M-context credit-clamp cases#

Rate-limit errors caused by needing 1M-context credits now show the correct dedicated message instead of a generic overage one

Details 0 0 Feedback
What

When Claude Code hits a 429 rate-limit response, it decides whether to show an 'extra usage' (overage) message or a different one. That check now specifically excludes cases where the error is actually about needing 1M-context usage credits, so those get routed to the dedicated usage-credits message instead.

Why

This prevents a case where a 1M-context credit issue was being mislabeled as a generic overage-disabled error, which would have pointed users toward the wrong fix.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Fixed
You'll notice
Useful1 Signal1
Skills

Skill descriptions reject angle brackets#

Skill descriptions can no longer contain angle brackets

Details 0 0 Feedback
What

When creating or improving a saved skill (a packaged set of instructions Claude Code can invoke), the description field now fails validation if it contains angle brackets (< or >). A new error message tells the caller to reword the description without them.

Why

This catches a class of malformed or unsafe skill descriptions earlier, at creation time, instead of letting them through.

Fixed
Under the hood
Useful1 Signal1
SDK

SDK bridge permission_request/notification handling hardened#

SDK bridge handles permission requests and malformed notifications more defensively

Details 0 0 Feedback
What

The SDK bridge (the layer that lets an external host application talk to Claude Code) now handles a few edge cases more carefully:

  • Errors while handling a permission request are now caught and logged instead of crashing unhandled.
  • Notification messages whose method field isn't a string are now dropped with a warning instead of being passed through.
  • Permission request messages are now validated with proper type checks on their tool_use_id and request_id fields, fixing what looks like a latent bug where the check referenced an undefined variable and so never worked as intended.
Why

These changes make the SDK bridge more robust against malformed or unexpected messages, preventing crashes and silently-broken validation.

Fixed
You'll notice
Useful1 Signal1
Remote Control

Bridge error now clears device selection via clearSelectionIfGone instead of unconditional reset#

Bridge errors now clear a selected device only if it's actually gone, not unconditionally

Details 0 0 Feedback
What

When the remote-control bridge reports an error while a device is selected, Claude Code now checks whether that device is still available (clearSelectionIfGone) instead of always clearing the current device selection and discovery state.

Why

This avoids unnecessarily dropping a valid device selection just because an unrelated bridge error occurred.

Fixed
Under the hood
Useful1 Signal1
Sandbox Network

Domain blocklist check gains cancellation via AbortSignal#

Domain blocklist check can now be cancelled mid-flight instead of just timing out

Details 0 0 Feedback
What

The internal check that looks up whether a domain is blocklisted now accepts a cancellation signal. If the check is aborted, it re-raises the abort instead of silently treating it as a failed check, and a cleanup step now always runs afterward to clear its timer.

Why

This distinguishes a genuinely cancelled lookup from a failed one, and prevents leftover timers from lingering after the check finishes or is cancelled.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Fixed
You'll notice
Useful1 Signal1
Elsewhere unclear

Escape-key double-press 'absorb' logic gained a second qualifying window#

Double-tapping Escape to interrupt now checks an additional timing window before deciding to absorb the keypress

Unclear The finding does not say what practical difference this makes to when a keypress is absorbed versus passed through.

Details 0 0 Feedback
Escape
What

Claude Code's logic for handling a quick double-press of the Escape key (used to trigger an interrupt gesture) now also checks a second timer, tracking when the last qualifying press happened, against a defined time window. This is in addition to the existing checks it already used.

Why

This is an adjustment to the timing rules that decide whether a second Escape press counts as part of the same gesture, likely intended to make the double-press detection more accurate.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Fixed
You'll notice
Useful1 Signal1
Elsewhere

Policy-block error detection extended to "required by your organization" phrasing#

Organization policy-block detection now also matches "required by your organization" phrasing

Details 0 0 Feedback
What

Claude Code's check for whether a CLI error means an organization's policy blocked an action now also recognizes messages phrased as "required by your organization", in addition to the existing "blocked by your organization's policy" phrasing.

Why

This means more organization-policy error messages get correctly identified and handled as policy blocks rather than being treated as some other kind of failure.

Fixed
Under the hood
Useful1 Signal1
Elsewhere no docs found

UI-close/render engine adds cross-instance requestId guard#

UI rendering now rejects events with a requestId from a different session instance

Details 0 0 Feedback
What

The validator that checks arguments for ui.render events (used to draw interactive UI elements) now also rejects an event if its requestId doesn't match the specific instance the UI element was originally drawn in, returning an error about "a requestId other than the instance the element was drawn in". Separately, the logging for ui.close events now logs the event's kind rather than the raw event object.

Why

This prevents a UI event meant for one session or instance from being mistakenly applied to a different one, closing a potential cross-instance mix-up when multiple UI elements or sessions are active.

Fixed
You'll notice
Useful1 Signal1
Artifacts

Artifact read permission check for WebFetch now runs a deny check both before and after network egress probing#

WebFetch's permission check for reading claude.ai artifacts now re-checks deny rules after probing network access

Details 0 0 Feedback
What

When WebFetch is used to read a claude.ai artifact, Claude Code now runs its deny-rule permission check a second time, after the step that probes network access and shows any consent surface, in addition to the check that already ran earlier. Only after this second check passes does the flow move on to handling ask rules.

Why

Running the deny check again after the network probe closes a gap where a deny rule might otherwise be missed if conditions changed between the first check and the actual network access.

Fixed
You'll notice
Useful1 Signal1
Elsewhere

URL host parsing hardened against protocol-relative and scheme-prefixed strings#

URL host parsing now rejects scheme-prefixed strings and strips whitespace before building fallback URLs

Details 0 0 Feedback
What

Before Claude Code builds a fallback https:// URL out of a bare host string, it now checks whether that string already looks like it starts with a URL scheme (something like foo: at the start) and bails out if so, instead of blindly prepending https://. It also now strips tab, newline, carriage-return, and surrounding whitespace characters from the string before parsing it.

Why

This closes off ways a crafted host string could be misinterpreted as pointing somewhere other than intended, such as smuggling in a different scheme or hiding characters in whitespace.

Fixed
You'll notice
Useful1 Signal1
Plugins

Session-plugin load-failure messages now redact URL credentials, not just query strings#

Plugin load-failure error messages now mask credential-looking URL segments, not just query strings

Details 0 0 Feedback
What

When a plugin loaded from a URL fails to load, the resulting error message used to only strip out query strings from that URL before showing it. Now a new helper scans the whole message for embedded URLs and also masks any segment that looks like it contains login credentials (matching an @ sign next to quote or bracket characters), in addition to still stripping query strings.

Why

This reduces the chance that a plugin load-failure message accidentally displays a URL containing a username, password, or token.

Fixed
You'll notice
Useful1 Signal1
Plugins

Plugin skill/monitor path checks now surface unreadable-path errors instead of silently treating them as absent#

Plugin loading now reports unreadable SKILL.md or monitors.json paths instead of treating them as missing

Details 0 0 Feedback
What

When Claude Code checks whether a plugin has a SKILL.md or monitors.json file, it previously used a simple yes/no check. Now it uses a three-way check: present, absent, or unknown (for example, when a permission error prevents checking). When the state can't be determined, Claude Code now logs a message noting the plugin and path that could not be checked and records a path-not-found diagnostic, rather than silently treating it as if the file didn't exist.

Why

This makes it clearer when a plugin fails to load because of a permissions or filesystem problem, rather than looking like the plugin simply doesn't have that file, matching how hooks.json loading already behaved.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Fixed
Under the hood
Useful1 Signal1
Telemetry

Datadog model-sanitization now runs on any defined model value, not just strings#

Datadog telemetry now sanitizes any defined model value, not just string ones, dropping events it can't sanitize

Details 0 0 Feedback
What

In the internal Datadog telemetry pipeline, the step that checks and cleans up the model field before sending an event used to only run if the model value was a text string. Now it runs whenever the model value is defined at all, including cases where it is something else, like a number or null. If the value can't be recognized as a known model, the entire telemetry event is now dropped rather than being sent with an unrecognized or malformed model field.

Why

This prevents malformed or unexpected model values from being forwarded in telemetry data, at the cost of silently dropping the whole event when the model field isn't a recognizable string.

Fixed
You'll notice
Useful1 Signal0
Elsewhere

Prompt-suggestion acceptance matching is now case-insensitive#

Matching your reply to a suggested prompt is now case-insensitive

Feature flag
tengu_prompt_suggestion Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: on · compiled default in v2.1.268: not a boolean we can read

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
What

When Claude Code checks whether what you typed matches a prompt it suggested (used for tengu_prompt_suggestion telemetry), it now compares the two strings case-insensitively instead of requiring an exact match.

Why

This means typing a suggested prompt back with different capitalization still counts as accepting the suggestion, giving more accurate telemetry about when suggestions are actually used.

Fixed
You'll notice
Useful1 Signal0
Auth unclear

CLI login OAuth-failure output gains a conditional extra newline#

Login failures over OAuth may now print an extra blank line before the error

Unclear What condition triggers the extra newline, and which login failure cases it affects, is not specified.

Details 0 0 Feedback
/login
What

When /login fails during the OAuth (the sign-in protocol Claude Code uses to authenticate with your Anthropic account) step, Claude Code now checks a condition before printing the "Login failed" message to the terminal's error output, and if it's met, writes an extra blank line first. The internal error-classification helpers used here were also renamed.

Why

This is a small formatting fix intended to make failed-login output easier to read in the cases where the extra line is triggered.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Fixed
Under the hood
Useful1 Signal0
MCP

Bug fix: wrong exception object interpolated into connected-client wiring error#

Fixed a bug where connected-client wiring errors logged the wrong exception

Details 0 0 Feedback
What

In the code path that adopts a connected MCP client, an error message logged when wiring fails previously referenced an unrelated variable instead of the actual exception that was caught. It now correctly logs the real caught error.

Why

This makes the "connected-client wiring failed" log message actually useful for diagnosing what went wrong, since it now shows the real error instead of an unrelated value.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Fixed
You'll notice
Useful1 Signal0
AskUserQuestion

Bug fix: malformed AskUserQuestion entry message stringified the wrong value#

Fixed a bug where a malformed AskUserQuestion entry's error message showed the wrong value

Details 0 0 Feedback
What

When AskUserQuestion receives input containing a question entry that isn't a properly formed object, the diagnostic message shown now correctly stringifies the actual malformed entry, instead of an unrelated variable left over from an outer loop.

Why

This makes the "[malformed question entry]" diagnostic actually show the problematic data, making it easier to see what was wrong with the input.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

8 entries

In Developmentopen

In dev
Nothing to try yet
Useful3 Signal3
Group of 3 System Prompt unclear

New coordinator_context and context_sections system-prompt injectors#

Claude Code can now inject named context sections and a coordinator's worker-tool list into the system prompt

Unclear Whether this is switched on for any account is unknown; the tengu_indexed_corbato gate controlling it has not been read.

Feature flag
tengu_indexed_corbato Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.268: off

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback

What

  • Two new context-injection types, coordinator_context and context_sections, are added to the existing set of system-prompt injectors (environment, model, session_context, etc). coordinator_context injects the list of worker tools available to a coordinator in multi-agent ("coordinator/worker") setups, and context_sections injects arbitrary named text sections (each with a name and text).
  • These same two injectors are also available as message attachments when building a conversation, with coordinator_context only injected when a new gate check passes.
  • The session-refresh logic used when resuming a session now builds a flat list of {name, text} sections (merged from user and system context) instead of separate fields, and always marks refreshed context as bare: true on the error path instead of silently returning stale context.
  • A gate that used to suppress the environment/model/output_style/session_context/instructions/date/language injectors entirely has been removed, so these now always run.

Why This lets Claude Code pass structured, named context (like a coordinator's list of worker tools) into the system prompt in a more organized way, and makes session resumption more reliable by always refreshing context sections instead of occasionally reusing stale data.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

In dev
Nothing to try yet
Useful3 Signal3
Sandbox unclear

New gated sandbox-boundary system-prompt text (tengu_elegant_ocean)#

New system-prompt text explains the sandbox's boundaries to the model, gated behind an unread flag

Unclear Whether this gate is enabled for any accounts is unread; it isn't known when or for whom this sandbox explanation appears.

Details 0 0 Feedback
What

A new block of instructional text can be added to the system prompt that explains, in detail, what the sandbox (the restricted environment a session runs in) does and does not give access to: which directories, which network destinations, and which credentials are available. It tells the model to report when something it needs is missing rather than try to work around the sandbox's limits.

Why

This is controlled by a gate called tengu_elegant_ocean, and nothing is yet known about whether or how it is being turned on for any account, so it isn't possible to say whether or when this text is currently shown.

In dev
Nothing to try yet
Useful2 Signal3
Conversation Threading no docs found unclear

Tool-additions mid-conversation tether reset gated by tengu_lucid_anchor#

Adding tools mid-conversation can still force a session reset, gated by an unread flag

Unclear Nothing has been read yet about how the tengu_lucid_anchor flag is set for any account, so it's unknown whether resets are currently being forced or avoided.

Feature flag
tengu_lucid_anchor Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.268: off

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
What

When tools are added partway through a conversation, Claude Code's server-side continuation planner decides whether to keep using the same underlying thread or reset and start a new one. A new check now controls this: if a flag called tengu_lucid_anchor is off, adding tools mid-conversation still forces the thread to reset rather than continue.

Why

This means whether tool additions can continue smoothly in the same thread, instead of forcing a reset, currently depends on this flag's setting.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

In dev
Nothing to try yet
Useful2 Signal3
Teleport unclear

Teleport-relay thinking-strip decision functions built but uncalled#

New but currently unused code was added to decide how to handle 'thinking' content after a teleport relay reverts

Unclear What the teleport relay feature does overall, and when the unused functions are meant to be wired in, is not stated.

Details 0 0 Feedback
What

Four new internal helper functions were added to decide whether to strip or mark 'thinking' content (Claude's intermediate reasoning output) after a "teleport relay" falls back to its standard path, and to log a cli_teleport_relay_thinking_settled event when that decision is made. Of these, only one function, which triggers the relay reverting to the standard path, is actually called anywhere in the current build; the three functions that would make the strip/mark decision and log the settle event are not called from anywhere.

Why

This appears to be groundwork for a feature that is not active yet, so it should have no visible effect for users in this release.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

In dev
Nothing to try yet
Useful2 Signal2
Group of 3 Telemetry

New CCR flags for event holding and dropping unwatched stream events#

Two new remote flags let the CCR client hold served-policy events and drop stream events nobody is watching

Feature flag
tengu_ccr_event_hold_enabled Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.268: on

tengu_ccr_drop_unwatched_stream_events Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.268: off

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback

What

  • A new eventHoldEnabled flag (on by default) enables holding of served-policy events, and a new dropUnwatchedStreamEvents flag (off by default) drops stream events entirely when no subscriber is watching them. Both are wired into the CCR (client-cloud relay) worker config.
  • The CCR client now passes dropUnwatchedStreamEvents at construction, and this can be toggled live via a GrowthBook-refresh subscription that calls setDropUnwatchedStreamEvents.
  • The CCR client also gains an eventHoldEnabled callback option, backed by a GrowthBook flag.

Why These flags give more control over event traffic in remote/CCR sessions, reducing unnecessary event delivery when nothing is subscribed and allowing event-holding behavior to be toggled remotely without a client update.

In dev
Nothing to try yet
Useful2 Signal2
Group of 2 Telemetry

Bash commands are now classified for telemetry#

Claude Code now parses bash commands into categories (like git, npm, docker) for internal telemetry

Details 0 0 Feedback

What

When Claude Code runs a command with the Bash tool, it now breaks that command down into structured pieces before recording it internally:

  • A command class and the program name (argv0), covering tools like git, gh, npm, pnpm, yarn, pip, uv, cargo, go, docker, and kubectl
  • The subcommand being used (for example git commit or gh pr), including a second-level subcommand for gh
  • Whether the command uses a pipe, redirect, chain (like &&), subshell, or heredoc, and how many simple commands it contains
  • Prefix commands such as sudo, env, time, nice, timeout, xargs, stdbuf, and caffeinate are stripped out first so the real command underneath is what gets classified

This breakdown is attached to Claude Code's internal telemetry events for bash tool use (success and error), behind an enhanced-telemetry setting.

Why

This is internal analytics, not a user-facing feature. It lets Claude Code understand what kinds of commands are being run in aggregate without needing to log the raw command text, which helps improve the product while limiting exposure of potentially sensitive command content.

In dev
Nothing to try yet
Useful2 Signal2
Status Bar no docs found unclear

PR/bridge status line gated by tengu_copper_thistle (defaults off)#

A combined bridge status and PR/branch segment in the status line is now gated behind tengu_copper_thistle

Unclear Whether or how this segment will actually appear once the gate is enabled is not established.

Feature flag
tengu_copper_thistle Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: off · compiled default in v2.1.268: off

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
What

The footer status line (the small bar showing session info at the bottom of the terminal) has code that decides whether to show a combined segment for bridge status together with pull-request/branch info, controlled by the tengu_copper_thistle setting.

Why

This lets Claude Code turn the combined display on or off for different accounts without a new release. The setting reads off for both this site's account and the general default, so this combined segment is not expected to appear yet.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

In dev
Nothing to try yet
Useful1 Signal2
Artifacts no docs found

Artifact publish gets a new (currently disabled) 'ldx_unsupported' 400 response path#

Artifact publishing adds a currently-inactive error path for an 'ldx_unsupported' response

Details 0 0 Feedback
ldx_unsupported
What

Artifact publishing now has a code path to specifically detect and report an "ldx_unsupported" condition when the server returns an HTTP 400 error. However, the check that would trigger this path is currently a stub that always returns false, so it has no effect yet.

Why

This appears to be groundwork for a future feature; it doesn't change any current behavior since the gating check is disabled.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

122 entries

Internal Changesopen

·Internal
Under the hood
Useful2 Signal3
Group of 2 Telemetry

Event upload holding reworked around a server-driven flush policy#

Claude Code's telemetry uploader now follows a server-provided policy for when to hold or flush events, with a kill switch

Details 0 0 Feedback

What

The client-side logic that decides when to hold versus upload telemetry events was substantially reworked:

  • A new mechanism ingests a server-provided 'flush policy' (limits on max events, max age, max bytes, whether to flush when sampling ends, and which event types must always flush), logging when the policy is adopted, changed, or cleared, and warning when the policy is unreadable.
  • Hold decisions are now split into two lanes: served_policy (driven by the server's policy, which flushes when sampling ends) and no_subscriber_flag.
  • A new eventHoldEnabled setting acts as a kill switch that can turn off event holding entirely.
  • Ephemeral stream events can now be dropped entirely when there is no subscriber watching them, with a telemetry counter tracking how often this happens.
  • Each release/flush now tracks a reason: round-trip, event, or sampling-end.

Why

This lets the server control telemetry upload timing and volume dynamically instead of relying purely on fixed client-side rules, and provides a way to disable event holding if it causes problems, while avoiding wasted work uploading events nobody is watching.

·Internal
Under the hood
Useful2 Signal3
Group of 2 Model Access unclear

Model access denial caching reworked with a 'reprobe' system#

Claude Code can now automatically recheck and overturn a cached 'model access denied' result during a session

Unclear Whether this reprobe behavior is active for any given user is unread, since the gate tengu_session_model_cached_deny_reprobe has no recorded reading.

Details 0 0 Feedback

What

When Claude Code decides a model isn't accessible and caches that denial, it now tracks this in a new per-session state object called sessionModelDenyReprobe. This replaces the older fields that used to track this (lastGoodAntOverrideConfig and antCapabilitiesByModelId).

The new state tracks:

  • Which models have been confirmed accessible (honoredModels)
  • Denials that are contested and being rechecked (contestedDenies)
  • Models that were genuinely refused (refusedModels)
  • A generation counter and a restricted flag

The logic that checks model access was rewritten to use this state: it can mark a cached denial as contested and kick off an asynchronous recheck ('reprobe') that can overturn a previously cached denial if the model turns out to be accessible after all.

Why

Previously, once a model was cached as denied, Claude Code might keep treating it as unavailable even if that access actually became valid again. The reprobe system lets a stale denial get corrected automatically instead of requiring a restart or manual retry.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal3
Group of 2 Remote Control no docs found unclear

Remote-control session forking gains a seed-based resume mechanism#

Headless and print-resume sessions now track a fork_seed_sha256 seed to adopt prior transcript rows when forking from a remote-controlled session

Unclear The finding shows the metadata field being written but not what consumes fork_seed_sha256 or remoteControlForkChild or why.

Details 0 0 Feedback
fork_seed_sha256

What

Claude Code's remote-control fork handling now uses a seed value, fork_seed_sha256, to connect a forked session back to rows from its parent.

  • In headless mode (-p), when given an sdkUrl and credentials, Claude Code writes fork_seed_sha256 into the session's internal metadata and threads a remoteControlForkChild value through the streaming loop.
  • In the --print --resume path, Claude Code now asks remoteControlForkChild.adoptSeed(...) to look up rows matching that fork_seed_sha256, feeds the resulting rows in as precedingRows during session loading, and filters out any rows already adopted from what gets shown in the transcript (tracked via a liveSourceRows set). A new normalization pass runs over the loaded session data before existing checks.

Why

This lets a forked or resumed session correctly pick up conversation history from a remote-controlled parent session instead of starting without that context or duplicating rows.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal3
Model Routing no docs found

Prompt-time model-id remapping ("breezy_horizon") gets stricter validation and a self-mapping warning#

Model-id remapping via CLAUDE_CODE_BREEZY_HORIZON now validates ids more strictly and warns on no-op mappings

Details 0 0 Feedback
CLAUDE_CODE_BREEZY_HORIZON
What

The mechanism that lets a model id be substituted for another before a prompt is sent (driven by the CLAUDE_CODE_BREEZY_HORIZON environment variable or server-supplied config) now validates candidate model ids more precisely. It also warns distinctly when a mapping's target is the same model it's meant to replace, reporting that the mapping "maps nothing," instead of silently treating it as a no-op.

Why

This makes a misconfigured or pointless model-id mapping visible as a warning instead of failing silently, making it easier to notice when a substitution rule isn't actually doing anything.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal3
Plugins no docs found unclear

New desktop-surface plugin UI messaging (ui.message / ui.press / ui.input / ui.select)#

New plugin UI plumbing routes ui.message and press/input/select events to a desktop app surface

Unclear What specific desktop client or surface consumes these dispatched events isn't detailed in the evidence.

Details 0 0 Feedback
ui.messageui.pressui.inputui.select
What

Two new internal functions dispatch plugin-authored UI events, including ui.message and press/input/select events, to a message target marked as surface: "desktop". Before dispatching, they check whether the relevant UI component (Q4.isDrawn) is actually drawn, and log a message noting 'nothing ran' when it isn't.

Why

This appears to add the plumbing needed for plugin-driven UI events to reach a desktop client interface, separate from the terminal-based UI, though what desktop surface consumes these events isn't detailed in the evidence.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal3
Model Access

Model-access cached-deny reprobe before demoting a model#

Claude Code now double-checks with the server before demoting a model it thinks was denied

Details 0 0 Feedback

**What

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal3
Permissions no docs found unclear

New permission-request fields: defaultToNo and suppressAlwaysAllowRule#

Permission requests now carry defaultToNo and suppressAlwaysAllowRule fields from the server

Unclear What specifically triggers suppressAlwaysAllowRule to be set is not stated.

Details 0 0 Feedback
defaultToNosuppressAlwaysAllowRule
What

Permission requests (the prompts Claude Code shows before running a risky action) can now include two new pieces of information sent from the server: defaultToNo, and suppressAlwaysAllowRule. The second one is passed on internally as askSuppressesAlwaysAllowRule so that other parts of the code can check whether a given permission ask should skip offering an "always allow" rule.

Why

This lets the server mark certain permission prompts as ones where you shouldn't be offered a blanket "always allow" option, presumably for actions considered too sensitive to auto-approve going forward.

·Internal
Under the hood
Useful2 Signal2
Group of 3 Telemetry

Remote/cloud session denials from org policy now get logged consistently#

When org policy blocks a remote or cloud session action, Claude Code now logs a structured org-policy-denied event before refusing

Details 0 0 Feedback

What

  • When the allow_remote_sessions org policy blocks a cloud/remote-session action - in the /ultrareview command and in --print --teleport resume - Claude Code now fires a tengu_org_policy_denied telemetry event carrying the policy key, the kind of denial, and a surface tag (slash_command for ultrareview, cloud_session for teleport).
  • The remote-control bridge's disabled-reason check (renamed from getBridgeDisabledReason to getBridgeDisabledDiagnosis) now returns a structured result with an orgPolicyDenied flag; when set, the CLI logs the denial and flushes analytics before exiting with the error.
  • A non-interactive/stream 'ready' check that refuses because the feature is unavailable now also logs this same org-policy denial before returning the refusal.

Why

This gives Claude Code (and its admins) visibility into how often and where organization policy is blocking remote or cloud session features, rather than the refusal happening silently.

·Internal
Under the hood
Useful2 Signal2
Group of 2 Artifacts no docs found unclear

Artifact publish runs a post-publish 'ldx build' step#

Publishing an artifact now runs an ldxBuildAfterPublish step and returns its result as ldxBuild in the tool output.

Unclear What the ldxBuild segment displays to the user or what triggers it is not stated.

Details 0 0 Feedback

What

  • After a successful artifact/live-doc publish, if the artifact registry module is available, Claude Code now runs a new ldxBuildAfterPublish step (passing slug, files, bornLive status, reseeded flag, signal, and credentials), alongside the existing step that binds born-live working copies.
  • The result of this step is returned as a new ldxBuild field in the publish tool's output, and the tool result now appends an ldxBuildSegment built from it.

Why This adds a build step after publishing so live docs get built automatically as part of the publish flow, and surfaces the build result directly in the tool output for visibility.

·Internal
Under the hood
Useful2 Signal2
Group of 2 Model Catalog no docs found

Model catalog schema gains effort-level, family, and image-limit fields#

The model catalog schema now supports effort levels, model families, and image size limits per model.

Details 0 0 Feedback
image_limits

What

  • The model definition schema used in the model catalog now accepts new fields: effort_levels, default_effort, capabilities, family, knowledge_cutoff, default_for_family, fast_default_for_family, and image_limits (with max_width/max_height).
  • These fields are defined in a new schema (referenced as runtime inside a larger model-catalog entry schema) alongside existing fields like notice, selection_notice, badge, tooltip, and quick_select, and also include max_input_tokens/max_output_tokens.

Why These fields let the model catalog describe, per model, which effort levels are available and the default one, which family a model belongs to and whether it's that family's default, and image size limits — metadata Claude Code can use to present and select models more accurately.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal2
Group of 2 Telemetry

Trace context now propagated for remote-relayed turns#

Claude Code now attaches trace context to messages relayed across sessions when running in remote mode

Details 0 0 Feedback
CLAUDE_CODE_REMOTE

What

Claude Code now extracts and propagates a trace_context (a traceparent value) and an event UUID when a turn is merged across sessions. This is sent as anthropic/ccr-turn-event-uuid and anthropic/ccr-turn-linked-event-uuids request headers.

When building the internal message for an incoming user message, a new traceContext field is now attached to it as well, computed via a new helper.

This behavior only applies when CLAUDE_CODE_REMOTE is set, and part of it is further gated to a specific dynamic-scope MCP server configuration.

Why

This helps trace and correlate related turns and messages when Claude Code is operating in a remote/cross-session mode, which is useful for debugging and observability but has no direct effect on typical local usage.

·Internal
Under the hood
Useful2 Signal2
Group of 2 Permissions no docs found

Permission approvals now record who decided#

Claude Code now tracks and stores whether a tool-call approval came from a hook, the host app, or a normal user prompt

Details 0 0 Feedback
decidedBy

What

When Claude Code approves a tool call, it now records how that approval happened. A new decidedBy value marks the decision as hook (an automated hook approved it), host_prompt (the surrounding application's permission prompt approved it), or prompt (the normal in-session approval prompt was used). This is captured through a new recordApprovedBy call, and the internal approval-tracking state gained a matching approvedBy field alongside its existing tracking of who the approval request was addressed to and whether it was settled.

Why

This gives Claude Code (and its telemetry) visibility into which mechanism actually granted permission for an action, which is useful for auditing and debugging approval flows, especially in setups that mix hooks, host-app prompts, and manual approval.

·Internal
Under the hood
Useful1 Signal3
Model Safeguards unclear

New internal-model-safeguards skip tracking flags added to session state (no visible call site in this slice)#

Session state gained two new tracking flags for internal-model-safeguards skip refusals, not yet wired to any visible behavior

Unclear What "internal model safeguards skip" refers to and how these flags get triggered or used is not shown.

Details 0 0 Feedback
What

Claude Code's internal session-state class gained two new boolean flags, each with a getter and a setter: one tracking whether an "internal model safeguards skip" was refused, and one tracking whether that refusal was announced. No code that actually sets or reacts to these flags is visible yet.

Why

The finding doesn't show what triggers these flags or what they'll be used for, so their practical effect isn't yet apparent from this change alone.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal2
Group of 3 Auto Mode

Auto mode availability is now tracked as ongoing telemetry#

Claude Code now logs auto mode's availability at startup and reports if it changes during a session

Details 0 0 Feedback

What

  • A new diagnostic snapshot function builds a combined object describing Claude's "auto mode" state: whether it's available, why it isn't if not, whether it's disabled by settings or policy (and which), whether it's disabled by trusted policy, its enabled state and source, whether its circuit breaker has tripped, the default permission mode, and whether it fell back.
  • Startup (init) telemetry can now include this snapshot (fields like autoModeAvailable, autoModeCircuitBroken, etc.), gated by a new logAutoModeAvailability flag, and a change tracker is registered so a tengu_auto_mode_availability_changed event fires later if auto mode's availability flips during the session.
  • The context-metrics call at startup is now wrapped so a failure is caught and logged ("context metrics failed") instead of throwing synchronously.

Why This gives visibility into whether and why auto mode is available, both at startup and if its availability changes mid-session, and makes startup telemetry collection more resilient to unrelated failures.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal2
Elsewhere

New pure-JS zip reader added#

Claude Code adds its own pure-JavaScript zip file reader for extracting entries like MCPB packages

Details 0 0 Feedback
What

A new, self-contained zip-file parser was added, handling local file headers, the central directory, the end-of-central-directory record, Zip64 (for large archives), and both stored and deflate-compressed entries. It exposes a function that reads a zip file's contents into a map of entry names to their raw bytes, and is used for extracting entries such as those from MCPB packages.

Why

This gives Claude Code its own zip-reading code for unpacking archives like MCPB packages, rather than relying on some other mechanism for that job.

·Internal
Under the hood
Useful2 Signal2
Telemetry

Large expansion of the internal telemetry event-name catalog (Rne) plus new gate-name validators#

Claude Code's internal telemetry catalog gained hundreds of new event names plus stricter permission-rule-name validation

Details 0 0 Feedback
What

Claude Code's internal list of telemetry and event identifiers has grown substantially, now covering areas like agents, artifacts, the bridge, ccr, MCP, sandboxing, self-hosted runners, and workflows. Alongside this, new internal constants define standard event sources (slash_command, cli_flag, startup, tool, dispatch, cloud_session) and denial reasons (org_denied, cache_miss, route_missing), and a new pattern now requires permission rule names to start with allow_ followed by lowercase letters, numbers, or underscores.

Why

This is mostly internal bookkeeping that expands what Claude Code can track and validate; the permission-rule-name pattern in particular tightens what counts as a valid rule name.

·Internal
Under the hood
Useful2 Signal2
Telemetry

Bash tool telemetry gains detailed shell-command shape fields#

Bash tool telemetry now records a detailed breakdown of each command's shape

Details 0 0 Feedback
What

The telemetry events fired when a bash command succeeds (tengu_bash_tool_command_executed) or fails (tengu_bash_tool_command_failed) now include a much richer breakdown of the parsed command, on top of the existing command_type field:

  • the command's class and its first argument (argv0)
  • the last command's argv0 in a chain
  • whether it used pipes, redirects, chains, subshells, or heredocs
  • a count of simple commands within it
Why

This gives more detailed visibility into the structure of bash commands being run, which can help with understanding usage patterns and diagnosing issues, though the underlying tengu_bash_tool_command_executed and tengu_bash_tool_command_failed gates have no recorded reading yet.

·Internal
Under the hood
Useful2 Signal2
Elsewhere

Transcript reconstruction gains a 'precede' pass to stitch pre-context entries onto later ones#

Transcript rebuilding gets a new 'precede' pass that reconnects orphaned entries to prior context

Details 0 0 Feedback
What

When Claude Code reconstructs a conversation transcript, it now runs an extra pass called precede over a batch of entries first. This pass remembers the last relevant entry it saw, and if a later entry in the main conversation (not a side branch) has no recorded parent, its parent is retroactively set to that remembered entry, unless it's already anchored some other way.

Why

This stitches transcript entries back together that would otherwise appear disconnected from their preceding context, likely improving how conversation history is displayed or replayed.

·Internal
Under the hood
Useful2 Signal2
Artifacts

Artifacts tool tracks unverified path spelling#

Publishing an artifact now checks its file path for disguised or lookalike spelling

Details 0 0 Feedback
What

When the artifacts tool resolves the file path for something being published, its result now includes a new unverifiedSpelling field alongside the existing pin and redirect information. This points to the same check for obfuscated or disguised path names already used elsewhere (such as when registering a repository root) now also being applied to files being published as artifacts.

Why

This helps catch cases where a published artifact's path looks legitimate but uses a disguised spelling, closing a gap between two features that previously applied this check inconsistently.

·Internal
Under the hood
Useful2 Signal2
Teleport

Teleport relay fallback is now scoped per attempt, with reconciliation if the standard path served a request the relay skipped#

Claude Code now notices and corrects when its network relay skipped a request the normal path ended up serving

Details 0 0 Feedback
What

Claude Code has an internal relay for streaming requests, used when a session is being handed off between machines (teleportation). Previously, whenever this relay failed, it just fell back to the normal request path and logged that the relay stayed 'armed' (ready to try again). Now each failure is recorded with its reason, and the fallback request goes through the normal path as before. If that normal-path request succeeds while the relay still thinks it's active, Claude Code logs a warning that the normal path served a request the relay didn't take, and disarms the relay accordingly.

Why

This keeps the relay's own idea of whether it's active in sync with what actually happened, so it doesn't keep believing it's handling requests it's actually missing.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal2
SDK no docs found unclear

Transport now tracks resultDelivery for numbered results#

Session transport now tracks a resultDelivery object so 'result' messages can be numbered

Unclear What actually consumes the numbered results, and why numbering was needed, isn't shown in the evidence.

Details 0 0 Feedback
resultDelivery
What

At startup, Claude Code now wires a new resultDelivery object onto the session's transport layer. It's used to stamp outgoing 'result' type messages so they can be delivered with a sequence number, and a separate counter reads that number back off resultDelivery elsewhere.

Why

Numbering result messages likely helps consumers of the session transport track ordering or detect gaps in delivered results, though the evidence doesn't spell out the specific consumer.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal2
Feedback unclear

Feedback survey follow-up submission simplified, drops explicit policy/first-party pre-checks and adds char-capped description#

Feedback survey follow-up submission drops some pre-checks and now caps and can cancel description text

Unclear Whether the dropped policy and telemetry checks were moved elsewhere or simply removed is not stated.

Details 0 0 Feedback
What

The function that submits a feedback survey follow-up no longer independently checks the allow_product_feedback policy or logs telemetry for the not-first-party or policy-blocked cases before submitting. Instead, it now accepts a maximum character count and truncates the description to fit, and it can be cancelled via a cancellation signal. Several old parameters (appearanceId, surveyResponse, surveyType) were removed from it.

Why

This reworks how feedback follow-ups are validated and sent; descriptions that run long are now trimmed automatically rather than rejected, and the submission can be cancelled mid-flight.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal2
SDK

New internal SDK field: user_output_styles_dir#

SDK session data now exposes user_output_styles_dir, the resolved path to the user-level output-styles folder

Details 0 0 Feedback
user_output_styles_dirCLAUDE_CONFIG_DIR
What

The session data exposed to developers building on the Claude Code SDK gained a new internal field, user_output_styles_dir. It holds the absolute path to the user-level output-styles directory (where personal output style customizations live), resolved after settings environment blocks are applied and honoring any CLAUDE_CONFIG_DIR set in managed or user settings. This field is absent when talking to older versions of the CLI.

Why

This gives SDK consumers a reliable, already-resolved path to the user's output-styles directory instead of having to recompute it themselves, accounting for any custom config directory location.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal2
MCP

MCP discovery can skip cache/connect when tools are already known#

MCP server setup can now skip the discovery cache and connection entirely when a server's tools are already known

Details 0 0 Feedback
What

When Claude Code connects to an MCP server and discovers its available tools, the setup function can now be given a pre-supplied map of tools. If a server's tools are already known this way and it isn't a live connection, discovery short-circuits straight to building the result, skipping the discovery cache lookup and skipping opening a new connection entirely.

Why

This avoids redundant cache checks and connection attempts when the tool list for a server is already known, which should make repeated MCP setup faster in that case.

·Internal
Under the hood
Useful2 Signal2
Agent Worktrees

Forced (destructive) removal of agent worktrees#

Agent worktrees can now be force-removed, deleting all their files after verifying they're linked worktrees, not standalone repos

Details 0 0 Feedback
What

Cleaning up a git worktree used for an agent (a separate working copy of a repository, stored under .claude/worktrees) now supports a forced, destructive removal path. It deletes all files in the worktree directory except a verified .git file, then removes the directory itself. Before doing this, it checks that the target is actually a linked worktree, meaning it has a .git file pointing elsewhere rather than being a standalone repository with its own full history. If the deletion only partially succeeds, the .git gitlink pointer is restored.

Why

This lets Claude Code fully clean up an agent's worktree when needed, while the standalone-repo check guards against accidentally deleting the only copy of a repository's history, and the pointer restoration protects against leaving things in a broken half-deleted state if something goes wrong partway through.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal2
Cloud Sessions

Cloud/remote commands now share a common policy gate object and 'claude-ai' availability tag#

Cloud-related commands now share one policy gate requiring an 'allow_remote_sessions' organization policy

Details 0 0 Feedback
allow_remote_sessions
What

The remote-control, teleport, autofix-pr, plan-in-web ("Draft an editable plan..."), and remote-env commands now all declare the same availability tag, claude-ai, and the same shared policy gate, which checks for an allow_remote_sessions organization policy under the feature label "Cloud sessions."

Why

This consolidates how these cloud-dependent commands check organization permissions, so an organization can now allow or block all of these cloud session features together through one consistent policy rather than separate checks per command.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal2
Elsewhere unclear

Session/agent auto-naming gains a 'cache' mode#

Session/agent auto-naming adds a 'cache' mode with its own path for new names and name collisions

Unclear What triggers 'cache' mode naming and what the dedicated collision path does differently is not stated.

Details 0 0 Feedback
What

The internal function that assigns or renames a conversation's auto-generated name now takes an explicit source setting, defaulting to "transcript" as before. It also adds a new "cache" mode: when naming happens in cache mode and no session has been established yet, it goes through a different, dedicated path rather than registering the name the normal way, and if the chosen name collides with an existing one, that collision is also resolved through the cache path instead of the usual collision resolver.

Why

This gives conversation naming a separate track for cache-driven naming, keeping it distinct from the normal transcript-based naming and collision handling.

·Internal
Under the hood
Useful2 Signal2
Elsewhere unclear

New lightweight JS-object-literal parser for meta exports#

A new lightweight parser safely reads meta object literals out of file source without using eval

Unclear The finding doesn't say which feature (skills, commands, or something else) actually calls this parser.

Details 0 0 Feedback
What

Claude Code adds a small self-contained parser for JavaScript-style object literals, including handling for strings, numbers, arrays, nested objects, comments, trailing commas, and different kinds of quoted strings. It's paired with a pattern that locates a line like export const meta = {...} in a file's source and pulls out just that object.

This looks like the machinery used to read meta information out of things like skill or command files.

Why

Extracting this kind of data without using eval (a way of running arbitrary code found in a string) is safer, since it avoids executing anything from the file being read.

·Internal
Under the hood
Useful2 Signal2
System Prompt no docs found

System-prompt diff telemetry expanded with change-scope classification#

System-prompt diff telemetry now classifies how the prompt changed between turns

Details 0 0 Feedback
changeScope
What

The internal telemetry that compares the previous system prompt to the new one now records more detail: the previous model (prevModel), hashes of the previous and new beta feature sets (prevBetasHash/newBetasHash), counts of previous and new system turns (prevSystemTurns/newSystemTurns), and a new changeScope classification of the diff, which can be none, unknown, rewrite, or tail_append.

Why

This lets internal analysis distinguish minor prompt changes, such as an appended tail, from a full rewrite, and correlate prompt changes with model or beta-feature switches, without exposing anything new to end users.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal1
Group of 3 Telemetry

API request telemetry gains time-to-first-content, per-attempt request IDs, and richer retry data#

API call telemetry now tracks time-to-first-content, a client request ID per attempt, and more detail on retries

Details 0 0 Feedback
ttft_ms

What

  • The end-of-request telemetry (the api_request event and related completion logging) now tracks a firstContentMs value — time to first content — separately from time-to-first-token, and includes a ttft_ms field when that value is available.
  • The main API-call success event, tengu_api_success, now also records firstContentMs, a client-generated request ID (clientRequestId), and the UUID of the originating user message (user_message_uuid).
  • The API call dispatcher now generates a new clientRequestId for each attempt (sent as an extra header) and tracks an attempt counter, reporting request lifecycle telemetry — success/failure, status code, error class, attempt number, clientRequestId, requestId — plus a durationMs field on tengu_api_success that excludes time spent on retries.

Why These fields give much finer-grained visibility into API call performance and retry behavior, making it possible to distinguish slow model responses from network/retry overhead and to trace individual attempts by their request ID.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal1
Group of 2 Status Bar unclear

Bridge status indicator now carries an explicit status instead of a boolean#

The footer's bridge indicator now shows a real status value instead of just on or off

Unclear What specific status values the indicator can now show, beyond the previous boolean, is not specified.

Details 0 0 Feedback

What

  • The status/footer line's bridge indicator used to render only when a column-width/boolean gate was true, passing just a bridgeSelected flag. Now it always computes a status value and renders the bridge chip whenever that status isn't null, passing a status field to the bridge component instead of gating on column width.
  • As part of this, the status-line render function no longer destructures ideSelection or mcpClients from its props, and no longer computes or renders an IDE-colored badge.

Why This makes the bridge indicator reflect a real connection status rather than a simple on/off flag, though it also means the footer no longer shows a separate IDE badge.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal2
Sandbox Network

Bash tool execution now threads sandbox network lists computed at permission time into the actual spawn#

Bash commands now reuse the network access list computed when permission was checked, instead of recalculating it at run time

Details 0 0 Feedback
What

When Claude Code runs a shell command inside its sandbox (a restricted environment that limits what a command can access), it now carries forward the network access list that was already worked out during the permission check for that command, and hands it directly to the process that actually runs the command. This is done through a small cache (holding up to 256 entries) keyed to the specific command, so the cached list is only reused if the command text still matches.

Why

This keeps the network rules used at execution time consistent with the ones the user (or policy) already approved, rather than recomputing them separately and risking a mismatch.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal2
Telemetry unclear

CCR heartbeat can adopt a server-pushed event flush policy#

CCR client can now adopt an event-flush policy pushed by the server in heartbeat responses

Unclear The finding does not say what CCR is or what effect changing the flush policy has in practice.

Details 0 0 Feedback
What

When the CCR client receives a response to its heartbeat, it now checks for an event_flush_policy field in the response data and, if present, calls a new takeUpFlushPolicy method to adopt it. This happens alongside the existing handling for refreshed authentication in heartbeat responses.

Why

This lets the server adjust how the client flushes events at runtime by pushing a policy through the regular heartbeat, rather than that behavior being fixed on the client side.

·Internal
Under the hood
Useful1 Signal2
Auto Mode

Auto-mode classifier now also skips its fast path when a tool declares per-call sandbox network lists#

Auto-mode's classifier now runs on tools that declare per-call network allow/deny lists, instead of skipping them

Details 0 0 Feedback
What

In accept-edits mode, Claude Code's auto-mode classifier normally has a fast path that lets certain tool calls through without full classification. That fast path now also checks whether a tool declares sandbox network lists (allow or deny lists of network hosts) for a given call. If it does, the call no longer takes the fast path and instead goes through the classifier as normal.

Why

This means tool calls that carry their own per-call network restrictions get properly reviewed by the classifier rather than being waved through automatically, which matters for anything that reaches out over the network.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful2 Signal1
Permissions

Read-outside-working-directory prompt text centralized behind a typed dialog kind#

The 'Read outside the working directories?' permission prompt is now built from a dedicated dialog descriptor

Details 0 0 Feedback
What

The permission prompt Claude Code shows when it wants to read a file outside your project's working directories ('Read outside the working directories?') is now generated from a dedicated, named dialog descriptor (auto_mode_outside_reads) with a fixed set of choices: allow, block, or ask again. Previously this prompt and its explanatory text were assembled inline in the code, rather than from a single reusable descriptor.

Why

This is mostly a code organization change, centralizing how this specific permission prompt is built. For users, the visible prompt and its options (like 'Yes, keep allowing reads outside the working directories') stay conceptually the same.

·Internal
Under the hood
Useful1 Signal1
Group of 3 Telemetry

OTel telemetry redacts sensitive data and normalizes error info for off-box traces#

Claude Code now redacts prompts, model names and agent ids in OTel traces sent off-box, and standardizes error reporting

Details 0 0 Feedback
CLAUDE_CODE_REMOTE

What

  • A new gate detects when Claude Code is running as CLAUDE_CODE_REMOTE with an OTel traces endpoint that isn't localhost ("off-box"). When true, spans for interactions, LLM requests, tool calls, and subagent spawns redact sensitive data: user prompts become "<REDACTED>" even if OTEL_LOG_USER_PROMPTS is set, model names are replaced with a hashed/normalized value (with a new tool_name_safe/query_source_safe attribute instead of the raw value), agent ids are anonymized, and custom subagent types are reported simply as "custom". The interaction span also gains link propagation (queued_sends) and a parent.source attribute.
  • Tool-call failure telemetry now records a separate errorClass field alongside the error message/code.
  • Error-attribute recording was reworked so a single error string is replaced by both an error field and a sanitized error_class (letters/digits/underscore only, matching /^[A-Za-z][A-Za-z0-9_]{0,47}$/). The raw error text is omitted entirely when telemetry is judged to be leaving the box, using the same off-box condition described above.

Why These changes keep sensitive data like prompts, model names, and raw error text out of telemetry that leaves the local machine, while still preserving a normalized, non-sensitive error classification for debugging.

·Internal
Under the hood
Useful1 Signal1
Group of 2 MCP

MCP error messages now redact detail more precisely using server config#

Error messages from MCP server connection and OAuth problems now clamp sensitive detail based on the specific server's setup

Details 0 0 Feedback

What

Errors from MCP (Model Context Protocol) server connections and OAuth flows now pass through helper functions that use the server's config object to decide how much detail to clamp or redact before showing or logging the error:

  • OAuth errors (a rejected custom redirectUri, a failed localhost fallback, or a failed OAuth completion) now route through this redaction logic, and a failed localhost OAuth fallback now throws an error instead of silently producing no result.
  • General MCP client reconnect/error-formatting calls now take the server's config alongside the error, letting the formatter tailor the message to the connection type, matching a 'detail withheld on this connection' pattern used for off-box connections.

Why

This avoids leaking sensitive connection detail in error messages while still giving useful, connection-appropriate context, and it fixes a case where a failed OAuth fallback used to fail silently instead of surfacing an error.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Projects

New projectsUserTurn flag threaded through turn-origin tracking#

A new projectsUserTurn flag is now tracked alongside verifiedSlackHumanTurn wherever verified human turns are processed.

Details 0 0 Feedback

What

  • A new boolean, projectsUserTurn, is now threaded through the same turn-processing code paths as the existing verifiedSlackHumanTurn flag: message equality checks, turn serialization/deserialization, and notification queue restore.
  • It's set when isProjectsUser is true for a verified relayed human turn, and is passed into the function that marks a verified relayed human turn.

Why This lets Claude Code distinguish turns that originated from a verified Projects user the same way it already distinguishes verified Slack human turns, keeping turn provenance accurate across these different relay sources.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Elsewhere

Terminal identity detection now feeds startup telemetry#

Claude Code now identifies your terminal app and version from its XTVERSION reply and reports it in startup telemetry.

Details 0 0 Feedback

What

  • A new classifier reads the raw XTVERSION terminal-identification reply your terminal sends back and matches it against a list of known terminal apps (iTerm2, ghostty, WezTerm, tmux, kitty, and others) plus several version-format patterns.
  • If the terminal isn't recognized, it's bucketed as "other"; if there's no reply at all, it's bucketed as "no_reply".
  • The result is packaged as an xtversion field inside a tengu_terminal_probe telemetry event sent at startup.

Why This lets Claude Code understand which terminal emulators and versions people actually use, without sending raw, potentially inconsistent terminal strings — only normalized values reach telemetry.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Cloud Sessions no docs found

Cloud session creation now sends an explicit branchFromHead flag#

Creating a cloud/remote session now explicitly tells the server whether to branch from HEAD instead of leaving it inferred

Details 0 0 Feedback
branchFromHead

What

When creating a remote (cloud) session, Claude Code now sends an explicit branchFromHead boolean alongside the existing branch and ref parameters. It is computed from whether a reuse-branch name or an explicit ref was given: if neither was provided, branchFromHead is set to indicate the session should branch from HEAD.

Why

Previously this behavior was left for the server to infer. Sending it explicitly makes cloud session creation more predictable and removes ambiguity about which branch a new session starts from.

·Internal
Under the hood
Useful1 Signal1
Hooks

SessionStart hooks can be cut short by an 'orphaned' signal#

SessionStart hooks can now be stopped early if the session becomes orphaned

Details 0 0 Feedback
SessionStart
What

The code that runs SessionStart hooks (which fire when a session begins or resumes) now checks for a new orphaned signal in addition to the existing abort signal. If either is triggered, the hook run stops early instead of continuing to wait.

Why

This avoids waiting for hook results in a session that has already become orphaned, which is a change from the prior grace-period settling behavior that waited for pending async hooks to finish before continuing.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

GitHub-not-connected / access errors for cloud review restructured with reusable builders#

GitHub-access error messages for cloud review reworked with dedicated builders and a faster inconclusive path

Details 0 0 Feedback
/review
What

When /review's cloud review flow (ultrareview) can't find a GitHub account linked to your Claude account, or the linked account can't see the target repository, the error text is now assembled by dedicated helper functions instead of being built inline. The underlying check for GitHub access now has its own capped time budget, and it returns "inconclusive" immediately if the account isn't eligible, instead of always waiting on a full network call.

Why

This should make these GitHub-access errors return faster and more consistently, particularly when the account clearly can't proceed, rather than always waiting out a full request.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

Advisor tool model-resolution path now also receives credentials#

Model-resolution during the main loop now also receives credentials, and the advisor-tool consent call was renamed

Unclear It's unclear what effect passing credentials into model resolution has for the user, beyond the internal rename.

Details 0 0 Feedback
What

The internal function that resolves which model to use during the main loop, now called Jm (previously Hm), takes an added credentials argument alongside the user-specified model, agent model, and other settings. Separately, the confirmation step in the advisor-tool consent flow was renamed internally, and still logs the advisor_fable_consent event.

Why

The finding doesn't say what using credentials in model resolution changes in practice; it's an internal wiring change rather than a new user-facing behavior.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Event-queue batching gains partial-pass/'owed' bookkeeping#

The batched event-send queue now tracks 'owed' events and can let some events through while holding others back

Details 0 0 Feedback
What

The generic queue Claude Code uses to batch and send events was reworked. takeBatch now takes an explicit count of how many events are sendable, tracks an owed counter for events that were pulled ahead of a hold, and supports a holdSpec.passes setting that lets certain events through even while a hold is otherwise in effect. The send and onDrained callbacks now also receive a rule field explaining why events were held back.

Why

This is internal bookkeeping for how events get batched and released; it makes the hold-and-flush logic more precise about which events are let through and why, without changing what data ends up being sent.

·Internal
Under the hood
Useful1 Signal1
Plugins

MCPB and plugin MCP-config load errors now redact URLs/paths before logging#

MCPB and plugin MCP-config loading errors now redact URLs and file paths before logging them

Details 0 0 Feedback
What

Across several places that load MCPB packages and plugin MCP configuration, such as downloading an MCPB package, checking a modification-time cache, resolving a directory-loaded plugin's source, and loading .mcp.json, raw URLs and file paths that end up in log or error messages are now passed through a redaction helper first, and diffs are formatted through a separate helper. For example, a log line now reads Downloading MCPB from ${mf(e)} instead of including the raw URL directly.

Why

This keeps potentially sensitive URLs and file paths out of logs and error output when something goes wrong loading MCPB packages or plugin MCP configuration.

·Internal
Under the hood
Useful1 Signal1
Model Catalog unclear

Model catalog dedup helper (ust) drops override/provenance-override handling#

The model catalog dedup helper no longer adds override-sourced model entries, only ones from the served catalog

Unclear What effect this has on any model entries that previously came from an override source is not stated.

Details 0 0 Feedback
What

The function that builds the model-selection list dropped its overrides parameter and the code that used to add rows sourced from ant_override into the alias-keyed list. It now only builds the list from the catalog served by Anthropic.

Why

The finding doesn't say what drove this or what it means for users who relied on override-sourced models appearing in the selection list; it's a narrowing of where the list's entries can come from.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Hook telemetry span changes shape in remote (CCR) sessions#

Hook telemetry looks different in remote (CCR) sessions, dropping hook_definitions and using the raw event name

Details 0 0 Feedback
CLAUDE_CODE_REMOTE
What

In a remote Claude Code session (CLAUDE_CODE_REMOTE) that has no bridge carrier, the telemetry span recorded for a hook run now uses the raw event name in place of the resolved hook_name attribute, and omits the hook_definitions field entirely. hook_definitions is now only included when a separate condition (Ol()) is true and the session is not this kind of remote session.

Why

This changes what detail is available in hook-related telemetry for remote sessions specifically, which matters for anyone inspecting or debugging hook behavior through that telemetry.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Policy limits fetch telemetry now reports restriction/compliance-taint counts#

Policy limits telemetry now counts denied restrictions and compliance-taint occurrences

Details 0 0 Feedback
What

The tengu_policy_limits_fetch telemetry event, which fires when Claude Code fetches policy limits, now also records restrictions_denied_count (how many restrictions in the fetched policy were marked as not allowed) and compliance_taint_count.

Why

This gives Anthropic more visibility into how restrictive an account's fetched policy is and how often compliance-taint conditions occur, building on earlier additions to this same telemetry event that recorded authentication details and server error information.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Event queue batching gains configurable hold rules with byte/item caps and named release reasons#

Internal event batching now supports configurable size/age limits and reports why a batch was released

Details 0 0 Feedback
What

An internal queue used for batching and throttling events has been reworked to support configurable hold rules: limits on the number of items, total byte size, and maximum age before a batch is released. Each release now also reports which named rule triggered it, alongside the existing release reasons like hitting a maximum item count, byte size, age, or capacity.

Why

This is internal plumbing rather than a user-facing feature, but it gives Claude Code finer control over how event data is grouped and flushed, which can affect performance and telemetry accuracy.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP connect now threads a 'knownListings' set through server connection to skip redundant discovery#

Claude Code now skips redundant tool/resource discovery for MCP servers it already has a listing for

Details 0 0 Feedback
What

When connecting to MCP servers (external tool providers via the Model Context Protocol), Claude Code now passes along a set of 'known listings' it already has. A server that's already in this known set is now also treated as eligible to always be loaded.

Why

This avoids repeating discovery work for MCP servers whose tools, commands, and resources are already known, which should make connecting to already-known servers faster.

·Internal
Under the hood
Useful1 Signal1
Sessions no docs found

rewind_conversation and the new fork_conversation share a common target-lookup and blocked-state helper#

rewind_conversation and the new fork_conversation now share the same logic for finding a target message and checking if the session is busy

Details 0 0 Feedback
rewind_conversationfork_conversation
What

The handling code for rewind_conversation and the newer fork_conversation control requests now shares a common function for looking up the target message and a common check for whether the session is busy or blocked. This replaces rewind_conversation's previous, more elaborate custom logic for searching through stacked expansions and queued commands to find its target.

Why

This is a code consolidation that makes the two related features behave consistently, rather than a new capability for the reader.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact read-permission denial path unified across list_files/read_file/verify/read actions#

Artifact read-permission errors now use the same wording across list_files, read_file, verify, and read actions

Details 0 0 Feedback
What

Previously, the list_files and read_file artifact actions produced a different error message when blocked by a read-permission deny rule than the verify and read actions did. Now all four actions route through the same shared error-handling logic, so a blocked read produces the same denial or target-changed message no matter which action triggered it.

Why

This makes the behavior consistent and predictable: whichever way an artifact read is blocked, the resulting error message is now the same across the board.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

Chat input component gains a new ideSelection prop#

The chat input component now accepts an ideSelection prop again

Unclear The finding does not say what using ideSelection in the input component actually changes for the user.

Details 0 0 Feedback
What

The component that renders the chat prompt input now takes an ideSelection prop as part of its inputs.

Why

This is an internal wiring change; the finding does not indicate what user-visible effect it has, though ideSelection refers to information about a selection in a connected IDE.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Publish permission check for copied files now includes the requested action#

Publish permission checks for copied artifact files now also record the requested action

Details 0 0 Feedback
What

When publishing an artifact that copies files from another artifact, the permission check now also passes along the specific action being requested, in addition to the existing flag marking it as a copy.

Why

This lets the authorization logic that decides whether the file source is allowed take the requested action into account, rather than judging only on the fact that files are being copied.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Background Agents

Background agent status now records an explicit 'template'/agentType field with a 'bg' fallback#

Background agent status now stores an explicit agent-type field, defaulting to 'bg' if none is given

Details 0 0 Feedback
What

When Claude Code saves the state of a background agent, the stored template value is now explicitly derived from the agent's agentType, falling back to the literal string "bg" if none is provided, rather than passing through whatever value the caller happened to supply.

Why

This ensures background agent records always have a consistent, well-defined type value instead of possibly storing something unexpected or missing from the caller.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

MCPB source path sanitized in logs and errors#

MCPB plugin bundle file paths are now sanitized before appearing in logs or error messages

Details 0 0 Feedback
What

When Claude Code loads an MCPB (a packaged Claude plugin bundle), the source path is now passed through a sanitizer before it shows up in logs or error text. A local file read failure now produces a distinct 'MCPB local file read failed' error that shows the sanitized display path instead of the raw resolved file path.

Why

This avoids leaking potentially sensitive local file path details into logs and error messages while still giving a usable, readable path for troubleshooting.

·Internal
Under the hood
Useful1 Signal1
Telemetry unclear

Session-start event now checks whether the session head is orphaned#

Session-start telemetry now checks whether the session's starting point is orphaned before firing

Unclear What exactly counts as an 'orphaned' session head is not specified in the evidence.

Details 0 0 Feedback
What

The telemetry call that fires when a session starts now first runs through a helper that determines whether the session's starting point (its 'head') is 'orphaned', and passes that status along with the event, instead of always firing unconditionally.

Why

This lets session-start tracking distinguish sessions that resume from a disconnected or missing starting point from normal ones, which is useful for diagnosing session continuity issues.

·Internal
Under the hood
Useful1 Signal1
Bash Permissions unclear

Bash permission-rule matching gains compound bare-assignment support#

Bash permission matching adds a compound-bare-assignment name list for allow/prefix rules

Unclear The finding does not explain what a 'bare assignment' command pattern looks like in practice or which specific commands this affects.

Details 0 0 Feedback
What

The internal function that checks a bash command against your allow, deny, and ask permission rules now accepts a list called compoundBareAssignmentNames. For permission rules recognized as a 'bare assignment' pattern (a rule form the code detects via Vct(U)), that rule now only matches under allow-with-prefix rules, and only through a new check (NIn(U, p, v)) that consults this name list.

Why

This narrows when a bare-assignment-style permission rule is allowed to match, tightening how such rules are applied to bash commands.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Env-var telemetry allowlist and a no-op stub added near it#

Telemetry now only logs recognized CLAUDE_CODE_/ANTHROPIC_ env var names by name, bucketing the rest as 'other'

Details 0 0 Feedback
What

A new allowlist of about 30 named CLAUDE_CODE_* and ANTHROPIC_* environment variables is now used when logging which environment variables are set: names on the list are reported as-is, while any other environment variable name is bucketed and logged simply as "other". An unrelated no-op function was added nearby in the same change but does nothing.

Why

This keeps diagnostics and telemetry from recording arbitrary, potentially sensitive environment variable names that happen to start with those prefixes, only known/expected variable names are reported individually.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Subagent progress events now carry the underlying API error kind#

Subagent progress events now include the specific API error kind, not just a yes/no flag

Details 0 0 Feedback
What

When a subagent (a secondary Claude instance handling part of a task) reports a tool-use event that involved an API error, the event now carries an apiErrorKind field with the specific error value, in addition to the existing plain yes/no isApiError flag.

Why

This gives the interface and telemetry more detail about what specifically went wrong with a subagent's API call, rather than only knowing that some error occurred.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Bash tool monitor spawn now carries sandboxNetworkLists#

Background and monitored Bash commands now carry the same per-command network allowlist

Details 0 0 Feedback
What

When the Bash tool spawns a command under its monitor (used for background or long-running commands), it now also passes along the per-command sandbox network allowlist, the same mechanism that lets an individual command reach extra network domains beyond the sandbox's global allowlist.

Why

This makes sure background and monitored bash commands get the same per-command network permissions as commands run directly, instead of missing out on them.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Plan-mode model clamp warning routed through a return value instead of an inline call#

Plan-mode model-clamp warning is now returned as data instead of logged directly

Details 0 0 Feedback
What

The internal logic that clamps (restricts) which model can be used in plan mode now returns the chosen model along with a clampWarning value, instead of directly issuing the warning itself. The calling code is now responsible for deduplicating and logging that warning.

Why

This is an internal restructuring of how the clamp warning is delivered; it doesn't change what a user sees, but centralizes where the warning is logged.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Client-side data cache key getter now accepts a model parameter#

Client-side data cache can now be keyed per model, not just globally

Details 0 0 Feedback
What

The function that reads Claude Code's local client-data cache now accepts an optional parameter that gets factored into the cache key, and cached entries can carry a model field alongside their data.

Why

This allows cached client data to be stored and retrieved separately per model, rather than sharing a single cache entry regardless of which model is in use.

·Internal
Under the hood
Useful1 Signal1
SDK

SDK/control-protocol pending-request lists now documented as always present as of this build#

SDK docs now guarantee the pending-request lists in the initialize response are always present from v2.1.268 onward

Details 0 0 Feedback
request_user_dialogcan_use_tool
What

The documentation for the initialize response used by SDK and control-protocol clients now states that the pending-request lists for request_user_dialog and can_use_tool are always present, even if empty, as of Claude Code v2.1.268 or later.

Why

This lets SDK clients reliably tell the difference between an older CLI version that could simply omit the field and a newer one reporting that nothing is currently pending.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
System Prompt

claudeMd block now always sent to model, even when empty#

The claudeMd block is now always included in what's sent to the model, even when there's no content

Details 0 0 Feedback
CLAUDE.md
What

When assembling project context to send to the model, Claude Code now always includes a claudeMd block, defaulting to an empty string if there's nothing to put in it. Previously this block was only included when there was actual CLAUDE.md content, or when a particular internal setting was enabled.

Why

This makes the shape of the assembled project context consistent regardless of whether CLAUDE.md content exists, rather than varying based on content or configuration.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Model Catalog

Model catalog now logs why it fell back to compiled model list (credential_scope)#

Claude Code now logs a specific reason (credential_scope) when it falls back to the built-in model list due to credential permissions

Details 0 0 Feedback
What

When the model list Claude Code shows can't be fetched because the current credentials aren't allowed to read the server's model data, it now records a telemetry event, model_catalog_primary, with decision: 'off' and off_reason: 'credential_scope'. The event also logs the HTTP status and refusal code involved, before Claude Code falls back to its built-in, compiled-in list of models.

Why

This makes it possible to tell, from telemetry, specifically when a fallback to the built-in model list happened because of a credential's permissions, rather than some other failure.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
MCP unclear

MCP tool-schema meta-validator now loaded lazily via dynamic chunk import#

MCP's tool-schema validator is now loaded lazily from a separate bundled chunk instead of built upfront

Unclear Whether this lazy-loading change has any user-visible effect beyond internal structure is not stated.

Details 0 0 Feedback
What

When Claude Code checks that an MCP (Model Context Protocol) server's tool definitions conform to the JSON Schema draft 2020-12 standard, it now loads the validator function lazily from a separate bundled chunk of code, rather than constructing the validator instance directly every time.

Why

This is an internal implementation change to how the validator is obtained; if that validator ever fails to load, tool schema checks fail open (meaning they don't block the tool from being used), so the practical behavior for users should stay the same.

·Internal
Under the hood
Useful1 Signal1
Remote Control

Skill-loading instruction text replaced by a connecting-status label at one call site#

A leftover skill-loading instruction at one code path was replaced with the '/rc connecting…' status label

Details 0 0 Feedback
/rc
What

A spot in the code that used to hold a large block of instructional text about loading a design-calibration skill before writing files now instead holds the small status label used for the /rc connecting… indicator (the Remote Control status shown when a remote session is connecting).

Why

This is a cleanup at one call site rather than a user-facing feature: the leftover instructional text is gone and that location now correctly reflects the /rc connecting… status label.

·Internal
Under the hood
Useful1 Signal1
Plugins no docs found

Plugin API session.turnCount renamed to session.turns#

Plugin API hook session.turnCount renamed to session.turns

Details 0 0 Feedback
session.turns
What

The plugin hook (a named entry point plugins can call into) used to read a session's turn count is now registered as session.turns instead of session.turnCount.

Why

Plugins that call this hook need to use the new name session.turns; the old name session.turnCount is no longer registered.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Auth unclear

New OAuth error code list for token/auth error classification#

New internal list of standard OAuth error codes for classifying auth failures

Unclear The finding does not say where these codes are now used or what specific messages they produce.

Details 0 0 Feedback
What

A new list of standard OAuth (the protocol used for authentication/login flows) error codes was added, including things like invalid_request, invalid_grant, authorization_pending, expired_token, slow_down, invalid_client_metadata, insufficient_scope, invalid_target, method_not_allowed, and too_many_requests.

Why

This lets Claude Code recognize and classify a wider range of standard authentication error responses, which can lead to more accurate error handling and messaging when a login or token exchange fails.

·Internal
Under the hood
Useful1 Signal1
Teleport unclear

Teleport revert now marks pending thinking-block stripping#

Reverting a teleport session now flags pending thinking-block cleanup and skips one telemetry event

Unclear The finding does not explain what a teleport/relay session is used for or what consuming the relayThinkingStripOwed flag does later.

Details 0 0 Feedback
What

When a teleport (relay) session reverts from active back to a non-active status, it now sets a relayThinkingStripOwed flag to true. It also now skips sending the "upgrade teleport cache" telemetry event specifically when the revert reason is direct_served.

Why

This marks that thinking content (the model's intermediate reasoning) still needs to be stripped after a relay session reverts, and avoids emitting a telemetry event that wouldn't apply in the direct_served case.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

New URL redaction helpers for stripping credentials/query/hash before logging or telemetry#

New helper functions strip credentials, query strings, and fragments from URLs before they're logged

Details 0 0 Feedback
What

Claude Code now has a set of internal helper functions that detect and remove sensitive parts of a URL, such as an embedded username and password (user:pass@host), query strings, and fragments, as well as sensitive parts of Windows/UNC file paths. When found, these are replaced with a fixed placeholder, [redacted URL], before the URL is written to logs or telemetry.

Why

This reduces the chance that credentials or other sensitive data embedded in a URL or file path accidentally end up in logs or diagnostic data.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
WebFetch unclear

New telemetry event tengu_web_fetch_transport records outcome and duration of the raw HTTP fetch#

A new telemetry event records the outcome and duration of each raw WebFetch network request

Unclear Whether the tengu_web_fetch_transport telemetry is active for any accounts is unread and not stated.

Details 0 0 Feedback
What

WebFetch (the tool Claude Code uses to fetch a URL's contents) now emits a telemetry event, tengu_web_fetch_transport, around its low-level network request. It records the outcome (error, redirect, HTTP error, or success), how long the request took (httpDurationMs), and how many bytes were returned.

Why

This gives Anthropic visibility into how WebFetch's network requests are performing and failing, which can help diagnose fetch reliability issues.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Chrome & Browser

Chrome bridge tool-result telemetry now includes response size and transport tag#

Chrome bridge tool-call telemetry now records response size in bytes and tags the transport as "bridge"

Details 0 0 Feedback
What

The chrome_bridge_tool_call_completed and chrome_bridge_tool_call_error telemetry events now include a transport: "bridge" tag. Completed calls additionally record response_bytes, the size of the raw websocket response message.

Why

This gives more detail in telemetry about Claude in Chrome tool calls, letting response payload size and transport type be tracked alongside success and error outcomes.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP tool-list telemetry now tracks description length stats#

MCP tool-list telemetry now reports total, max, mean, and over-limit counts for tool description lengths

Details 0 0 Feedback
What

The tengu_mcp_tools_listed telemetry event, sent when Claude Code lists tools from an MCP server, now includes four new fields about the length of tool descriptions returned by that server: descriptionTotalLength, descriptionMaxLength, descriptionMeanLength, and descriptionOverLimitCount (how many descriptions exceed a configured size limit).

Why

This gives visibility into how verbose an MCP server's tool descriptions are, which can help identify servers whose overly long descriptions might affect performance or context usage.

·Internal
Under the hood
Useful1 Signal1
Telemetry no docs found unclear

Query telemetry can now carry a resume_reason#

Query telemetry can now record a resume_reason when a query is triggered by resuming a session

Unclear The finding does not say how or where resume_reason values are used or surfaced beyond internal telemetry.

Details 0 0 Feedback
resume_reason
What

When Claude Code sends a query, if the event that triggered it carries a resumeReason (a note explaining why a session was resumed), that reason is now attached as resume_reason in the telemetry data recorded for the query.

Why

This gives internal telemetry more context about why a given query happened, specifically when it follows a session resume, which can help with diagnosing and understanding usage patterns.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

New persisted state path: served-calls, added to backup/restore and gitignore-style deny lists#

New state file .claude/state/served-calls added to backup/restore handling and paths that tools should leave alone

Unclear The finding does not say what "served-calls" tracks or how it's used beyond being persisted and protected.

Details 0 0 Feedback
What

A new state path, .claude/state/served-calls, has been added both to the list of files Claude Code can restore during local state persistence, and to the list of paths that git and file operations should avoid touching, alongside other protected state files like unattended-serving-consent.json.

Why

Treating this new file the same way as other internal state files keeps it from being accidentally modified, deleted, or committed by normal git or file operations, while still letting Claude Code back it up and restore it as part of its own persisted state.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

New env vars added to passthrough/allow list#

Four more environment variables are now recognized and passed through by Claude Code

Unclear What effect being on this passthrough list has for each variable, and what the other three variables specifically control, is not described.

Details 0 0 Feedback
What

Claude Code's internal list of recognized environment variables gained four new entries:

Why

Adding these to the recognized/passthrough list means Claude Code now acknowledges and forwards these variables where relevant, rather than treating them as unrecognized. CLAUDE_CODE_MODEL_CAPABILITIES was previously introduced to override model capability flags by model name pattern; this change means it's now included alongside the others in the same internal list.

·Internal
Under the hood
Useful1 Signal1
Plugins unclear

'Reload plugins' notification suppressible via warning notification id#

The 'reload plugins' notification can now be suppressed under a condition

Unclear What condition the check (Bn()) tests, and therefore when the notification is suppressed, is not stated.

Details 0 0 Feedback
What

A new high-priority warning notification setup was added for prompting you to reload plugins, but it's now skipped whenever a particular internal check returns true.

Why

This prevents the "reload plugins" notification from showing up in situations where it isn't relevant, though the finding doesn't say what that condition specifically checks for.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Session shutdown now flushes held telemetry before exit#

Claude Code now flushes any held-back telemetry before it shuts down

Details 0 0 Feedback
What

When a session is shutting down, if telemetry events are currently being held back under the new server-served flush policy, Claude Code now applies a "shutdown" hold, keeps client events open through the cleanup process, and performs an extra flush before finally closing.

Why

This makes sure telemetry that was deliberately delayed for batching isn't accidentally lost when the app or session exits.

·Internal
Under the hood
Useful1 Signal1
MCP unclear

MCP tool call now merges additional call metadata via DPe/Jmt/Xbt#

MCP tool calls can now attach extra metadata fields alongside the tool-use ID, behind a gate

Unclear What the extra metadata fields contain and what they're used for is not stated.

Details 0 0 Feedback
What

When Claude Code calls an MCP (Model Context Protocol) tool — a tool provided by an external server rather than built in — it sends along a small metadata payload with the tool-use ID. Now, when an internal condition is met, extra fields are merged into that metadata payload as well. Previously the payload only ever contained the tool-use ID.

Why

This lets Claude Code pass additional context to MCP tool servers in some sessions, though the finding doesn't specify what that extra context contains or affects.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact-type instance freshness check now also considers declared endpoints#

Artifact freshness checks now also factor in an artifact type's declared endpoints

Details 0 0 Feedback
What

When Claude Code checks whether a fetched Artifact page is still fresh, or whether it counts as coming 'from type,' the comparison now also looks at the Artifact type's declared endpoints, not just its declared store data as before.

Why

This makes the freshness check more accurate for artifact types that define endpoints, so the freshness/'from type' status better reflects what the type actually declares.

·Internal
Under the hood
Useful1 Signal1
Remote Control

Permission requests to remote bridge now tag browser-category tools#

Permission requests sent to the remote bridge now flag whether the tool is a browser tool

Details 0 0 Feedback
What

When Claude Code asks a remote bridge session for permission to run a tool, the request now includes a new piece of information: whether that tool is a browser-related tool, determined by matching its name.

Why

Tagging browser tools separately lets the remote bridge treat permission requests for browser actions differently from other tool permission requests.

·Internal
Under the hood
Useful1 Signal1
Remote Control

Remote bridge session now sends the git repo URL to session config#

Remote bridge sessions now also send the git repository URL as part of session setup

Details 0 0 Feedback
What

When a remote bridge session sends its configuration during handoff, it now includes a gitRepoUrl field that wasn't part of that payload before.

Why

This git remote URL passes through the same credential-stripping step already used elsewhere, so any embedded username and password are redacted before being sent, in line with how the git remote URL is already handled during bridge registration.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Remote Control unclear

Bridge teardown 'skip archive' path now also waits on a preflush hold and reports it#

Bridge teardown's skip-archive path now also waits for pending uploads and reports timeouts

Unclear Whether this behavior is active for any given account depends on the tengu_bridge_repl_teardown gate, which is unread for this account, so nothing can be said about whether it is switched on.

Details 0 0 Feedback
What

When a remote bridge session tears down and skips archiving, it now waits on a pending-uploads check if there are uploads still in flight, and logs a new failure reason, skip_archive_flush_timeout, if that wait doesn't finish in time. The teardown telemetry now also includes the fields hold_preflush_ms and hold_preflush_landed on this skip-archive path, which previously only recorded them on the full-archive path.

Why

This brings the skip-archive teardown path in line with the full-archive path, so timing and success information about the pre-teardown upload flush is captured consistently regardless of which teardown path runs.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Hooks unclear

New 'undigested' cache-staleness state in git-attributes/hook expansion resolver#

Git hook/attribute file expansion gains a new 'undigested' state for stale cached files

Unclear The finding does not say what user-visible effect the undigested state has, only that the resolver can now return it.

Details 0 0 Feedback
What

The internal logic that expands file references in git hook and attribute configuration now tracks a modification 'stamp' for each file path, and can report a new undigested result when a file's cached state hasn't caught up with its current content. This sits alongside the existing not_text, unbounded, unexpandable, and contributes result kinds.

Why

This distinguishes files that simply haven't been processed yet from other reasons expansion might fail, which should make caching in this area more accurate.

·Internal
Under the hood
Useful1 Signal1
Sessions

Session resume now filters out already-seen message UUIDs#

Resuming a session no longer duplicates messages it has already seen

Details 0 0 Feedback
What

The function that rebuilds conversation history when resuming a session (renamed YMe) now accepts an optional set of message IDs already seen. When provided, any message whose ID is already in that set is filtered out before the resumed history is saved.

Why

This prevents the same message from being duplicated in a session's history when resuming, keeping resumed conversations accurate.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Bash static-analysis results now flag whether argv came purely from literals#

Bash permission checks now note whether a command's arguments came purely from literal text

Details 0 0 Feedback
What

When Claude Code statically analyzes a bash command to decide on permissions, its 'simple command' parsing result now includes two new fields: argvSourceLiteral, which indicates whether all the command's arguments came purely from literal text, and carveOutMayDesyncQuoteScan. Both are computed from counters that increase whenever the parser encounters arithmetic expansion, simple expansion, or herestring redirects (shell features that compute or substitute values rather than using plain text).

Why

This gives the permission-checking logic more precise information about whether a command's arguments are trustworthy literal text or come from potentially dynamic shell expansions, which affects how safely the command's permissions can be evaluated.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP claudeai-proxy 401 telemetry now sanitizes the proxy error code#

MCP proxy 401 telemetry now sanitizes the error code before logging it

Details 0 0 Feedback
What

When the tengu_mcp_claudeai_proxy_401 telemetry event records a proxyErrorCode, that value is now passed through a validator that only allows codes matching a simple letters/numbers/underscore/hyphen pattern starting with a letter. Any code that doesn't match is reported as "nonconforming" instead of being logged raw.

Why

This prevents arbitrary or malformed error code strings from being logged verbatim in telemetry, keeping the recorded data predictable and safe.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

Model-override settings-source enumeration reworked#

Internal check for model-override settings now filters sources instead of excluding one

Unclear The finding does not say what user-visible effect this has on model-override behavior.

Details 0 0 Feedback
What

A helper used internally when Claude Code checks model-override and enforcement settings was reworked. Instead of taking a full list of settings sources and removing one scope from it, it now filters the complete set of settings sources down to just localSettings and projectSettings, and it excludes project settings entirely in a certain condition.

Why

This is an internal implementation detail of how Claude Code decides which settings file takes precedence for model overrides. It doesn't change any user-facing behavior directly, but it affects which settings sources are consulted when enforcement checks run.

·Internal
Under the hood
Useful1 Signal1
Auto Mode

Auto-mode permission telemetry now tags MCP tool calls with connection/ambiguity info#

Auto-mode telemetry now tags MCP tool calls with which server they connect to and whether that's ambiguous

Details 0 0 Feedback
What

When Claude Code's auto-mode (a mode that can approve or reject tool calls automatically) logs telemetry about falling back to asking the user, making a decision, or showing a permission prompt, calls involving an MCP tool (one provided by a Model Context Protocol server) now get extra information attached: which server connection the tool belongs to, and a flag for whether that association is ambiguous. This is computed only when needed and reused for the rest of that call.

Why

This gives clearer visibility into how auto-mode handles MCP tools specifically, which is useful since a tool name alone doesn't always identify which server it came from.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Self-Hosted Runner

Self-hosted runner watchdog log gains a bg-result-grace budget component#

Self-hosted runner's watchdog timeout calculation now includes a background-result grace period

Details 0 0 Feedback
What

The self-hosted runner's startup log line for its 'watchdog config,' and the calculation behind how long it waits before shutting down, now factor in an additional timing value alongside the existing stop-grace period, post-session-hook timeout, and push-outcome timing: a grace period for background results.

Why

This should make the runner's shutdown timing account more accurately for work still finishing in the background, reducing the chance it cuts off before background results are reported.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Errors unclear

Rate-limit / API error message component gets an apiErrorKind prop#

The API-error/rate-limit message component now receives an apiErrorKind value

Unclear The finding does not say what values apiErrorKind can take or how they change what is displayed.

Details 0 0 Feedback
What

The internal component that renders API error and rate-limit messages now takes a new apiErrorKind value in addition to the isApiError flag and its existing rate-limit callback handling.

Why

This lets that message component distinguish between different kinds of API errors when deciding what to show, rather than only knowing that an error occurred.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP connection telemetry now records server instructions length/truncation#

MCP connection telemetry now records the length of a server's instructions and whether they were truncated

Details 0 0 Feedback
What

The tengu_mcp_server_connection_succeeded telemetry event, sent when Claude Code successfully connects to an MCP (Model Context Protocol) server, now includes two new fields: instructionsLength, the character count of the instructions text the server returned, and instructionsTruncated, which is true when that text is longer than 2048 characters.

Why

This lets Claude Code track how often MCP servers send unusually long instructions and whether those instructions get cut off, which can affect how well the server's guidance reaches the model.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP tool/notification names are now sanitized before logging#

MCP tool and notification names are now truncated and sanitized before appearing in logs

Details 0 0 Feedback
What

When Claude Code's internal MCP (Model Context Protocol) host logs which tool is executing or which notification method was received, it now truncates the name to 64 characters and converts it to a safe JSON string before writing it to the debug or info log, instead of inserting the raw name directly.

Why

This prevents an MCP server from injecting unexpected or oversized content into Claude Code's logs via a crafted tool or notification name.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP OAuth/auth error messages now pass through a redaction helper#

MCP OAuth error messages are now run through a redaction helper before being logged or sent

Details 0 0 Feedback
What

When Claude Code's MCP (Model Context Protocol, the system that lets Claude talk to external tool servers) authentication flow fails, the error text it produces is now built through a new redaction helper before it is logged or sent back over the control channel. This applies to errors from the authentication step, the OAuth callback URL handling, and the redirect-URI fallback logging.

Why

This reduces the chance that sensitive details (such as tokens or internal URLs) leak into logs or error messages shown to the user when an MCP server's authentication fails.

·Internal
Under the hood
Useful1 Signal1
Projects

Auto-mode projects owner-rows telemetry now tracks stale/former team members#

Auto-mode projects telemetry now also flags stale and former team members among project owners

Details 0 0 Feedback
What

When Claude reads project owner metadata while working in auto/projects mode, an internal data-quality check now also counts two new kinds of problem rows: rows where the listed member is no longer active ("not live"), and rows where the member's role is former_member. These counts are folded in alongside the existing checks for malformed, truncated, and stamped rows, and factor into the auto_mode_projects_owner_rows telemetry event that gets logged.

Why

This is internal telemetry used to catch and diagnose stale or inaccurate ownership data behind the scenes; it does not change what the user sees.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
SDK

Result messages now get a per-session result_index stamp#

Result messages sent over the SDK/stream-json transport now carry a per-session result_index number

Details 0 0 Feedback
result_index
What

Outgoing 'result' messages on the SDK and stream-json transport (the machine-readable output formats used by tools and scripts driving Claude Code) now get a result_index field, an incrementing number stamped on each message. A tracking mechanism ensures each message only gets stamped once, even if it passes through multiple times.

Why

This gives anything consuming Claude Code's programmatic output a reliable way to tell results apart and put them in order, which is useful for tooling that processes a stream of results rather than reading them one at a time in a terminal.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal1
Chrome & Browser

Chrome bridge tool calls now emit a start telemetry event with request size#

Chrome bridge tool calls now log a start event that includes the size of the outgoing request

Details 0 0 Feedback
What

Before Claude Code dispatches a tool call through the Chrome bridge (the connection to the Claude in Chrome browser extension), it now emits a chrome_bridge_tool_call_started telemetry event. It records the tool name, session ID, message ID, timeout, transport method, and the byte size of the request, calculated from the combined permission and allowed-domains data being sent.

Why

This gives visibility into how large and how often Chrome bridge requests are, which can help diagnose performance or timeout issues with browser-based tool calls.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal0
Group of 2 Plugins unclear

Artifact type catalog gains a cached description lookup#

Artifact type descriptions used during publish/resume are now cached with a TTL, backed by a restructured plugin type registry.

Unclear The finding does not say what user-visible effect, if any, this tracking change has.

Details 0 0 Feedback

What

  • The plugin type-registry reset routine now clears an additional liveReplicas.tooOld set, and splits the old single typeShipsInstructions set into two separate sets: typeCatalogVouch and typeDescriptions.
  • A new caching lookup stores per-slug artifact type descriptions in typeDescriptions, keyed by environment and slug, with a positive time-to-live for successful lookups and a shorter backoff before retrying after an error (except a "not_found" error).
  • This cache backs artifact publish and resume flows that need a type's title, and only runs when the typeCatalogOn setting is enabled.

Why Caching type descriptions with a TTL avoids repeatedly re-fetching the same artifact type information during publish/resume, while the backoff on errors prevents hammering a failing lookup.

·Internal
Under the hood
Useful1 Signal0
Telemetry

Frontmatter-shadow telemetry no longer conflates surface and detail#

Frontmatter-shadow telemetry now logs surface and detail as separate values instead of one value duplicated into both

Details 0 0 Feedback
What

The internal helper that logs frontmatter_shadow telemetry events gained a fourth parameter, so the detail field it logs is now a distinct value rather than being derived from the same input as the surface field.

Why

This makes the frontmatter_shadow telemetry more precise, since surface and detail can now carry different information instead of always matching.

·Internal
Under the hood
Useful1 Signal0
Elsewhere unclear

New byte-scanning helper for checking a substring inside a file without loading it fully#

New internal helper scans a file in chunks for a byte pattern without loading the whole file into memory

Unclear The finding does not say which feature or code path now uses this helper.

Details 0 0 Feedback
What

Claude Code has a new internal helper that checks whether a file contains a given byte pattern by reading it in bounded chunks, rather than loading the entire file into memory at once.

Why

This makes checking whether a file contains something more memory-efficient, especially for large files.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

Version/build metadata bump only#

Two code hunks are just the routine version bump to 2.1.268 with no logic change

Details 0 0 Feedback
What

A couple of code locations, in the OAuth gateway's response headers and in the self-update recovery error messages, only reflect the routine version, build-time, and git-commit metadata bump to 2.1.268. The surrounding code itself did not change in behavior.

Why

This is purely a build-identification update and does not affect how Claude Code behaves.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal0
Permissions

Permission-mode control-request construction extracted into helper YHe#

The code that builds permission-mode change events was pulled out into its own helper function

Details 0 0 Feedback
What

The internal logic that constructs the set_permission_mode event (sent when the permission mode changes) has been moved out of an inline object literal into a dedicated helper function. The resulting event has the identical shape as before.

Why

This is an internal code-organization change with no effect on what Claude Code does when the permission mode changes.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal0
Skills unclear

Skills-sync internal state gains a dedup Set and pending-claims array#

Skills-sync internals gain new bookkeeping for pending and deduplicated items

Unclear The finding does not say what specifically this bookkeeping tracks or fixes.

Details 0 0 Feedback
What

The internal process that syncs the skills manifest gained two new pieces of internal state, alongside its existing backoff timers and fields like pendingClaims and staleDirs: a set used to deduplicate items and a list of pending claims.

Why

This looks like internal bookkeeping for the skills sync process rather than a user-facing change.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

register_repo_root and add_directory refactor (mostly renaming)#

Internal renaming pass over the repo-registration and add-directory handlers, plus a small plugin-reload tracking addition

Details 0 0 Feedback
What

The internal handlers behind registering a repository root and adding a directory were renamed and reorganized with no clear change in behavior. One small addition: register_repo_root now sets a new internal flag after it reloads plugins, which looks like it tracks that a reload happened.

Why

Mostly internal cleanup with no expected effect on day-to-day use, though the new flag suggests some future or related logic will be able to check whether a plugin reload already occurred during repo registration.

·Internal
Under the hood
Useful1 Signal0
Artifacts

Artifact asset read/delete permission check refactored to a shared helper#

Artifact asset read/delete permission checks now go through a shared internal helper

Details 0 0 Feedback
What

The check that decides whether you're allowed to read or delete an artifact asset was rewired to use a shared internal helper function instead of a separate inline lookup, and this helper now throws its denial directly rather than returning a value to be checked.

Why

This is an internal consistency change. It should not change what gets allowed or denied, but centralizes the logic so read and delete checks behave the same way.

·Internal
Under the hood
Useful1 Signal0
Elsewhere unclear

Task/session list rendering internals reshuffled#

Internal rewrite of the task/session list panel's rendering code, no visible behavior change

Unclear The finding shows no behavioral difference, so it's unclear whether this rewrite changes anything a user would notice.

Details 0 0 Feedback
What

The internal rendering function for the task and session list panel was rewritten with new variable names and cache slot arrangement in its memoization cache.

Why

This appears to be internal code cleanup with no clear effect on what you see or how the panel behaves.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal0
SDK

toolUses / toolResults validation schema renamed fields#

toolUses/toolResults validation now expects tool_use_id and tool fields instead of id and name

Details 0 0 Feedback
tool_use_id
What

The internal validation for toolUses and toolResults data now checks for fields named tool_use_id and tool, rather than the previous id and name. The corresponding error messages were updated to match.

Why

This is a naming change to the fields expected in this data; anything constructing these payloads directly needs to use the new field names to pass validation.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

"[Thinking removed]" placeholder logic refactored into standalone helper functions#

The code that replaces thinking blocks with a "[Thinking removed]" placeholder was reorganized into named helper functions

Details 0 0 Feedback
What

The internal logic that strips out thinking blocks, redacted-thinking blocks, and empty text blocks, replacing them with a "[Thinking removed]" placeholder, was restructured from an inline filter into two separate named helper functions: one that decides whether a block should be stripped, and one that builds the placeholder block itself.

Why

This is an internal code-organization change with no described effect on behavior; the placeholder still appears the same way when thinking content is removed.

·Internal
Under the hood
Useful1 Signal0
Plugins

Plugin manifest path-traversal checks consolidated into a shared helper#

Plugin path-traversal checks unified into one shared helper function

Details 0 0 Feedback
What

Several places that check plugin-declared paths for safety — commands, MCP server file references, and plugin.json marketplace source paths — used to each run their own simple check for ".." in the path. They now all call a single shared helper function instead. A related helper that checks whether a directory exists also changed: it now takes the plugin's root folder plus a subpath, rather than an already-resolved path.

Why

Consolidating these checks into one helper reduces the chance that one of the several places validating plugin paths is checked inconsistently or missed when the logic needs to change.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

Web setup push-offer eligibility checks consolidated behind a() helper#

Web setup push-offer logic consolidated into one shared eligibility check

Details 0 0 Feedback
What

The checks that decide whether to show the 'web setup push offer' prompt (whether it was dismissed forever, already shown, shown too recently, or shown too many times) used to be four separate checks. They are now combined into a single shared helper function, used both by the code that decides whether to show the offer and by another function (tun), which now also skips its 'not connected' check when the helper says the offer is eligible.

Why

This is an internal refactor that consolidates duplicated logic, making the push-offer eligibility rules consistent wherever they're checked.

·Internal
Under the hood
Useful1 Signal0
System Prompt unclear

getSystemPrompt no longer takes additionalWorkingDirectories as an explicit parameter#

System prompt assembly no longer takes additionalWorkingDirectories as its own parameter

Unclear Whether additional working directories are still communicated to the prompt builder by another means is not stated.

Details 0 0 Feedback
What

The function that builds the system prompt (the instructions Claude Code sends to the model at the start of a conversation) no longer accepts additionalWorkingDirectories as a separate, explicit parameter, and no longer passes it that way into the underlying prompt-builder.

Why

This is an internal refactor of how extra working directories reach the system prompt. The finding does not indicate that the information about additional working directories is lost, only that it is no longer threaded through this particular parameter.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal0
Feedback unclear

Feedback survey eligibility check consolidated (kind check dropped from this branch)#

Feedback survey eligibility check simplified into one combined helper

Unclear Whether the interaction-kind restriction is preserved elsewhere or has effectively been dropped is not stated.

Details 0 0 Feedback
What

The check that decides whether a feedback survey branch should run has been consolidated into a single helper function. Previously it checked that the account type was 'firstParty' and separately required the current interaction to be of kind 'post' or 'share' (denying 'share' if an error state existed); now a single helper checks three conditions together, including the 'firstParty' account type and the absence of an error state.

Why

This is an internal simplification of the eligibility logic for showing a feedback survey; it does not change what users see, but it does drop the explicit 'post'/'share' interaction-kind check from this branch.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

Model-clamp warning threading refactored, still single-fire per message#

The plan-mode model-limit warning logic was restructured internally but still shows the warning only once per message

Details 0 0 Feedback
What

The function that enforces a model 'clamp' in plan mode (limiting which model can be used) now returns both the chosen model and a clampWarning value together, instead of just the model. The logic for deduplicating and logging that warning, which used to live inside the clamp function itself, now lives in the calling code.

Why

This is an internal restructuring of how the warning is passed around; the behavior a user sees, one warning per message at most, stays the same.

·Internal
Under the hood
Useful1 Signal0
Elsewhere unclear

storedImagePaths cleanup call sites swapped/renamed#

The functions cleaning up storedImagePaths during draft restoration were swapped for renamed equivalents

Unclear Whether the new functions behave identically to the ones they replaced, or only share the same role, is not established.

Details 0 0 Feedback
What

When restoring a draft message you were editing, the cleanup of storedImagePaths (bookkeeping for pasted images) now runs through differently named functions than before, for each pasted-content ID being cleaned up.

Why

This appears to be an internal rename or refactor of the cleanup functions rather than a change to what gets cleaned up or when.

7 entries

Removedopen

Removed
Under the hood
Useful1 Signal1
Artifacts

Shared/all-scope artifact listing no longer has a kill-switch check#

The kill switch that could disable shared/all-scope artifact listing has been removed

Details 0 0 Feedback
What

Artifact listing previously had a check that, when a feature flag was on and the requested scope wasn't "mine", would immediately fail with "shared-scope listing is disabled." That check and its early-return branch have been removed entirely.

Why

Listing artifacts in shared or all scopes can no longer be blocked by that flag, so this path is no longer able to be disabled the way it previously was.

Removed
Under the hood
Useful1 Signal1
Artifacts

Legacy 'd' flag and its dead branches removed from artifact-guard autoread#

Old legacy code path removed from the internal check that guards stale or handed-over artifact files

Details 0 0 Feedback
What

An internal function that decides whether an artifact file can still be safely read (used when guarding against stale or already-handed-over files) has dropped an old on/off switch and the entire branch of logic it controlled. That removed branch used to return specific reasons like legacy, not_plain_owner, strip_unsettled, control_bytes, interrupt_literal, and over_cap. None of this logic runs anymore.

Why

This is internal cleanup rather than a user-facing feature. It shouldn't change what you see, but if you ever encountered one of those specific stale-file error reasons before, it can no longer occur.

Removed
Under the hood
Useful1 Signal1
System Prompt unclear

System prompt: 'scratchpad' and 'language' sections dropped from the coding system prompt#

The coding system prompt no longer includes its 'scratchpad' and 'language' sections

Unclear What, if anything, replaces the removed scratchpad and language guidance is not shown in the evidence.

Details 0 0 Feedback
What

The function that assembles Claude Code's system prompt no longer includes a 'scratchpad' section, nor the 'language' sections it previously had. Handling of environment info was also consolidated into a single call instead of being spread across the prompt assembly.

Why

Removing these sections changes what built-in guidance the model receives at the start of every conversation, though the evidence doesn't say what, if anything, replaced their function.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Removed
Under the hood
Useful1 Signal1
Elsewhere unclear

RemoteIO 'unapplied Safeguards skip' reporting removed / stubbed out#

Reporting of skipped low-priority safety setting changes has been removed

Unclear What 'Safeguards' settings are and why this reporting was removed isn't explained in the finding.

Details 0 0 Feedback
What

A piece of internal reporting that used to log when a below-floor 'Safeguards' setting change was skipped during a settings update has been removed. The method and the field backing it are gone, replaced by an empty stub that does nothing.

Why

This is an internal bookkeeping change; the finding doesn't say why the reporting was removed, only that it no longer happens.

Removed
Under the hood
Useful1 Signal1
Artifacts unclear

Artifact read-tracking: 'seeded'/skip-to-set upgrade path removed#

Artifact viewer drops a special-case upgrade from 'skip' to 'set' read status

Unclear Whether this behavior is switched on can't be said: the tengu_cobalt_plinth_fern gate reads on for both this account and the anonymous baseline, but no reading has been taken under this release.

Feature flag
tengu_cobalt_plinth_fern Not enough to say

Nothing here resolved what this flag was doing on this version, so nothing here should be read as on or off.

This account: no value returned · anonymous baseline: on · compiled default in v2.1.268: on

Read once, for one account on one subscription tier, against v2.1.268. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
What

In the artifact viewer's bookkeeping for tracking which versions of an artifact you've read, a special-case rule that upgraded a 'skip' read status to 'set' under a particular seeded condition has been removed. Only the general rule, which applies whenever the status isn't 'skip,' remains.

Why

The finding doesn't state the visible effect, but removing this special case means fewer paths by which a 'skip' status gets promoted to 'set.'

Removed
You'll notice
Useful1 Signal0
Elsewhere

Model picker drops the "Comment on N selected lines" placeholder#

Model picker no longer shows a "Comment on N selected lines" placeholder message

Details 0 0 Feedback
What

The model picker's keyboard shortcut handler used to show a placeholder message like "Comment on N selected line(s)..." when it detected a diff selection. That logic has been removed, and the picker now always shows a plain default placeholder instead.

Why

This removes a context-specific placeholder from the model picker, so it no longer reflects a selected diff range when choosing a model.

Removed
You'll notice
Useful1 Signal0
MCP unclear

MCP connection info panel drops the Args row#

The MCP server info panel no longer shows the server's launch arguments

Unclear The finding does not say why the row was removed or whether the information is shown elsewhere.

Details 0 0 Feedback
What

The panel that shows details about a connected MCP server (a Model Context Protocol server, an external tool provider Claude Code can connect to) no longer displays an "Args:" row listing the arguments used to launch that server.

Why

Anyone who used that row to check exactly how an MCP server was started will no longer find it in the detail panel.

Verbatim
Official · Anthropic

Anthropic’s official release notes

Published verbatim by Anthropic for v2.1.268. 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 96 bullets, 19 name something an entry on this page also names, 28 name something no entry here does, and 49 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.

  • Added to the Claude apps gateway: with pricing: set in gateway.yaml, signed-in Claude Code clients receive the same rates through managed settings, so /cost and telemetry match the spend meter No entry names this
  • Added a startup warning for gateways when access_control.allow_cidrs is empty, and a one-time warning the first time a request arrives from a public address Probably gateway-warns-once-when-a-client-connects-from-a-non-private, new-gateway-config-warning-for-empty-access-controlallow-ci
  • Added the gatewayInternalNetworks managed setting, letting administrators allow /login to a Claude apps gateway on their organization's own public IPv4 block Probably remote-session-org-policy-denials-now-emit-telemetry, gateway-login-now-flags-when-it-would-go-through-a-proxy-for, gatewayinternalnetworks-added-to-managed-settings-merge-exce, c4e-slash-command-upsell-now-distinguishes-signed-out-users, cli-login-oauth-failure-output-gains-a-conditional-extra-new, new-managed-settings-key-gatewayinternalnetworks-restricts, new-managed-settings-key-gatewayinternalnetworks-joins-highe, managed-settings-can-restrict-a-cloud-gateway-sign-in-to-you
  • Added claude self-hosted-runner --remove-session-state (default off): delete each session's per-session directories under <base-dir>/_sessions/ when the session ends Probably new-remove-session-state-flag-for-self-hosted-runner
  • Added configDirectory to the output of claude auth status --json Probably plugin-cli-commands-disable-disable-all-update-gain-js
  • Added --json to claude plugin install, uninstall, update, enable and disable, and errorDetails/noteDetails to each row of claude plugin list --json Probably plugin-cli-commands-disable-disable-all-update-gain-js
  • Added browser-tab icons for published artifacts, chosen by Claude to match each page Nothing to match on
  • Fixed every turn failing with HTTP 400 on third-party Anthropic-compatible endpoints (ANTHROPIC_BASE_URL) since 2.1.265: a regex in the Artifact tool's input schema that those endpoints reject No entry names this
  • Fixed WebFetch hanging indefinitely on a server that keeps the response open without finishing; a fetch now fails after 300 seconds. Set CLAUDE_CODE_WEBFETCH_DEADLINE_MS to override the deadline (0 turns it off) Probably webfetch-requests-now-enforce-a-deadlinetimeout
  • Fixed a respawned in-process teammate picking up tools or a system prompt from a same-named agent file in a folder you have not trusted Nothing to match on
  • Fixed sustained high CPU usage: a busy loop in long-running idle sessions no longer pins a CPU core, and rapid terminal focus reports during a session recap no longer keep the CPU high Nothing to match on
  • Fixed Claude sometimes replying "your message came through empty" after an MCP tool call No entry names this
  • Fixed deny and ask permission rules on symlinked directories (/etc, /tmp, /var on macOS; /bin on Linux) not applying when a path was given by its real location, and Bash commands ignoring deny rules written on a symlinked path spelling No entry names this
  • Fixed a case where a Read or Edit deny rule did not apply when an env -C, eval or similar command the permission checker cannot analyze was on the same line No entry names this
  • Fixed plugin and marketplace errors showing a token or password from a git source URL Nothing to match on
  • Fixed /mcp and /plugin server details, claude mcp list/get, and MCP login errors showing secrets resolved from ${VAR} placeholders in MCP configs Probably plugin-status-listing-now-flags-org-required-mcp-plugins, plugin-enabledisable-results-now-carry-a-machine-readable-f
  • Fixed prompt caching and extended thinking breaking mid-session for SDK sessions using excludeDynamicSections: the first message is no longer re-rendered each request No entry names this
  • Fixed entitled users being told a model is restricted after restart or in the Desktop Code tab when a cached model-access denial was stale Nothing to match on
  • Fixed a running session silently switching to the organization's default model when another Claude Code process refreshed a stale model-access entry Nothing to match on
  • Fixed long-context 429s on Fable models showing the usage-credits consent prompt instead of the 1M-context message on Pro and Team plans Nothing to match on
  • Fixed workload identity federation via a profile (as claude-code-action configures it): processes sharing the profile could fail mid-run with 401 … jti reused No entry names this
  • Fixed MCP server OAuth sign-in failing with "No available ports for OAuth redirect" when the local callback port range can't be bound No entry names this
  • Fixed the conversation summary produced by /compact and auto-compact mangling text that contained $ sequences No entry names this
  • Fixed resuming a conversation that ended with /compact: its restored-file notes now load in the same order on every resume No entry names this
  • Fixed SDK prompt suggestions, side questions and /rename sending the conversation from before a compaction Probably storedimagepaths-cleanup-call-sites-swappedrenamed
  • Fixed @ file and / command suggestions not appearing after recalling a previous prompt with the up arrow and editing it Nothing to match on
  • Fixed claude agents: pressing ← again at a natural pace to go back to the agent list no longer gets ignored until you pause for over a second No entry names this
  • Fixed claude agents session delete getting stuck when a worktree can't be removed: the message names the cause and next step, and for a git worktree ctrl+x again deletes the directory anyway No entry names this
  • Fixed background agent and workflow rows in the agents panel expanding to many lines when their text contained line breaks Nothing to match on
  • Fixed Claude in Slack sessions losing their Slack tools when org managed settings set an MCP allowlist Nothing to match on
  • Fixed Claude in Chrome asking to allow the host "https" when a navigation URL had a scheme but a host that could not be parsed Nothing to match on
  • Fixed the spinner wrapping onto several lines when the current task's label is long; the label and the "Next:" task line now stay within one terminal row No entry names this
  • Fixed the /bug and /feedback description field showing no cursor when the terminal's native cursor is enabled No entry names this
  • Fixed Remote Control sessions served by claude remote-control showing a generated name instead of their session title in ListAgents No entry names this
  • Fixed claude plugin validate rejecting plugin paths whose directory name begins with two dots, which the plugin loader accepts No entry names this
  • Fixed plugins silently skipping a default monitors file or root SKILL.md that could not be checked Nothing to match on
  • Fixed WebFetch's error for localhost and other dotless hostnames to explain why the URL is refused and suggest curl Nothing to match on
  • Fixed PermissionRequest hooks not firing in --print mode Probably remote-session-org-policy-denials-now-emit-telemetry, print-mode-resume-gains-cloud-session-fork-seed-adoption-and
  • Fixed policy-helper warnings not printing on headless (-p) runs Nothing to match on
  • Fixed /resume listing a /fork background session under its parent's name instead of its own fork name Probably ccrclient-adds-explicit-stream-delta-dropresume-logging-tie
  • Fixed /remote-control and other claude.ai-gated commands to suggest /login when signed out instead of showing a Claude for Enterprise migration message Probably remote-session-org-policy-denials-now-emit-telemetry, c4e-slash-command-upsell-now-distinguishes-signed-out-users, rc-footer-wording-and-status-labels, cli-login-oauth-failure-output-gains-a-conditional-extra-new, new-managed-settings-key-gatewayinternalnetworks-restricts, managed-settings-can-restrict-a-cloud-gateway-sign-in-to-you
  • Fixed CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS not extending SessionEnd hooks that have no per-hook timeout (they were still cancelled after 1.5 seconds) No entry names this
  • Fixed /autofix-pr and other cloud-session commands saying to retry or install the Claude GitHub App when no GitHub account is connected; they now point to /web-setup or the web connect page Probably new-user-facing-message-for-cloning-a-repo-in-the-cloud-with, teleport-failure-message-now-suggests-web-setup-and-points, github-connector-access-check-reworked-with-explicit-not-con, new-github-not-connected-state-threaded-through-github-acc
  • Fixed cloud-session commands such as /teleport and /remote-env to explain when an organization policy turns them off, instead of answering "Unknown command" Probably teleport-failure-message-now-suggests-web-setup-and-points
  • Fixed Bash sandbox instructions over-stating confinement: no unenforced path lists when filesystem isolation is off, and strict mode no longer claims commands can never run unsandboxed Nothing to match on
  • Improved fullscreen mode: adding or removing a prompt line (Shift+Enter) now repaints as fast as typing a character instead of re-rendering the visible transcript Nothing to match on
  • Improved --continue / --resume: the conversation appears immediately instead of waiting for SessionStart hooks, and the first message no longer re-reads the whole transcript Probably print-mode-resume-gains-cloud-session-fork-seed-adoption-and
  • Improved responsiveness during tool-heavy turns by no longer redrawing the transcript for a hidden per-tool-batch reminder Nothing to match on
  • Improved startup time in projects with .claude/workflows/ scripts: listing them no longer parses each script No entry names this
  • Improved auto mode denials: the message Claude receives now names the rule that blocked the action and asks Claude to try a safer method and finish unrelated work before stopping to ask you Nothing to match on
  • Improved Claude in Chrome: long page reads now stay inline instead of being saved to a file and read back Nothing to match on
  • Improved the MEMORY.md truncation warning to say how many lines were cut and where the cut starts Nothing to match on
  • Improved the terminal permission prompt for artifacts: it now leads with the ask's question Nothing to match on
  • Improved the prompt footer: an editor or /diff selection now shows inside the prompt input, and fullscreen mode shows Remote Control status in the header instead of the footer No entry names this
  • Improved the "Usage credits required for 1M context" message to say that usage credits turned on mid-session take effect after restarting Claude Code No entry names this
  • Improved /plugin: installing, enabling or disabling a plugin now takes effect when you close the menu; /reload-plugins is no longer needed afterwards Probably plugin-enabledisable-toast-no-longer-hard-codes-run-reloa, new-wording-for-plugin-enable-confirmation-depends-on-a-chan, plugin-status-listing-now-flags-org-required-mcp-plugins, plugin-menu-shows-auto-reload-deferredqueued-state-with-new, plugin-settings-view-prompts-a-reload-after-changes-that-nee, plugin-config-save-confirmation-no-longer-tells-users-to-run, reload-plugins-sdk-request-gains-a-hold-on-cache-impact-opti, plugin-enabledisable-results-now-carry-a-machine-readable-f
  • Changed the system prompt on Bedrock, Vertex and Foundry to deliver environment, model and settings details as attachments, matching first-party sessions Nothing to match on
  • Changed Bedrock, Vertex and Foundry sessions to keep the tool list byte-stable across a conversation (late-connecting tools load deferred instead of rewriting it), matching first-party sessions Nothing to match on
  • Changed the task-tracking tools (TaskCreate/Get/Update/List, TodoWrite) to be offered only on Claude 3.x, Opus 4.0–4.7, Sonnet 4.0–4.6, Haiku 4.5; set CLAUDE_CODE_ENABLE_TODO_TOOLS=1 elsewhere Probably todotask-tool-availability-no-longer-conditioned-on-a-remot
  • Changed the artifact data-edit permission prompt in the terminal to a card that shows the document count and who can open the artifact Nothing to match on
  • Changed local Cowork sessions set to skip all approvals: the Artifact tool now refuses a local file outside the session's folders, or behind a symlink, instead of reading it without asking Nothing to match on
  • Changed plain WebFetch deny and ask rules to no longer apply to Artifact tool reads and updates; use an Artifact rule (or WebFetch(domain:claude.ai)) to block or gate them Probably artifact-file-listingreading-now-reports-the-artifacts-dec, webfetch-now-explicitly-blocks-dotlesslocalhost-hostnames-w, artifact-copyread-blocked-message-text-consolidated-with-ne, new-telemetry-event-tengu-web-fetch-transport-records-outcom, artifact-read-permission-check-for-webfetch-now-runs-a-deny, webfetch-requests-now-enforce-a-deadlinetimeout
  • Changed the "N MCP servers need authentication" startup notice to announce each server once instead of at every launch No entry names this
  • [VSCode] Fixed the session list, settings toggles, and chat tabs when CLAUDE_CONFIG_DIR is set in a settings file or the environmentVariables setting Probably new-internal-sdk-field-user-output-styles-dir
  • [VSCode] Fixed the model pill, model picker and command menu going blank in open tabs for a few seconds after a login, logout or account switch Nothing to match on
  • [VSCode] Fixed Auto disappearing from the mode picker in new-tab or just-reloaded conversations when a project or local setting overrides the model named in ~/.claude/settings.json No entry names this
  • [VSCode] Fixed session names reverting to the last prompt after a window reload when a SessionStart hook is configured Nothing to match on
  • [VSCode] Fixed the footer's model pill and Remote Control pill waiting for the new tab's Claude process to start when another tab in the window is already up Nothing to match on
  • [VSCode] Fixed a second Claude process running through its full startup when a session tab's launch arrived more than half a second after its config read Nothing to match on
  • [VSCode] Fixed resuming a session from the session list ignoring claudeCode.preferredLocation: "sidebar" (it always opened a panel), and programmatic opens resetting that setting to "panel" No entry names this
  • [VSCode] Fixed Windows issues: the WSL install prompt no longer appears on machines without WSL installed, and IDE diagnostics are now returned correctly for Windows files when WSL is installed Nothing to match on
  • [VSCode] Fixed the custom style builder saving a User level style in a folder the CLI does not read when CLAUDE_CONFIG_DIR is set through settings Probably new-internal-sdk-field-user-output-styles-dir
  • [VSCode] Added Left and Right arrow keys to change where an always-allow permission rule is saved, for keyboard and screen reader users Nothing to match on
  • [VSCode] Added a "Claude Code: Focus last message" command that moves keyboard focus to the newest message in the conversation, for keyboard and screen reader users No entry names this
  • [VSCode] Changed the Manage plugins dialog to apply installs, enables, disables and uninstalls to open sessions without a restart Nothing to match on
  • [VSCode] Changed some artifact permission prompts to omit the "don't ask again" choice, matching the terminal No entry names this
  • [Claude Code on the web] Fixed cloud sessions running longer than about six hours silently losing files saved to persisted session folders; saves now persist for up to a day Nothing to match on
  • [Claude Code on the web] Fixed "Invalid effort level" errors when a routine resumes a session, or a session starts with no set effort, in orgs where an admin caps a model's effort No entry names this
  • [Claude Code on the web] Improved routine creation from a conversation: when the new routine has no connectors, Claude now says so and how to add them instead of only confirming it Nothing to match on
  • [Claude Tag] Fixed the admin settings page hanging on a loading skeleton or going blank after a transient load failure; a section that fails to load now shows a Retry button Nothing to match on
  • [Claude Tag] Added a link from a Slack channel's configure page back to the organization's Claude in Slack admin settings Nothing to match on
  • [Claude Tag] Fixed a Slack Enterprise Grid channel losing its Claude settings (repository, environment, access) after a Slack admin moved it to another workspace Nothing to match on
  • [Claude Tag] Improved how Claude explains a blocked action: it now says whether a permission check, its own decision to confirm first, or missing access stopped it Nothing to match on
  • [Claude Tag] Improved reply speed: Claude now runs several read-only lookups (searching Slack, reading a thread, finding people) at once instead of one after another Nothing to match on
  • [Claude Tag] Improved formatting of comparisons: sentence-length comparisons now come as lists instead of wide tables that scroll sideways, and long table cells wrap Nothing to match on
  • [Claude Tag] Fixed @Claude !restart in a thread with its own session sometimes also posting a contradictory "this thread is handled by the channel session" notice No entry names this
  • [Claude Tag] Improved the message shown when your Claude account is in a different organization than the Slack workspace: it now explains how to connect the workspace to your org Nothing to match on
  • [Claude Tag] Fixed Markdown links whose URL is wrapped in angle brackets showing as literal bracket text in Slack instead of a clickable link Nothing to match on
  • [Claude Tag] Fixed a workspace guest's top-level @mention in a channel where guests may use Claude sometimes getting a "your Slack account isn't connected" reply instead of an answer No entry names this
  • [Claude Tag] Fixed a channel's long-running session being replaced with a fresh one mid-conversation; the scheduled refresh now waits until the channel and its threads are quiet Nothing to match on
  • [Claude Tag] Fixed channel-settings cards clicked more than once telling the proposing session the change was refused after it had already applied; the outcome is now sent once Nothing to match on
  • [Claude Tag] Changed memory in public channels: each channel now keeps its own notes, and Claude no longer recalls notes it saved in other public channels; workspace notes stay shared Nothing to match on
  • [Code Review] Added a note under the still-open findings list in follow-up reviews: resolving a finding's thread, not just replying to it, stops later reviews from counting it as open Nothing to match on
  • [Code Review] Fixed reviews sometimes ending as incomplete when one of the agents verifying a finding failed midway; the review now replaces that agent and reaches a verdict Nothing to match on
  • [Code Review] Fixed a push-triggered review that was queued behind a running review still posting after the pull request had been converted to draft Nothing to match on
  • [Code Review] Fixed reviews ignoring a directory's CLAUDE.md conventions when the PR edited a root file (e.g. README.md) that only shares a name with a file that CLAUDE.md lists Nothing to match on
System prompt

1 added and 8 removed, of 218 lines, about 71 words, in the prompt 17 of 27 arms receive. 3 other prompts also changed. 3 of 28 tool descriptions changed. The appended system-reminder blocks moved: 17 lines added.

Claude Code, interactive mode

No prompt capture for v2.1.268, so this release's prompt surface is unknown.

Documentation

What the docs did around this release

908 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.

Switches

Every name in this release

The 115 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.

Slash commands

CLI flags

Environment variables

Settings and names in the code