Claude Code v2.1.277

527 entries read v2.1.276 → v2.1.277 Markdown Unofficial

This build carries 33 gated additions that stay out of reach. AGENTS.md fallback now becomes the default instruction-file mode when a project has no CLAUDE.md, with the controlling setting renamed. Also present but inert: a per-turn "current time" signal for API requests gated by an env var, a fully-built promo/offer eligibility check with no visible trigger, a SuggestPluginInstall tool for inline plugin-install cards, a repository-trust confirmation flow for cloud sessions, and a usage-limit "wrap up your work" reminder that stays gated off by default.

Of 166 shipped entries, a running tool call can now be detached to the background so a queued message can get through instead of waiting on it to finish. Mermaid diagrams render as ASCII box-drawing art directly in the terminal. Plugins gain a new prompt.attachment hook for rewriting or dropping attachment text before it reaches the model, and plugin fetch can connect over a Unix socket via a new experimental socketPath option. The instructionFiles setting now supersedes projectInstructions, which becomes a deprecated fallback, and remotely served project hook commands now run sandboxed and pinned by checksum before their block/allow decision is trusted.

Among 59 fixes, the TaskOutput tool has been removed, with background task output now read through the Read tool instead. Settings files reached through symlinks to another host or unverifiable routes are now refused rather than followed. Sandboxed shell commands get a fallback $TMPDIR when a command references it but none is set, and PDF page extraction now handles Windows file paths longer than 259 characters. The headless cloud client now validates repository-trust prompts before forwarding them to the host, dropping suspicious ones.

Reading as
Show only
Tier
Flag state
Names
Pick an entry · j / k steps through · rest on a row to peek
42 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
You'll notice
Useful5 Signal4
Group of 2 Background Tasks Notable

Long-running tool calls can now detach to the background instead of blocking new messages#

A slow tool call can now move to the background so a new message gets through, with its result delivered later

Feature flag
tengu_tool_detach 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.277: on

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback

What

If a tool call is still running when the user sends a new message, Claude Code can now move that call to the background ('detach' it) instead of making the new message wait for the tool to finish.

  • The model is told via an injected note that the call 'was not interrupted' and that its result 'will be delivered to you on its own, in a later tool_result carrying this tool_use_id'.
  • When the detached call eventually finishes, completes, fails, times out, or is stopped, its result is delivered as a task notification.
  • Detachment is capped: a detached call is force-aborted after 5 minutes if it hasn't finished.
  • The event tengu_tool_call_detached is emitted for telemetry.

Why

This stops a single slow tool call from blocking the whole conversation. A new message can get through immediately while the original tool keeps running in the background, with its result delivered whenever it's ready.

In dev
Nothing to try yet
Useful4 Signal4
Group of 3 Cloud Sessions no docs found

Hosted 'serve' sessions can now surface host-side notices to the cloud session view#

Sessions serving tools to a host machine can now show deduped notices, like MCP consent or hook status, in the cloud session view

Details 0 0 Feedback
hostedServeDialogsGateOn

What

  • In the headless-cloud attach/create path, when a session is serving tools, a new dedup store is created, gated by hostedServeDialogsGateOn (which falls back to checking gate tengu_violin_chinrest). When present, it collects notices via a new onNotice callback and exposes them through cloudSession()'s new notices field and a new onCloudSessionChanged hook.
  • The cloud_session init-frame schema used by the headless stream-json client gained a notices array describing device-serving events the user should be shown: MCP consent/reconsent/drop, hook run status, bash-from-home, and mute/unmute of served tools.
  • The notice store is a bounded map holding only the latest notice per key, with change subscription, so duplicate notices for the same event are deduplicated instead of firing ad hoc.

Why

This lets a cloud session view show the user what's happening on the host machine serving tools to it, such as a hook running or an MCP consent request, instead of those events being invisible or repeated, while the feature stays behind a gate until it's ready.

In dev
Nothing to try yet
Useful4 Signal4
Group of 2 Models unclear

New 'alder_ford' model-alias override read from session config#

A config value named alder_ford can now substitute a model's display name and cost info for another model family's

Unclear What 'alder_ford' is used for in practice, and what triggers the alias to be configured, isn't stated in the finding.

Details 0 0 Feedback

What

Claude Code can now read a config value keyed alder_ford from session config. If that value has an as alias and an ends_at expiry timestamp under 100000000000 (and hasn't expired) and the alias maps to a known model family, Claude Code substitutes that family's display name and cost info in place of the normal one.

The override is wired into cost lookup, managed-vs-list model detection, and the display-name lookup, but it does not apply to requests made with speed: "fast". It is also gated to first-party API usage only.

Why

This lets Claude Code present an alternate model's name and cost information for a limited, expiring window, useful for scenarios like testing or rollout of a model-family substitution without changing what model actually runs.

In dev
Nothing to try yet
Useful4 Signal4
Group of 4 Cloud Sessions

New 'repository trust' confirmation flow for cloud sessions#

Cloud sessions can now ask you to confirm 'repository trust,' with device-binding checks, a feature flag, and session-level trust reporting

Feature flag
tengu_violin_bridgepin Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

Read once, for one account on one subscription tier, against v2.1.277. 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 "repository trust" confirmation question type was added to the remote/cloud-session permission pipeline. Answering yes marks everything attached to that cloud session as trusted.
  • The client refuses to show the confirmation unless the input matches exactly the digest served by the server. If the terminal isn't the device the cloud session is bound to, it adds a warning that the answer can't prove which device it came from, telling you to answer from claude.ai web, desktop, or mobile instead. If the terminal can't render the question at all, it leaves it unanswered for other devices along with an explanatory note.
  • Tool-result rendering gained a matching "refusal" display: for repository-trust folder-wait errors, a localized message keyed repository_trust.folder_waits.<reason> is now shown instead of the plain error view, and detached/backgrounded tool call results are rendered with a dedicated rows/table-style component.
  • A new nameRepositoryTrustAnswers capability flag, off by default, was added, gated behind a first-party check and a growthbook flag.
  • The cloud session view now reports a repositoryTrust fingerprint and a directory-sync retention cutoff for directory-synced sessions.

Why

This gives Claude Code a way to ask for and record explicit trust confirmation before treating everything attached to a cloud session as trusted, with safeguards so the confirmation can only meaningfully be answered from the device the session is actually bound to.

In dev
Nothing to try yet
Useful4 Signal4
Group of 2 API Client Notable

New per-turn timing signal for requests#

Claude Code can now send the current time with each turn under a new beta flag, controlled by CLAUDE_CODE_PER_TURN_TIMING

Details 0 0 Feedback

What

Claude Code can now include the current timestamp with each turn it sends to the model, as a new field alongside the existing per-turn effort mechanism. This only happens when a new beta flag is enabled and the CLAUDE_CODE_PER_TURN_TIMING environment variable is set, together with the existing eligibility checks used for per-turn effort.

  • A new per-request field injects the current time into each turn's request when the beta flag and environment variable enable it.
  • The internal list of flags used to build prompts and decide cache validity now includes per_turn_timing next to the existing per_turn_effort.

Why

This is a gated, opt-in signal, so it has no effect unless CLAUDE_CODE_PER_TURN_TIMING is set. Once enabled, it lets the model be aware of timing information on a per-turn basis, similar to how per-turn effort already works.

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
Group of 3 Plugin Install no docs found

Plugin/skill suggestions: fallback search and a new inline install card#

Onboarding now falls back to searching for a productivity plugin, and a new SuggestPluginInstall tool renders a verified inline install card

Feature flag
tengu_gentle_frost Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.277: not a boolean we can read

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
SuggestPluginInstall

What

  • When a user skips or dismisses the role picker during onboarding, Claude Code now runs a plugin search for a productivity plugin (after checking already-installed plugins) instead of unconditionally suggesting one, and skips the recommendation widget entirely if nothing is found.
  • A new tool, SuggestPluginInstall, takes plugin suggestions sourced from search results, verifies each suggested plugin id against the user's claude.ai plugin catalog, drops any ids that don't resolve or turn out to be skills rather than plugins, and renders an inline install card. It refuses to render anything if none of the suggested ids can be verified.
  • The plugin/skill search request logic was factored into a shared helper used by both the existing search tool and the new SuggestPluginInstall tool's detail-fetch path, with the same policy-denial and no-scope-skip behavior preserved.

Why

These changes make plugin recommendations more reliable: suggestions are only shown when backed by a real search result and a verified catalog entry, cutting down on broken or irrelevant install prompts.

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 2 Gateway Proxy Notable

New gateway mode lets an outbound proxy be the sole network security boundary#

A new CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY setting lets Claude Code defer network safety checks to a forward proxy

Details 0 0 Feedback
CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY

What

A new environment variable, CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY, lets a gateway deployment tell Claude Code that all outbound network requests should be handed directly to an upstream HTTPS/HTTP proxy (the one set via HTTPS_PROXY/HTTP_PROXY), relying on that proxy's own allowlist. When this is active, Claude Code skips its own local DNS resolution and loopback/SSRF (server-side request forgery) safety checks and just passes hostnames straight through to the proxy.

This mode refuses to turn on, and logs a warning explaining why, in three cases:

Why

This lets administrators who already enforce network restrictions at their proxy avoid redundant or conflicting checks from Claude Code itself, while the safeguards prevent the setting from silently weakening security in setups where no proxy is actually in place to do that job.

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 2 Plugin Hooks Notable no docs found

New prompt.attachment plugin hook lets hooks rewrite or drop attachment text#

Plugins can now implement a prompt.attachment hook to rewrite or remove text attached to a message before it reaches the model

Details 0 0 Feedback
prompt.attachment

What Claude Code adds a new hook event type, prompt.attachment, that plugins can implement to inspect and change text attached to a user's message. A hook can rewrite the attachment's text or leave it out entirely before it reaches the model. Claude Code logs what changed and which plugin or hook made the change, including whether the origin was the plugin, a hook, or the engine's own default handling.

Why This lets plugins control what attachment content actually gets sent to the model, for example filtering or transforming pasted content before use, with a record of what was changed and by what.

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 Signal4
Group of 3 Rate Limits no docs found

Usage-limit grace-window messaging made remote-configurable, plus a new wrap-up reminder#

The 'Usage limit reached' banner text can now be overridden remotely, and a new gated reminder nudges Claude to wrap up during the grace window

Feature flag
tengu_lantern_wick_mode 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.277: not a boolean we can read

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
tengu_lantern_wick_braid

What

  • The pinned "Usage limit reached" notification shown during a grace window now pulls its headline text from a schema-validated remote config (with running/stopped/credits_on keys) instead of hardcoded strings, changes "resets ..." to "limit resets ...", and adds a clickable link to clau.de/wrap-up.
  • This override is controlled by gate tengu_lantern_sconce_copy; if it parses to a valid non-empty value, it replaces the hardcoded messages ("Usage limit reached · wrapping up", "Usage limit reached", "Usage limit reached · brief included wrap-up, then usage credits"), and the parsed value is recorded on the flags diagnostic object.
  • A separate new subsystem can inject a system reminder telling Claude to wrap up work ("finish or checkpoint; don't start subagents or long work") when the session is in a usage-limit grace window. Its message text and mode ("wrap-up" vs "next-steps" vs custom) are configurable, and it's off by default, controlled by gate tengu_lantern_wick_braid.

Why

These changes let Claude Code adjust usage-limit messaging without shipping a new release, and give it a way to actively encourage wrapping up work before a usage-limit grace period ends, rather than just showing a static warning.

Related

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

+New
You'll notice
Useful5 Signal4
Terminal Rendering Notable

Mermaid diagrams render as ASCII/box-drawing art in the terminal#

Mermaid flowcharts and sequence diagrams in replies now render as text art in the terminal

Feature flag
tengu_mermaid_mod 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.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
What

When an assistant reply includes a Mermaid diagram (a way of describing flowcharts and sequence diagrams as text, wrapped in a ```mermaid code block), Claude Code can now detect it and redraw it directly in the terminal using box-drawing characters, in place of the raw Mermaid source. If a diagram can't be laid out or is too large, it's left as plain text instead.

Why

This lets you see an actual diagram in the terminal instead of raw Mermaid markup, making flowcharts and sequence diagrams in a response easier to read at a glance. Whether this is active for a given account depends on a setting, tengu_mermaid_mod, which nothing has yet been read about.

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
Group of 7 CLAUDE.md Rules

AGENTS.md/CLAUDE.md instruction loading revamped: instructionFiles setting, new modes, plugin file stats#

Instruction-file loading was renamed to instructionFiles, gained new modes with AGENTS.md fallback as default, and now reports plugin instruction stats

Details 0 0 Feedback
CLAUDE.mdAGENTS.md

What

  • The setting is renamed from projectInstructions to instructionFiles; the old name still works as a deprecated alias but logs a one-time warning telling you to migrate.
  • The recognized modes changed from claude, agents-fallback, both, none to claude-md, claude-md-or-agents-md, claude-md-and-agents-md, managed-only.
  • The default mode is now claude-md-or-agents-md, so a project with no CLAUDE.md of its own now automatically gets its AGENTS.md files loaded instead, without needing to turn anything on.
  • New telemetry events (agents_md_load, agents_md_nested) record file count, import count, total content length, and whether the file walk succeeded or failed, tagged by the resolved mode.
  • Project context-loading results now always include a pluginInstructionFiles field (with fileCount and totalContentLength) alongside the existing claudeMd, instructionFiles, and memoryFiles fields.

Why

This clarifies and simplifies how Claude Code decides which project instruction files (CLAUDE.md, AGENTS.md) to load, makes AGENTS.md usable out of the box for projects that don't have their own CLAUDE.md, and gives better visibility into which instruction files, including ones contributed by plugins, actually got loaded.

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 Remote Control Notable no docs found

Remote Control sessions can now cancel a single in-flight async message#

Claude.ai Remote Control bridge sessions can now cancel one specific async message instead of interrupting the whole turn

Details 0 0 Feedback
onCancelAsyncMessagecancel_async_message

What

Remote-bridge sessions (used by Remote Control, i.e. controlling Claude Code from claude.ai) gained a new onCancelAsyncMessage handler alongside the existing onInterrupt, onStopTask, and onBackgroundTasks callbacks. This lets a specific async message be cancelled without interrupting the entire turn.

The cancellation logic itself (finding the in-flight message, dequeuing matching messages, marking a cancel as pending) was pulled out of its previous inline implementation into a shared helper that takes a source, either 'host' or 'remote_client'. The remote-control bridge's onCancelAsyncMessage calls this helper with 'remote_client', so it only cancels messages that originated from the bridge, and if nothing is queued yet, it withdraws the in-flight ingest instead of just marking a pending cancel.

Why

This gives Remote Control sessions finer-grained control: a specific queued or in-flight message can be cancelled on its own, rather than the only option being to interrupt the whole turn.

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 Thinking Display Notable

set_max_thinking_tokens gains a new thinking_display option and stricter validation#

The set_max_thinking_tokens tool supports a new 'highlights' display mode and validates its inputs more strictly

Details 0 0 Feedback
set_max_thinking_tokenshighlights

What

  • The thinking_display parameter of the set_max_thinking_tokens tool now accepts a new mode, in addition to summarized and omitted, that shows one short title per stretch of thinking instead of a full prose summary. This mode only works for Claude Code sessions that Anthropic itself hosts; on any other client, the request still succeeds but silently falls back to omitted once the API rejects the value.
  • A tightened validation schema now requires max_thinking_tokens to be an integer or null, and thinking_display to be one of a fixed set of values or null, with a matching error message when the input doesn't fit.

Why

The new display mode gives a more scannable view of Claude's thinking on supported sessions, while the stricter validation makes sure invalid values for these settings produce a clear error instead of being silently accepted.

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 Signal3
Group of 2 Sandbox Notable

Project hook commands now run sandboxed and verified for remote/cloud sessions#

Project-defined hook commands served to remote or cloud sessions now run in a read-only sandbox with tamper checks and approval prompts

Feature flag
tengu_violin_peg Off by default, switched on for this account

The shipped code defaults this off, and the flag server returned on for the one account this site reads on this version. That is the reading that makes the entry above worth a second look, and it still says nothing about your account.

This account: on · anonymous baseline: on · compiled default in v2.1.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback

What

When a computer serves project-defined hook commands (project command checks) to a cloud or remote session, Claude Code now:

  • Pins each project hook script by its sha256 hash and verifies it hasn't changed since it was 'served' remotely, before honoring its PreToolUse decision.
  • Runs these hook commands in a sandbox with a private TMPDIR, read-only for cloud/remote sessions.
  • Tracks outcomes such as held_changed_since_attach, held_changed_since_last_serve, timeouts, and malformed output, and surfaces them back to the user via additional context text and telemetry.
  • Asks for approval when a check is mismatched or has changed, either per-session or with an option to auto-accept going forward; three approvals in a row suppress further prompting.
  • Rejects checks that try to rewrite the command outright for cloud sessions.

This is gated by a flag that defaults off.

Why

Project hook commands can execute arbitrary logic, so running them sandboxed and verifying they haven't been tampered with since being served protects remote and cloud sessions from a compromised or altered hook script while still letting users approve legitimate changes.

In dev
Nothing to try yet
Useful4 Signal4
Promotions unclear

Promo/offer claim eligibility check is fully built with no visible trigger#

Backend support for checking and claiming a promotional offer is fully built but not visibly triggered anywhere yet

Unclear There is no visible trigger showing where or when this offer-claim flow is actually surfaced to users

Details 0 0 Feedback
What

A new function checks eligibility and claim status for a promotional offer via an authenticated 'teleport-org' endpoint, complete with a full set of user-facing messages: the offer has expired, it was already claimed (by you or by someone else in another organization), it isn't available, or a generic failure occurred.

Why

This looks like preparation for a promo or offer feature, but nothing in this change shows where or how it's actually surfaced to users yet.

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 Signal3
Group of 3 Directory Change unclear

set_cwd (/cd) can now re-anchor a fresh session's start-of-session state#

Changing directory before any turn has run now fully re-derives session start state instead of just appending a notice

Unclear The gate tengu_cd_command has not been read for this release, so nothing can be said about whether this path is switched on for any account.

Details 0 0 Feedback
/cd

What

  • The directory-move implementation behind /cd and the headless set_cwd control request now takes freshSession/confirmFresh options; when a session is fresh (no turns have run yet) and confirmed, changing directory fully re-derives start-of-session state — session_start hooks, memory, hook caches, and more — instead of just injecting a "directory changed" notice into context.
  • The set_cwd tool's description was expanded to explain this: before any turn has run, the move re-anchors the whole session as if it had started in the new directory, with no move notice shown; after a turn has run, prior context is preserved and the move is appended as a notice instead.
  • The control-request handler for set_cwd now computes whether the session is fresh (no messages dequeued, no assistant message in history) and threads that through as freshSession/confirmFresh. A new fresh_session telemetry field is recorded on the tengu_cd_command event.

Why

Previously, moving directories early in a session could leave stale start-of-session state, such as hooks or memory loaded from the old directory. Now Claude Code recognizes when nothing has happened yet and fully re-initializes as if the session had started in the new directory.

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 Signal3
Group of 4 Artifact Publish

Artifact creation now uses idempotency keys to avoid duplicate creates on retry#

Retrying an artifact-publish or artifact-create call no longer creates a duplicate Artifact; it now reports that an earlier attempt already created it

Details 0 0 Feedback

What

  • Artifact creation now computes and sends an idempotency key with the create-artifact request, guarding against duplicate creation when a call is retried.
  • If a create is already in progress under the same key, the server now returns a create_in_flight error (HTTP 409) instead of creating a duplicate; new telemetry fields already_created and keyed are logged, and responses can include alreadyCreated: true for replayed creates.
  • When an artifact-publish tool call result indicates the artifact was already created by an earlier attempt of the same call, the tool now returns "An earlier attempt of this call already created the Artifact..." instead of claiming a fresh creation.
  • Similarly, if an Artifact-from-type creation succeeds but publishing its files fails, the resulting message now checks already_created and, if true, reports that nothing new was created instead of always saying a new Artifact was created.

Why

This prevents retried or duplicate artifact-creation calls, for example after a network hiccup, from producing confusing duplicate Artifacts or misleading "Created a new Artifact" messages.

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 Signal3
Group of 2 Turn Handling Notable no docs found

New tengu_parsed_willow gate marks queued-command turns as human-authored#

A new gate, tengu_parsed_willow (on by default), marks certain queued-command turns as human-authored, overridable via CLAUDE_CODE_PARSED_WILLOW

Feature flag
tengu_parsed_willow 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.277: on

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
CLAUDE_CODE_PARSED_WILLOW

What

Claude Code now marks certain queued-command turns with humanTurn: true, meaning they are treated as if a human typed them. This behavior is controlled by a new gate called tengu_parsed_willow, which defaults to true (on).

Why

This lets Claude Code (or an admin) control whether queued commands are treated as human-authored turns, with the environment variable giving a way to override the default behavior directly rather than waiting on the gate's rollout.

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 Signal3
Group of 2 Plugin Install Notable no docs found

Plugin sync can now run in the background during startup and idle time, under a time budget#

Plugin and MCP syncing now overlaps with startup or idle time under a timeout budget instead of blocking

Details 0 0 Feedback
CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS

What

  • A new idle-time plugin refresh path races the plugin sync against the turn's remaining time budget; if the sync runs long, it still finishes afterward rather than being abandoned. This is controlled by the tengu_ccr_plugin_refresh_in_idle_enabled setting.
  • Startup can now kick off plugin sync in parallel with the message loop starting, tracked against a remainingSyncBudgetMs derived from the CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS setting, and flags when the sync outlives that budget.
  • The surrounding loop now also records timing telemetry (first_message_handle_ms, first_message_handle_cpu_ms, first_message_handle_loop_lag_ms) to help track how these overlapping operations affect responsiveness.

Why

By letting plugin and MCP syncing happen alongside startup or idle time instead of blocking it, Claude Code can respond faster while still completing the sync in the background, with a budget so it doesn't take over indefinitely.

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 Signal4
Tool Attestation no docs found

New tool-host attestation floor check (dark, double-gated)#

New tool-host attestation floor check replaces old attestation execution logic, gated behind two flags

Feature flag
tengu_breezy_fairy Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

tengu_vast_tulip Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
tengu_vast_tuliptengu_breezy_fairy
What

A rewritten internal function now computes a policy verdict for a tool's host-attestation status against an acceptance floor, returning one of "not_policed", "pass", "config_exception", or "below_floor". This replaces an earlier version of the same function that actually executed the tool call directly. The overall attestation mode (whether checks merely observe or actually enforce) depends on the tengu_vast_tulip setting, and the whole check only runs at all if a separate condition gated by tengu_breezy_fairy returns true.

Why

This restructures how Claude Code evaluates whether a tool's host meets an attestation floor, separating the policy decision from tool execution, though whether this behaves as observe-only or enforcing depends on server-controlled settings not disclosed here.

+New
Use it now
Useful4 Signal3
Remote Control Notable no docs found

New cancel_async_message bridge control request#

A new cancel_async_message control request lets a bridge client cancel one queued message by its ID

Details 0 0 Feedback
cancel_async_message
What

A new control request called cancel_async_message lets a connected bridge client cancel a message it previously sent and queued for later processing, by specifying that message's message_uuid. Claude Code checks that the ID is valid and that a callback is registered for it, then reports back whether the cancellation succeeded or failed.

Why

This gives a client a way to withdraw one specific queued message on its own, rather than only being able to cancel everything queued at once. If the message can't be found or was already handled, the request reports failure instead of doing nothing silently.

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
Plugin API Notable

Plugin $.fetch gains an experimental Unix-socket transport (socketPath)#

Plugin fetch can now connect over a Unix socket instead of a network address, as an experimental option

Details 0 0 Feedback
socketPath
What

The sandboxed $.fetch helper available to plugins now accepts a socketPath option to connect over a Unix socket (a local, file-based connection) rather than over the network. The path must be absolute, must not contain a NUL byte, and must not resolve to a network location; if the build doesn't support Unix sockets, it throws "no Unix socket transport in this build." When credentials are used with a socket connection, the request forces strict TLS certificate checking and disables connection keep-alive.

Why

This lets plugins talk to local services listening on a Unix socket, useful for tools that expose a local API without going through the network, while keeping the same path and security validation Claude Code already applies elsewhere.

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 Signal3
Prompt Input no docs found

Composer edits can be relayed through a 'prompt.edit' hook chain#

Edits typed in the prompt box can now be routed through a 'prompt.edit' hook chain

Details 0 0 Feedback
prompt.edit
What

A new recording/replay pipeline captures edits made to the text in the prompt input box (the composer). If a prompt.edit hook is registered, these edits are now routed through that hook chain before being applied to the input box. If no such hook is registered, the edits are applied directly and Claude Code logs that they went through unhooked.

Why

This lets a hook intercept and potentially modify what you type into the prompt box before it takes effect, opening the door to custom processing of composer edits.

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 Signal3
Testing Tools

New "act" driver API added for scripted interaction with plugin UI mounts#

A new internal "act" API can programmatically drive Claude Code's plugin UI components for testing

Details 0 0 Feedback
What

A new act interface, with actions like find, findAll, press, input, select, key, pointer, post, advance, resize, redraw, and unmount, plus supporting functions (mount, act, refresh, releaseAll), can now drive Claude Code's terminal-rendered plugin UI components (Button, Link, Markdown, Code, Input, Select, Client) programmatically: clicking buttons, typing into inputs, selecting values, sending key or pointer events, advancing a virtual clock, and resizing, redrawing, or unmounting a mounted UI.

Why

This is a testing/automation tool for exercising plugin UI components without a person at the keyboard, useful for scripted checks of how plugin interfaces behave.

Related

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

·Internal
Use it now
Useful3 Signal3
Workflows Notable

New CLAUDE_CODE_WORKFLOW_PROMPT_PROVENANCE env var replaces CLAUDE_CODE_DAPPER_LAGOON, backed by tengu_bubbly_harbor and made synchronous#

Workflow prompt provenance now read from CLAUDE_CODE_WORKFLOW_PROMPT_PROVENANCE and made synchronous

Feature flag
tengu_bubbly_harbor On for this account, and not off by default

The flag server returned on for the one account this site reads, and nothing in this release compiles it off by default. The compiled default is shown below, and says which it is when we cannot read one: a fifth of gates compile in a string or a number rather than on or off, and most published releases have no gate table behind them at all. No client can see what the server returns for your account.

This account: on · anonymous baseline: on · compiled default in v2.1.277: on

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
What

The function that used to read the CLAUDE_CODE_DAPPER_LAGOON environment variable (falling back to a gate called MOo) now reads a new environment variable, CLAUDE_CODE_WORKFLOW_PROMPT_PROVENANCE, falling back to a gate called tengu_bubbly_harbor, which defaults to true. Two places in the workflow engine that used to await this check now call it directly, since it no longer needs to run asynchronously.

Why

The flag server is currently returning this gate as on for both this site's account and the anonymous baseline, though no reading has been taken specifically under this release yet. Renaming the environment variable and making the check synchronous suggests this first-party detection logic was reworked and simplified.

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 3 Design Sync Notable

New 'Claude Design' sign-in flow for host and CLI sessions#

Adds a browser-based 'Claude Design sync' sign-in flow, usable via manual code entry and a new hidden design-login CLI command

Details 0 0 Feedback
claude design-login --json/design-login

What

  • A new host-side sign-in flow called "Claude Design sync" opens a browser page for sign-in, polling for completion and streaming session events.
  • Manual authorization-code entry now works even partway through the flow, not just as an unconditional fallback for remote sessions.
  • Failures now report a structured reason code (interrupted, unconfigured, remote, invalid, save_failed, timed_out, failed) instead of just a free-text message.
  • A new hidden CLI command, claude design-login --json, runs this flow (or reports status with --status) as JSON lines, meant for tools like the VS Code extension rather than everyday interactive use.

Why This gives Claude Code, and tools built on it such as the VS Code extension, a reliable, scriptable way to sign in through a browser, with clearer error reporting when sign-in fails and a way to enter a code by hand when the browser flow can't complete automatically.

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 5 Plugin API no docs found

Filesystem bridge gains network-location checks, ancestor search bounds, and read/stat options#

The plugin/hook filesystem bridge can now reject remote paths, bound ancestor searches, read raw bytes, and report symlink info

Details 0 0 Feedback
as: 'bytes'

What

  • Skill/tool file-path arguments now reject a "network location not reached from here" (for example a different git remote or host than the current worktree), checked on both the existing path parameter and a new below parameter.
  • The ancestor CLAUDE.md/memory-file search now skips remote workspaces, returning early with a log message, and accepts an optional below boundary so the upward directory walk stops once it would go above that path.
  • The plugin/hook filesystem bridge's read and stat calls now accept an options object: as for read encoding (defaulting to "text") and resolve for stat (defaulting to false); ancestors also gained the below bound.
  • $.fs.read can now return raw bytes as base64 when as: 'bytes' is requested, instead of always decoding the content as UTF-8 text.
  • fs.stat responses now include isLink (whether the entry is a symbolic link) and, when resolve is set and the link target stays within the allowed paths, a realPath field; list responses also now include isLink per entry.

Why

These changes make the filesystem APIs available to plugins and hooks safer, by blocking paths outside the reachable network location, and more capable, by supporting bounded ancestor searches, raw byte reads, and symlink awareness, which matters for plugins that need to work with binary files or symlinks correctly.

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 Signal3
CLAUDE.md Rules unclear

Rules/CLAUDE.md directory walk gains an exclude matcher#

CLAUDE.md/rules directory scan can now skip paths matched by an exclude pattern

Unclear The finding does not say what supplies the exclude matcher or how a user configures it.

Details 0 0 Feedback
What

When Claude Code walks a directory looking for CLAUDE.md files and other rules files, the walker and its helper functions now accept an exclude matcher: a pattern that marks certain paths as ones to skip. This is checked alongside the existing checks that already skip symlinks, binary files, and similar cases.

Why

This gives Claude Code a way to leave out specific paths when scanning for rules files, on top of the checks it already applies.

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 Headless Mode Notable no docs found

Session-start announcements can now be moved to just before the closing line#

A new env var lets session-start context blocks (sandbox info, model, skills, etc.) be repositioned right before the final prompt line

Details 0 0 Feedback
CLAUDE_CODE_SESSION_START_ANNOUNCEMENTS_BEFORE_PROMPT

What

At the start of a session, Claude Code attaches several 'announcement' blocks to the first message, things like sandbox instructions, environment details, the active model, proactivity notes, budget info, available tools, skill listings, output style instructions, language, and auto-mode status. A new mechanism can now move these announcements so they sit right before the closing line of the message instead of their normal position.

This behavior is controlled by a new environment variable, CLAUDE_CODE_SESSION_START_ANNOUNCEMENTS_BEFORE_PROMPT. When it's set, Claude Code checks whether the repositioning is possible (it isn't for models without system messages, when there's no user message, or when there's nothing to announce) and moves the announcements if so.

Why

Repositioning these blocks can change how the model weighs session-start context relative to the user's actual request. The feature records telemetry on whether and why the reposition happened or was skipped, which helps diagnose behavior differences tied to this setting.

+New
Use it now
Useful4 Signal2
Terminal UI Notable

Pane Escape now dismisses background panes from chat, not just the focused one#

Pressing the chat cancel key can now close a background chat pane, not only the one you're focused on

Details 0 0 Feedback
chat:cancel
What

Claude Code's interface can show multiple "Panes" (separate work areas), including chat panes. A new keybinding named chat:cancel now lets pressing the chat-level cancel/escape key close a pane even when it isn't the one you're focused on, as long as its chat input is empty, no footer selection or queue edit is in progress, it isn't already in the middle of closing, and it doesn't have its own escape handling or an agent-selection view active.

Why

Previously this kind of dismissal likely only worked on the pane you had focused. Now background chat panes that meet those conditions can be closed the same way, making it easier to clear idle panes without switching focus to each one first.

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
Plugin Install Notable

Plugin API doc points to new claude plugin validate command#

Plugin type-generation help now points authors to a new claude plugin validate command

Details 0 0 Feedback
claude plugin validate
What

The help text shown by the plugin type-generation tooling now tells plugin authors about claude plugin validate <dir>, a command that reads a plugin the same way Claude Code's engine would and reports what it hooks into, what it calls, and what it would refuse to do.

Why

This gives plugin authors a way to check how their plugin will actually be interpreted before shipping it, catching issues earlier.

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
Usage & Limits Notable

Usage-limit display can show a per-model breakdown#

Usage/limit displays can now show a separate line per model instead of one combined limit

Details 0 0 Feedback
/usage/cost/stats
What

The usage and rate-limit summary shown to users, for example via /usage (also aliased as /cost and /stats), can now display a separate line for each model, each labeled "Current week ()" with its own utilization and reset time, instead of always showing one combined limits line.

Why

On plans where usage is broken down per model, this lets users see exactly how much of each model's limit they've used rather than only a single aggregated figure.

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
Gateway Proxy

Gateway upstream providers can now set custom headers#

Gateway upstream provider configs can now include custom headers

Details 0 0 Feedback
headers
What

The gateway's configuration schema for upstream providers (Bedrock, AnthropicAws, Vertex, and Foundry) now supports a headers field, letting an administrator attach custom HTTP headers to a specific upstream provider's requests alongside its existing authentication settings.

Why

This gives self-hosted gateway operators more control over outgoing requests to each provider, for example to satisfy provider- or network-specific header requirements.

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
Cloud Sessions

New 'Local tools' row in cloud session sync status#

Cloud session sync status now tracks a fourth category: 'Local tools'

Details 0 0 Feedback
What

The cloud-session sync status display, which already tracked projectFiles, settings, and plugins, now includes a fourth category called localTools (shown as "Local tools"). It gets its own synced/pending/not-synced state and change detection, just like the existing categories.

Why

This lets users see whether their local tools are in sync with a cloud session, alongside the project files, settings, and plugins that were already being tracked.

+New
Use it now
Useful3 Signal2
Settings UI no docs found unclear

New 'localTools' settings panel row#

The settings/status panel can now show a localTools row

Unclear The finding doesn't say what data populates the localTools row or what counts as a local tool here.

Details 0 0 Feedback
localTools
What

The panel that displays status rows such as project files, settings, and plugins now also has a localTools row, shown only when there's data for it to display, following the same conditional pattern already used for the panel's trailing notes row.

Why

This lets the status panel surface information about local tools when relevant, without cluttering the display when there's nothing to show.

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
Sandbox Notable

New sandbox-escape detection heuristics for sandbox.excludedCommands#

New heuristics detect commands trying to escape the sandbox via the excludedCommands allowlist

Details 0 0 Feedback
sandbox.excludedCommands
What

sandbox.excludedCommands lets you name commands that always run outside the sandbox. Claude Code now parses the actual command line more carefully to catch cases where a command, or a wrapper around it, technically matches an allowlisted entry but is actually being used to slip past the sandbox. It recognizes things like:

  • Trusted versus untrusted uses of env
  • Dangerous interpreter or shell flags, such as -c, --eval, -e, or PowerShell's -command/-encodedcommand, across dozens of tools including bash, python, perl, ruby, php, node, git, docker, kubectl, aws, and pwsh
  • Tricks involving IFS or positional parameters
  • Risky glob expansion
  • Git subcommands that can read or write outside the repository, such as clone, worktree add, bundle create, and config changes to dangerous keys like core.sshcommand or core.hookspath
Why

This closes off ways a command could use an excludedCommands entry as a loophole to run unsandboxed code that reaches beyond what was intended, building on earlier work that tied the exclusion list to whether unsandboxed commands are allowed at all.

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
Gateway Proxy

Gateway self-host config: per-upstream custom headers, and a new loopback guard on telemetry forwarding#

Gateway config adds per-upstream custom headers and blocks loopback telemetry URLs unless explicitly allowed

Details 0 0 Feedback
headers
What

Self-hosted gateway configuration now lets each upstream provider block (Bedrock, AnthropicAws, Vertex, Foundry) specify custom headers to send with its requests.

Separately, the gateway's telemetry forwarding setting (telemetry.forward_to.url) now rejects loopback addresses (URLs pointing back at the same machine, such as localhost) by default. To forward telemetry to a local sidecar collector, an operator must set the environment variable CLAUDE_GATEWAY_ALLOW_LOOPBACK.

Why

Custom headers give gateway operators finer control over requests to each upstream provider. The loopback guard prevents telemetry from being silently misconfigured to point at the gateway's own machine, while still allowing it deliberately via the new environment variable for legitimate local-collector setups.

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
Settings

New disableSideloadFlags settings key hardened against malformed values#

A malformed disableSideloadFlags setting now blocks sideload flags by default instead of being ignored

Details 0 0 Feedback
disableSideloadFlags
What

disableSideloadFlags is a managed setting that blocks CLI flags used to sideload extra content, such as --plugin-dir/--plugin-url, and MCP configuration loaded from outside approved sources. If this setting is present in configuration but its value doesn't parse correctly, Claude Code now treats it as true (blocking those flags) rather than falling back to a default that might allow them.

Why

This makes a broken disableSideloadFlags value fail closed: a configuration mistake results in sideloading being blocked until it's fixed, not silently permitted.

Related

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

·Internal
Use it now
Useful2 Signal2
Git Internals Notable no docs found unclear

New git-branch-guard telemetry/env override for cloud session on-branch checkout#

Cloud on-branch checkout guard can now be forced on via a CCR_ON_BRANCH_DEFAULT_GUARD environment variable

Unclear Nothing has been read yet about the tengu_on_branch_default_guard_observe gate for this site's account, so what "observe" mode does in practice versus "enforce" isn't confirmed here.

Details 0 0 Feedback
CCR_ON_BRANCH_DEFAULT_GUARD
What

A guard around --on-branch cloud checkouts can now be forced into "enforce" mode using the environment variable CCR_ON_BRANCH_DEFAULT_GUARD. If that environment variable isn't set, Claude Code falls back to checking a remote configuration value, tengu_on_branch_default_guard_observe, to decide the guard's behavior.

Why

This gives operators a direct, local way to force strict enforcement of the on-branch checkout guard for cloud sessions, without waiting on remote configuration.

Improved
Use it now
Useful2 Signal2
Elsewhere

Plugin install errors now marked as "ours" for downstream handling#

Design login now accepts a manually pasted authorization code more flexibly, with clearer failure reasons

Details 0 0 Feedback
/design-login
What

The sign-in flow behind /design-login (which connects your claude.ai account so /design-sync can read and write design-system projects) has been reworked. It now supports pasting in an authorization code manually even in situations where it previously wasn't offered, since Claude Code can no longer always assume whether a browser can reach the local sign-in listener.

When the login fails, it now returns one of several specific reason codes: interrupted, unconfigured, remote, invalid, save_failed, timed_out, or failed, instead of just a generic message. A new check can also abort the flow partway through, after a login slot is validated.

Why

The more flexible manual-code path means you're less likely to get stuck when Claude Code can't tell whether a browser-based login will work, particularly on remote sessions. The structured failure reasons make it clearer why a login attempt didn't succeed.

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.

3 entries

New Featuresopen

+New
Nothing to try yet
Useful3 Signal3
Directory Sync

Dir-sync worker gains an 'attachOffer' path to resume from existing git history#

Directory sync can now resume from existing git history instead of only starting fresh

Details 0 0 Feedback
What

The directory-sync worker, which uses git to sync a local directory with a cloud session, gains a new attachOffer capability. When sync is listening but not yet actively syncing, it can now inspect the local repository's current branch and recent history and offer to attach to that existing history, provided the branch is resolvable, nothing is mid-operation, and consent checks pass.

Why

This lets directory sync pick up from a repository's existing git history rather than always starting sync from scratch.

+New
You'll notice
Useful3 Signal2
Group of 5 Terminal Rendering unclear

Terminal supports pixel-precision (fine) mouse tracking via SGR-Pixels mode#

Claude Code's terminal UI can now detect and use pixel-precision mouse coordinates (SGR-Pixels mode 1016) instead of only character-cell precision

Unclear What behavior actually differs between fine and coarse pointer input is not stated in the finding.

Details 0 0 Feedback

What

  • Pointer handling for press, drag, release, and hover throughout the terminal renderer now threads a fine boolean alongside button/column/row, to distinguish precise trackpad input from coarse mouse clicks, along with a raw fractional position on mouse events.
  • The terminal capability prober now sends a DECRQM query for mode 1016 (SGR-pixel mouse coordinates) plus a cell-size query, so Claude Code can detect whether the terminal supports pixel-level mouse reporting.
  • New machinery, including retainFinePointer/cancelFinePointerSettle hold-counting, syncMousePixels, and mouseReportsInPixels, turns the terminal's mousePixels mode on and off as needed, with a "fine pointer settle" timer managed on mount and unmount.
  • New helpers translate mouse column/row into pixel-precise coordinates when supported, and the mousePixels mode is reasserted on redraw alongside the existing extendedKeys and mouse modes.
  • New regexes and a MOUSE_SGR_PIXELS constant parse the SGR-Pixels escape sequences and convert pixel offsets into row/column plus the fine payload.

Why

On terminals that support it, this lets interactive elements in Claude Code respond to precise trackpad or mouse positioning rather than only whole character cells, enabling finer-grained interactions.

Related

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

+New
You'll notice
Useful3 Signal2
Group of 4 Prompt Input unclear

Invisible and hidden characters are now stripped from prompts before sending#

Pasted or typed text with invisible/hidden characters is now cleaned and flagged before it's sent, including in fleet composers

Unclear Whether this behaves differently from the related prompt-submission stripping described elsewhere is not established by the finding.

Feature flag
tengu_tranquil_cloud 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.277: on

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback

What

  • Before a prompt is submitted, or before pasted text is sent, Claude Code now runs it through a filter that removes invisible characters, such as bidi marks, zero-width characters, hidden tags, and similar hidden selectors.
  • If any such characters are found, sending is blocked. Instead you see a notice like "Removed N invisible character(s) · review and press Enter to send" (or a message that nothing is left to send), and the text is replaced with the cleaned version so you can review it before sending again.
  • The same protection now applies to the fleet command bar and the fleet reply composer, not just the main prompt input.

Why

Invisible or hidden characters can be used to hide instructions inside pasted text or make it look different from what it actually contains. Stripping them and asking for confirmation before sending prevents accidentally sending something you didn't intend to.

Related

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

96 entries

Improvementsopen

Improved
You'll notice
Useful3 Signal2
Group of 4 Slash Commands

ultrareview can now review a repo's very first commit#

Ultrareview now understands and can review a repository's first commit instead of failing or silently diffing an empty tree

Details 0 0 Feedback
/ultrareview/code-review ultra

What

  • When the current branch's only commit is the repo's very first commit, ultrareview no longer silently falls back to diffing against an empty tree; it can offer to review every file in that first commit, but only after confirmation.
  • Confirmation is skipped when the launch comes from certain internal request paths (flagged confirmsBeforeLaunch), or when a person invoked the review command directly.
  • Review-scope messaging gained a dedicated "first commit" case, with a companion error message explaining that a fresh repo needs at least one commit before review can work, instead of falling through to a generic "no merge base" message.
  • The remote-review precondition check's error message now says the argument can be a commit as well as a branch name, and a new bundling helper accepts a first-commit-only flag with a matching first_commit telemetry field recorded when a diff is too large to review.

Why

Previously, reviewing a brand-new repo with only its initial commit either failed or produced a confusing empty-diff review. Now Claude Code recognizes this case, explains it clearly, and can review the whole first commit with proper confirmation.

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
Directory Sync

Dir-sync now tracks whether the cloud side has actually picked up synced files, with new warning copy#

Directory sync now tracks whether the cloud side has actually consumed synced files, with a new warning

Details 0 0 Feedback
What

Directory sync uploads your local files to the cloud side of a session using git. Claude Code now tracks whether the cloud side has actually picked up ('vouched for') what was uploaded, computing state such as when it was last confirmed and how long it's been settled. If the cloud session hasn't consumed anything synced from a directory yet, Claude Code now shows a warning that changes made locally and on the cloud side may not be reaching each other.

Why

This surfaces a case where directory sync looks like it's working locally but isn't actually reaching the cloud side, so you know to check rather than assuming your changes are in sync.

Improved
You'll notice
Useful3 Signal3
Plugin Install

Plugin-dir file watcher with adaptive polling and ConfigChange hook gate#

Plugin skill directories now get watched for changes, with adaptive polling and a ConfigChange hook gate

Details 0 0 Feedback
What

Claude Code now watches plugin skill directories (both whole folders and individual files) for changes, polling more often when there has been recent interaction and less often when idle. Before hot-reloading a plugin that uses 'files' scope, it asks a ConfigChange hook (a hook that runs when a configuration file changes during a session) whether the reload should proceed. If the hook blocks the reload, the currently loaded version of the plugin stays in place.

Why

This lets plugin changes on disk be picked up automatically while giving hooks a way to veto a reload, for example to avoid reloading a plugin mid-edit or in an inconsistent state.

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 Directory Sync

New 'directory sync' feature: mid-session attachment, reserved paths, and repository trust#

A new directory sync subsystem lets a local machine attach to an in-progress session, with reserved paths, its own snapshot commits, and repository trust tracking

Details 0 0 Feedback

What

  • Directory sync now supports attaching a local machine to a session partway through, not just at the start. A new prompt explains that in this case the session's HEAD, branch, and commits stay the session's own, describes when file changes flow in each direction (on command execution and at turn boundaries), and what happens if the two checkouts diverge.
  • Any path under a new reserved location is now treated as belonging to directory sync internally, and a new checkout_empty seed kind was added alongside the existing seed/clone/folder kinds. A new message warns users when commits on a branch are directory sync's own internal snapshot commits rather than real work.
  • The remote-session join payload now includes a repositoryTrust field alongside directorySync.

Why These pieces lay the groundwork for syncing a local checkout with a running session safely, telling users clearly when what they're seeing is sync bookkeeping rather than their own commits, and tracking whether a repository is trusted before syncing to it.

Improved
You'll notice
Useful3 Signal2
Group of 3 Background Tasks unclear

MCP tool calls can move to the background as soon as a new message arrives#

Long-running MCP tool calls now background immediately when a new message needs the session, not just after a timeout, tracked via a new foregroundCalls registry

Unclear Nothing has been read yet about the tengu_mcp_tool_auto_backgrounded gate for this site's account.

Details 0 0 Feedback

What

  • MCP (Model Context Protocol) tool calls that run long now move to the background as soon as a new message needs to reach the session, instead of waiting for the existing auto-background timeout. The notification shown to the user explains the call was backgrounded so a waiting message could get through, and that the tool call itself was not interrupted and keeps running.
  • A new foregroundCalls tracker, keyed by session, is registered when an MCP tool call starts (unless it's an inner/nested call), giving the auto-backgrounding logic visibility into how many calls are currently in the foreground for that session.
  • Telemetry for auto-backgrounded MCP calls now records a trigger value distinguishing deliver_message from timeout.

Why This keeps a session responsive to new messages even while an MCP tool is still working, instead of forcing a wait for a fixed timeout before the session can move on.

Improved
You'll notice
Useful3 Signal3
Directory Sync

New 'attached' (fast-sync) relation mode for directory sync, distinct from the legacy merge path#

A faster sync path for 'attached' sessions handles directory sync separately from the older full merge logic

Details 0 0 Feedback
What

For sessions where a laptop's state is "attached" to a live machine, Claude Code now uses a lighter fast-forward or no-op check to keep directories in sync, instead of the older full three-way merge logic. This path can report that a session is "unready" (the machine has a detached HEAD) or "left" with a reason such as the branch being switched or having diverged. A companion function now also explains a new "switched off" case, meaning the sync feature is switched off for that session.

Why

This gives attached sessions a cheaper, quicker sync check instead of always running the heavier merge process, while still surfacing clear reasons like a diverged branch or the feature being disabled when syncing isn't possible.

Improved
You'll notice
Useful2 Signal3
Prompt Queue unclear

Paste/type-out expansion now dedupes repeated pasted text and flags 'ultraplan' mentions#

Pasted/typed text expansion now avoids re-expanding duplicate spans and holds back 'ultraplan' matches

Unclear What triggers expansion here and what 'ultraplan' expands to isn't stated in the finding.

Details 0 0 Feedback
What

When Claude Code expands typed or pasted text, it now looks at all the text fragments together first. If the same content appears more than once, it avoids expanding overlapping duplicate spans a second time.

There's also a special case: if any of the matched fragments contains the word "ultraplan" (case-insensitive) and that exact text isn't already present verbatim elsewhere, the whole set of matches is suppressed and nothing gets expanded.

Why

The deduplication prevents the same pasted text from being expanded multiple times when it appears more than once. The "ultraplan" carve-out stops that specific expansion from firing in situations where it would likely be wrong.

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 2 Artifact Publish

Artifact publishing recognizes contract-rollout and generic rate-limit errors#

Artifact publish failures now get a distinct contract_rollout error code and generic 429 responses are classified as rate-limited

Details 0 0 Feedback

What

Artifact publishing error handling gained two refinements:

  • Generic 429 ("too many requests") responses, beyond the existing capacity-cap case, are now classified as rate_limited and shown with a retry-after message
  • A new contract_rollout error code is added for 422 responses whose message matches a "is newer than the preferred" pattern, but only when the request declared contract:'latest' (the latestContract flag) and there's no already-known contract pin. This is treated as distinct from the existing contract_echo_rejected case

Why

These give users and logs a more accurate reason when a publish fails: a genuine rate limit versus a contract version that's being rolled out ahead of what the client expected, rather than lumping both into generic or misleading error codes.

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 2 Artifact Publish

Artifact publishing now gives clearer errors when rate-limited#

Publishing an artifact now shows specific messages when it's rate-limited, including retry timing and which step failed

Details 0 0 Feedback

What

The artifact publish tool now detects and reports rate-limit (HTTP 429) responses at each stage of publishing, preflight and upload alike, using a new response-checking helper. When a 429 is hit, a new message builder reports:

  • that nothing was published and the request was rate-limited
  • the reserved slug involved
  • which step was refused (for example, staging a publish's copied files)
  • retry-after-based wait-time information, so the user knows when to try again

A distinct 422 'contract is newer than preferred' handshake message was also added for a separate related failure mode.

Why

Previously a rate-limited or conflicting publish attempt likely surfaced as a generic failure. Now the error clearly explains that nothing was published, why, and when it's safe to retry, making it easier to recover from a failed artifact publish.

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 2 Sandbox

Cloud hook scripts now have their shebang line checked before running#

Claude Code now reads a hook script's #! line to decide if its interpreter is safe to run in a cloud or remote session, not just its declared interpreter

Details 0 0 Feedback

What

When deciding whether a hook script is safe to run in a cloud or remote ("teleported") session, Claude Code previously relied on a declared interpreter. Now, if no interpreter is declared, it reads the script's own shebang (#!) line and parses it with a new parser.

The parsed interpreter is classified as one of:

  • an absolute path
  • an env-resolved program (via /usr/bin/env-style invocation)
  • cwd-relative
  • "unjudgeable" — for example a relative interpreter, an env invocation with extra options, or an interpreter that itself takes a file argument

If the interpreter can't be confidently classified as safe (is "unjudgeable" or not a plain absolute path/known env-based form), Claude Code withholds the hook from running and shows a more detailed explanation of what interpreters and options are acceptable.

Why

A script's shebang line determines what actually runs it, so checking only a separately declared interpreter left room for a mismatched or unsafe interpreter to run unnoticed in cloud sessions. Parsing the shebang directly closes that gap.

Improved
You'll notice
Useful2 Signal2
Group of 6 Sandbox

Attestation status handling simplified; unattested senders are now explicitly held back#

Attestation handling was simplified by dropping raw attestation data, and unattested senders/requests now get clearer held-back behavior and messages

Details 0 0 Feedback

What

  • Remote session control-request handling no longer passes raw attestation data (attestationRaw) to served-channel requests (tool/dialog serving); only the resolved attestationStatus is passed now.
  • Telemetry for remote tool calls likewise no longer includes attestationRaw, only attestationStatus and other fields.
  • Deriving a device's attestation status was simplified to a direct uppercase pass to the classifier, dropping a prefix-stripping/raw-value side channel, and this now also applies to hook_callback subtypes, not just the previous allow-list.
  • The device-hooks dispatcher now checks whether the sender is "held back" due to attestation status; if so, it logs that it is holding back and returns no opinion instead of running its normal dispatch and muted checks.
  • The error message shown when a remote tool call is rejected for lacking attestation was simplified from describing an account-level requirement to a simpler statement about a missing device signature.
  • A new message explains that hooks are skipped for a cloud session because the service could not vouch for the sender under the organization's trusted-device policy.

Why

This tightens and simplifies how Claude Code decides whether a remote or cloud request, or a hook's sender, can be trusted, and gives clearer explanations when something is blocked because a device couldn't be verified.

Improved
Under the hood
Useful2 Signal2
Group of 2 Git Internals

Git snapshot pass gains race detection, pacing, and richer refusal reasons#

The git working-tree snapshot process now detects late-arriving edits, paces itself, and explains refusals in more detail

Details 0 0 Feedback

What

  • The snapshot builder now takes a passStartedAtMs/notOlderThanNs threshold, and a new sincePassStart flag on changed entries lets it produce a distinct error message when a file was edited right as the snapshot began, instead of mid-read.
  • It also gains stageHooks, budgetMs, and lastDescribed parameters for controlling and describing the pass.
  • --ignore-submodules=dirty is now added to the diff-tree comparison, and previously-verified entries are re-applied via update-index for unstable paths.
  • Refusal results now carry a structured cause, such as { kind: "rules_unreadable" }, { kind: "staged_protected", count }, { kind: "credential_named", count }, or { kind: "committed_protected", count }.
  • Snapshot output now also reports a withheld.unspellable category alongside the existing withheld categories.

Why

This makes it easier to tell what happened during a git snapshot: whether a file changed too close to when the snapshot started to be captured reliably, and exactly why any files were withheld or refused, rather than getting a generic failure.

Improved
Under the hood
Useful2 Signal2
Group of 2 Plugin Install

Plugin install can verify declared binary hashes and skip republishing#

Plugin installs can now verify a manifest's declared binary hashes and skip re-publishing when they already match

Details 0 0 Feedback

What

  • The plugin publish/move logic now returns an explicit "published" status, and for plugins without strictCache, it takes a faster path that drops the staged clone's .git directory and installs directly, bypassing the version-cache rename process used for strictCache plugins.
  • When a plugin's manifest declares binaries and a feature check passes, install now passes a binariesHook with the declared sha256 hash map into the staging/publish step, and can report the result as "kept" (skipping republish) when the hashes already match.

Why

Verifying binary hashes before republishing avoids unnecessary rewrites of unchanged binary files during plugin installs, making installs faster and safer for plugins that ship binaries.

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 Sessions no docs found

Session resume now restores accumulated cost, tracked separately#

Resuming a session now restores its previously accumulated cost as its own tracked value, separate from unknown-model-cost tracking

Details 0 0 Feedback
restoredCostUsd

What

  • When resuming a session with a history_file, the resume path now reads and restores a restoredCostUsd value from that file instead of ignoring cost on resume.
  • The cost-tracking snapshot/restore mechanism now stores a distinct restoredCostUSD value alongside hasUnknownModelCost (previously both were packed into the same internal field), and reset() now explicitly zeroes the restored value.
  • The cost-tracking class gained a restoredCostUSD() accessor and internal counter, and the cost-state schema's totalCostUSD now has a floor instead of being unconstrained.

Why

Restoring accumulated cost correctly when resuming a session keeps the cost totals shown to the user accurate across resumes, instead of resetting or being conflated with the separate tracking of cost from an unknown model.

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 2 Terminal Rendering

Kitty graphics protocol gains file-based image transfer with an active support probe#

Terminal images can now transfer via a temp file instead of only inline bytes, with a real check for whether the terminal supports it

Details 0 0 Feedback

What

Claude Code's terminal image support (the kitty graphics protocol) gained two related improvements:

  • Images can now be sent to kitty-graphics-capable terminals via a file path or shared-memory name (t=f), instead of only as inline base64-encoded byte payloads.
  • A new active probe checks whether the terminal can actually read locally-written image files: it writes a small temp file, sends a file-based image request, and checks the terminal's reply, logging 'Terminal image files: yes/no' with the reason, rather than just assuming support.
  • A new request can query the terminal's cell size in pixels.
  • If the probe says no or is inconclusive, Claude Code falls back to the older inline byte transmission method.

Why

File-based transfer is more efficient than sending image bytes inline, but not all terminals support reading local files this way, so actively probing for support avoids broken images and picks the best method 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
Useful2 Signal2
Group of 2 Remote Machines

Remote tool calls now get an in-session permission check before forwarding#

Tool calls forwarded to a bound or remote machine are now checked against in-session permissions first, and the check's result is logged as caller_gate

Details 0 0 Feedback

What

Before a subagent's tool call is forwarded to a remote or bound machine, Claude Code now runs an in-session permission check (the same kind used for canUseTool decisions locally). If that check denies the call, it is refused immediately with a new outcome, rejected_in_session, and never reaches the remote host at all.

The tengu_remote_tool_forward telemetry event now records a new caller_gate field reflecting whether this in-session check ran and what it allowed, alongside the existing outcome and refusal fields.

Why

This closes a gap where a tool call could be forwarded to a remote machine without first being checked against the permissions that would apply locally, and gives visibility into how often that in-session gate blocks a forward.

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 Directory Sync

New agentCommitsBookkeeping count clarifies messaging about set-aside and synced commits#

A new agentCommitsBookkeeping count tracks already-installed or already-reported agent commits, cleaning up related user-facing messages

Details 0 0 Feedback

What

  • Multi-agent merge results now carry an explicit agentCommitsBookkeeping count. Combined with the total agent-commit count, this decides whether commits still need attention (parkedAt), not just in the worktree-commit case as before.
  • The message telling a user that Claude's commits were "set aside" (shown on a branch mismatch) now subtracts this bookkeeping count from the total, so it only appears when there's a real branch switch or commits beyond what's already been accounted for.
  • In directory sync, the same bookkeeping count distinguishes real agent work from directory sync's own internal snapshot commits. If a work branch pointed at sync's own snapshot commits, the message now says so directly ("rather than work of yours") instead of telling the user to re-commit or cherry-pick commits that were never theirs.

Why These changes stop Claude Code from repeating or misattributing commit information the user has already seen, and avoid confusing instructions to recover commits that were only internal bookkeeping rather than real work.

Improved
Under the hood
Useful2 Signal2
Group of 2 Remote Control unclear

Slash-command availability checks now cover a second Remote Control surface#

Remote Control blocks unavailable slash commands on the new 'relay' surface, not just 'bridge', and logs which surface triggered it

Unclear Nothing has been read yet about whether the tengu_slash_command_unavailable gate is on or off for this site's account.

Details 0 0 Feedback

What

When you use Claude Code over Remote Control and try to run a slash command that isn't available remotely, Claude Code already told you so for the 'bridge' surface. That same check now also runs for a second surface called 'relay'. Internally the single check was split into two functions, one per surface, but both feed into the same shared logic.

The telemetry and messaging behind this check now record which surface, 'bridge' or 'relay', triggered the block.

Why

This closes a gap where a slash command could be blocked as unavailable on one Remote Control surface but not the other, so the restriction is now applied consistently everywhere Remote Control is used.

Improved
You'll notice
Useful2 Signal2
Group of 2 Elsewhere no docs found

Reminders about kept or discarded output now default to full scope#

The gate controlling whether Claude gets reminded about kept/discarded output now defaults to reminding across all threads instead of staying off

Feature flag
tengu_sleepy_snowflake 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.277: not a boolean we can read

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
tengu_sleepy_snowflake

What

Claude Code can remind the model about content it produced that was later "kept" or discarded from the conversation transcript. This reminder can apply to just the active thread, to all threads, or be off entirely, controlled by a gate (tengu_sleepy_snowflake) and logged under the [reminders] tag.

When no server or client-supplied value sets this scope explicitly, it now falls back to "all" instead of "off". The reminder still only fires when several other conditions are met: a first-party model, a master toggle enabled, and appropriate per-conversation state.

Why

This makes the reminder feature active by default in more cases rather than silently doing nothing when no explicit configuration is present, so the model is more likely to be reminded about kept or discarded output across all threads.

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 Subagents

CLAUDE_CODE_HANDBACK_PROVENANCE now defaults to enabled#

The tengu_melodic_wolf flag behind CLAUDE_CODE_HANDBACK_PROVENANCE now defaults to true instead of false

Feature flag
tengu_melodic_wolf 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.277: on

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback

What The internal flag tengu_melodic_wolf, which controls the CLAUDE_CODE_HANDBACK_PROVENANCE setting, now defaults to true instead of false when not otherwise overridden.

Why Handback provenance is now on by default for everyone, rather than requiring users to opt in explicitly.

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 2 Bash Safety unclear

Bash sandbox auto-allow gets a new command-content check#

The bash auto-allow-when-sandboxed fast path now also blocks commands matched by a new denylist check, though its data source currently returns nothing

Unclear What specifically the new command-content check looks for is not stated in the finding.

Details 0 0 Feedback

What

The fast path that automatically allows a Bash command to run without confirmation when it's sandboxed now has an extra check. In addition to the existing sandbox and read-outside-current-directory checks, it now also bails out (refuses to auto-allow) when a new function, rz(e.command), returns true for the command.

  • The same rz(e.command) check, along with a related fsn() lookup for substrings and commands that should always be blocked, is also consulted by a broader excluded-command check, not just the sandboxed auto-allow path.
  • Currently, the data source behind this check (fsn()) is a stub that returns null, so the new check has no practical effect yet.

Why

This wires in the plumbing for blocking specific commands or command substrings from being auto-allowed in a sandbox, even though the actual denylist data isn't populated yet. Until fsn() returns real data, this change does not change what gets auto-allowed in practice.

Related

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

Improved
Under the hood
Useful2 Signal2
Group of 2 Remote Control

Pasted content is now tracked separately from typed text, including in bridge-relayed messages#

User messages, including ones relayed through the remote bridge, can now carry pasted text as a distinct pasted_content field

Details 0 0 Feedback

What

  • User-message schemas, including the SDK's user-message-replay type, gain a pasted_content field: content the user pasted rather than typed, appended after the typed text (optionally wrapped in <pasted_content> tags). Image or document blocks still must go in message.content, not here. The internal user-turn extraction path now plumbs pastedContent through as well.
  • Inbound messages relayed through the remote-control bridge (excluding peer and slack-ping messages) now go through the same pasted-content merge used by the SDK, appending any attached pasted text blocks to the message body and emitting the existing sdk_pasted_content telemetry.

Why

Keeping pasted text separate from typed text lets Claude Code and the SDK tell the two apart, and extending this to bridge-relayed messages means the same distinction now applies consistently no matter how a message arrives.

Improved
You'll notice
Useful3 Signal2
Bash Safety

New shell-command danger-pattern detector#

A new detector flags shell commands containing risky constructs like command substitution before auto-approving them

Details 0 0 Feedback
What

Claude Code now parses a shell command's structure (using a tree-sitter-based parser) to detect constructs considered unsafe to auto-approve without asking the user, including:

  • brace and parameter expansions
  • $'...'/$"..." style quoting
  • command substitution ($(...)) and backticks
  • process substitution (<(...) and >(...))
  • arithmetic expansion ($[...])
  • malformed or incomplete redirects

If any of these appear in a command, it's flagged as unsafe to auto-approve.

Why

These shell constructs can let a command do something other than what it appears to do at a glance, such as running hidden commands or reading unexpected input. Flagging them prevents Claude Code from auto-approving a command that looks safe but isn't.

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
Remote Machines

File tool can now fall back to a single unsynced remote machine when reading files#

File tool can now fall back to a single unsynced remote machine, with a warning it may be at a different commit

Details 0 0 Feedback
What

When Claude Code's file tool (used for Read, Bash, and similar operations) needs to pick which attached machine to run a command on, it can now fall back to a single remote machine even if that machine isn't set up for two-way or upload-only project sync. In that case, the tool warns that the remote machine holds its own separate copy of the project, that nothing is synced between it and the current session's checkout, and that it may be at a different commit.

Why

This lets a command still run on the only available remote machine instead of failing outright, while making clear the files there might not match what the current session sees.

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
Permissions

Permission-mode changes now wait for server confirmation before taking effect#

Switching permission mode now waits for the server to confirm the change before applying it

Details 0 0 Feedback
What

When Claude Code changes its permission mode (the setting controlling what actions it can take without asking), it now first sends that change to the server and waits for confirmation. If the server doesn't accept the change within a time window, the permission-mode change is blocked and an explicit reason is shown, instead of the change silently taking effect anyway.

Why

This prevents a session's permission mode from getting out of sync between the local client and the server, so a change that failed to save doesn't get applied locally without the user knowing.

Improved
You'll notice
Useful3 Signal2
Terminal Rendering

New robustness pass for improved terminal text-wrapping that is ANSI/control-sequence aware#

Terminal text-wrapping rewritten to correctly handle ANSI codes, with a verified fallback

Details 0 0 Feedback
What

Claude Code's terminal text-wrapping logic (which decides how to break long lines of text to fit the terminal width) has been rewritten to properly account for ANSI escape and control sequences, the invisible codes terminals use for things like color and cursor movement. The new approach temporarily replaces these sequences with a placeholder character while wrapping, then verifies that the wrapped result still reconstructs the original text correctly. If that verification fails, it falls back to a simpler, character-based wrapping method and marks the result as "degraded." This replaces the previous text-measurement approach entirely.

Why

This reduces the chance that colored or otherwise styled terminal output gets wrapped incorrectly, while the verification-and-fallback approach means a wrapping bug degrades gracefully to a simpler method instead of producing broken output.

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
Rate Limits unclear

Rate-limit usage response strips 'limits' when status is 'seeded'#

Rate-limit usage responses no longer include per-limit detail when status is 'seeded'

Unclear What the 'seeded' status specifically represents, and why per-limit detail is excluded for it, is not stated

Details 0 0 Feedback
What

When the rate-limit status returned is seeded, Claude Code now removes the limits field before building the rate-limit usage object it returns, so a seeded response no longer includes the detailed per-limit breakdown.

Why

This changes what information is available when rate-limit usage is in the 'seeded' state; per-limit detail won't show up for that case anymore.

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
Models

Model 'fable' family label simplified to just a name#

The 'fable' model family's picker entry lost its description text, now shows just a name

Details 0 0 Feedback
What

The code that builds a model picker entry for the "fable" model family used to return a rich object including a label and description text ("most capable for your hardest and longest-running tasks"). It now just returns the model's display name, or nothing if there isn't one.

Why

This means the picker no longer shows explanatory description text for the fable family in this particular code path, just its plain name.

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
Tool Validation

Tool-execution error/telemetry logs now redact tool names and truncate error content by structure, not raw text#

Tool error and permission-denial debug logs now report structured metadata instead of raw tool names and text snippets

Details 0 0 Feedback
What

Local debug log lines for tool input validation errors, validate-input rejections, permission denials, and runtime tool errors no longer include a raw slice of the offending input, message, or error text. Instead they report structured details: issue codes, byte/character counts, and error codes. These log lines also now use a new classifier that labels skill tools, MCP tools, and dynamically-named tools with a generic label like skill_tool, mcp_tool, or dynamic_tool instead of printing the tool's literal name.

Why

This keeps potentially sensitive tool names and raw error content out of debug logs while still giving useful, structured information for diagnosing tool 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
Useful2 Signal2
Elsewhere

Code-attribution report can be computed against a different repo root than the current session#

Fixes the claude/human code-attribution report to use the right repo root when computing contribution splits

Details 0 0 Feedback
What

The code-attribution report, which totals up how much of your code came from Claude versus a human, could get confused about which repository it was reporting on. It now separately resolves the repo root that was actually requested and the repo root the current session is really using, and only re-fetches ignored-file information for each root when they differ. Each file's Human/Claude split is now looked up using a key that includes which root it belongs to, with a fallback if the root doesn't match.

Why

This prevents the report from mixing up contribution data across different repository roots, so the numbers you see for a given repo actually reflect that repo.

Improved
Under the hood
Useful2 Signal2
Plugin Install

New atomic plugin-version directory swap with byte/entry-budgeted tree comparison#

Plugin version installs now swap in atomically after comparing the new and old file trees under a size budget

Details 0 0 Feedback
What

Installing a new version of a plugin now goes through a new subsystem that first compares the newly staged version's files against the currently installed copy, checking permissions, ownership, hardlinks, binary hook files, and node_modules, within a limited comparison budget. If the two are identical, the existing install is kept as-is. Otherwise, the old copy is atomically moved aside, the new version is published in its place, and the old copy is restored automatically if the swap fails partway through. On Windows, where directories can be temporarily locked, the swap retries with backoff, and it also guards against races when two installs happen at once.

Why

This makes plugin version upgrades safer: an interrupted or failed update no longer risks leaving a plugin half-installed, and identical reinstalls are skipped rather than redone unnecessarily.

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
Artifact Publish

Artifact publish now handles server rate limiting explicitly during upload/copy#

Artifact publish now handles server rate-limit responses explicitly during upload and copy, showing a retry-after time

Details 0 0 Feedback
What

When publishing an artifact, the file-upload and cross-artifact-copy steps now specifically detect a rate-limited response from the server and call a dedicated handler for it, instead of treating it as a generic 'upload unavailable' error. The final error message shown for a failed deploy now includes a retryAfter value read from the server's response headers.

Why

This means that if artifact publishing is rate-limited by the server, you now get a clearer error that tells you when to retry, rather than a generic failure 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 Signal2
Plugin Install

Clearer error message when a plugin can't load because its marketplace isn't registered#

Plugins that fail to load from an unregistered marketplace now get a specific explanatory error

Details 0 0 Feedback
claude plugin marketplace add
What

When a plugin can't load because its marketplace source isn't known during this session (it's not in known_marketplaces.json, or it's listed under extraKnownMarketplaces but unusable), Claude Code now shows a specific diagnostic explaining why, and tells you to run claude plugin marketplace add <path-or-repo> to fix it. Previously this failed silently or with a generic marketplace-not-found error.

Why

This saves you from guessing why a plugin silently didn't load, and points directly at the fix.

Related

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

Improved
Under the hood
Useful2 Signal2
Directory Sync

Directory-sync uploads now request-signed via client_request_signer#

Directory-sync file uploads and downloads are now cryptographically signed before being sent

Details 0 0 Feedback
What

The directory-sync client used for uploading and downloading session files now signs each upload's content, path, and ifMatchSha256 value using a request-signer before sending it. If signing fails, Claude Code logs a warning once and records a telemetry event.

Why

Signing requests helps verify that directory-sync uploads haven't been tampered with in transit. The one-time warning and telemetry event mean a signing failure won't go unnoticed while also not spamming logs.

Improved
You'll notice
Useful2 Signal2
Artifact Publish

Artifacts publish confirmation now cites sources and marks scratchpad files#

The Artifact publish confirmation prompt now names the source artifacts being copied and flags files that live in the scratchpad

Details 0 0 Feedback
What

The confirmation prompt shown before publishing an Artifact was reworked to explicitly list the source artifacts, by title, when files are being copied server-side from more than one source. It also now marks file paths that live "in scratchpad" (a working/temporary area) in that confirmation message.

Why

This gives more detail in the publish confirmation prompt, making it clearer where the content being published is actually coming from before you approve 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
Team Memory

Multi-store-sync's empty-receipt handling loses its tengu_typed_koala gate and moves inline#

Clearing a stale empty store receipt before syncing no longer depends on the tengu_typed_koala flag

Feature flag
tengu_typed_koala On for this account, and not off by default

The flag server returned on for the one account this site reads, and nothing in this release compiles it off by default. The compiled default is shown below, and says which it is when we cannot read one: a fifth of gates compile in a string or a number rather than on or off, and most published releases have no gate table behind them at all. No client can see what the server returns for your account.

This account: on · anonymous baseline: on · compiled default in v2.1.277: on

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
What

Claude Code keeps local "receipts" on disk to track whether a data store has been synced. Previously, clearing out a stale or empty receipt before a sync required a feature flag called tengu_typed_koala to be turned on, in addition to two other conditions. That flag check is now gone: the logic runs unconditionally, and the two other conditions (whether the on-disk receipt is empty, and whether a pull has already happened) have moved into the function that does the actual work.

Why

This behavior no longer depends on a feature flag, so it applies the same way everywhere rather than only when that flag was enabled for a given account.

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

File reads hardened against symlink/TOCTOU races (boundRead)#

File reads are now hardened against symlink-swap race conditions

Details 0 0 Feedback
What

A new internal function, boundRead, is used for file reads. It resolves a file's real path first, then opens it using flags that refuse to follow symlinks (O_NOFOLLOW on Linux, F_NOFOLLOW_ANY on macOS), and on Linux also double-checks /proc/self/fd to confirm the opened file matches the expected path. If a symlink (a file that points to another location) is found along the way, or the opened file doesn't match what was expected, the read is refused and a warning is shown.

Why

This protects against a class of security bug sometimes called TOCTOU (time-of-check-to-time-of-use), where a file is swapped for a symlink to a different, unintended file between the moment Claude Code checks it and the moment it actually reads it.

Improved
You'll notice
Useful2 Signal2
Elsewhere

Coordinator sessions blocked from reading worker transcripts/task outputs via shell tricks#

Coordinator agents are now blocked from reading worker transcripts or task outputs via shell workarounds

Details 0 0 Feedback
What

When an agent acting as a 'coordinator' (an agent that manages other worker agents) tries to run a shell command, Claude Code now rejects commands that attempt to read a worker's transcript file or task output directory indirectly, including via:

  • command substitution ($(...))
  • a variable
  • a ~name shorthand path
  • a .. path segment
  • an overly broad wildcard pattern
Why

A worker's result is meant to be read through the proper channel, the task notification or an explicit request to the worker, not by having the coordinator shell directly into the worker's transcript files. This closes off ways that check could previously be bypassed.

Improved
You'll notice
Useful2 Signal2
Elsewhere

New slash-command relay refusal path for unverified Slack turns#

Slash commands from unverified Slack messages can now be blocked before relaying

Details 0 0 Feedback
What

When a message coming through Slack looks like a slash command but didn't go through the existing bridge-slash-override handling and isn't confirmed to be from a verified human Slack user, a new check called resolveRelaySlashRefusal now runs and can block the message from being relayed.

Why

This closes a gap where an unverified Slack message could otherwise trigger a slash command, adding a safeguard against unauthorized or spoofed command execution through Slack integrations.

Improved
You'll notice
Useful2 Signal2
Bash Safety unclear

Sandboxed-bash auto-allow now excludes commands matching rz()#

Sandboxed auto-allow for Bash commands now excludes commands matching an additional check

Unclear The finding does not say what kinds of commands the new exclusion check matches.

Details 0 0 Feedback
What

When sandboxing and "auto-allow if sandboxed" are both enabled, Claude Code could previously let a Bash command run without asking for approval. Now that auto-allow also requires that the command does not match a new exclusion check, meaning some commands that would have been auto-allowed before will now still require approval.

Why

This tightens the conditions under which sandboxed Bash commands skip approval, reducing the chance that a command that shouldn't be auto-approved slips through.

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
Remote Machines

Multi-machine sessions now distinguish a separate synced checkout from the primary one#

Multi-machine session messages now distinguish a synced mirror from a separate, unsynced copy

Details 0 0 Feedback
What

When a session shows which machines are attached to it, Claude Code now handles a new case: the current session's checkout being the primary copy of the project, while a named machine holds the user's own separate copy with nothing synced between the two. This gets its own explanatory text, distinct from the existing case where a machine holds a synced mirror of the project.

Why

This makes it clearer when working across multiple machines whether changes on one machine will show up on another, avoiding confusion about whether two checkouts are actually kept in sync.

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 no docs found

Projects tool's org-policy-disabled message is now dynamic, and Projects context is retried after a policy cache miss#

Projects-disabled-by-policy message is now dynamic, and access retries after policy resolves

Details 0 0 Feedback
allow_projects_tool
What

The fixed message telling you "Projects is disabled by your organization's policy" has been replaced with dynamic wording driven by the allow_projects_tool policy check, so the text now matches whatever the actual policy decision says. Separately, if the policy check for allow_projects_tool was previously unresolved (a cache miss) and later resolves to allowed, Claude Code now automatically re-subscribes and rebuilds your project context instead of requiring a restart.

Why

This means the message you see about Projects being disabled will more accurately reflect your organization's actual policy, and access to Projects can recover on its own once the policy check catches up, without you needing to do anything.

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

Proxy request forwarding gains an explicit header allow/deny list#

Proxy request forwarding now strips sensitive headers and keeps only an allowed set of prefixes

Details 0 0 Feedback
What

When Claude Code forwards requests through a proxy, it now applies explicit rules about which HTTP headers (the metadata sent alongside a request) are allowed through. Headers considered sensitive or connection-specific, such as authorization, x-api-key, host, and content-length, are stripped out. Headers whose names start with certain prefixes, including anthropic-, x-stainless-, x-claude-gateway-, x-goog-, x-amz-, and x-amzn-, are kept. New validity checks also confirm header names and values are well-formed.

Why

This reduces the risk of sensitive credentials or connection-specific headers leaking through a proxied request, while still allowing the specific headers that upstream services need to function correctly.

Improved
Under the hood
Useful2 Signal2
Compliance

HIPAA/ZDR compliance gates tighten cache-miss defaults#

HIPAA/ZDR compliance checks now default to blocking, not allowing, when the compliance cache is empty

Details 0 0 Feedback
What

Three compliance-gated capabilities change their behavior for when compliance status hasn't been cached yet (a cache miss):

  • Projects tool access now defaults to holding (pausing pending confirmation) instead of allowing
  • Team onboarding now defaults to holding instead of allowing
  • Peer messaging now defaults to denying outright instead of allowing
Why

This makes these compliance-sensitive features fail closed rather than open when the system doesn't yet know an organization's HIPAA or zero-data-retention (ZDR) compliance status, reducing the risk of allowing something that should have been blocked while status is still unknown.

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
File Sync

File-sync staging now uses an ownership/permission-checked private folder, with the old auto-cleanup keyed differently#

File sync now stages files in a private, permission-checked folder and skips it during cleanup

Details 0 0 Feedback
What

When Claude Code syncs files, it now moves them through a dedicated staging folder that is locked down to the current user only (permission mode 0700, meaning only the owner can read, write or enter it). Before using this folder, Claude Code checks that it and its parent folder are genuinely owned by the current user with no group or other access. If the check fails, it deletes the folder and refuses to use it, reporting one of several specific reasons: it could not be created, it is not owned solely by the current user (which can happen on drives that don't preserve file permissions), or it turned out to be a symbolic link or another user's folder.

The existing cleanup routine that removes old staging folders has also been updated to skip the one that is currently in active use.

Why

This prevents another user on a shared machine from tampering with or reading files while they're being staged for sync, and stops the cleanup process from accidentally deleting a staging folder that a sync is actively using.

Related

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

Improved
Under the hood
Useful2 Signal2
Elsewhere

Session-inbox relayed messages can now carry attachments#

Relayed session-inbox messages can now include attachments

Details 0 0 Feedback
What

Messages relayed through the session inbox (used for things like Slack messages reaching a session) can now carry attachments. The message event builder accepts an optional attachments argument and includes it in the message data sent to the session. The attachments field has also been added to the list of fields treated as untrusted, alongside the existing body, sender_display, and slack_permalink fields.

Why

This lets relayed messages carry file or media attachments rather than just text, while still treating that attachment data as untrusted input like the rest of the relayed message.

Improved
Under the hood
Useful2 Signal2
Artifact Publish

Artifact tool guidance expanded to cover creating and reading design systems#

Artifact tool instructions now explicitly cover creating and reading design systems

Details 0 0 Feedback
What

The internal instructions that tell the model how to find and use artifact types now explicitly mention design systems, including ones built from your own codebase, as something the quickstart and list-types steps should handle. A new rule classifies design-system requests under an intent: "other" category, and a new instruction tells the model to look up and read an existing design-system artifact when answering questions about it, falling back to searching your files if no such artifact is listed.

Why

This makes Claude Code better able to recognize design-system-related requests and answer questions about an existing design system using the artifact itself, rather than treating it like an unrecognized artifact type.

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
Plugin Install

Plugin extraction now detects tampering while a plugin loads#

Plugin loading now detects if a plugin's files are removed or replaced while it's being loaded

Details 0 0 Feedback
What

When Claude Code extracts a plugin's files to disk to load it, it now records identifying details of that directory (its device, inode, and creation time) beforehand and checks them again afterward. If the directory was removed or replaced with something else during loading, Claude Code now throws an error saying the plugin directory "was removed before it could be loaded" or "was replaced while it was being loaded," instead of silently continuing.

Why

This guards against a plugin's files being tampered with or swapped out during the brief window while it's being loaded, so Claude Code doesn't end up loading unexpected content without 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
Useful2 Signal2
Plugin Install

Marketplaces declared only in settings are now reconciled and logged#

Plugin marketplaces listed only in settings are now validated and reconciled automatically

Details 0 0 Feedback
What

If a plugin marketplace is referenced in your settings but hasn't yet been recorded in the internal known_marketplaces.json tracking file, Claude Code now checks it: it validates the declared source and path, and either admits it (letting plugins load from it right away, with a note that it will be formally recorded once a background reconcile step runs) or records why it was skipped, such as an invalid source type, an unanchored path, a manifest not found under .claude-plugin, or a rejection by the registry's admission rule.

Why

This closes a gap where a marketplace only declared in settings might not actually get recognized or used, and gives a clear reason when one is rejected instead of it silently failing to load.

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 unclear

Task-management reminders suppressed when the Brief tool has been used#

Task-management reminders are now skipped in conversations that used the Brief tool

Unclear The tengu_humble_zephyr gate controlling an alternate code path (deferring to fUo.isBriefEnabled()) hasn't been read, so it's unclear whether that alternate behavior is active for any account.

Feature flag
tengu_humble_zephyr 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.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
What

When the internal task-reminder check runs, it now looks for whether the conversation has used the Brief tool. If it has, task reminders are skipped for that turn, at least by default.

Why

This avoids nagging you with task-management reminders when you're already working through a Brief-tool workflow, which presumably handles task tracking on its own.

Improved
You'll notice
Useful3 Signal1
Search Tools

New ripgrep spawn-failure diagnostics with cause-specific advice#

Ripgrep search failures now explain the specific cause and give targeted advice

Details 0 0 Feedback
What

When Claude Code's search tool (which uses ripgrep under the hood) fails to even start a search, it now explains why in more specific terms, rather than just reporting that the search failed. Recognized causes include the process or thread limit being reached, the system running out of memory, Claude Code itself having too many files open, or the whole system having too many files open. Each cause comes with targeted advice, for example telling the user that Claude Code needs a restart when the problem is too many files open by Claude Code (an "EMFILE" error).

Why

This helps users understand and fix search failures instead of just seeing a generic error, and makes clear that when ripgrep can't start, nothing was searched and matching results may still exist.

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

More secret patterns caught when scrubbing tool output and logs#

Tool output and log scrubbing now also redacts Stripe, Google API, and Google OAuth secret keys

Details 0 0 Feedback

What

The pattern list Claude Code uses to find and redact secrets in tool output and logs has been expanded. It now also catches:

  • Stripe-style secret keys (sk_live_, sk_test_, sk_prod_, rk_...)
  • Google API keys (AIza...)
  • Google OAuth client secrets (GOCSPX-...)

Matches are replaced with a placeholder like [REDACTED-PAT] (PAT stands for personal access token) instead of being shown in plain text. A second related redaction table was also updated with matching <token> replacements for these same patterns.

Why

This reduces the chance that live API keys or secrets accidentally show up in command output, logs, or anything Claude Code displays or transmits, lowering the risk of credentials leaking.

Improved
You'll notice
Useful2 Signal1
Group of 4 Permissions

New reserved-name lock for skills, commands and tools#

Skills, commands and tools whose name collides with a reserved settings key now get a distinct 'reserved-name' lock

Details 0 0 Feedback

What

  • Skills whose name fails a new reserved-name check are locked to on/user-invocable-only, ignoring any user override.
  • The permissions UI now shows a distinct "reserved-name" state when a skill's or command's configured name can't be stored in settings because it collides with a reserved key, with guidance to rename the skill's folder or the command file.
  • Tools or commands named exactly __proto__ are always treated as reserved-name and forced to stay callable (on or user-invocable-only), regardless of user or policy settings for slash-command visibility.
  • The permission-mode cycling control now treats "reserved-name" the same as "policy" or "flag" sources: it leaves the mode unchanged instead of letting it be cycled.

Why

Names like __proto__ can collide with reserved keys used internally by settings storage, which previously could cause confusing or unsafe override behavior. The new reserved-name category makes this collision visible in the UI and stops such names from being silently disabled, hidden, or mis-cycled.

Improved
You'll notice
Useful2 Signal1
Group of 2 Plugin Install

Plugin install messages now show version details#

Plugin install/update CLI messages now show the installed vs. available version, plus a note when a plugin loads in place

Details 0 0 Feedback

What

When installing a plugin or seeing the 'already installed' message, Claude Code now computes and shows the plugin's installedVersion versus its availableVersion.

  • If the plugin loads in place from a local or linked source, the message notes that edits take effect at the next session start or via /reload-plugins, and includes a command hint to re-record the version.
  • If a newer version is available, the message notes that and includes a hint for the update command to run.

Why

This makes it clearer to users whether their installed plugin is current, out of date, or running from a local/linked source that needs a reload to pick up changes, instead of showing a bare 'already installed' message with no version context.

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 Remote Control

New notice for background task updates queued behind an open panel#

A new footer notice tells you when background task updates are waiting because a side panel (like the model picker or IDE panel) is open

Details 0 0 Feedback

What

The chat interface now accepts a panelHoldsQueue signal. When it's true, a small notice appears reading "Background task update" (or "N background task updates") followed by "waiting while this panel is open".

This notice shows up when there's an active full-screen panel or dialog (such as the model picker or IDE panel) open over the chat, and background task updates are queued but not yet shown because the background task runner itself isn't currently in view. It applies both to the main chat/panel layout and to remote or live sessions with items queued in a side panel.

Why

Without this, updates from background tasks could be silently queued and easy to miss while a panel or dialog is covering the chat. The notice makes clear that something is waiting as soon as the panel is closed.

Improved
You'll notice
Useful2 Signal1
Group of 3 Device Binding

Revoked device keys now get a distinct 'device_revoked' reason instead of a silent retry#

Device sign-in and sync now recognize a revoked device key as its own failure reason, shown as removed from claude.ai devices, instead of silently retrying

Details 0 0 Feedback

What

  • The device-linking flow used to catch a "device key revoked" error and automatically re-register; that automatic retry has been removed. Registration failures are now classified explicitly, including a new device_revoked reason.
  • Device-bind failure telemetry now includes a revoked boolean, and the failure outcome gains a device_revoked case, shown to users as "removed from claude.ai devices," alongside the existing limit_reached, registration_unavailable, and no_keychain reasons.
  • The local-tools/file-sync messages shown when a session is unbound now special-case device_revoked with its own explanation, instead of showing the generic sync-error text.

Why Users who've had a device removed from claude.ai now see a clear, specific explanation instead of a silent, potentially confusing automatic retry or a generic sync error.

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 Remote Machines

New 'separate copy' concept for a session's project location and sync status#

Claude Code now distinguishes a session's own dedicated 'separate copy' checkout from other project sync states, in UI text and telemetry

Details 0 0 Feedback

What

  • Tool-context location descriptions gained a "separate" case describing a location as the session's own dedicated checkout — "the primary copy for this session's work" — alongside the existing default/machine/unknown cases.
  • The device/session sync telemetry payload gained an optional folder_relation field that accepts the value separate_copy, alongside the existing project_sync enum.
  • The status text describing a session's synced project directory gained a new case for when the project is the user's own separate copy with sync turned off, showing distinct wording instead of falling back to a generic "not synced" message.

Why

This gives Claude Code a consistent way to describe and record when a session is working from its own separate checkout rather than a directly synced copy, making status messages and sync telemetry clearer.

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 Settings

New validation for strictKnownMarketplaces and blockedMarketplaces settings#

Claude Code now validates strictKnownMarketplaces and blockedMarketplaces entries and warns or falls back when they can't actually be enforced

Details 0 0 Feedback
strictKnownMarketplacesblockedMarketplaces

What

  • Entries in the strictKnownMarketplaces and blockedMarketplaces settings are now checked for whether they can actually be enforced: regex patterns must compile, GitHub-source entries with an owner wildcard must be written exactly as <owner>/*, wildcard sources are only allowed in GitHub form, and refs can't contain *.
  • An invalid strictKnownMarketplaces value falls back to an empty allowlist, meaning no marketplaces are admitted until the setting is fixed. An invalid blockedMarketplaces entry is kept rather than dropped (with a warning), since removing it would loosen restrictions instead of tightening them.
  • On managed-settings tiers, each invalid entry now gets an explicit message: an unenforceable blockedMarketplaces entry is kept but inert ("it can never match, so it blocks nothing"), while an unenforceable strictKnownMarketplaces entry is silently stripped. In user, project, or local settings files, an invalid entry in either key is simply inert.

Why This stops administrators from unknowingly relying on marketplace restrictions that look active but can never actually match anything, and makes clear whether a broken rule is being kept for safety or dropped.

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 Permissions

Saved permission rules for removed tools are now flagged, not treated as typos#

Permission rules naming a tool Claude Code no longer has are now recognized and skipped, thanks to an expanded internal removed-tools list

Details 0 0 Feedback

What

Claude Code keeps an internal list of tool names it checks saved permission (allow/deny) rules against. That list now includes five more retired tool names: TaskOutput, AgentOutputTool, BashOutputTool, AgentOutput, and BashOutput.

When a saved permission rule references a tool name that's in this list, Claude Code now recognizes it as a rule for a removed tool, logs a warning, and skips it. Previously such a rule would fall through to the generic "matches no known tool" check, which is meant to catch typos.

Why

This avoids confusing users with typo-style warnings when their saved permission rules simply reference tools that have since been renamed or removed, and makes the underlying detection more accurate by keeping the removed-tools list up to date.

Improved
You'll notice
Useful2 Signal1
Elsewhere

--tools flag now warns about removed built-in tools#

--tools now shows a specific warning when you exclude a built-in tool that's been removed

Details 0 0 Feedback
--tools
What

When using the --tools flag to exclude a tool by name, if that name used to refer to a built-in tool that Claude Code has since removed, the CLI now shows a distinct message explaining that, instead of treating it as if you'd simply mistyped an unknown tool name.

Why

This makes it clearer when a --tools exclusion refers to a tool that no longer exists, rather than leaving the user to guess whether they made a typo.

Improved
You'll notice
Useful2 Signal1
MCP unclear

MCP server management messages now branch on a command-menu surface#

MCP server management messages can now point to a command-menu UI instead of the terminal

Unclear Which surface presents the command menu, and when each wording is shown, is not stated in the finding.

Details 0 0 Feedback
/mcp
What

Most response messages for /mcp enable, /mcp disable, and /mcp reconnect now choose between two wordings: the old "Run /mcp in the terminal..." text, or a new "Open MCP servers from the command menu." text.

Why

This suggests MCP servers (external tool connections) can now be managed from a command-menu surface outside the terminal, not just by running /mcp at the command line.

Improved
You'll notice
Useful2 Signal1
Tool Results

Tool result card truncation now groups by identical line value before cutting#

Tool output truncation now avoids cutting in the middle of a run of identical lines

Details 0 0 Feedback
What

When a large tool-output card is truncated and shown as "N more lines," the logic now scans for consecutive rows that share the same value and only cuts at the boundary between groups, rather than always truncating at a fixed row count as before.

Why

This avoids splitting a block of identical or repeated output lines awkwardly across the truncation point, making truncated tool output easier to read.

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
Cloud Sessions

Cloud-session permission prompt for unrecognized hooks reworded#

The permission prompt for untrusted hooks in cloud sessions was reworded to be shorter and more actionable

Details 0 0 Feedback
What

When a cloud session hits a command check or hook that isn't defined in the user's own settings, and so can't be run automatically for that session, Claude Code shows a permission prompt asking for approval. That prompt's text has been rewritten to be shorter, and now tells the user how to make the check trusted going forward: by reviewing it and copying it into ~/.claude/settings.json.

Why

The clearer wording makes it easier to understand why the prompt is appearing and gives a concrete path to stop seeing it for that same check in the future.

Improved
You'll notice
Useful2 Signal1
Artifact Publish

Artifact publish rejects remote {artifact,path} file references, requires local copies#

Artifact publish now rejects file references into other artifacts, requiring a local copy instead

Details 0 0 Feedback
What

When publishing an artifact, the files parameter no longer accepts entries shaped like {artifact, path} — a reference pointing into another artifact. Such entries now produce a validation error telling the caller to publish from a local copy instead, either a source path inside the artifact's root or an entry shaped like {from, contentType}.

Why

This closes off publishing files by reference to another artifact, requiring an actual local copy of the content instead, which avoids depending on another artifact's contents at publish time.

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
Artifact Publish

Artifact copy/create/publish confirmation dialogs now show artifact/type titles instead of just URLs#

Artifact copy/create/publish confirmation prompts now show the artifact's title, not just its raw URL

Details 0 0 Feedback
What

When Claude Code asks for permission before copying, creating, or publishing an artifact, the confirmation message now shows the human-readable title of the source or destination artifact (or its type), falling back to "an untitled artifact" or "an artifact type" if no title exists. The raw URL is now shown on its own separate line instead of being woven into the sentence.

Why

This makes permission prompts easier to read and understand at a glance, since a title is more meaningful to a user than a bare URL.

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
File Tools

Write tool gives specific errors for directories and special files#

The Write tool now gives clear errors instead of failing vaguely when the target is a directory or a device/socket

Details 0 0 Feedback
What

The Write tool, which creates or overwrites files, used to only check whether the target path was a symlink before writing. It now also checks for two more cases:

  • the target path is a directory, in which case it reports that it's a directory and suggests including a file name in file_path to create a file inside it
  • the target path is a non-regular file, such as a device, FIFO, or socket, which it now refuses to overwrite, noting that Write only creates or overwrites regular files

Each case gets its own distinct error rather than a generic failure.

Why

This gives clearer feedback when Write is pointed at something other than a plain file, instead of a confusing or misleading error.

Improved
You'll notice
Useful2 Signal1
Artifact Publish no docs found

Artifact type-listing narrowing switches from substring match to fuzzy best-match#

Artifact type filtering switches from plain substring search to fuzzy best-match ranking

Details 0 0 Feedback
type_query
What

When listing Artifact types (categories used for shared Artifacts), the type_query parameter used to work as a simple case-insensitive substring filter. It now ranks results by how well they match and drops weaker matches instead of just checking for a substring. Claude is now instructed to only use this parameter when a previous listing without it indicated more types exist than were shown.

Why

A fuzzy best-match search can find relevant types even when the query doesn't exactly appear as a substring, though it also means a narrowed listing might not show the entire catalog of types, since weaker matches are deliberately left out.

Improved
You'll notice
Useful2 Signal1
Artifact Publish

Artifact publish preserves reservedSlug on failure (except for PR-review pages)#

Failed artifact publishes now keep their reserved slug so a retry can reuse it, except for PR-review pages

Details 0 0 Feedback
What

When publishing an artifact fails, Claude Code now carries the reservedSlug (the reserved address for the artifact) forward in the failure result, so that a retry can reuse the same slug instead of getting a new one. This applies unless the artifact's slug is stranded, conflicting, or gone, and unless the artifact is a pr_review page.

Why

This avoids unnecessarily losing a reserved slug when a publish attempt fails, making retries more consistent, while excluding PR-review pages and problem-slug cases where reuse wouldn't make sense.

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 unclear

'Login expired' message and dedicated /login re-auth copy#

New 'Login expired' message distinct from the existing Anthropic profile expiry message

Unclear The exact condition that selects this message over the existing Anthropic-profile message is not detailed beyond being a specific check.

Details 0 0 Feedback
/login
What

A new error message was added for invalid-request authentication errors: "Login expired · Run /login to sign in again, or re-authenticate your Anthropic profile." This is shown under certain conditions as a separate message from the existing "Anthropic profile login expired" message.

Why

This gives users more specific guidance when their login (rather than specifically their Anthropic profile) has expired, pointing them to the /login command to sign back in.

Related

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

Improved
Under the hood
Useful2 Signal1
Artifact Publish

Artifact DB requests gain gateway-busy retry and relay-unavailable handling#

Artifact database requests now retry on gateway-busy and handle relay-unavailable errors more clearly

Details 0 0 Feedback
What

Requests to the artifact database now retry automatically in a few situations:

  • When the gateway reports it is busy, the request waits up to a capped delay and retries once, reporting whether the retry succeeded (relay_busy_recovered) or was needed at all (relay_busy_retried)
  • When the server rejects "session hints" sent with the request, it retries once (session_hints_rejected)

Separately, failures where the relay is unavailable or not served are now recognized as distinct cases and surfaced with a dedicated error message instead of a generic failure.

Why

This makes artifact database requests more resilient to temporary gateway congestion and gives clearer error messages when the underlying relay simply isn't available, instead of failing outright or with an unhelpful 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
Slash Commands

Slash-command dispatch now splits multi-block input before running policy checks#

Slash commands now split multi-block pasted input before running permission checks

Details 0 0 Feedback
What

When you run a slash command, Claude Code now first splits the raw argument text into pieces, checking whether any of them are a distinct "block" (such as a pasted chunk of content). If so, the text and body pieces are rejoined, separated by blank lines and trimmed, and that rejoined text replaces the original argument string before the command's permission checks and the rest of dispatch proceed.

Why

This changes how multi-part or pasted input is normalized before a slash command's policy checks run, which can affect how such input is interpreted when a command's arguments include pasted content blocks.

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
Prompt Input

Pasted large-text blocks can now stay inline instead of always becoming a placeholder#

Small pasted text blocks can now stay inline in your message instead of always turning into a placeholder

Details 0 0 Feedback
What

When you paste a mix of content into Claude Code, text blocks that are short enough, under a certain character length and at most two lines, are now kept inline in your message text as-is. Previously, any such block would always be replaced with a placeholder reference to the pasted content. A line break is inserted after an inlined block if it's followed by another block or by more non-blank text.

Why

This avoids turning small, easily readable snippets into opaque placeholders, keeping short pasted text visible and readable directly in your message rather than hidden behind a reference.

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
Background Tasks

Tool-call UI now reflects running/failed/stopped status of an associated background task#

Tool-call cards in the UI now reflect the running, failed, or stopped state of a linked background task

Details 0 0 Feedback
What

When a tool call in the conversation is linked to a background task or process, its card in the interface now watches that background task's own status. Whether the card animates (shows as running) or displays an error now takes into account whether the linked background task is running, failed, or has been stopped, not just whether the tool call itself has resolved or errored.

Why

This keeps the tool-call display accurate when the underlying work continues in the background: a tool card can now show as still active or as failed based on what's actually happening with its background task, instead of only reflecting the tool call's own immediate result.

Improved
You'll notice
Useful2 Signal1
Elsewhere unclear

Command-output error message classifier expanded from 3 to 5 pattern checks#

Command output errors now get checked against five specific message patterns instead of three before falling back to generic text

Unclear Which two new patterns were added and what specific errors they cover is not stated.

Details 0 0 Feedback
What

When a command's tool output needs to be turned into a special, more specific error message (used in non-verbose mode), Claude Code now checks it against five distinct pattern-matching functions in sequence, up from three, before falling back to its generic write or delete failure messages.

Why

This means more kinds of command failures can now get a tailored, more informative error message instead of a generic fallback one.

Improved
You'll notice
Useful2 Signal1
Background Tasks

New UI for tool results that arrive after the turn has moved on#

New UI shows when a tool's result arrives late, including how long the wait took

Details 0 0 Feedback
What

Claude Code has new on-screen messages for when a tool call's result comes back after the conversation has already moved on. If a result shows up late, you'll see a placeholder line noting that an earlier tool's result has arrived. If the assistant paused to handle a new message from you while a tool was still running, a line now reports how long that tool took to finish.

Why

This makes it clearer when results are arriving out of order, so you're not confused about why a tool's output appears after the conversation has already continued.

Improved
You'll notice
Useful2 Signal1
Directory Sync

Directory sync's git-config safety limits tightened and made more specific#

Directory sync's git-config safety checks now also refuse configs with too many hooks/filters or oversized files

Details 0 0 Feedback
What

Directory sync already refused to proceed when a repository's git configuration was unreadable or exceeded limits on include-chain depth or file count. It now also refuses when:

  • the configuration defines more hooks and filter drivers than directory sync is able to switch off
  • a config file is larger than 1 MiB
  • a config file is a pipe or device rather than a regular file
Why

These additions close gaps where a git configuration could reference more hooks and filters than directory sync could safely disable, or use unusual file types/sizes, reducing the risk of directory sync running with configuration it can't fully control.

Improved
You'll notice
Useful2 Signal1
Plugin Install

Failed plugin installs show more of the real error#

Failed plugin installs now show more of the actual error, with a hint on how to see the rest

Details 0 0 Feedback
/plugin
What

When a plugin fails to install, Claude Code used to just print the plugin's name and a reason, cut off to 2 items. Now it tells apart internal errors from external ones, shows more of a long or multi-line external error (trimmed to a fixed length with "..." if needed), and adds a hint: pressing Enter on a plugin's details in /plugin shows its full error.

Why

This makes it easier to actually diagnose why a plugin install failed, instead of getting a truncated, uninformative summary, and points you to where you can read the complete error 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
Useful1 Signal1
Group of 2 Remote Control

Unsigned remote-activity warnings now read differently for cloud sessions#

Warnings about unsigned remote activity now say "This session" and adjust their hint text for cloud sessions instead of always saying "Remote Control"

Details 0 0 Feedback

What

When Claude Code rejects remote activity because it isn't cryptographically signed, it shows a warning. This warning's wording now depends on whether the session is a cloud session or a local one:

  • Cloud sessions now see "This session" in the warning instead of "Remote Control"
  • The accompanying hint text also branches: cloud sessions see "Use an app that does", while non-cloud sessions keep the existing "Use the terminal or an app that does", dropping the terminal-specific phrasing that didn't make sense for cloud sessions

Why

The old wording assumed a local Remote Control setup and mentioned the terminal, which was misleading when the activity actually came from a cloud session. The updated text makes the warning accurate regardless of where the session is running.

Improved
Under the hood
Useful1 Signal1
Group of 2 Settings

update_settings can now validate and target userSettings.effortLevel#

The update_settings tool now accepts more setting sources, including a validated effortLevel under userSettings

Details 0 0 Feedback
effortLevel

What

The update_settings tool previously only allowed writing to localSettings. It now accepts other recognized setting sources as well, each with its own set of allowed keys.

When the source is userSettings and the key being set is effortLevel, the tool now validates that the value is one of the known, valid effort levels. If it isn't, the call fails with a new dedicated error message that lists the valid effort levels.

Why

This prevents update_settings from silently accepting an invalid effort level and gives a clear, specific error message pointing to the valid options instead of 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
Useful1 Signal1
Elsewhere

Custom LLM gateway provider headers validated for safety#

Custom LLM gateway header settings are now validated for valid names, no duplicates, and no collisions with reserved headers

Details 0 0 Feedback
What

If you configure a custom anthropic provider (an LLM gateway) with custom HTTP headers in settings, Claude Code now checks that configuration more strictly:

  • Header names must be valid HTTP header names
  • The same header name can't appear twice, even with different capitalization
  • Header names can't collide with reserved headers that the gateway or the provider's own SDK already sets or signs
  • Header values must be non-empty, printable ASCII text with surrounding whitespace trimmed
Why

This catches misconfigured or conflicting custom headers before they cause confusing request failures, and prevents a user-supplied header from accidentally overriding one the gateway relies on for authentication or signing.

Improved
You'll notice
Useful1 Signal1
Artifact Publish

Artifact publish/share tool descriptions reworded into full sentences, with richer 'replacing' text#

Artifact publish/share prompts now read as full sentences and name the specific page being replaced

Details 0 0 Feedback
What

Claude Code shows description text explaining what will happen when you publish or share an Artifact (a generated document or page). This text was rewritten from short, comma-joined fragments into standalone sentences, including clauses about sharing status. When an action would replace an existing page, the text now looks up and names that page, saying "replacing its current page" or "replacing the page ''" instead of just showing a URL.

Why

This makes the permission prompts for Artifact actions clearer to read, and naming the specific page being replaced makes it easier to tell what you're about to overwrite before confirming.

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
Artifact Publish

Artifact type listing now warns when results are filtered by a type_query#

Artifact type listing now warns Claude when a type_query search may hide matching types

Details 0 0 Feedback
What

When Claude asks to list artifact types and narrows the results with a type_query search term, the response now adds a note explaining that the list only shows types matching that search text, so a type the account actually has could be missing from what's shown. The note also explains how to list all types without narrowing.

Why

This stops Claude from assuming a narrowed search result is the complete list of available artifact types, reducing the chance it wrongly concludes a type doesn't exist.

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
Tool Validation

Tool-call validation errors now include custom Zod issue messages#

Tool-call error messages now include specific custom validation messages from Zod

Details 0 0 Feedback
What

When a tool call fails validation, Claude Code builds an error message describing what went wrong, such as missing, unexpected, or wrong-type parameters. That message now also includes any custom validation error messages produced by the validation library (Zod) when a check is specifically marked as "custom".

Why

This surfaces more specific, tool-author-written explanations of why a call failed, instead of only generic parameter-shape errors.

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 unclear

Auto-mode classifier logging no longer includes raw prompt/action text#

Auto-mode classifier logs no longer include raw prompt or error text, only lengths

Unclear Nothing has been read yet about whether the tengu_auto_mode_malformed_tool_input gate is on or off for this site's account.

Details 0 0 Feedback
What

Debug and telemetry logging for the auto-mode classifier (the internal system that classifies actions Claude is about to take) no longer includes the actual text being classified. Previously the log for "new action being classified" could include up to 500 characters of the action's text; it now logs only the tool name, the length of the action text, and the tool-use ID. Similarly, when input to the classifier is malformed, the log used to include the actual error message text; it now logs only the character count of that error.

Why

This reduces the chance of sensitive or raw prompt content ending up in logs, while still preserving enough information (lengths, identifiers) for debugging.

Improved
You'll notice
Useful1 Signal1
File Sync

File-sync-stopped message rewritten to reassure about local work#

The file-sync-stopped message now reassures that local work is untouched and unrelated to the remote copy

Details 0 0 Feedback
What

When file sync between a session and the user's attached machine stops, Claude Code now shows a rewritten message. It explicitly reassures that the local checkout is unchanged, remains the session's own copy, and that the user's remote folder is now a separate copy going forward. This replaces the older, terser wording that simply said the session began unbound.

Why

This makes it clearer to the user that stopping file sync doesn't put their local files at risk or overwrite anything, reducing confusion about what happened to their work.

Improved
You'll notice
Useful1 Signal1
Artifact Publish

Artifact thumbnail description rewritten as a sentence#

The Artifact custom-thumbnail tool description was rewritten as its own sentence, with added path escaping

Details 0 0 Feedback
What

The tool description text explaining that sharing an Artifact can also upload a custom thumbnail image changed from a trailing clause tacked onto another sentence ("with a custom thumbnail X") to its own standalone sentence ("Also uploads a custom thumbnail, X."). Path values used with this feature are also now escaped and normalized.

Why

The added escaping and normalization of paths helps ensure thumbnail file paths are handled consistently and safely, regardless of how they were entered.

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
Cloud Sessions

Cloud folder-sync error messaging simplified#

Cloud folder-sync error messages simplified, dropping the explanation about folder sync being switched off

Details 0 0 Feedback
What

Several messages shown when a cloud session isn't picking up changes synced from a local folder have been reworded. They previously included a parenthetical explanation about 'its side of folder sync' being switched off; that explanation is now dropped in favor of plainer phrasing, such as stating that the cloud session never picked up anything synced from here and the session stops.

Why

The simpler wording is meant to be easier to understand for someone encountering a folder-sync problem, without getting into the internal mechanics of why sync failed.

Improved
Under the hood
Useful1 Signal1
Hooks

Hooks module error logging includes structured module label and error detail#

Hook failure logs now name the failing hook and show its error message

Details 0 0 Feedback
What

When a hook (a user-configured script that runs at a specific point, like before or after a tool call) fails, the error log now shows the hook's name and a rendered version of the error inline, instead of one generic combined message.

Why

This makes it much easier to tell which hook failed and why when troubleshooting hook errors in logs.

Improved
You'll notice
Useful1 Signal1
Permissions

Command-check permission prompt reworded#

The message for an incomplete project command check now explains it as a permission issue

Details 0 0 Feedback
What

When Claude Code can't finish checking a project's commands on your computer, the message shown has changed. It previously read as a generic truncation notice, and now explicitly explains the situation as a permission request instead.

Why

The reworded message should make it clearer to you that the command check is stuck waiting on a permission decision, rather than leaving you to guess that something was simply cut short.

Improved
You'll notice
Useful1 Signal1
Sandbox no docs found

AWS/GCP metadata SSRF blocklist extended#

Cloud metadata blocklist now also covers EC2's instance-data hostname

Details 0 0 Feedback
instance-data.ec2.internal
What

Claude Code maintains a list of hostnames used by cloud providers to serve instance metadata, which is blocked from being fetched as a security precaution. That list now also includes instance-data.ec2.internal, an Amazon EC2 metadata hostname.

Why

This closes a gap where a request to this EC2 metadata hostname might not have been blocked, reducing the risk of leaking cloud instance credentials or metadata through a fetched URL.

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 no docs found

New KeyMintRefusedError for API key creation failures#

A new error message appears when the server fails to create an API key without explanation

Details 0 0 Feedback
KeyMintRefusedError
What

Claude Code now has a dedicated error, KeyMintRefusedError, for when the server refuses to create an API key and doesn't give a readable reason. It shows the message: "The server did not create an API key and gave no readable reason. If this keeps happening, contact support."

Why

This gives a clearer, more specific message when API key creation silently fails, and points you toward contacting support if the problem persists instead of leaving you with an unexplained failure.

Improved
Under the hood
Useful1 Signal1
Elsewhere

claude-test explorer agent now also blocked from the app-launch MCP tool#

claude-test's explorer subagent is now also blocked from launching the app via its browser MCP tool

Details 0 0 Feedback
What

The built-in claude-test plugin's read-only explorer subagent (a helper agent meant only to look around, not make changes) is now also barred from using the claude_test_app_up tool, which launches the app under test. This is in addition to the existing block on claude_test_allow.

Why

This keeps the explorer subagent strictly read-only, preventing it from starting up the application, which is an action beyond simple exploration.

Improved
You'll notice
Useful1 Signal1
Terminal Rendering

Cell pixel size is re-probed on window focus and after paste#

Terminal cell pixel size is re-measured when the window regains focus and after pasting

Details 0 0 Feedback
What

Claude Code now re-asks the terminal for its cell size in pixels whenever the window regains focus, as long as something is still holding a fine-pointer reference, and also re-measures it after a paste. This keeps the cached cell-pixel dimensions from going stale.

Why

Cell size can change between focus events (for example if the terminal font or window size changed), so re-probing it keeps pointer-based interactions, like fine-pointer selection, accurately aligned with the terminal grid.

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
Telemetry

NO_PROXY-aware telemetry relay warning#

Startup logging now warns when a telemetry destination matches NO_PROXY and will bypass the egress proxy

Details 0 0 Feedback
NO_PROXY
What

When Claude Code starts up, it now checks each configured telemetry forwarding destination against the NO_PROXY environment variable. If the egress-boundary proxy mode is active and a destination's URL matches NO_PROXY, it logs a message noting that exports to that host will skip the proxy.

Why

This helps administrators notice when telemetry data is bypassing an intended network proxy, which matters for environments that route all outbound traffic through a controlled egress point.

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
File Tools

File-read attribution message punctuation changed from em dash to colon#

File-read source messages now use a colon instead of a dash, e.g. 'read from under X: in Y'

Details 0 0 Feedback
What

Messages that tell you where a file's content came from (of the form 'read from under X') now separate the location details with a colon instead of an em dash.

Why

This is a small formatting cleanup to these messages; it doesn't change what information is shown, only the punctuation used to present it.

49 entries

Bug Fixesopen

Fixed
You'll notice
Useful2 Signal2
Group of 2 Sandbox

Sandboxed commands get a fallback TMPDIR when needed but unset#

Sandboxed shell commands that reference TMPDIR but don't have it set now get a computed fallback value exported automatically

Details 0 0 Feedback
TMPDIR

What

When Claude Code builds a sandboxed shell command, if sandboxing is enabled and the command text references the literal string TMPDIR but no explicit sandbox tmp-dir override exists, it now computes a fallback tmp-dir value (called tmpDirBackstop) and passes it through when building the command.

That value is then used in the generated shell preamble: if tmpDirBackstop is set, the shell setup exports TMPDIR from it, but only if TMPDIR isn't already set in the environment.

Why

This prevents commands that rely on TMPDIR from breaking inside a sandbox where that variable might otherwise be unset, without overriding a TMPDIR the environment already provides.

Related

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

Fixed
You'll notice
Useful2 Signal2
Cloud Sessions

Headless cloud client validates repository-trust questions before forwarding to host#

The headless cloud client now checks repository-trust prompts before forwarding them to the host, dropping suspicious ones

Details 0 0 Feedback
What

When a permission request needs to be passed from a headless/cloud client through to the host machine, and that request involves a repository-trust question (whether a given tool call should be trusted for the current repository), the client now verifies the request more carefully before forwarding it. If the request's input doesn't exactly match the digest the host actually served, or it's unclear what's attached, the request is dropped and a warning is logged instead of being relayed.

Why

This prevents a repository-trust prompt from being forwarded to the host if it's been tampered with or doesn't correspond to what the host actually asked about, closing off a potential way to trick the trust check.

Fixed
You'll notice
Useful2 Signal2
Elsewhere

Null-byte injection in subprocess args/env now gets a specific diagnosis#

Subprocess launch failures from null bytes in args or environment now get a specific diagnosis

Details 0 0 Feedback
What

When Node.js rejects launching a subprocess with an ERR_INVALID_ARG_VALUE error, Claude Code's execFileNoThrow helper now figures out whether the cause was a null byte in the working directory, the executable path, a command-line argument, an environment variable name, or an environment variable value. For environment variables specifically, it also reports whether the offending variable came from the process's inherited environment.

Why

This turns a generic subprocess-launch failure into a specific, actionable diagnosis, making it much easier to track down what actually caused the failure.

Fixed
You'll notice
Useful2 Signal2
Internals

Hardened file-identity check for storage reads, using /proc/self/fd where available#

File-identity checks for storage reads now use /proc/self/fd on supporting systems, falling back to stat comparison

Details 0 0 Feedback
What

After opening a file for a storage read, Claude Code now verifies the file's identity by checking, where available, that /proc/self/fd/<fd> still points at the expected path and isn't marked '(deleted)'. On systems where /proc isn't readable, it falls back to comparing stat information (link count, inode, and device) instead, and logs a one-time notice when it has to use that fallback.

Why

This strengthens protection against a file being swapped out from under Claude Code between opening it and reading it, while still working on systems that lack a readable /proc.

Related

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

Fixed
You'll notice
Useful2 Signal2
Elsewhere

PDF page-extraction supports Windows long paths#

PDF page extraction now handles Windows file paths longer than 259 characters

Details 0 0 Feedback
What

When extracting pages from a PDF, the pdfinfo step and the logic that creates a scratch directory for converting pages to images now use Windows' namespaced-path handling to support paths longer than 259 characters. If a scratch directory can't be created at all, Claude Code now falls back to rendering the page images directly into the tool-results directory, with a warning.

Why

This prevents PDF page extraction from failing outright on Windows systems with long file paths, and keeps it working even when a temporary scratch directory can't be set up.

Fixed
You'll notice
Useful2 Signal2
Git Internals

Cross-filesystem (EXDEV) fallback for atomic sync-file writes#

Sync-file writes now fall back cleanly when the staging area is on a different filesystem than the destination

Details 0 0 Feedback
What

Claude Code's local git object/directory-sync layer writes files atomically (all-or-nothing) by first hardlinking them into a staging area on the same device. If that fails with an EXDEV error, meaning the staging area is on a different filesystem than the destination, it now falls back to a direct write instead of throwing an error.

Why

This keeps sync-file writes working reliably even when the staging area and the destination live on different filesystems, a situation that previously caused a hard failure.

Fixed
You'll notice
Useful2 Signal2
Elsewhere

Edit tool's \uXXXX-escape text search hardened with a length guard and clearer failure#

Edit tool's handling of \uXXXX text in search strings is hardened with a size check and clearer error

Details 0 0 Feedback
What

The Edit tool can treat a literal search string containing \uXXXX unicode escape sequences as if it were a regular expression. Before building that regular expression, Claude Code now estimates how long the resulting pattern would be and checks that the escape sequences are well-formed, instead of just testing length and regex validity generically. If this check fails, it now logs a specific message explaining that the \uXXXX-escape search was skipped because the regex engine refused a pattern of a given length, rather than silently returning nothing.

Why

This makes it clearer when and why an edit search involving unicode escapes didn't work, instead of the tool failing silently.

Fixed
You'll notice
Useful2 Signal2
Plugin Install

/plugin uninstall/removal flow now cleans up stray references across all settings scopes#

/plugin uninstall now cleans up leftover plugin references across every settings scope, not just one

Details 0 0 Feedback
/plugin
What

When removing a failed or disabled plugin through /plugin, Claude Code now loops over every settings scope and removes the plugin's id from each scope's enabledPlugins list, counting how many scopes it actually removed it from. Even if nothing was removed anywhere, it now checks whether to still show the message "Removed X from the list. It is not installed." The success message after uninstalling also now looks up and reports which plugin ids were affected by the cleanup.

Why

Previously, a plugin's id could stay listed as enabled in some settings scope even after being uninstalled elsewhere. This ensures removal is thorough across all scopes and gives clearer feedback about what was actually cleaned up.

Related

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

Fixed
You'll notice
Useful2 Signal2
Plugin Install

Marketplace declared-in-settings but unreadable/mismatched-name is now reconciled with a warning instead of silently failing#

Unreadable or mismatched marketplace declarations in settings now trigger a warning and cleanup instead of silent failure

Details 0 0 Feedback
What

If a plugin marketplace is declared in settings but Claude Code can't read its manifest at the declared location, or the manifest it finds there declares a different marketplace name than expected, Claude Code now removes the stale declaration and shows a one-time warning explaining the mismatch and what to do about it.

Why

Previously this situation failed silently; now the user is told specifically that a marketplace name couldn't be verified, so they can fix the settings instead of wondering why the marketplace isn't working.

Related

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

Fixed
You'll notice
Useful2 Signal1
Group of 3 File Sync

Cloud file-sync gains new failure/skip reasons for scratch space and bookkeeping commits#

Git/cloud sync now has dedicated handling and messages for scratch-directory failures and branches pointing at sync's own bookkeeping commits

Details 0 0 Feedback

What

  • The internal branch fast-forward routine used for git worktree/checkout advancement now allocates its temporary index copy through a managed scratch-directory allocator instead of writing a temp file directly beside the git directory, and fails with a new distinct result kind if the scratch directory can't be created.
  • Cloud-session commit sync messaging gained two new "parked" reasons: bookkeeping_in_range (certain commits are never made part of history, though the files themselves synced normally) and scratch_unavailable (file contents still synced even though Claude's cloud commits are in the session's history).
  • File-sync now refuses to apply an incoming branch whose history includes one of dir-sync's own internal bookkeeping commits, explaining that the branch points at sync's internal refs rather than real work.

Why

These changes make cloud/local sync failures easier to understand and less likely to corrupt history: users get a clear explanation when a scratch directory can't be allocated or when a branch accidentally references sync's own internal bookkeeping commits, instead of a confusing or silent failure.

Fixed
You'll notice
Useful2 Signal1
Group of 3 Device Binding

Device registration now retries and can force a re-learn on stale or revoked device rows#

Device binding/registration gained a re-learn path and automatic retry when the server no longer recognizes the current device

Details 0 0 Feedback

What

  • Device registration now accepts a relearn flag that skips the cached row and re-registers the device even when a cached deviceUUID already exists.
  • An HTTP 409 (or a specific error code) combined with a revoked_at timestamp is now treated as its own "already exists / relearn needed" condition, with a dedicated error class, instead of being treated as a generic revoked-key error.
  • The device-bind flow, which cryptographically binds a session to a device, now retries automatically: if the server refuses a signed create with a 404 against the currently-registered device, the client calls reregister() and retries the signed create once with the new device identity, instead of giving up unbound.
  • Session creation can also now ask the server for an "elevated" security tier when binding a device, controlled by a feature flag and an organization policy-enforcement check.

Why

These changes make device binding more resilient when a device's registration has expired, been revoked, or gone stale on the server, letting sessions recover automatically instead of falling back to a less-trusted, unbound state.

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 Signal2
Skills unclear

Prompt-shell command handoff now carries full tool options#

Permission checks for handed-off skill shell commands now always see the tool in the tool list

Unclear It is unclear what user-visible difference this makes, since the gate controlling this handoff path has no known configuration read.

Feature flag
tengu_iterative_falcon 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.277: on

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
What

Skills can include inline shell commands that Claude Code sometimes hands to the model to run explicitly instead of executing automatically. When that handoff happens, the permission check that decides whether the command is allowed now always runs with the tool included in the available tool options, adding it if it wasn't already present, rather than only sometimes including it.

Why

This makes the permission decision for handed-off shell commands more consistent, so the check isn't skipped or handled differently depending on whether the tool happened to already be in the list.

Fixed
You'll notice
Useful2 Signal1
Terminal Rendering

Ink layout listeners now isolated from thrown errors#

A crash in one terminal-layout listener no longer breaks layout for the rest of the interface

Details 0 0 Feedback
What

The engine that manages the terminal interface's layout now catches errors thrown by individual layout listeners instead of letting one failing listener crash layout for everything else. When a listener throws, Claude Code pauses all layout listeners until the current update finishes, logs a warning ("ink layout listener threw; layout listeners paused until this flush unwinds"), and caps how much debug logging it produces, noting once the cap is reached.

Why

This makes the terminal interface more resilient: a bug in one part of the layout system no longer takes down the whole display.

Related

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

Fixed
You'll notice
Useful2 Signal1
Headless Mode

Headless (-p) stream-json write failures now flush pending queued messages before reporting the error#

Headless mode no longer aborts mid-stream on a write failure, instead flushes queued messages first

Details 0 0 Feedback
What

In headless mode (-p, non-interactive), when writing to the stream-json output format fails, Claude Code no longer stops immediately in the middle of the output loop. Instead, it captures the error, keeps draining any messages still queued for output, and reports the failure only after the loop finishes naturally.

Why

This ensures that queued output messages aren't silently dropped just because one write failed, and the failure is still reported, just after any remaining output has been flushed.

Related

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

Fixed
Under the hood
Useful2 Signal1
Plugin Install

Bundled 'claude-test' plugin gains conflict detection and stale-data cleanup#

Built-in claude-test plugin now detects naming conflicts and cleans up its own stale data

Details 0 0 Feedback
What

The bundled claude-test plugin now cleans up old version folders and stale 'live' page directories left behind by earlier runs, removing ones older than a cutoff date. It also now detects when a separately loaded, differently-sourced plugin is also named claude-test and loads first, and reports an error in that case rather than silently conflicting with the built-in one.

Why

This keeps the plugin's own working data from accumulating unbounded stale files over time, and prevents confusing, silent conflicts when another plugin happens to share the claude-test name.

Related

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

Fixed
You'll notice
Useful2 Signal1
Transcript

Empty assistant text blocks now sanitized in replayed transcripts#

Empty assistant text blocks are now cleaned up when replaying or compacting conversation history

Details 0 0 Feedback
What

Claude Code now detects assistant messages that contain empty text blocks (a text content block whose text is an empty string) when replaying or compacting conversation history. It either drops these empty blocks, or, if one sits sandwiched between two tool-use blocks, replaces it with a placeholder marker showing [Empty text removed].

Why

Empty text blocks can fail Anthropic's API validation when a transcript is replayed or compacted, so removing or replacing them keeps history processing from breaking on messages that happen to contain one.

Related

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

Fixed
You'll notice
Useful2 Signal1
Hooks

Hook processes now killed if still running when spawn completes/aborts#

Hook command processes are now force-killed if still running when cleanup happens

Details 0 0 Feedback
What

When Claude Code runs a hook (a user-configured command that runs automatically at certain points, like before a tool call), the code that cleans up after that command now explicitly kills the underlying process if it is still marked as "running" at cleanup time, in addition to the cleanup step that already existed.

Why

This helps prevent hook command processes from being left running in the background after they should have finished or been aborted.

Fixed
You'll notice
Useful2 Signal1
Remote Machines

Bridge/serve API now handles "folder already served elsewhere" as a distinct 409#

Serving a folder that's already served elsewhere on the device now gives a clear error instead of a generic one

Details 0 0 Feedback
What

When registering a folder to be served (shared for remote access) fails because that same folder is already being served by another instance of Claude Code on the same device, the error is now recognized specifically and shown as a clear message telling the user to stop the other instance first, instead of falling through to a generic registration-failure message.

Why

This makes it obvious what actually went wrong and what to do about it, instead of leaving the user to guess at a generic error.

Related

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

Fixed
You'll notice
Useful2 Signal1
Transcript

Transcript loader now repairs stray string content instead of only dropping rows#

Transcript loader now repairs plain-string message content instead of dropping or ignoring it

Details 0 0 Feedback
What

When Claude Code loads or resumes a saved conversation transcript, a row where an assistant message's content is a plain (non-empty) text string, instead of the normal structured format, used to be either left alone or dropped entirely if malformed. Now that content is wrapped into a proper text block so it can be used normally. The cleanup log shown when loading or resuming a transcript now separately reports how many rows were cleaned, how many were wrapped, and how many were dropped.

Why

This recovers transcript rows that would previously have been silently discarded or left in an inconsistent format, reducing data loss when resuming past conversations.

Related

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

Fixed
You'll notice
Useful2 Signal1
File Sync

File-copy staging now detects a concurrent ctime change mid-copy and treats it as 'changed'#

File copying now detects if a file changes mid-copy and treats it as changed instead of copying stale data

Details 0 0 Feedback
What

When staging a file for copying, Claude Code now re-checks the file's change timestamp (ctime) immediately after opening it, comparing it against the time the current copy pass started. If the file changed during that window, the copy is short-circuited and treated as "changed" rather than proceeding to hash and copy what may now be stale or inconsistent data.

Why

This avoids a race condition where a file is modified while it's being copied, which could otherwise result in copying a corrupted or inconsistent version of the file.

Fixed
You'll notice
Useful2 Signal1
Updater

Update-check version responses are now validated as semver before use#

Update checks now validate that version strings from GCS, npm, Homebrew and the binary repo actually look like versions

Details 0 0 Feedback
What

When Claude Code checks for updates, it fetches a version string from sources like Google Cloud Storage (GCS), npm, and Homebrew. Previously it would trust whatever string came back; now it validates that the string is a properly formed version number (using semver, the standard versioning scheme) before using it. If the response is invalid, it's logged (truncated to 300 characters) and treated as no result rather than acted on. The same validation was added to the logic that compares a target version against the current one to decide whether to skip an update check.

  • GCS, npm-view, and Homebrew version fetches are now validated before use
  • The binary-repo version check now throws an error if the fetched value doesn't look like a version, instead of silently accepting it
Why

This prevents a malformed or unexpected response from a version-check endpoint from being mistaken for a real version and causing incorrect update behavior.

Related

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

Fixed
You'll notice
Useful2 Signal1
Artifact Publish

Relay now respects Retry-After on busy 503s instead of treating them as hard errors#

Busy 503 responses from the relay now trigger a retry after the server's suggested delay instead of failing outright

Details 0 0 Feedback
What

When a request to the artifact-frame relay gets back an HTTP 503 ("service busy") response, Claude Code now checks for a Retry-After header telling it how long to wait. If that header is present, the request is routed back through the relay with that delay applied, and a new telemetry event called relay_busy is logged. Previously, this kind of 503 was simply treated as a relay error and not retried.

Why

This lets Claude Code recover automatically from a temporarily busy relay instead of surfacing it as a hard failure.

Related

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

Fixed
You'll notice
Useful2 Signal1
Skills

Skill discovery now also checks the primary worktree when running from a linked git worktree#

Skill discovery now also checks the main worktree's .claude/skills folder when run from a linked git worktree

Details 0 0 Feedback
What

When Claude Code looks for available skills and commands and it's running inside a linked git worktree (a secondary working copy that shares history with a primary repository checkout), it now also checks the .claude/skills folder in the primary worktree if the current worktree doesn't have its own accessible one.

Why

Previously, skills defined only in a project's primary worktree could be invisible when working from a linked worktree. This change means skills set up for a project are found regardless of which worktree you're currently working in.

Fixed
You'll notice
Useful2 Signal1
Updater

winget/apk update checks now report npm lookup failures instead of failing silently#

Update checks on winget and apk installs now report failed lookups instead of failing silently

Details 0 0 Feedback
wingetapk
What

For Claude Code installed via winget (Windows) or apk (Alpine Linux), if the check for a newer version can't get a valid answer from the npm registry, Claude Code now prints "Could not check for updates (npm lookup failed or returned an invalid response)" along with manual upgrade instructions (winget upgrade Anthropic.ClaudeCode or apk upgrade claude-code). Previously this case produced no message at all.

Why

This means you'll know when an update check silently failed instead of assuming you're already on the latest version, and you're given the exact command to upgrade manually.

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
Group of 2 Plugin Install

Plugin errors now clear automatically when a plugin is toggled#

Enabling, disabling, or uninstalling a plugin now clears its stale errors instead of leaving them in the error list

Details 0 0 Feedback

What

The plugin/marketplace error store gained a new removeErrorsOf method that clears previously recorded errors matching a given plugin id, or a plugin name plus marketplace, without needing to reset the whole error list. The plugin settings UI now calls removeErrorsOf(ids) when a plugin is enabled, disabled, or uninstalled, before refreshing its state, so errors tied to that plugin are removed.

Why

Previously a plugin's old errors could linger in the UI after you fixed the problem by toggling the plugin; this ensures stale errors are cleared automatically instead of needing a manual reset.

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
Group of 4 Sessions

Turns now record a turnOrigin/initiator describing what started them#

User turns now carry a turnOrigin/initiator value recording what started them, such as a person versus a scheduled task, validated on resume

Details 0 0 Feedback

What

  • After a query result is built, the relevant user message is now stamped with a turnOrigin, computed from the message's origin, its isMeta flag, the wakeup source, the prompt source, and the host initiator, if it isn't already set.
  • A new optional initiator field records what started a turn, for example a desktop app's scheduled task or a sleep/auto-resume, versus a person, for usage attribution; it does not change how the turn runs. This is threaded through elsewhere as hostInitiator, in turn context and message equality checks.
  • When resuming a session, user messages now have their turnOrigin field validated against a known set of valid values and stripped if unrecognized, alongside the existing permissionMode sanitization.

Why

This lets Claude Code, and anyone reviewing usage, tell whether a turn was started by a person or by something automated like a scheduled task, without changing how the turn actually runs.

Fixed
You'll notice
Useful1 Signal1
Group of 2 Memory

Agent memory can be marked read-only and now refuses to load from symlinks#

Persistent agent memory can be set read-only for a session, and memory files are no longer read through symlinks or special files

Details 0 0 Feedback

What

  • The persistent memory system-prompt builder gained a readOnly option; when set, the prompt tells the model "This memory is read-only this session — you cannot save new memories to it" and omits the save/organize instructions and the memory type list entirely.
  • Reading an agent's memory file now checks that the entry point is a regular file, not a symlink or other special file, before reading it. If that check fails, the memory content is treated as empty and the session is told the memory is read-only for that turn, with instructions not to create or write files in its folder.

Why

This prevents memory files from being read through a symlink, which could otherwise be used to trick Claude into reading unintended files, and gives Claude Code a clear way to tell the model when it should not attempt to write new memories.

Fixed
You'll notice
Useful1 Signal1
Group of 2 Tool Validation

JSON unicode-repair pass now also leaves control-character escapes alone#

The tool-JSON double-escaped-unicode repair now skips control-character \u escapes too, and tracks them in telemetry as controlEscapeSkips

Details 0 0 Feedback

What

Claude Code has a routine that repairs double-escaped unicode characters in tool call JSON. It now additionally detects \u escapes representing control characters (the C0 and C1 ranges) and leaves those unrepaired, on top of the existing behavior of skipping Windows file paths.

This is tracked with a new counter, controlEscapeSkips, reported alongside the existing counts for repaired strings and Windows-path skips in the same telemetry event.

Why

Control characters encoded as \u escapes shouldn't be touched by the double-escape repair logic, since "fixing" them could corrupt otherwise-valid data; tracking how often this happens helps monitor the repair pass's behavior.

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

PDF page render (pdftoppm) hardened for Windows UNC paths and clearer errors#

PDF-to-image rendering now cleans up error messages, including Windows network path prefixes, and handles a new move-failure case

Details 0 0 Feedback
What

When Claude Code converts a PDF page to an image (using the pdftoppm tool, part of reading PDF files), it now cleans up the error text before showing it to you:

  • Temp-file paths embedded in the underlying tool's error output are replaced with the original filename, so errors reference the file you actually gave it
  • Windows extended-length and UNC path prefixes (\\?\UNC\, \\?\) are stripped out of error text
  • A distinct error is now reported if moving the rendered page images into the output folder fails
Why

This makes PDF rendering failures easier to understand, especially on Windows, where raw error text could otherwise show confusing internal path syntax instead of your file's name.

Fixed
You'll notice
Useful1 Signal1
Directory Sync

dir-sync clears stale round-skipped notices once a round succeeds#

Directory-sync now clears a 'changes were skipped' warning once a sync round succeeds again

Details 0 0 Feedback
What

When a directory-sync round is no longer being skipped, Claude Code now actively removes any previously shown 'round-skipped' notice from its list of one-time notifications shown to the user.

Why

Previously a warning saying a sync round's changes were skipped could keep showing even after syncing recovered. Now that stale warning is cleared once the round succeeds, so the message reflects the current state.

Fixed
Under the hood
Useful1 Signal1
Directory Sync

Directory-sync file pull supports a staging directory with EXDEV fallback#

Directory-sync file downloads can use a staging directory, falling back to direct writes across devices

Details 0 0 Feedback
What

The part of directory sync that writes incoming files can now optionally write them to a staging directory first. If that fails with a cross-device-link error (which happens when the staging directory and target are on different filesystems or drives), it retries once, writing the file directly instead.

Why

Staging writes first is generally safer, but this fallback makes sure directory sync still works correctly even when the staging and target locations are on different devices.

Fixed
Under the hood
Useful1 Signal1
Plugin Install

Plugin MCP-call staging: fixed input/output lane_path validation using a shared helper#

Fixed a bug where a plugin tool call's staged output-file validation could check the wrong file's path

Details 0 0 Feedback
What

Staged MCP tool calls (calls to a plugin-provided tool that stage input and output files) validate each file's lane_path. This validation was restructured into one shared helper used for both input and output files. Previously, the code checking output files could reference the wrong file's path when reporting or validating an error, instead of the specific entry actually being checked.

Why

This fixes a bug where an error about an invalid output file path could point at the wrong file, which would be confusing when trying to diagnose a staging problem.

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
Directory Sync

File-identity stamping now distinguishes directories and avoids confusing a file with the null device#

Directory sync now correctly stamps directories as directories and avoids mistaking files for the null device

Details 0 0 Feedback
What

The helper that stamps files for directory sync now explicitly detects when a path is actually a directory, and records it as directory instead of falling through to file-hashing logic meant for regular files. It also guards against a target being indistinguishable from the system's null device, and the warning message shown when stamping fails now mentions this case explicitly.

Why

This avoids directory sync mishandling directories as if they were regular files, and gives a clearer warning when a file genuinely can't be read or identified.

Fixed
You'll notice
Useful1 Signal1
Tool Results

permission_retry summary UI now shows raw content when no allowed commands exist#

Permission-retry status line now falls back to raw text when there are no allowed commands

Details 0 0 Feedback
What

The status line shown for a permission_retry used to always render as "Allowed <commands>". It now checks whether there are any allowed commands to list; if there aren't, it instead renders the retry's free-form content text, and if both the commands list and the content text are empty, it renders nothing at all.

Why

This prevents the status line from showing an empty or misleading "Allowed" message when a permission retry didn't actually involve any specific allowed commands.

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
Auth

OAuth API-key creation now sends a User-Agent header and handles 4xx refusals distinctly#

OAuth API key creation now sends a User-Agent header and reports outright refusals separately from other failures

Details 0 0 Feedback
What

When Claude Code mints an API key through OAuth (the login flow used to authorize the app), the request now includes a User-Agent header identifying the client. It also now tells apart two kinds of failure: a 4xx response that isn't already recognized as "you need to verify your account" now triggers a new oauth_api_key_refused telemetry event and a distinct error, instead of being lumped into the generic oauth_api_key_request_failed case.

Why

This makes it possible to tell, from telemetry, when the server actively refused to issue an API key rather than the request simply failing for some other reason, which should help diagnose account-setup problems.

Fixed
Under the hood
Useful1 Signal1
Artifact Publish

Artifact read guard: treat never-published artifacts as OK to proceed#

Artifact reads for never-published artifacts now proceed instead of failing when guarded

Details 0 0 Feedback
What

When Claude Code tries to read an artifact (a generated file such as a document or piece of code shown alongside the chat) and that read fails in a specific, recognized way while running under a client_guard route, it no longer treats this as a hard failure. Instead it logs an event called artifact_guard_autoread with the mode proceed_never_published, and lets the operation continue.

Why

An artifact that was never published yet can look like a failed read even though nothing is actually wrong. This change stops that specific case from blocking the flow unnecessarily.

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
Sessions

Session resume now discards detached/orphaned tool-call notifications#

Resuming a session now discards leftover notifications for tool calls outside the restored history

Details 0 0 Feedback
What

When Claude Code restores a session's file-reading state after resuming, it now calls a new step that finds any tool calls that fall outside the restored range of messages and removes any pending notification-queue entries that still reference them.

Why

This prevents stale or orphaned notifications from a previous, no-longer-relevant part of the conversation from lingering after a session is resumed.

Fixed
You'll notice
Useful1 Signal1
Directory Sync

'.ccr-seed' sync now refuses to push into its own reserved lane path#

File sync now refuses to push files into its own reserved .ccr-seed directory

Details 0 0 Feedback
What

A new guard rejects any file-sync push whose path is, or is inside, the .ccr-seed directory, which is reserved for sync's own internal use. This is checked when pushing a synced file, when re-fetching a seed, and when scanning for changed files, and a rejection is logged with the reason lane_path_reserved.

Why

This prevents file sync from accidentally overwriting or interfering with its own internal state, which could otherwise corrupt the sync mechanism itself.

Fixed
You'll notice
Useful1 Signal1
Terminal Rendering

Terminal renderer reprobes cell pixel size on SIGWINCH/resize#

Claude Code re-measures terminal cell pixel size whenever the terminal window is resized

Details 0 0 Feedback
What

When the terminal window is resized, including via the SIGWINCH signal (the standard Unix signal terminals send on resize), Claude Code now re-measures the pixel dimensions of a single terminal character cell, in addition to its existing resize handling and re-rendering.

Why

Knowing the current cell pixel size accurately matters for features like inline image display, which need to convert between character-cell and pixel measurements; re-measuring on resize keeps that conversion correct after the window changes size.

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
Terminal Rendering

Terminal control-character detection widened to catch image placeholders and unpaired surrogates#

Terminal rendering now also flags image placeholder characters and broken surrogate pairs as unsafe control characters

Details 0 0 Feedback
What

Claude Code checks rendered text for raw control characters (characters that don't print visibly but can affect terminal behavior) when they appear outside its own escape-sequence handling. This check now also catches two more cases: image placeholder characters, and unpaired surrogate halves (broken pieces of certain multi-part Unicode characters that should always come in pairs).

Why

Catching these additional cases helps prevent malformed or unexpected characters from corrupting terminal output or causing rendering glitches.

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
CCR

CCR client: ack timestamp now set for every event in a batch, not just one#

CCR client now stamps an acknowledgement timestamp on every event in a batch, not just one

Details 0 0 Feedback
What

When a batch of durable events is successfully sent to the server, the client that handles this (CCR) now loops through all events in the batch and stamps each one with ackedAtMs, the time it was acknowledged. Previously only a single event in the batch was stamped.

Why

This fixes a bug where only one event in a batch would be marked as acknowledged, even though the whole batch succeeded, which could have caused the other events to be treated as unacknowledged.

Fixed
Under the hood
Useful1 Signal1
Auth

Account switch now clears an additional provider cache and reorders cache invalidation#

Switching accounts now also clears a second cached-models store and adds another provider cache clear

Details 0 0 Feedback
What

When you switch accounts in Claude Code, it already cleared certain cached data. Now it also clears providerCache.validatedModels (moved to run earlier in the sequence, or duplicated there) and clears a second, previously-untouched cache.

Why

This helps ensure that stale cached data about validated models or providers from a previous account doesn't linger and affect behavior after you switch to a different account.

Fixed
You'll notice
Useful1 Signal1
Updater

Update staging directories now get a random suffix and are always cleaned up#

Update staging folders now get a random suffix and are always cleaned up afterward

Details 0 0 Feedback
What

When Claude Code downloads a native update (including during a force reinstall), the temporary staging folder it uses now includes a random 4-byte hex string in its name, in addition to the process id and timestamp it already used, to avoid name collisions. The staging folder is now also always removed afterward, whether the update succeeded or failed, with a warning logged if removal itself fails.

Why

This prevents leftover staging folders from update attempts, whether from naming collisions or from failed cleanup, from piling up on your machine.

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
Models

Fast-mode toggle behavior adjusted while a background auto-mode setup is in flight#

Fast mode's setting sync now behaves differently while a background auto-mode setup is still running

Details 0 0 Feedback
What

When background auto-mode setup is in progress, Fast mode's settings-sync logic no longer takes its usual early exit, and instead forces the Fast-mode toggle to apply only to the current session rather than being saved more broadly.

Why

This avoids Fast mode's setting sync racing with an in-progress auto-mode setup, keeping the toggle scoped to the current session until that setup finishes.

Fixed
Under the hood
Useful1 Signal1
Fleet

Duplicate-submit guard added to fleet dispatch and fleet reply (sameChunk)#

Fleet dispatch and fleet reply now guard against accidentally sending the same command or reply twice

Details 0 0 Feedback
What

Fleet's command dispatcher and reply composer now record a short-lived timestamp per query to detect duplicate sends. If a duplicate fire happens within the same event cycle or a short time window, it's silently dropped instead of being processed a second time.

Why

This prevents a command or reply in FleetView from being submitted twice due to rapid duplicate triggers, such as double clicks or overlapping event handlers.

Fixed
You'll notice
Useful1 Signal1
Updater

minimumVersion / requiredMaximumVersion / update target now semver-validated#

Version-enforcement settings and update targets are now checked for valid semver before being used

Details 0 0 Feedback
minimumVersionrequiredMaximumVersion
What

The code that decides whether the current build of Claude Code is blocked from updating now validates the version numbers it's working with. This applies to the update target itself, as well as to the minimumVersion and requiredMaximumVersion organization policy settings (minimumVersion keeps auto-updates from installing anything below a set version; requiredMaximumVersion refuses to start on a version newer than an organization allows). If any of these values isn't a properly formed version number, Claude Code now logs the raw value (truncated) and simply ignores that setting instead of trying to act on bad data.

Why

Previously, a malformed version string in one of these settings could have caused the version-enforcement logic to misbehave in unpredictable ways. Now a bad value is safely ignored and logged, so a typo in an organization's policy configuration won't silently break update or startup behavior.

Fixed
You'll notice
Useful1 Signal0
Artifact Publish

"Artifact" capitalization fixed in path-display UI#

UI text fix: 'new artifact from type' is now lowercase, and its file path is quoted

Details 0 0 Feedback
What

A small UI label shown when creating a new artifact from a file path now reads "→ new artifact from type" with a lowercase "artifact," instead of the previously capitalized "Artifact." The file path shown alongside it is now wrapped in quotes.

Why

This is a minor wording and formatting fix to make the on-screen label read more naturally and make the path easier to pick out visually.

Related

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

13 entries

In Developmentopen

In dev
Nothing to try yet
Useful3 Signal3
Group of 2 Directory Sync no docs found

New 'sync at attach' flow pulls a peer's files as soon as it joins a session#

When a peer joins a cloud/dir-sync session it can now pull the other side's files immediately, behind capability and account gating

Feature flag
tengu_violin_wood Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
tengu_violin_soundposttengu_violin_wood

What

When a peer attaches to a cloud or directory-sync session, Claude Code can now offer to sync files right away instead of waiting for the normal push/pull cycle:

  • If the peer advertises the sync_at_attach capability and a local check passes, the new flow calls the peer's attachOffer()/pullPoint() to pull the peer's files into the local session before the usual sync cycle runs.
  • The local check requires the account gate tengu_violin_soundpost and the broader remote-tools gate tengu_violin_wood to both be enabled.
  • The flow emits the telemetry event tengu_dir_sync_attach_offer and counters under ccr_dir_sync_attach.

Why

This lets a newly attached peer get an up-to-date copy of files sooner, rather than waiting for the regular sync cycle, while keeping the behavior behind capability negotiation and account gates so it only activates where supported and enabled.

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
Group of 2 Cloud Sessions no docs found unclear

Directory-sync state now tracks repository trust and locally-served tools#

Cloud session sync and directory-sync change detection now include repositoryTrust and localTools fields

Unclear The gate tengu_violin_bridgepin read off for this site's account and off for the anonymous baseline, with no reading yet taken under this release, so it's unclear whether or how it governs this behavior.

Feature flag
tengu_violin_bridgepin Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
repositoryTrustlocalTools

What

When a remote session attaches, the served-tools announcement now feeds a new localTools field, and a new repositoryTrust field is attached to the cloud-session-sync payload when the repository-trust feature is active. The directory-sync journal's change-detection logic was updated to compare both repositoryTrust and localTools (alongside the existing whileClosed field) using a new deep-equality helper, so changes to either are now detected. New status text such as "served by this machine" and "not serving this session" was added to describe trust/sync status to the user.

Why

This lets directory sync correctly notice and react when which tools are served locally or the repository's trust state changes, instead of only tracking whether syncing was paused.

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
CCR

New keepalive frames after Stop for remote (CCR) sessions, gated off by default#

Remote (CCR) sessions gain keepalive messages after a turn stops, currently off by default

Feature flag
tengu_ccr_keepalive_after_stop_enabled Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
CLAUDE_CODE_REMOTEtengu_ccr_keepalive_after_stop_enabled
What

For remote sessions (using Claude Code Remote, referred to internally as CCR), Claude Code now has a mechanism that sends periodic "keepalive" messages after a turn stops, as long as background tasks are still running (up to a limit). This only applies when the CLAUDE_CODE_REMOTE environment variable is set, and is controlled by a setting called tengu_ccr_keepalive_after_stop_enabled. When a keepalive session ends, it logs an event recording why it stopped, how many keepalive messages were sent, and how long it was active.

Why

Keepalive messages help keep a remote connection alive while background work continues after you've stopped a turn. The setting controlling this, tengu_ccr_keepalive_after_stop_enabled, was found off both for this site's account and for the general baseline, and no reading has been taken yet under this release.

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

New CLI session CRUD gate for CCR v2 wired into MCP client bootstrap#

A new gated flag controls session create/read/update/delete support for CCR v2 in the CLI's MCP bootstrap

Unclear What CCR v2 session CRUD actually changes for the user is not described in this finding.

Feature flag
tengu_ccr_v2_session_crud_cli Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
ccrV2SessionCrudEnabledtengu_ccr_v2_session_crud_cli
What

The MCP (Model Context Protocol) client bridge's periodic status-announce call now includes a new flag, ccrV2SessionCrudEnabled, read from a setting called tengu_ccr_v2_session_crud_cli. This flag is forwarded downstream under the same name.

Why

This wires up a gate that controls session create/read/update/delete behavior for a system referred to as CCR v2, but does not itself describe what that behavior changes.

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
Directory Sync no docs found unclear

New attach-sync safety check for directory sync (git worker), gated by tengu_violin_soundpost#

Directory sync gains a pre-attach safety check to verify a checkout can attach cleanly, behind a new gate

Unclear No reading of the tengu_violin_soundpost gate has been taken, so whether it is active is unknown.

Details 0 0 Feedback
tengu_violin_soundpost
What

The directory-sync git worker now has an attachSyncEnabled check that determines whether attaching to an existing remote or local checkout would succeed cleanly, before doing so. It returns one of several states: "unanswered", "switched_off", "commit_not_held", "other_branch", "lines_up", or "not_in_history". A companion function proactively re-triggers this check while sync is in a "listening" state.

Why

This is meant to catch cases where a directory-sync checkout can't cleanly attach to the expected commit or branch before problems occur, rather than after. This behavior is controlled by a setting called tengu_violin_soundpost.

In dev
Nothing to try yet
Useful2 Signal3
Prompt Suggestions no docs found

Dormant prompt-suggestion "plugin owns" opt-out path added but inert#

New but currently inert opt-out path lets a plugin skip Claude Code's inline prompt suggestions

Details 0 0 Feedback
plugin_owns
What

Claude Code's inline prompt-suggestion feature now checks a new condition before generating a suggestion, and if it holds together with an existing agent-context check, skips the suggestion entirely and logs plugin_owns. As shipped, though, the new condition always evaluates to false, so this skip path can't currently trigger.

Why

This lays groundwork for a plugin to take ownership of prompt suggestions and opt out of Claude Code's own inline suggestions, but the path is not yet reachable in this build.

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
Terminal Rendering no docs found

New terminal-title-suppression gate for SDK-CLI entrypoint#

Terminal title can now be suppressed for the SDK-CLI entrypoint, behind a new flag

Feature flag
tengu_quizzical_thimble 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.277: on

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
CLAUDE_CODE_ENTRYPOINTtengu_quizzical_thimble
What

Claude Code has logic that decides whether to hide the change to your terminal window's title. It now also suppresses the title when Claude Code is launched with CLAUDE_CODE_ENTRYPOINT set to sdk-cli, but only if neither CLAUDE_AGENT_SDK_VERSION nor CLAUDE_CODE_REMOTE_SESSION_ID is set. This is controlled by a new gate, tengu_quizzical_thimble.

Why

This keeps the terminal title from changing unexpectedly when Claude Code is invoked through this specific SDK-CLI path without the environment markers that would normally indicate an SDK or remote session.

In dev
Nothing to try yet
Useful2 Signal3
Cloud Sessions no docs found unclear

Repository-trust question gated behind tengu_violin_bridgepin#

Headless cloud client now restricts a repository-trust permission request to a single-hash format before forwarding it

Unclear The gate tengu_violin_bridgepin controlling this was read as off for both this site's account and the anonymous baseline, with no reading yet taken under this release.

Feature flag
tengu_violin_bridgepin Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
tengu_violin_bridgepin
What

In the headless cloud client, a permission request tied to repository trust is now only passed on to the host if it names exactly one input (a content digest hash) plus a short description. If the request doesn't match that exact shape, it is blocked and a warning is logged instead of being forwarded.

Why

This is a tightening of what counts as a valid repository-trust request, closing off requests that try to attach anything other than the expected digest before they reach the host.

In dev
Nothing to try yet
Useful2 Signal3
Policy Limits unclear

Policy-limits client lazily composed at startup, behind an unresolved gate F()#

Policy limits client for the agents view is now lazily loaded at startup behind an internal gate

Unclear What the internal gate condition and catalogDecision setting actually control is not established by the evidence.

Details 0 0 Feedback
What

A new startup routine checks a catalog decision setting, and if it isn't already set, dynamically loads a policy-limits client module for the agents view. It only actually composes the client when an internal condition is true and a storageV5 option is present; failures are caught and logged as a warning rather than crashing. It always waits for a "cold start" step to finish before continuing.

Why

This defers loading policy-limits code until it's needed and guards startup against failures in that composition step, so a problem there produces a warning instead of breaking the agents view.

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 Signal3
Feature Gates no docs found unclear

New tengu_violin_bridgepin gate, off by default#

New tengu_violin_bridgepin gate controls an unspecified bridging behavior

Unclear What the bridging behavior actually does is not stated in the finding. No reading of this gate has been taken under this release yet, so its current status here is unknown.

Feature flag
tengu_violin_bridgepin Off in both readings

The flag server returned off for the account this site reads and for the anonymous baseline. A reading of off cannot rule out a rollout these two readings sit outside of.

This account: off · anonymous baseline: off · compiled default in v2.1.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
tengu_violin_bridgepin
What

A new remote-configuration gate called tengu_violin_bridgepin was added. It's checked with a fallback of off, and combined with another condition before enabling some bridging behavior.

Why

The finding does not describe what the bridging behavior does, only that it exists behind this new gate.

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
Remote Machines no docs found unclear

Remote-tools serving stubbed out with 'external_build' reason in this bundle#

Remote-tools serving now always reports 'external_build' as unavailable in this bundle

Unclear The finding doesn't say what 'external_build' means in context or whether this is a temporary state during development.

Details 0 0 Feedback
external_build
What

The function responsible for populating the list of served remote tools (part of the device-bridge feature that connects tools across devices) now always returns servedToolsUnavailable: "external_build", no matter what's passed to it. Its signature also expanded from three parameters to five, though the two new parameters aren't currently used.

Why

In this build, remote tools served through this path are unconditionally reported as unavailable because of being an external build, rather than based on any actual check. This looks like scaffolding for a feature that isn't wired up yet in this bundle.

Related

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

197 entries

Internal Changesopen

·Internal
Under the hood
Useful3 Signal3
Group of 2 Rate Limits unclear

Rate-limit and usage-meter entries now always include severity and is_active#

Usage and rate-limit data from the server now always states each entry's severity and whether it is currently active

Unclear How severity and is_active are used or surfaced to the user isn't stated in the finding.

Details 0 0 Feedback
severityis_active

What

  • The rate-limits API response schema gained two new fields on each limit entry: severity and is_active, alongside the existing group, percent, resets_at, and scope fields.
  • A related status-meter schema, used for usage/limit meters more broadly, changed severity and is_active from optional and nullable fields to required ones, with an updated description clarifying that every row's severity and active status comes from the server, not something a client computes itself.

Why

This ensures any client displaying usage or rate-limit information always gets a definitive severity level and active/inactive status straight from the server, instead of having to infer it or handle missing values.

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 Signal3
Group of 2 Background Tasks unclear

Tools now declare whether their calls can run in the background#

Every built-in tool now has a backgrounding field (never, self, or detach) controlling whether it can move to the background mid-run

Unclear The finding doesn't say what "self" backgrounding means in practice or which tool uses it.

Details 0 0 Feedback
backgrounding

What

Tool definitions now carry a backgrounding field that controls whether a call to that tool can be moved to the background while it's still running, rather than blocking the conversation until it finishes. The possible values are "never", "self", and "detach".

A helper resolves the effective value, applying the default when a tool doesn't specify one.

Why

This gives Claude Code a consistent, explicit way to know which tool calls are safe to move to the background and which must always block, which matters for features that let long-running tool calls detach without disrupting tools that shouldn't be interrupted or backgrounded.

·Internal
Under the hood
Useful3 Signal3
Background Tasks unclear

New tool backgrounding field controls detach/self/never execution mode#

Tools gain a backgrounding setting controlling whether they can keep running in the background

Unclear The finding does not say which tools are actually marked as detach-capable versus self or never, or when background results become visible to the user.

Details 0 0 Feedback
backgrounding
What

Many built-in tools — including WebFetch, WebSearch, Bash, Task, PowerShell, MCP (Model Context Protocol) tools, and various read-only lookup tools — now carry a backgrounding property set to one of three values: "detach", "self", or "never". Tools without a value default to "never". A new internal check looks at whether a tool's backgrounding is "detach" to decide if that tool call is allowed to keep running in the background, with its result delivered later through a separate message once it finishes.

Why

This lays the groundwork for certain tools to run in the background instead of blocking the conversation while they complete, letting Claude Code (and the user) continue working while a long-running tool call finishes elsewhere.

·Internal
Under the hood
Useful2 Signal3
Remote Control no docs found

New onCancelAsyncMessage callback threaded through Remote Control bridge session setup#

Remote Control session setup now threads through a new callback for cancelling a queued message

Details 0 0 Feedback
onCancelAsyncMessage
What

The setup code for Remote Control bridge sessions (used to connect Claude Code to remote clients like a mobile app) now accepts and passes along a new onCancelAsyncMessage callback, alongside its existing handlers for things like interrupting or stopping a task.

Why

This is plumbing to support cancelling a specific queued message from a remote client mid-session, rather than only being able to interrupt an entire turn.

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
Tool Schema no docs found unclear

Deferred tool description loading#

Tool descriptions can now be marked as deferred and built through a new describe-hooks step

Unclear It isn't clear which tools use deferred descriptions or what a user would observe differently as a result.

Details 0 0 Feedback
withoutToolDescribeHooks
What

When Claude Code builds a tool's schema and description, a tool can now be marked as having a "deferred" description. Deferred tools now run through a new describe-hooks step during setup, unless a withoutToolDescribeHooks option is set to skip it, and Claude Code records whether the deferred flag actually changed.

Why

This adds a mechanism for building certain tool descriptions later rather than upfront, though the finding doesn't specify which tools use it or what practical difference a reader would notice.

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
Models unclear

Model catalog version bump and per-surface model reassignment#

Bundled model catalog updated to version 629 with model reassignments across ccr, ccd, and other surfaces

Unclear The finding does not specify which surfaces ended up on which of the three models after this swap.

Details 0 0 Feedback
claude-fable-5-1claude-sonnet-5claude-opus-5
What

The bundled model catalog that Claude Code ships with was updated from version 554 to version 629, with a new issue and expiry window. Several catalog surfaces, including ccr and ccd, had the model assigned to their existing slot swapped between claude-fable-5-1, claude-sonnet-5, and claude-opus-5.

Why

This changes which model a given surface falls back to when using the bundled catalog, continuing the same kind of reassignment seen in earlier catalog updates for ccr and ccd.

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
Feature Gates no docs found

claude.ai plugin/skill sync flags renamed#

Flags controlling claude.ai plugin and skill sync were renamed to claudeai-scoped names

Feature flag
tengu_claudeai_plugins_sync_enabled Gate removed from the code

This release deleted the gate from the code while it was still reading on for the account this site reads, so the code path no longer asks a flag before running.

This account: on · anonymous baseline: on · compiled default in v2.1.277: not a boolean we can read

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

tengu_claudeai_skills_sync_enabled Gate removed from the code

This release deleted the gate from the code while it was still reading on for the account this site reads, so the code path no longer asks a flag before running.

This account: on · anonymous baseline: on · compiled default in v2.1.277: not a boolean we can read

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
tengu_claudeai_plugins_sync_enabledtengu_claudeai_skills_sync_enabled
What

The feature flags that control whether plugins and skills sync from claude.ai were renamed, moving from account-scoped names to claudeai-scoped names such as tengu_claudeai_plugins_sync_enabled and tengu_claudeai_skills_sync_enabled.

Why

This is an internal rename rather than a behavior change for users; the underlying sync functionality is unaffected.

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
Directory Sync

Directory-sync git worker gains an 'attached machine' / standing-journal mode#

Directory sync's git worker gains an 'attached machine' mode with standing journals and new detach reasons

Details 0 0 Feedback
What

The git-based directory-sync worker gained a substantial new code path around live syncing to a remote machine:

  • journals (its sync records) can now be "standing" as well as the previous "note"-based kind
  • checkouts can be "attached" to a live remote machine, tracked with a new attached flag and a bookkeepingOnBranch state
  • a new detach flow ends sync for specific reasons, such as branch_switched or machine_stopped, instead of only the previous generic "ended" flow
  • new fields foldedInstall, readsStanding, and a keepCheckoutPath marker (with a companion .offered file) track this state, letting an existing checkout be recognized as already attached instead of always redoing the initial setup
Why

This lets directory sync track and recover a live connection to a remote machine more precisely, distinguishing why a sync session ended and avoiding unnecessary rework when a checkout is already properly set up.

·Internal
Under the hood
Useful2 Signal2
Group of 4 Plugin UI

Plugin UI rendering adds an Image element alongside Raster#

Plugin UI components can now draw and target an Image element, not just the existing Raster/cell-based canvas

Details 0 0 Feedback

What

  • The rendering diff/restamp pipeline now handles a new Image element type alongside the existing Raster, with matching stamp/seen-key/refusal logic and an error when a render hook returns an image it didn't draw.
  • The Image render-props validator now accepts an optional key prop, which must be a non-empty string when present, and for images without columns/rows or a resolvable source, it requires the image to be "stamped by a plugin of this chain," otherwise reporting Image "<key>" is not stamped by a plugin of this chain.
  • The raster/paint tool's input can now target an Image source directly, using { requestId, key, source }, in addition to the existing cell-data form { requestId, key, cells }.
  • ui.blit change detection now also treats a change in whether a source field is present or absent as meaningful, and its description now mentions "the Raster or Image being blitted" instead of just the Raster.

Why

This lets plugins draw with a full image source rather than only an encoded grid of cells, while keeping the same ownership and stamping checks that stop one plugin from tampering with another plugin's drawing.

·Internal
Under the hood
Useful2 Signal2
Group of 2 Directory Sync

Cloud file sync gains a lightweight 'standing' status message#

The cloud/local file-sync protocol has a new lightweight 'standing' status distinct from a full sync report

Details 0 0 Feedback

What

The git-based cloud/local file-sync protocol gained a new, lightweight journal message kind called standing, decoded by a new function separate from the full worker note/report. When a standing message is present, the client updates its local record from it and returns a new outcome code, peer_standing, instead of the usual outcomes like nothing_new or applied. This new peer_standing value was also added to the retry-outcome switch and related status enum, alongside existing states such as no_journal, yielded, upload_only, and refused.

Why

This gives the sync protocol a cheap way to report a peer's status without sending a full sync report, which should make routine status checks lighter weight.

·Internal
Under the hood
Useful2 Signal2
Group of 2 Remote Control

In-flight and queued commands, including inbound bridge messages, can now be cancelled#

Commands and remote messages that are still being processed can now be cancelled before they finish

Details 0 0 Feedback

What

  • Inbound messages coming through the remote-control bridge are now wrapped in a disposable 'ingest' handle that can be withdrawn while the message is still being processed, for example before its attachments are fully downloaded. If withdrawn, the message's lifecycle is reported as cancelled instead of completed.
  • A new internal cancellation path can cancel an in-flight or queued command by its id: it can mark an in-flight command's cancellation as pending, remove matching commands still waiting in the queue, or withdraw an inbound bridge message that hasn't finished arriving, then reports the result as cancelled.

Why

This lets a command or a message sent through the remote bridge be called off before Claude Code finishes acting on it, instead of forcing a wait until it completes.

·Internal
Under the hood
Useful2 Signal2
Group of 3 Plugin Hooks no docs found

Model calls now resolve prompt.attachment hooks, with a new settingsHooksOff option to disable hooks#

Before each model call, Claude Code now resolves any prompt.attachment hook automatically, unless the new settingsHooksOff option turns hooks off

Details 0 0 Feedback
prompt.attachment

What

  • Every model call now passes through a new wrapper that checks whether a prompt.attachment hook (code a plugin can use to modify text attached to a message) is active, and if so runs resolveAttachments on the outgoing messages first.
  • A new settingsHooksOff option can be set on a session or subagent to fully disable hooks, similar to how isolated agent contexts already skip them. It's checked throughout isolation and hook-invocation logic, including permission checks, and it also disables the new attachment-hook resolution step.

Why This makes sure a prompt.attachment hook reliably runs before every model call, while giving Claude Code a clean way to run a session or subagent with hooks turned off entirely when that's needed.

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 Elsewhere unclear

Session resume now tracks transcript lineages, a rewound flag, and class-filtered message keys#

Resuming a session keeps richer bookkeeping about which messages are kept, their lineage, and whether the session was rewound

Unclear The finding does not say what user-visible effect this added tracking has, only that the data structure carries more fields.

Details 0 0 Feedback

What

  • The structure that tracks which retained or forked messages ('keys') belong to a session now also carries transcriptLineages and a keysWithClass subset (messages meeting a class predicate), plus a rewound flag, where before it only tracked a plain list of keys.
  • The session-resume helpers now build these richer objects from a shared empty-state constructor.
  • Resume logic no longer just scans for the first turn not already held; it now classifies turns as 'fresh' or 'withClass' and picks the resume point using that classification.

Why

This gives Claude Code more precise bookkeeping when resuming a session, including whether the session was rewound and which messages match particular criteria, so resume picks up from the right point more reliably.

·Internal
Under the hood
Useful3 Signal2
Remote Control no docs found

Remote bridge gains an onCancelAsyncMessage RPC handler#

Remote clients can now cancel a queued background message instead of only interrupting an active turn

Details 0 0 Feedback
onCancelAsyncMessage
What

The remote-bridge transport, which lets a remote client control a Claude Code session, gained a new onCancelAsyncMessage handler. It lets a remote client cancel a message it previously sent asynchronously (in the background) by removing it from the queue by its ID, or by withdrawing it before it's processed.

Why

Before this, a remote client could interrupt an active turn but had no way to take back a background message it had already queued. Now it can cancel a queued message directly.

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
Prompt Queue

Prompt queue gains explicit withdrawal tracking and delivery class tracking#

Claude Code now tracks whether queued prompts have been withdrawn and what delivery class they used

Details 0 0 Feedback
What

The internal system that tracks queued prompts and commands now keeps an explicit record of whether each queued item has been withdrawn, using a lookup keyed by item id along with helper functions to register and check-and-withdraw entries. The delivery-recording logic also now tracks which items were held alongside a delivery class, and tracks lineages it has already seen.

Why

This is internal bookkeeping for how queued prompts move through the system; it isn't described as changing what a user sees, but it should make the queue's withdrawal and delivery state more reliable to track.

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
Plugin Install

Plugin install supports a preview download path with randomized temp filename#

Plugin preview downloads now use a randomized temp filename and are left in place instead of being installed

Details 0 0 Feedback
What

When Claude Code downloads a plugin archive from a URL with a preview flag set, it now writes the download to a temp file named <name>.preview-<random-hex>.part, instead of the normal temp filename. Unlike a regular download, this preview file is left where it is rather than being moved into the plugin cache.

Why

This lets Claude Code download a plugin for preview purposes without actually installing it, keeping the preview file separate from a normal installed plugin.

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
Terminal Rendering unclear

Attachment rendering can now rewrite or drop transcript entries via ELr lookup#

Transcript rendering can now drop or rewrite individual entries based on a per-entry lookup

Unclear What determines whether an entry is marked left-out or rewritten, and what triggers the bypass flag, isn't stated in the finding.

Details 0 0 Feedback
What

A new function wraps the part of Claude Code that turns an attachment into a displayed transcript message. It checks a per-entry lookup to see if that attachment's rendering has been marked "left-out" or "rewritten":

  • If marked "left-out", nothing is rendered for it, unless a bypass flag is set
  • If marked "rewritten", the rendered text is replaced using a new helper
Why

This gives Claude Code a way to suppress or alter how specific transcript entries are displayed, rather than always rendering an attachment as-is.

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
Terminal Rendering unclear

Prompt/turn queue rendering gets a new 'humanTurn prompt' redaction path#

Queued prompts shown in 'prompt' mode now get a redaction pass applied before display

Unclear What content the redaction function removes or hides isn't stated in the finding.

Details 0 0 Feedback
What

When building the transcript, Claude Code now detects a specific case: a queued command attachment in a human turn's "prompt" display mode that isn't a meta entry and meets a couple of internal conditions plus a gate. When this case is detected, the message content for the relevant non-meta rendered entries is passed through a new redaction function before being added to the displayed transcript.

Why

This suggests certain queued-command content shown in prompt mode is now filtered or redacted before being displayed, though the finding doesn't say what specifically gets redacted.

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
Settings

Settings alias handling gains an explicit 'unset via null' mode#

Setting a renamed settings key's old alias to null can now explicitly reset it instead of just being dropped

Details 0 0 Feedback
What

Some settings keys have both a current name and an older alias. Previously, setting the alias to null had one behavior. Now, when a special mode called loneNullAlias === 'rename' applies and the current (canonical) key has no value set, setting the alias to null is treated as an explicit reset: Claude Code writes null onto the canonical key before removing the alias. In other cases, the alias is just dropped as before.

Why

This lets a null on an old setting name still express 'clear this setting' after it has been renamed, instead of that intent getting lost.

·Internal
Under the hood
Useful2 Signal2
Directory Sync

New sync-journal 'reason' enum for why a remote/local git hold state changed#

Sync journal for git 'hold' state now records a specific reason code for each change

Details 0 0 Feedback
What

Claude Code's sync journal, which tracks why a remote or local git repository is put on 'hold' (paused from syncing), now uses a fixed set of reason codes: commit_not_held, not_in_history, other_branch, switched_off, diverged, branch_switched, and machine_stopped. A new check function detects start-failed or detached states, and any reason that doesn't match the known set is recorded as other.

Why

This gives a consistent, structured record of why sync was held at any given point, rather than a loosely defined reason.

·Internal
Under the hood
Useful2 Signal2
Elsewhere

Attribution tracking gains multi-root support#

Code-attribution tracking now supports multiple project roots

Details 0 0 Feedback
What

The attribution tracker that records how much of each file's content came from Claude versus a human (used for the code-attribution report) now records an optional root alongside each file's content hash, Claude-contribution data, and modification time. The key used to look up a file's attribution state is now computed relative to a resolved root, instead of using a flat path-based key as before.

Why

This lets attribution tracking correctly handle files across multiple project roots, rather than assuming everything lives under a single root.

·Internal
Under the hood
Useful2 Signal2
Elsewhere

FileHistory backup restore returns structured outcomes instead of throwing#

File-history backup restore now reports structured failure reasons instead of crashing

Details 0 0 Feedback
What

When Claude Code restores a backup file during a rewind or checkpoint, the restore step now returns a structured result describing what happened, instead of throwing an error. The result says whether the restore failed, was already present, or was migrated, and, on failure, at which stage it failed: a bad backup source, or a problem at the source, link, copy, or rename step.

Rename failures now log a clearer explanation of the likely cause, such as a scanner or sync tool still holding the newly written file, or a mount that allows creating files but not renaming them.

Why

This makes backup-restore failures easier to diagnose instead of surfacing as a generic crash, and it explains real-world causes like antivirus scanners or cloud-sync tools interfering with file operations.

·Internal
Under the hood
Useful2 Signal2
Turn Handling no docs found unclear

New per-turn wait for staged files before handoff (tengu_turn_handoff_staged_files_wait)#

Claude Code now waits for in-flight staged file operations to settle before handing off a turn

Unclear Nothing has been read yet about whether the tengu_turn_handoff_staged_files_wait gate is on or off for any account.

Details 0 0 Feedback
tengu_turn_handoff_staged_files_wait
What

Claude Code now tracks staged file operations that are still in progress, and before handing off control at the end of a turn, it waits (up to a timeout) for those operations to finish. It records an event, tengu_turn_handoff_staged_files_wait, with the outcome, how long it waited, and how many operations were still pending, and logs a warning if the wait times out.

Why

This is meant to avoid a turn handing off while file staging is still mid-flight, though it isn't yet known whether this behavior is active for any given user.

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
CCR

CCR auth-token refresh now accepts 'gateway placeholder' session tokens, not just JWTs#

CCR auth-token refresh now also accepts a non-JWT 'gateway placeholder' session token

Details 0 0 Feedback
What

When Claude Code Remote refreshes its authentication token, the session token it receives can now be one of three things: a decodable JWT (checked as before for expiry and staleness), a non-JWT "gateway placeholder" token that must match either the token currently held in the process or a previously verified JWT, or a token that gets rejected outright. When a placeholder token is adopted, it's logged in the cli_worker_auth_refresh_adopted event with a new session_token field describing which of these cases matched.

Why

This lets remote authentication refresh handle a wider range of valid session token formats without weakening the checks that reject tokens that don't match anything trusted.

·Internal
Under the hood
Useful2 Signal2
Directory Sync

Cloud/remote directory-sync 'empty git start' now distinguishes detached vs attached sessions and checks reflog#

Cloud directory-sync's initial-checkout logic now distinguishes detached from attached sessions and checks the reflog

Details 0 0 Feedback
What

The logic that determines the starting state of a git checkout when syncing a sandbox or cloud checkout now explicitly tracks whether the branch is detached (has no branch name), and records this along with an origin value in its telemetry. It also now checks for matching refs under both the existing turns-ref prefix and a new second ref prefix, and checks whether a HEAD reflog exists, before deciding whether a checkout should be treated as 'unborn' (no commits yet) or 'committed'.

Why

This makes the sync system's judgment about a fresh checkout's state more accurate, covering detached-branch sessions and an additional ref location that weren't distinguished before.

·Internal
Under the hood
Useful2 Signal2
MCP

SDK bridge re-announce now also reacts to MCP command-list changes#

SDK bridge now re-announces its init state when the list of MCP commands changes, not just model or permission settings

Details 0 0 Feedback
What

The function that decides whether the SDK needs to re-send its 'system/init' bridge announcement now also factors in the sorted list of non-terminal MCP command names, in addition to the model, permission mode, fast-mode, and effort settings it already checked.

Why

This means that if the set of available MCP commands changes during a session, SDK-connected clients are now notified via a fresh announcement, keeping their view of available commands in sync.

·Internal
Under the hood
Useful2 Signal2
API Client unclear

API client builder gains a permissionContext parameter and querySource default#

The internal API client builder gained a permissionContext parameter and a querySource setting

Unclear What permissionContext and querySource actually affect in the client's behavior is not described in this finding.

Details 0 0 Feedback
What

The internal function that builds the Anthropic API client, handling headers, authentication, and provider routing for Bedrock, Vertex, Foundry, gateway, and similar setups, now accepts a new querySource parameter, which defaults to the existing source value, and a new permissionContext parameter. Some existing fields were also renamed to agentContext, credentials, and storageV5.

Why

This finding shows the API client builder gaining new inputs but does not describe what they change in the client's behavior.

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

Conversation-construction pass gains a queued-item flush step before reminder bookkeeping#

Conversation rebuilding now flushes a queued-item buffer before its reminder bookkeeping, and does so more often

Details 0 0 Feedback
What

The function that reconstructs the message list sent to the model, folding in reminders, truncation notices, and tool-result repairs, now maintains a queue of pending items and a flush step that merges them into the last user message, or adds a new one if needed, before its existing reminder-handling logic runs. This flush now runs at more points in the process, including around system, user, and assistant messages, than the previous reminder-clearing step did.

Why

This changes how and when queued conversation items get folded into the message history sent to the model, running the merge more consistently across message types.

·Internal
Under the hood
Useful2 Signal2
Tool Validation

Tool dispatch gains a 'detached' result path, and hook-output-mismatch errors now carry reason codes#

Tool results get a new 'detached' stop path, and hook output errors now carry machine-readable reason codes

Details 0 0 Feedback
What

Tool result handling now checks for a detached flag; when set, it shows a distinct message and stops early, sometimes reporting 'Execution stopped by hook' if a hook triggered it. Separately, when a PostToolUse hook's updatedToolOutput (a hook's replacement for a tool's result) fails validation or mapping, the error message now includes a machine-readable reason code — schema_invalid issues=..., mapper_undefined, or mapper_throw — alongside the existing human-readable message.

Why

The reason codes make it easier to diagnose exactly why a hook's tool-output rewrite was rejected, rather than only seeing a generic failure message. The detached path gives tool execution a distinct, clearly-labeled way to stop when a hook halts it.

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
Hooks

Hook execution supports an injected sandbox/exec wrapper#

Hook commands can now optionally be run through a sandboxed execution wrapper before they start

Details 0 0 Feedback
What

The internal function that runs hook commands now accepts an extra parameter that can optionally acquire a sandboxed executable resource before starting the hook process. If that sandboxed resource can't be obtained, the hook is now treated as having failed to spawn, rather than running normally.

Why

This lets hook commands be run inside a sandbox when needed, and ensures that if the sandbox can't be set up, the hook fails safely instead of running outside the sandbox unexpectedly.

·Internal
Under the hood
Useful2 Signal2
Turn Handling

Turn duration now accounts for detached/background tool calls separately#

Turn-duration tracking now holds off recording while a detached background tool call is still pending

Details 0 0 Feedback
What

Claude Code records how long each conversation turn takes. Now, when a turn ends but a detached tool call (a task or agent running in the background) is still queued or in progress, Claude Code holds off on recording the turn's duration instead of recording it right away. Once the background work finishes, it recomputes the duration and related background-wait counts, then writes the updated duration into the transcript.

Why

This keeps recorded turn durations from being cut short by background tasks that are still running, so the timing shown reflects when the work actually finished rather than when the main turn technically ended.

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

Transport allocator adds backpressure and refusal callbacks#

The data-transport layer gained backpressure detection and refusal callbacks instead of always resending

Details 0 0 Feedback
What

The internal channel/frame allocator that manages data transport (its allocate, transmit, and free operations) now supports:

  • an onRefused callback that can run per allocation
  • backpressure detection (isBackedUp) checked before resending data
  • tracking of orphaned sequences when an allocation is freed
  • a resend flag on transmit, instead of the previous model of always resending
Why

This makes the underlying transport more resilient: it can now detect when it's sending faster than the other side can handle (backpressure) and react to refused sends, rather than blindly resending every time.

·Internal
Under the hood
Useful2 Signal2
Elsewhere

Project-context reload now triggered by policy verdict arriving#

Project context now reloads automatically once an organization's policy verdict arrives

Details 0 0 Feedback
What

The loader that reads a project's context now triggers a reload when the project context comes back empty, tagged with a new reason, policy_verdict. A matching status message, "after the organization's policy arrived," was added alongside the existing reload reasons such as session_start, compaction, and directory_added.

Why

This ensures project context gets refreshed as soon as an organization's policy decision comes in, rather than staying stale until one of the other reload triggers fires.

·Internal
Under the hood
Useful2 Signal2
Plugin Hooks

Plugin hook manifests now validated against the surfaces they're actually raised on#

Plugin manifests are now checked to confirm their UI hooks actually match surfaces where the component appears

Details 0 0 Feedback
What

Claude Code now validates a plugin's manifest-declared hooks (for example, a ToolProgress hook) against a fixed table of which surfaces, such as the terminal or the desktop app, each UI component actually renders on. If a plugin registers a hook for a surface that component never appears on, or misspells a component or surface name, validation now reports a specific message, such as "no component is named X" or that a component "is raised on the terminal surface only" when the hook names desktop instead.

Why

This catches plugin manifest mistakes early, so a plugin author finds out a hook is misconfigured or targeting the wrong surface at validation time rather than discovering it silently does nothing at runtime.

·Internal
Under the hood
Useful2 Signal2
Bash Safety unclear

Env-var-prefix stripping in shell-command normalization now conditional#

Shell-command normalization can now skip stripping VAR=value prefixes when matching permission rules

Unclear The finding does not say which call sites pass false or what practical difference this makes for a user writing permission rules.

Details 0 0 Feedback
What

When Claude Code checks a shell command against permission rules, it first normalizes the command text by stripping leading VAR=value environment-variable assignments and shell wrapper keywords like builtin or noglob. That stripping step is now controlled by a new boolean parameter, n, which defaults to true. Several existing call sites already pass false, meaning they skip the VAR=value stripping and match against the command text as written.

Why

This lets some permission checks see the full original command, including any environment-variable prefix, instead of always having that prefix stripped away first. That can affect whether a permission rule matches a command that starts with a variable assignment.

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
Sandbox

Sandbox rules now merge startup read rules with runtime rules, plus new startup_read_rules telemetry#

Sandbox rule resolution now merges startup read rules with runtime rules, and reports a startup_read_rules count

Details 0 0 Feedback
What

Claude Code's sandbox (the restricted environment tool calls run inside) now combines a set of startup read rules with the runtime rules it already computed, instead of returning only the runtime set. Telemetry for this process also now reports a startup_read_rules count.

Why

This means the sandbox's effective rule set reflects permissions established at startup as well as those computed while running, so reads that were allowed at startup should no longer be missed when rules are resolved later in a session.

·Internal
Under the hood
Useful2 Signal2
Telemetry

New prompt-source classification for message origin telemetry#

Internal telemetry now classifies where each message came from into one of nine categories

Details 0 0 Feedback
What

Claude Code now sorts every incoming message into one of nine origin categories for internal telemetry: human, sdk, scheduled, task_notification, auto_continuation, peer, host_synthetic, system, or unknown. It works this out from more detailed signals than before, including what woke the session up and specific origin types like a scheduled trigger, a peer sending a message, or a relay between projects.

Why

This is internal bookkeeping used for telemetry rather than something a user configures directly. Sorting messages this precisely lets Claude Code's own systems tell apart, for example, a message a human typed from one generated by a scheduled job or forwarded from another session.

·Internal
Under the hood
Useful2 Signal2
Cloud Sessions

Headless stream-json status frames can now carry a serving notice#

Headless status updates from cloud sessions can now include a serving notice message

Details 0 0 Feedback
notices
What

The internal format for status updates sent during headless, cloud-hosted sessions (the stream-json status frames) now documents a notices field, which can carry a short serving notice message. This joins existing fields covering the serving word/reason, connection status, tool calls, and directory sync.

Why

This gives cloud sessions a channel to surface a short informational notice alongside their regular status, rather than only the fixed set of fields that existed before.

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
Artifact Publish

Artifacts gain a live-room join declaration and stricter "open" tool semantics#

Artifacts get a live-room join option and clearer rules for when to use "open" versus publish/create

Details 0 0 Feedback
What

The description text for artifact tools (used for things like documents, slides, or interactive content generated during a session) now covers a new room declaration: joining an artifact's live room means viewer page events arrive back as notifications, and any outbound sends from the artifact need approval first.

  • The guidance also tightens when the open action should be used versus when a publish or create call has already displayed the artifact, to avoid redundant opens.
  • It adds a note that a slide deck built for email or as an attachment, when made from the Slides type, downloads as a .pptx or PDF file.
Why

This gives the artifact tools clearer rules for interactive, live-updating artifacts and for exporting a deck in a usable file format, reducing confusion about which action to call when.

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 no docs found

Remote/cloud session: repository-trust permission answers can now be named and flagged#

Remote/cloud repository-trust permission answers can now be named and flagged as user rejections

Details 0 0 Feedback
config.nameRepositoryTrustAnswers
What

When a remote or cloud session responds to a permission request for the confirm_repository_trust tool, and the config.nameRepositoryTrustAnswers setting is turned on, the response is now annotated with the tool's name, the same way allowed responses were already annotated elsewhere via nameToolOnPermissionAllow. A denial of this request can now also carry a decisionClassification of user_reject.

Why

This gives remote and cloud sessions more detailed information about repository-trust permission decisions, including explicitly marking a denial as a deliberate user rejection.

·Internal
Under the hood
Useful2 Signal2
Session Lifecycle no docs found unclear

Session-create events can defer the first prompt for device-bound sessions#

Device-bound session creation can now defer sending the first prompt separately

Unclear It's unclear exactly how or when the deferred first prompt gets sent after session creation.

Details 0 0 Feedback
deferFirstPrompt
What

Session creation for device-bound sessions now supports a deferFirstPrompt flag. When set, it filters the first user event out of the events sent when the session is created.

Why

This appears to allow the first prompt to be sent separately after the session is created, rather than bundled in with session creation, though the finding doesn't specify exactly how that separate send happens.

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
Remote Machines

New "two copies of the project" guidance for machine/session file-tool calls#

New prompt guidance explains linked machines as separate, unsynced project copies with a commit-based workflow to move work between them

Details 0 0 Feedback
What

Claude Code's prompt now includes a large new block of guidance about working with a linked machine's copy of a project. It explains that:

  • The linked machine's folder is a separate copy of the project that is not automatically kept in sync
  • Tools like Read, Edit, Write, and Grep act on the current session's own checkout of the project
  • The same tools, when called against the linked machine, act on that machine's separate copy under that machine's own permission rules
  • A full git-based workflow is provided for moving work between the two copies, using commit IDs only
  • Branch or tag names should never be used for this, and git pull should never be used
Why

This clears up a source of confusion when a session is linked to another machine: without it, Claude could easily assume both copies of a project are the same or automatically synced, and make edits in the wrong place or lose track of which copy has which changes. The commit-ID-only workflow gives a precise, unambiguous way to move work between the two.

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
Directory Sync

Directory-sync now writes/reads a git-keep marker file to detect prior sync state#

Directory sync writes a small marker file to detect whether a folder was previously synced

Details 0 0 Feedback
What

Directory sync now reads and writes a small JSON marker file inside a synced directory, recording a version number and the time it was written. It's created exclusively so it can't silently overwrite an existing one, and failures to read or write it are logged. A companion piece of logic also maps the various reasons directory sync can detach from a folder (commit not held, not in history, on another branch, branch switched, switched off, diverged, machine stopped) to explanations shown to the user.

Why

The marker file lets directory sync detect whether a folder was already under sync before, which helps it behave correctly across restarts, while the clearer detach-reason mapping means users get a specific explanation instead of a generic one when sync stops.

·Internal
Under the hood
Useful2 Signal2
Plugin UI

Plugin UI test API $.ui.press now supports non-terminal surfaces#

Plugin test helper $.ui.press can now press buttons on non-terminal surfaces

Details 0 0 Feedback
What

The plugin test API's $.ui.press (used by plugin tests to simulate pressing a button) used to only find and press buttons rendered on the "terminal" surface. It now accepts an optional surface parameter, so it can filter by and press buttons drawn on other surfaces too. When a press is ambiguous, the error message now names both the request ID and the surface involved to help pinpoint the issue.

Why

This lets plugin authors write tests that exercise UI drawn outside the terminal, and makes failures easier to diagnose when multiple matching buttons exist.

·Internal
Under the hood
Useful2 Signal2
Cloud Sessions no docs found

Cloud session creation can defer sending the first prompt until permission mode is confirmed#

Cloud session creation can now send the first prompt separately, after permission mode is confirmed

Details 0 0 Feedback
deferInitialMessage
What

When creating a remote or cloud ("teleport") session, the client can now opt in to a mode where the first prompt is left out of the initial signed session-create request and sent separately afterward, once the permission mode it establishes has been stored on the server. This is controlled by a new deferInitialMessage option, and the create response can indicate the first prompt was withheld so the caller knows to send it itself.

Why

This ensures the permission mode for a new remote session is confirmed and stored before the first prompt is sent, avoiding a case where a prompt could be processed before its governing permission mode is actually in effect.

·Internal
Under the hood
Useful2 Signal2
Hooks

Hooks worker heartbeat timeout made remotely configurable#

The timeout for detecting a stuck hooks worker can now be set remotely instead of always being fixed at 5 seconds

Details 0 0 Feedback
What

Claude Code runs a background "hooks worker" process to execute hooks (scripts that run automatically at certain points). It detects a stuck, unresponsive worker by checking whether it has answered a heartbeat check within a timeout. That timeout used to always be a fixed 5000 milliseconds. Now, as long as there are no pending loads or builds in progress, the timeout value can instead come from a remotely configured setting, falling back to the same 5-second default otherwise.

Why

This lets the stuck-worker detection threshold be tuned remotely without needing a new release, while keeping a safe fallback during load or build activity.

·Internal
Under the hood
Useful2 Signal2
Hooks

Hooks module-reload diagnostics gain a human-readable 'why did we refold' explainer#

Hooks diagnostics now explain in plain language why the hooks list was recalculated

Details 0 0 Feedback
What

Claude Code can now generate a human-readable explanation of why its internal set of hooks (scripts that run automatically at certain points, often added by plugins) was recalculated ("refolded"). The explanation names which plugin's hooks changed and how — for example, loaded fresh, added to, or removed from the set — or notes that a plugin crashed leaving work withheld, or that the order of the kept modules changed.

Why

This makes it easier to understand, when debugging, why the active set of hooks changed rather than just seeing that it did.

·Internal
Under the hood
Useful2 Signal2
Terminal Rendering no docs found

Terminal image-support capability detection reworked into a settle/cache class#

Terminal image-support detection was rebuilt around a proper pending/settled state machine

Details 0 0 Feedback
CLAUDE_CODE_FORCE_TERMINAL_IMAGES
What

Claude Code detects whether the terminal it's running in can display images inline. That detection logic has been rewritten to use a small internal state machine with clear stages: not yet asked, currently asking, and settled (answer known), with a way for other parts of the app to be notified once the answer settles. This sits inside a new container class that groups terminal capability checks together. The CLAUDE_CODE_FORCE_TERMINAL_IMAGES environment variable still works the same way, immediately forcing the detection to a settled, true state.

Why

This is an internal restructuring of how image-support detection is tracked; it should make the detection state more reliable to reason about, without changing the forced-on behavior of CLAUDE_CODE_FORCE_TERMINAL_IMAGES.

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
Models unclear

Fable/voice model availability logic reworked around gateway vs first-party routing#

Availability logic for the fable voice model was reworked around whether requests go through a gateway or directly to Anthropic

Unclear Whether this changes fable's actual availability for any specific group of users, versus just restructuring how the check is computed, isn't clear from the evidence.

Details 0 0 Feedback
What

The logic that decides whether the "fable" voice model is available was reworked. It now checks a gate together with another condition earlier in the process, and for accounts not using multi-account routing, it branches on whether requests are routed "firstParty" (directly to Anthropic, always available) or through a "gateway" (routed through an intermediary, where availability is checked separately). This replaces the previous logic, which gated first-party availability differently and had separate fallback handling.

Why

This changes how fable's availability is determined depending on how a user's requests are routed, though the finding doesn't specify what practical difference users will see.

·Internal
Under the hood
Useful2 Signal2
Elsewhere

New diff-sidebar auto-enable gate function requires a git repo, focus, and terminal width#

The diff sidebar now auto-enables only when the repo is git, the main pane is focused, and the terminal is wide enough

Details 0 0 Feedback
What

Claude Code now uses a single centralized check to decide when the diff sidebar (the panel that shows file changes alongside the conversation) should turn on automatically. All of these must be true:

  • the sidebar feature itself is enabled
  • the terminal is in fullscreen mode
  • the client is not a "thin" client (a lighter-weight connection type)
  • the main pane currently has focus
  • the terminal is at least a minimum number of columns wide
  • the current working directory is inside a git repository
Why

Bundling these checks into one place means the sidebar won't pop up in situations where it wouldn't fit or wouldn't make sense, such as a narrow terminal window, an unfocused pane, or a folder that isn't a git repository.

·Internal
Under the hood
Useful2 Signal2
SDK no docs found

SDK init can expose the session's scratchpad path#

SDK init can now include the session's scratchpad directory path

Details 0 0 Feedback
scratchpad_path
What

The initialization payload sent by the SDK (the interface other applications use to embed Claude Code) can now include a scratchpad_path field, giving the client the absolute file path of the session's scratchpad directory (a working-storage area). This field is left out when the scratchpad feature is disabled, and it is also removed from the redacted version of init data sent over Remote Control or to a hosted worker.

Why

This lets SDK clients that need to know where the scratchpad lives access that path directly, while keeping it out of contexts where exposing a local file path wouldn't be appropriate, such as remote or hosted connections.

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
Plugin Hooks

Hook manifest scan capability list expanded#

The 'scan' hook set's allowed capabilities were expanded and ui.toast was removed

Details 0 0 Feedback
What

The capability manifest for the 'scan' hook set (a declared list of what that group of hooks is allowed to do) now permits calling env.get, telemetry.log, and telemetry.mark, and explicitly lists reading the HOME and USERPROFILE environment variables. The ui.toast call, previously allowed, was removed from this set's permitted calls.

Why

This changes what 'scan' hooks are allowed to do: they gain access to environment lookups and telemetry logging, but can no longer show toast notifications directly.

·Internal
Under the hood
Useful2 Signal2
Prompt Input unclear

Pasted content can now be inline and excluded from certain flows#

Pasted content can now be marked inline and excluded from prompt persistence and submission

Unclear The finding doesn't say what triggers content being marked inline or where a user would notice the difference.

Details 0 0 Feedback
What

Pasted content (text or files pasted into a prompt) can now be marked as inline. Code that previously included all pasted entries now filters out ones marked inline in two places: when computing paste IDs for saving prompt history, and when building the list of pasted values attached to a submitted prompt.

Why

This lets certain pasted content be treated as part of the prompt text itself rather than as a separate attachment, so it isn't double-counted or stored as a distinct pasted item.

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
Remote Control no docs found unclear

New bridge inbox message download support#

Bridge inbox messages can now include a direct download link instead of only inline text

Unclear What content types make use of the new download object is not stated.

Details 0 0 Feedback
bridge_inbox_fetch
What

The bridge_inbox_fetch function, which retrieves messages from a bridge inbox, now can return a download object containing a baseUrl and an accessToken alongside the message text.

Why

This suggests that attachments or full messages fetched through the bridge can now be downloaded directly rather than only read inline, though the finding doesn't specify what kind of content uses this new path.

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
Plugin Install

Plugin publish states for rate limiting and contract rollout#

Plugin publishing gains rate-limited and contract-rollout states

Details 0 0 Feedback
What

The plugin publish flow gains two new named states, publish_rate_limited and publish_contract_rollout, which are also folded into a broader status set used elsewhere in Claude Code.

Why

This lets Claude Code distinguish a publish attempt that was throttled for making too many requests from one that is being held back for a staged contract rollout, giving clearer feedback when publishing a plugin doesn't go through immediately.

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
Plugin Hooks

Plugin hook dispatch deep-copies input for a fixed set of UI/registration events#

Plugin hooks now receive a deep copy of the event payload for UI and registration events, not the original

Details 0 0 Feedback
What

For a fixed list of plugin events, ui.open, ui.toast, ui.status, ui.log, ui.notice, ui.ask, tool.register, command.register, agent.register, prompt.fill, and prompt.suggest, Claude Code now passes hooks a deep copy of the event's data instead of the original object, before any hook has a chance to see or change it.

Why

This stops a plugin hook from being able to mutate the original event data that Claude Code itself still relies on, isolating hook side effects to their own copy for these UI and registration events.

·Internal
Under the hood
Useful2 Signal2
Session Lifecycle

Session tracker now tracks a distinct "head hooks pending" state before recording transcript history#

Session history recorder gains a pending state that holds messages until startup hooks finish

Details 0 0 Feedback
What

Claude Code's internal session-history tracker now has a "head hooks pending" state. When it's active, incoming messages are held instead of being recorded immediately, and are replayed once the hooks that run at the start of a session finish resolving. The underlying hook lifecycle machinery now publishes this pending state and waits until after the transcript is spliced in before releasing it, rather than releasing right away.

Why

This avoids recording conversation history out of order or before session-start hooks have had a chance to run, keeping the saved transcript consistent.

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
Git Internals no docs found unclear

Worktree sync protocol: downApplied history now branches on ack state, adds readsStanding capability#

Worktree sync responses now branch on whether the client acknowledged the current commit, and add a readsStanding flag

Unclear The finding does not say what capability readsStanding signals to the client or what behavior it unlocks.

Details 0 0 Feedback
readsStanding
What

When Claude Code syncs a git worktree (a checked-out copy of a repository) between a client and its session, the response now builds its history of applied changes (downApplied) differently depending on whether the client has already acknowledged the current worktree commit. If it has, the history folds in downstream applied changes on top of what was already sent; if not, it falls back to just the reversed sent history. The response also now always includes a new readsStanding flag set to true, alongside the existing acceptsHeldParents flag.

Why

This makes worktree sync responses more accurate for clients that haven't yet caught up to the latest commit, avoiding history that assumes acknowledgment that hasn't actually happened.

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
Attestation unclear

Attestation check for automated control requests now covers two ID sets instead of one#

Attestation checks for automated requests now match against two ID sets and compute a trust status

Unclear The finding does not say what user-facing feature relies on this attestation check or what happens when a request fails it.

Details 0 0 Feedback
What

Claude Code has a function that checks whether an incoming response corresponds to a request it previously sent and vouched for (attested). Previously it only checked one list of request IDs; it now checks two: automatedOutboundRequestIds and deviceOutboundRequestIds. A new helper also computes a request's trust status, for example downgrading a status like server-authored or server-replayed to unspecified when the request didn't come from a cloud worker, and granting extra weight to a verified keyless device's vouching unless that vouching was specifically withheld.

Why

This broadens and refines how Claude Code verifies that automated or device-originated requests can be trusted, which matters for security features that depend on distinguishing genuine, previously-approved requests from others.

·Internal
Under the hood
Useful2 Signal2
Artifact Publish no docs found

Cowork/artifact tool catalog gains docs-type gating flags#

A docs/type-related artifact tool is now gated behind new typeCatalogOn, typeCreateOn, quickstartOn and docsTypeOn flags

Details 0 0 Feedback
typeCatalogOntypeCreateOnquickstartOn
What

A tool related to artifact types and quickstart documentation is no longer always offered. It's now included in the tool list only when a set of flags are enabled together: typeCatalogOn, typeCreateOn, and quickstartOn (or, in the Cowork-host variant, docsTypeOn).

Why

This lets Anthropic control the rollout of this tool independently per account, rather than shipping it to everyone at once.

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
Remote Machines

Extensive new prompt guidance for tool calls against a 'separate' (unsynced) machine copy#

New built-in guidance tells Claude how to safely handle tool calls against a separate, unsynced copy of a project on a remote machine

Details 0 0 Feedback
What

Claude Code now includes detailed built-in instructions for situations where a remote or bridged machine's project folder is a separate copy of the repository that isn't kept in sync with the current session's checkout. The guidance covers:

  • File tools only act on the current session's own checkout, not the remote copy
  • Moving work between the two copies must go through git fetch, rev-parse, and reviewing the commit ID
  • Warnings about risks from hooks, submodules, .gitattributes, .lfsconfig, and Git LFS (Git's large file storage extension) when working across separate copies

This is wired in as a new "separate" case alongside existing handling for other machine-relationship states.

Why

This reduces the risk of Claude Code confusing two unsynced copies of a project when operating across a remote or bridged machine, and steers it toward safe, reviewable ways to move changes between them.

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
Plugin UI

Plugin component events generalized beyond terminal via a new 'surface' field#

Plugin UI component events can now report a surface other than 'terminal'

Details 0 0 Feedback
surface
What

When Claude Code builds an event for a plugin's UI component, it used to always mark the event's surface as "terminal". It now takes the surface value from whoever triggered the event instead, and the request format was updated to accept an optional surface field with its own validation.

Why

This allows plugin component events to be correctly labeled when they happen somewhere other than the terminal, which matters as Claude Code runs in more surfaces beyond the 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
Useful2 Signal2
Elsewhere unclear

New error-kind enum for a policy/validation path (network/not-found/permission/policy/validation/in-use/unknown)#

A new error-kind list (network, not-found, permission, policy, validation, in-use, unknown) was added for classifying operation failures

Unclear It's unclear which specific operation or feature this error classification applies to.

Details 0 0 Feedback
What

Claude Code added a fixed list of error kinds — covering things like network problems, not-found, permission, policy, validation, in-use, and unknown — along with a matching set and validator to check values against it.

Why

This appears to support more precise classification of failures for some operation, though the finding doesn't identify which feature it belongs to.

·Internal
Under the hood
Useful1 Signal2
Feature Gates unclear

Two feature-availability checks (FWt, oyn) gained an extra gate function ryn#

Two feature-availability checks now require an additional gate function to pass

Unclear What the added gate function actually checks, and which two features are affected, isn't stated in the finding.

Details 0 0 Feedback
What

Two nearly identical checks that decide whether a feature is available already required a few existing conditions to pass. They now additionally require a new gate function to pass before the feature is considered available.

Why

This adds an extra condition that must be satisfied for these two features to be considered available, though the finding doesn't say what that condition checks for.

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
Prompt Input unclear

Text-input editing now feeds a keystroke recorder#

Editing text in the prompt input can now feed a keystroke recorder, excluding pasted text

Unclear The finding does not say what the recorded keystrokes are used for.

Details 0 0 Feedback
What

The core key handler for the prompt input box now sends each text-changing edit to a recorder, capturing the text and cursor state before and after the edit, whenever recording is active. Paste-like automatic insertions are excluded from this via a new skip flag.

Why

This lays groundwork for capturing keystroke-level editing history in the input box, while deliberately not recording pasted content.

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
Elsewhere

Side queries drop the 'Reporting outcomes' honesty-reminder system text#

Background side queries no longer include the system-prompt reminder telling the model to report actual outcomes, not intentions

Details 0 0 Feedback
What

Side queries (background calls to the model, such as sub-agent or utility calls) used to have an extra block of system-prompt text appended, starting with "# Reporting outcomes," instructing the model to report what it actually did rather than what it intended to do. In the rewritten side-query builder, this block is no longer appended.

Why

This removes a reminder that previously nudged background/sub-agent responses toward describing actual results instead of stated intentions; side queries no longer carry that particular instruction.

·Internal
Under the hood
Useful1 Signal2
Elsewhere no docs found

SSE transport now surfaces user-frame UUIDs via onUserFrameReceived#

The streaming connection now surfaces user-message UUIDs via a new onUserFrameReceived callback

Details 0 0 Feedback
onUserFrameReceived
What

The client's SSE (server-sent events) streaming transport now calls a new onUserFrameReceived(uuid, rawPayload) callback whenever it receives a frame whose payload type is "user" and that carries a string UUID, before it passes the data on to the normal data handler.

Why

This lets other parts of Claude Code react specifically to incoming user-message frames and their identifiers as they stream in, rather than only handling them generically alongside every other frame type.

·Internal
Under the hood
Useful1 Signal2
Models unclear

Model family list touched at several offsets (opus/sonnet/mythos cycling)#

Several entries in the internal model-family table were reassigned between opus, sonnet, and mythos

Unclear Which specific models changed family, and what practical effect the reassignment has, is not stated.

Details 0 0 Feedback
What

Multiple rows in the internal table that tracks each model's capability family had their value changed among "opus", "sonnet", and "mythos" across a number of separate edits.

Why

This affects how these models are internally categorized for capability purposes, though the finding doesn't specify which models moved or what depends on their family assignment.

·Internal
Under the hood
Useful1 Signal2
Feature Gates unclear

New gate function jce for first-party base-URL eligibility#

A new internal check gates a capability to first-party accounts using the default API endpoint

Unclear What capability this eligibility check controls is not stated.

Details 0 0 Feedback
ANTHROPIC_BASE_URL
What

A new helper function checks whether the account's auth type is firstParty and several other conditions, including that ANTHROPIC_BASE_URL (which overrides the API endpoint, for example to route through a proxy) is not set, plus region and configuration checks, before allowing some capability to proceed.

Why

The finding doesn't say what capability this gates, but requiring first-party auth and the default API endpoint fits the existing pattern where certain features are disabled when requests are routed through a non-Anthropic endpoint.

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
Prompt Input no docs found unclear

New 'editRelay' input prop threaded through the TUI text input stack#

New editRelay prop added to the terminal text input components

Unclear What editRelay does or enables isn't stated by the finding.

Details 0 0 Feedback
editRelay
What

Claude Code's core text-input handling in the terminal interface now accepts and passes through a new editRelay prop, alongside the existing selectionAnchor and selectionLinewise props, at multiple call sites including the main input field.

Why

This is an internal plumbing change to the input-handling stack.

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
Feature Gates unclear

Second condition added to a feature-availability gate for two related capabilities#

Two related capabilities now require an extra runtime condition on top of the existing enabled-list check

Unclear What the added runtime condition actually checks, and which two capabilities these are, is not established by the evidence.

Details 0 0 Feedback
What

Two nearly identical feature-availability checks, each for a related tool/capability, now require an additional runtime condition (ryn(H0e) and ryn(_Te) respectively) to pass, on top of the existing check against the enabled-features list.

Why

This narrows when these two capabilities are considered available, adding a further runtime condition beyond simply being enabled.

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
Plugin Install unclear

Unresolved: Yl() plugin-marketplace check with no visible caller in this excerpt#

A new internal check flags plugins not listed in the marketplace or already tracked, cause unclear

Unclear No caller of this function is visible, so it's unclear what user-facing behavior (if any) results from a plugin being flagged.

Details 0 0 Feedback
What

A new internal function checks whether an installed plugin appears in the marketplace's plugin list, or is already tracked by another internal tracking function. If the plugin is found in either place, the check reports nothing; otherwise it reports the plugin as unaccounted for.

Why

Nothing in this build shows what calls this check or what happens with a flagged plugin, so it's not yet clear what effect this has for someone using Claude Code's plugin/marketplace features.

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 Telemetry

New detailed timing telemetry for message enqueue and turn start#

New telemetry breaks down how long messages take to enqueue and turns take to start, using new frame-timing data

Details 0 0 Feedback

What

When a message is delivered, Claude Code now records frameTiming (a received and an enqueued wall-clock timestamp) on the command.

  • The cli_user_message_enqueued telemetry event gains new fields: parse_to_enqueue_ms, dedup_ms, flag_settle_ms, receive_hook_ms, and, when attachments are present, attachments_ms, attachment_count, and inlined_images, plus parked_ms when a park timestamp was recorded.
  • A new telemetry event, cli_turn_started, is emitted when a turn is dispatched, including the turn's uuid, the batch size, and enqueue_to_start_ms (the time from when the turn was enqueued to when it actually started), whenever frame timing info is available.

Why

This gives a more detailed breakdown of where time goes between a message arriving and a turn actually starting, which helps diagnose latency in message handling.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Remote Control

Remote sessions now track wall-clock arrival time of incoming user messages#

Claude Code's remote transport now records when user messages actually arrive over the wire, feeding new latency telemetry

Details 0 0 Feedback

What

The remote transport used for Remote Control sessions now tracks, per message, the wall-clock time a user message frame actually arrived over the wire. It does this through a new transport callback, setOnUserFrameReceived, which populates a bounded map of arrival timestamps, and a method, takeUserFrameReceivedWallMs, that reads and clears the timestamp for a given message.

The base (local, non-remote) session read-loop class also gained a takeUserFrameReceivedWallMs method, but it always returns undefined there since there's no network transport to time. Only the remote-transport subclass has the real implementation.

Why

This timestamp feeds into other latency telemetry (such as flag-settle timing), letting Claude Code measure delays specific to remote sessions without affecting local sessions, which have no equivalent network hop to measure.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Skills no docs found

Skills and commands are now marked as builtin to resolve name collisions#

Claude Code's own bundled skills and commands are now flagged so name clashes with user or plugin ones resolve predictably

Details 0 0 Feedback
reload_skills

What

  • The reload_skills response the CLI sends now includes a builtin: true field on each skill entry whose resolved name matches one of Claude Code's own bundled skills.
  • The schema describing an available skill or command gained an optional builtin boolean, true only for Claude Code's own built-in commands, used to decide which command a bare /name invocation runs when a user, project, plugin, and MCP command all share the same name.

Why

This removes ambiguity when a skill or command name collides with one of Claude Code's own: it's now possible to tell that a /name invocation is running the built-in version rather than a same-named user, project, plugin, or MCP one.

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 Plugin Hooks

Plugin hooks reload logic now skips unnecessary rebuilds#

Claude Code now detects when plugin hook modules haven't changed and skips rebuilding them

Details 0 0 Feedback

What

The loader that builds plugin function-hooks now compares the incoming set of hook modules against what's already loaded:

  • If nothing changed, it short-circuits and logs "hooks modules unchanged, kept as loaded" instead of tearing everything down and rebuilding it.
  • If only some modules changed, it logs which ones were kept versus reloaded ("hooks modules kept as loaded, unchanged"), and logs "hooks modules reloaded in full" when a full reload does happen.
  • Internally, a new isSetRecord flag tracks whether the current module set is authoritative. It's cleared before a reload starts and only marked set again once the reload succeeds. A single-module reload path checks for changes via a new plugin-directory watch or an external scan, and clears isSetRecord when a change is found instead of treating the reload as authoritative.

Why

Avoiding unnecessary teardown and rebuild of hook modules when nothing actually changed makes plugin reloads faster and reduces disruption, while the new dirty-flag tracking keeps the loaded state accurate when changes do occur.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Remote Control no docs found

fork_conversation precondition checks reworked#

The fork_conversation RPC's availability checks were reworked to require two new gate functions and a direct bridge session ID check

Details 0 0 Feedback
fork_conversation

What

  • The fork_conversation RPC's early bail-out conditions changed from four checks to three: it now checks two gate functions plus a freshly computed bridge session ID for being undefined, rather than relying on a separately tracked variable.
  • On top of the existing sdkUrl-based check, fork_conversation now returns "unsupported" if either of these two additional gate checks fails.

Why This tightens up when conversation forking is considered available, and adds conditions under which the RPC now reports itself unsupported instead of proceeding.

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 Plugin Install

Plugin manifest discovery and the plugin watcher now track folder scope and entry module path#

Plugin discovery and its file watcher now track a folder scope and entry module path, and the watcher can retarget on reload

Details 0 0 Feedback

What

  • Plugin discovery from folders now records a scope: "folder" marker and resolves an entry module path when a manifest declares modulePath.
  • The plugin directory watcher now tracks a per-plugin scope and entry alongside manifests, checks an admit gate before reloading a plugin, and calls watcher.retarget() after both plugin-list updates and after a reload completes.

Why

This lets Claude Code correctly track where a plugin's code actually lives and keep watching the right files and folders as plugins are added, reloaded, or changed, instead of relying only on a static manifest list.

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

New cc_turn_origin field added to billing headers and log scrubbing#

First-party API requests now send a cc_turn_origin field, and it's also scrubbed from logs like other request identifiers

Details 0 0 Feedback

What

The internal billing/attribution header sent with first-party API requests now includes a cc_turn_origin value (a lowercase string matching /^[a-z][a-z_]{0,31}$/), alongside the existing cc_version, cc_entrypoint, cc_workload, cc_is_subagent, cc_prev_req, and cc_prompt_id fields. It's only included when the account is a first-party account and a valid origin string is present.

The regex Claude Code uses to strip sensitive query/cookie fields from logs, which already covered cc_prev_req, cc_prompt_id, and cc_workload, now also scrubs cc_turn_origin.

Why

This lets Claude Code track where a turn originated for billing/attribution purposes while making sure that new field is treated the same as other sensitive request identifiers and kept out of logs.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Telemetry

New wall-clock timing fields added to turn telemetry#

Turn results now include detailed timing fields breaking down transit, queueing, and processing latency

Details 0 0 Feedback

What

The telemetry sent with turn results gained several new optional timing fields to break latency down into stages:

  • first_stream_post_queue_wait_ms and first_stream_post_queued_behind, showing queueing latency and what it was queued behind.
  • frame_received_wall_ms and frame_enqueued_wall_ms, wall-clock timestamps for when a frame arrived and was queued.
  • turn_started_wall_ms, marking when the turn started.
  • first_text_post_ms and first_text_post_wall_ms, marking the first text output.

These fields are populated for sessions that read input from an SSE stream via --sdk-url, including headless/hearth-relay turns.

Why

Breaking turn latency into transit, queueing, and processing stages makes it possible to diagnose where time is actually going in a slow turn, rather than only seeing total latency.

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 Artifact Publish unclear

Artifact publishing now tracks reserved slugs separately from stranded ones#

Artifact publish tracks a new set of reserved slugs alongside stranded ones, improving staleness and overwrite checks

Unclear What a 'mint' is and how an artifact being reserved differs from stranded is not explained.

Details 0 0 Feedback

What

The artifact publish tool now keeps a reservedMints set alongside the existing strandedMints set. A slug is added to reservedMints when a publish attempt reports a reservedSlug. Both sets are cleared together at the same reset points and on conflict, and reservedMints is also checked when deciding whether an artifact is stale.

A new neverPublished outcome is also handled, letting overwrite checks proceed as if the target slug had no prior page.

Why

This gives the artifact publish flow more accurate bookkeeping about which slugs are reserved versus stranded, improving how staleness and overwrite decisions are made when publishing artifacts.

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 4 Background Tasks unclear

TaskOutput tool removed; task output is now read via the Read tool#

The TaskOutput tool was removed; background task output is now read through the Read tool, and its max-length setting was retired

Unclear The finding does not say what the different output hosts are or how their limits differ from the previous taskOutputMaxChars setting.

Details 0 0 Feedback

What

  • The TaskOutput tool has been removed. Its config field's description now says background task output should be read via the Read tool instead.
  • TaskOutput was dropped from the internal tool set used alongside Read, Glob, Grep, NotebookRead, Skill, AskUserQuestion, TaskCreate, TaskGet, TaskList, TaskUpdate, TaskStop, Agent, and TodoWrite.
  • The TASK_MAX_OUTPUT_LENGTH environment variable was dropped from the list of recognized/passthrough settings.
  • The function that computes the maximum characters allowed for task output no longer reads a taskOutputMaxChars setting; it now derives the limit from the current output host/target instead.

Why

This consolidates reading background task output onto the Read tool instead of a separate TaskOutput tool, and moves the output-length limit from a fixed global setting to something derived from where the output is being read.

·Internal
Under the hood
Useful1 Signal1
Git Internals

Git helper functions accept an overridable env for subprocess calls#

Internal git helper functions can now accept a custom environment instead of always using the default

Details 0 0 Feedback
What

Internal helper functions that detect the current git branch and the default remote branch used to always run git with a fixed environment. They now accept an optional environment override that gets passed through to the underlying git call.

Why

This is an internal plumbing change that lets other parts of Claude Code invoke these git lookups with a customized environment when needed, rather than being locked into one fixed setup.

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 no docs found

Promo banner telemetry gains an entry_point dimension#

Promo banner clicks and opens now record which entry point triggered them

Details 0 0 Feedback
entry_point
What

The promo banner shown in Claude Code now tags its telemetry with an entry_point field, in addition to the existing surface field. This applies to both the click event and the open-result event recorded when a user interacts with the banner. The value is drawn from a shared constant so all promo banner events use the same entry point identifier.

Why

This gives Anthropic more detail on where a promo banner interaction originated, which helps them understand how the banner performs across different contexts.

·Internal
Under the hood
Useful1 Signal1
Git Internals

linguist-generated file check now supports explicit git-dir/work-tree (worktree awareness)#

The check for git-generated files now works correctly across separate git worktrees

Details 0 0 Feedback
What

Claude Code checks whether a file is marked as "linguist-generated" in git (a marker used to decide whether to treat a file as auto-generated, for example skipping it in diffs). This check now accepts an explicit git directory and working tree path, passing them to the underlying git check-attr command when given, and caches results separately per git directory.

Why

This makes the generated-file check work correctly when Claude Code is operating on a git worktree other than the main one, since it no longer has to rely on the current working directory being the right one.

·Internal
Under the hood
Useful1 Signal1
Tool Validation unclear

A tool-input schema case (C4) was removed from a validator#

A tool-input validation case for task_id/agentId/bash_id fields was removed from a validator

Unclear Whether this removal is connected to the previously-described coordinator Bash safety check isn't established by the finding.

Details 0 0 Feedback
What

A validator function that previously had a specific case for handling input shapes with task_id, agentId, bash_id, block, and timeout fields no longer has that case. That input type now falls through to the validator's default, which returns false.

Why

An earlier entry described a related but separate safety check for coordinator Bash calls involving these same fields (agentId, bash_id) that existed in code but was compiled off. This finding is about a different piece, a validation case being deleted from a validator, so this specific input shape is no longer recognized as valid by this function.

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
Tool Validation

Tool-input JSON parse failures now log MCP status and richer Zod error detail#

Tool-input JSON parse failure logs now show whether the tool was an MCP tool and give richer Zod error detail

Details 0 0 Feedback
What

When Claude Code fails to parse a tool's input as JSON, the internal telemetry event tengu_tool_input_json_parse_fail now records an isMcp field noting whether the tool came from an MCP server (a way of connecting external tools to Claude Code). Related error logging for schema-normalization failures (checked with a library called Zod) now includes the tool's display name, the list of specific Zod issue codes, and the length of the error message, instead of a single flattened error string.

Why

This gives more structured detail for diagnosing why a tool call's input failed to parse, without changing what happens for the user in the moment.

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

System-prompt-block and request-content telemetry now fail closed#

System-prompt-block and request-content telemetry no longer crash Claude Code if they fail

Details 0 0 Feedback
What

Two internal telemetry functions, one that reports on system-prompt blocking (tengu_sysprompt_block) and a new wrapper around request-content telemetry, are now wrapped so that an error inside them no longer throws and interrupts anything. If telemetry fails, Claude Code just logs 'system prompt block telemetry failed' or 'request content telemetry failed' and moves on.

Why

Telemetry recording is meant to be a side effect, not something that can break your session. This change makes sure a bug in telemetry reporting can't cause a visible failure.

·Internal
Under the hood
Useful1 Signal1
Hooks

PreToolUse hook warnings identify the tool generically, not by literal name#

PreToolUse hook warnings now name tools generically instead of by their literal name

Details 0 0 Feedback
What

PreToolUse hooks (which run before a tool call executes and can block it) can return permissionDecision=defer. Warnings shown when this happens in interactive mode, or when multiple tool calls are batched together, now identify the tool using a generic classifier rather than printing its raw name.

Why

This keeps the warning informative without exposing the literal tool name, consistent with similar changes to other tool-related log messages.

·Internal
Under the hood
Useful1 Signal1
Directory Sync unclear

Container/dirSync file-mirroring now runs a one-time staging sweep#

Sandboxed-container file mirroring now runs a one-time staging sweep per session

Unclear The finding doesn't say what the staging sweep actually does beyond being tied to the file-write path, so its concrete effect on file mirroring is unclear.

Details 0 0 Feedback
What

When Claude Code mirrors file changes from a sandboxed container back to the host machine, it now runs a one-time "staging sweep" step. This sweep happens once per session: it's only triggered if it hasn't already run in that session, and once it has run, later calls skip it.

Why

This ensures the staging sweep for container file mirroring happens exactly once per session rather than repeatedly, which likely avoids redundant work.

·Internal
Under the hood
Useful1 Signal1
Settings

Skill overrides now stored via null-prototype objects; new message for name collisions with Settings storage#

Skill overrides use a safer storage format, and settings now warn when a skill's name can't be stored

Details 0 0 Feedback
skillOverrides
What

The local skillOverrides setting, which lets you hide or collapse a skill from settings without editing its file, is now built using a storage object with no inherited prototype instead of a plain JavaScript object. This avoids clashes with built-in object properties.

  • The settings dialog used for managing skills now checks which skill names would collide with properties that Settings storage can't hold.
  • When a skill's name can't be stored or toggled for this reason, a new message now surfaces explaining that Settings can't store an entry with that name.
Why

This prevents a skill whose name happens to match a reserved property name from silently failing to save its override, and tells you clearly when that happens instead of failing silently.

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

New prompt.edit / prompt.attachment telemetry validation checks#

New validation checks were added for prompt-edit and prompt-attachment telemetry replay data

Details 0 0 Feedback
What

Two new validator objects were added for telemetry events: one for prompt.edit and one for prompt.attachment. Each includes functions to restore, check, and measure recorded arguments, such as origin, key, text, cursor position, input text, and attachment text, verifying that replayed telemetry data is well-formed before comparing recorded values against live ones.

Why

This strengthens the internal telemetry system's ability to catch malformed or unexpected data when comparing recorded prompt-edit and prompt-attachment events against what actually happened.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Timing telemetry added around user-message ingestion in headless bridge#

Headless bridge mode now records per-stage timing for incoming user messages and warns if a flag-settle step runs late

Details 0 0 Feedback
What

The part of the headless/bridge loop that processes incoming user messages now records timings for several stages: deduplication, waiting for flags to settle, running the receive hook, and inlining attachments. If a particular flag-settle wait (related to a component called 'hearth-relay') takes longer than its expected deadline, a warning-level event is now emitted.

Why

This timing data and warning make it possible to spot when user-message processing in headless mode is running slower than expected, and pinpoint which stage is responsible.

·Internal
Under the hood
Useful1 Signal1
Background Tasks

New helper disarms the startup wedge watchdog on background-agent kickoff#

Starting a background agent now disarms a startup watchdog that could otherwise flag it as stuck

Details 0 0 Feedback
What

When a background agent is kicked off, Claude Code now also calls disarmStartupWedgeWatchdog() on the server, in addition to the existing startup call that already ran.

Why

This prevents the startup watchdog (a mechanism that detects a process stuck, or "wedged", during startup) from misfiring against background agents as they start up.

·Internal
Under the hood
Useful1 Signal1
Directory Sync

Directory-sync journal gets a new 'detached' halt state#

Directory sync now treats a new 'detached' journal state the same as 'ended' when stopping

Details 0 0 Feedback
What

The directory-sync git worker's journal reader now stops in response to a new halted === "detached" state, treating it the same way it already treated halted === "ended". It also records a new detached boolean on the stored halt-state object.

Why

This adds a distinct way for directory sync to recognize and halt cleanly when a sync session becomes detached, rather than only recognizing an explicit end.

·Internal
Under the hood
Useful1 Signal1
Settings

Marketplace settings-source schema defers reserved-name rejection to load time in one code path#

Marketplace 'settings' source schema can defer reserved-name checks to load time instead of at compile time

Details 0 0 Feedback
What

The schema builder for marketplace sources now takes a parameter that changes how reserved names are handled for the settings source type. When set, the name field skips the old compile-time rejection of reserved names and instead defers that check to load time, via a function called revalidateReservedNameEntry, which rejects a reserved name per entry as it loads. When not set, the old inline rejection at schema-compile time still applies.

Why

Deferring the reserved-name check to load time allows each marketplace entry to be validated individually as it's loaded, rather than rejecting the whole schema upfront.

·Internal
Under the hood
Useful1 Signal1
Plugin Install unclear

New helper ir() detects wildcard characters in git/URL marketplace source strings#

New helper detects wildcard characters in git or URL marketplace source addresses

Unclear The finding does not say what uses this detection or what happens when a wildcard is found.

Details 0 0 Feedback
What

A new function checks whether a marketplace source string, whether written as a URL or as an SCP-style git address (like user@host:path), contains a wildcard * character in its host or path. It normalizes SCP-style syntax and strips a trailing .git before checking.

Why

This gives Claude Code a way to detect wildcard patterns in marketplace source addresses, which other logic can use to handle or reject such patterns appropriately.

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
Plugin Install

Plugin binary-asset provisioning gating consolidated into a single check#

Setting up a plugin's binary assets now runs through one combined check instead of three separate ones

Details 0 0 Feedback
What

When Claude Code provisions the binary files a plugin declares it needs, it now runs a single combined check covering schema validation, marketplace trust, and feature availability, rather than running those three checks separately.

Why

This is an internal simplification of the gating logic before a plugin's binary assets are set up; it doesn't change what gets checked, just how the checks are organized.

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
File Tools unclear

FileReadTool bookkeeping map write no longer guarded by an empty-string check#

A file-read bookkeeping record is now always saved, even in a case that previously skipped it

Unclear The finding doesn't explain what the bookkeeping map (fNt) is used for, so the practical effect of always recording it isn't clear.

Details 0 0 Feedback
What

After Claude Code reads a file, it records some information about that read into an internal bookkeeping map. This recording now happens whenever a renamed condition, Pb(r), is true, whereas before it only recorded the value if a derived string was non-empty.

Why

This is an internal bookkeeping change to when a file-read record gets saved.

·Internal
Under the hood
Useful1 Signal1
Plugin Install

Inline plugin zip re-extraction skipped when the zip is unchanged#

Inline plugin zip files are no longer re-extracted if their contents haven't changed

Details 0 0 Feedback
What

When Claude Code loads a plugin that was provided as an inline zip file, it now compares the new zip against what's already been extracted. If the contents are unchanged, it reuses the existing extraction and logs "Inline plugin zip unchanged; loading..." instead of extracting the zip again.

Why

This avoids unnecessary re-extraction work when reloading a plugin whose zip file hasn't actually changed.

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

Prompt-suggestion generation for SDK turns drops the cached 'turnBriefNext' shortcut#

SDK prompt suggestions no longer reuse a cached shortcut and now always generate fresh

Details 0 0 Feedback
What

When the SDK generates a suggested next prompt for a turn, it used to first check a cached value (promptSuggestion.turnBriefNext) tied to the last assistant message, and only generate a fresh suggestion if nothing was cached. That caching shortcut has been removed, so prompt suggestions are now always generated in full each time.

Why

This means SDK-generated prompt suggestions are computed fresh rather than potentially reused from a stale cached value.

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
Prompt Queue

Queued-command lifecycle schema doc clarifies remote-control cancel semantics#

Internal docs clarify that queued-command 'cancelled' status can now come from a remote client withdrawing a prompt

Details 0 0 Feedback
What

Claude Code tracks the lifecycle of queued commands (prompts waiting to run) in its telemetry. The internal documentation for this tracking has been expanded to explain that a "cancelled" state can now also happen when Remote Control is enabled and one remote client withdraws a prompt that a different remote client had queued. The documentation notes that such cancellations are purely informational and shouldn't be treated as something to resend.

Why

This is a documentation clarification for how queued-command cancellations should be interpreted when multiple remote clients are involved, so a cancellation in that situation isn't mistaken for an error needing a 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
Useful1 Signal1
Skills unclear

Skill directory discovery gains a pre-scan hook#

Skill discovery now checks for nested project skill directories before loading

Unclear The exact effect of detecting this nested case (for example, skipping or merging) is not stated in the finding.

Details 0 0 Feedback
What

Before Claude Code logs which skill directories it's loading from, it now runs an extra check against the project's skill directories and its "skills" configuration setting. This appears to detect whether a project's skills directory is actually located inside another project's already-loaded .claude configuration directory.

Why

This likely helps avoid loading the same skills twice or getting confused when one project's skills folder is nested inside another project's configuration directory.

·Internal
Under the hood
Useful1 Signal1
Artifact Publish

Deploy/publish telemetry adds retry and slug-reservation context#

Publishing errors now record retry timing and reserved-slug details

Details 0 0 Feedback
What

When publishing an artifact fails, the error report sent for telemetry now includes a retryAfter value (taken from the server's retry-after response header), whether a reservedSlug (a name held for the artifact) exists, and a created field. When a rate-limit error occurs but a slug was already reserved, the extra explanatory text normally appended to the error message is now left out.

Why

This gives more precise information about why a publish attempt failed and whether it can be retried, and avoids cluttering the error message with redundant text when a slug reservation already succeeded.

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

Session-inbox tool gets project-thread-specific envelope guidance#

Session-inbox tool description gains extra guidance for project-thread messages

Details 0 0 Feedback
What

When a session is of type 'project', the description for the session-inbox tool (which Claude reads to understand how to use the tool) now adds a paragraph of guidance: only the element marked <message from="human" trigger="true"> represents the user's actual words, other quoted elements are context rather than requests, and attachments are downloaded and referenced as @path inside the payload's attachments key.

Why

This should help Claude correctly distinguish an actual user instruction from surrounding quoted context in project-thread messages, and know how to locate any attached files.

·Internal
Under the hood
Useful1 Signal1
Artifact Publish

Artifact tool's 'read' action documents supported URL formats and tool preference#

Artifact tool's 'read' action now documents which claude.ai link formats it supports

Details 0 0 Feedback
What

The description of the publish/read/list artifact tool's 'read' action now spells out that it accepts any claude.ai artifact link, in either the claude.ai/artifact/{id} or claude.ai/code/artifact/{uuid} format, and explicitly tells Claude to read these links using this tool action rather than WebFetch or curl.

Why

This steers Claude toward using the correct, more reliable tool for reading artifact links instead of general-purpose web fetching, which likely wouldn't handle them properly.

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
Team Memory unclear

Team-memory multi-store sync refines empty/removed-receipt bookkeeping#

Team-memory sync now tracks empty and removed memory-store receipts with more precise reasons

Unclear The finding does not say what user-visible behavior, if any, depends on this distinction.

Details 0 0 Feedback
What

The internal logic that syncs team memory across multiple storage locations now separates out more specific bookkeeping cases: it distinguishes an 'absent' receipt from other reasons a receipt can't be used as a basis for comparison, and it separately tracks whether an on-disk receipt was empty (empty_store) versus unreadable for some other reason, rather than lumping these cases into one flag.

Why

This is internal bookkeeping refinement for team memory sync; more precise state tracking reduces the chance of sync logic misinterpreting why a memory receipt is missing or empty.

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
Transcript no docs found unclear

Transcript builder gains a 'withoutAttachmentHooks' bypass option#

Transcript building gained a withoutAttachmentHooks option to skip attachment hooks

Unclear What situation triggers use of withoutAttachmentHooks, and what practical effect it has, is not stated.

Details 0 0 Feedback
withoutAttachmentHooks
What

When Claude Code rebuilds the transcript sent to the API, a new option called withoutAttachmentHooks lets the caller skip the normal attachment hooks and instead use a plain path when re-serializing a human turn's attachments.

Why

The finding does not say why a caller would want to bypass attachment hooks, only that the option now exists.

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
Models unclear

Model list insertion for local/self-hosted entries now requires firstParty context#

Local/self-hosted model entries now only get added when the context is explicitly first-party

Unclear The finding doesn't explain what problem the previous, looser check caused in practice.

Details 0 0 Feedback
What

The internal check that decides whether to insert a synthesized entry for a local or self-hosted model into the model list now requires an additional condition: the value must be null and the context must equal "firstParty", on top of the two checks it already required.

Why

This tightens when Claude Code will add a synthesized local/self-hosted model entry to the list, avoiding cases where it might otherwise show up in the wrong context.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

WebFetch tool description reworks its claude.ai-artifact exception into a general mode parameter#

WebFetch's internal prompt-building switched from a simple on/off flag to a named mode string

Unclear What the mode values other than the default "none" actually change in the description is not stated.

Details 0 0 Feedback
What

The internal code that builds the description text for the WebFetch tool used to take a simple true/false flag (leanPrompt) that controlled a single special-case explanation about claude.ai artifacts. It now instead takes a mode, a text value that defaults to "none", passed through to the helper functions that assemble the description.

Why

A mode that can hold more than two values suggests more variations of the WebFetch description are possible than the old on/off flag allowed, though what those other modes do isn't specified. The visible WebFetch description text itself is unchanged in this release.

·Internal
Under the hood
Useful1 Signal1
Session Lifecycle

Session-process-exit error result can now flag a terminal setup failure#

Crashed-session error reports can now flag that a setup failure was unrecoverable

Details 0 0 Feedback
What

When the process running a session crashes during its setup phase, Claude Code builds a synthetic error result describing what happened. That error-building function now accepts a setupTerminal option, and when it's set, the resulting runner_exit detail for a setup-phase failure includes terminal: true.

Why

This lets whatever consumes these error reports distinguish a setup failure that can't be recovered from other, presumably retryable, setup 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
Useful1 Signal1
Plugin Hooks

Hooks-module-not-loaded diagnostics reformatted to identify the module, not just the plugin name#

Log messages about skipped plugin hooks now name the specific hooks module, not just the plugin

Details 0 0 Feedback
What

When a plugin's hooks module (the file defining its custom hooks) doesn't get loaded, Claude Code logs why. Previously the message used a fixed phrasing naming just the plugin and its source; now it uses a generated identifier that names the specific module instead. This applies across all three cases: the rollout flag being off, a duplicate plugin name, and disableAllHooks being set.

Why

More specific log output makes it easier to tell exactly which hooks module was skipped and why, especially for plugins that define more than one.

·Internal
Under the hood
Useful1 Signal1
Team Memory

Multi-store-sync basis loader now recognizes a non-empty 'held' set as valid state#

A sync data store with a non-empty 'held' set is no longer wrongly treated as empty

Details 0 0 Feedback
What

When Claude Code loads the saved state used to keep multiple stores in sync, it used to treat a store with zero entries as automatically empty. Now, if that store has a non-empty held set, it's no longer considered empty just because its entry count is zero.

Why

This avoids an incorrect "empty store" rejection for a store that actually holds valid state in its held set, preventing that state from being wrongly discarded during sync.

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

New SDK query() usage/cost fields get detailed docs#

SDK docs now spell out that query() usage and cost totals accumulate across turns and reset on /clear

Details 0 0 Feedback
What

The descriptions for the SDK's query() result fields covering model usage and total cost have been expanded. They now explain that per-model token totals (modelUsage) and the cumulative estimated cost (totalCostUsd-like field) both accumulate across turns within a streaming session, and reset when /clear is used to start a new conversation.

Why

This clarifies for SDK users exactly what window of activity these numbers cover, so a running cost or usage total isn't mistaken for a single-turn figure or misunderstood after a /clear.

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

Status-digest line told not to answer the user's question#

Background progress status lines are now told not to answer the user's question early

Details 0 0 Feedback
What

The internal prompt used to generate the short one-line status shown while background work is in progress now explicitly forbids it from stating a verdict or an answer to the user's question. It's required to only describe progress, leaving the actual answer for the agent's final reply.

Why

This stops the progress line from prematurely announcing a conclusion before the work is actually finished, which could otherwise be misleading if the real answer ends up different once the task completes.

·Internal
Under the hood
Useful1 Signal1
Rate Limits

Usage-limits null semantics tightened for failed fetches#

Usage-limits data is now documented as null whenever the usage fetch is failing, not just when it predates rate limits

Details 0 0 Feedback
What

The documentation for the usage-limits data (limits[]) now clarifies that this field is null not only when the server's response predates the usage meters, but also any time the usage fetch is currently failing. Even though the CLI may separately build its own fallback row from rate-limit response headers, that fallback is never surfaced through this field — it stays null during a failure.

Why

This clarifies that a null value doesn't distinguish between "no data yet" and "the fetch is currently failing," and that a fallback estimate elsewhere in the CLI won't appear here.

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
Directory Sync

Directory-sync install tracking reworked to fold/dedupe re-sent installs#

Directory-sync install tracking for claude --cloud now dedupes re-sent installs that haven't materially changed

Details 0 0 Feedback
What

The bookkeeping that tracks which file installs have been sent during claude --cloud directory sync was reworked. Installs are now compared against a tracked "folded install" record, and only re-included if they materially differ — specifically if the turn, a truncated flag, or the set of not-installed files changed.

Why

This avoids re-sending an unchanged install list after an internal generation bump, cutting down on redundant sync traffic for claude --cloud sessions.

·Internal
Under the hood
Useful1 Signal1
Artifact Publish no docs found

Artifact 'auto_open' description: connectors never open on first write#

Artifact auto_open guidance now tells Claude to skip it for connector-backed content like Claude Docs

Details 0 0 Feedback
auto_open
What

The instructions Claude Code gives to Claude about the artifact auto_open setting now explicitly say to leave it out when the artifact's content is written through a connector, such as a Claude Docs document, rather than through a normal publish or store step.

Why

Connector-backed content doesn't go through the publish/store write that would normally trigger the artifact to open, so setting auto_open in that case wouldn't do anything. The updated guidance stops Claude from adding a setting that has no effect for these artifact types.

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
Plugin Install

Plugin directory loading cleans up downloaded preview files#

Loading a plugin preview now cleans up its temporary download folder afterward

Details 0 0 Feedback
What

When Claude Code loads a plugin from a marketplace preview, it now deletes the temporary folder the preview was downloaded into once loading finishes, whether loading succeeded or failed. If that cleanup itself fails, a warning is logged.

Why

This prevents leftover temporary preview files from accumulating on disk after previewing plugins.

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

tengu_thinking_drop telemetry gains a context_compacted dimension#

The tengu_thinking_drop telemetry event now also records whether context was compacted

Details 0 0 Feedback
What

The tengu_thinking_drop telemetry event, which logs when "thinking" blocks (the model's intermediate reasoning content) are stripped from a request, now also records a context_compacted value. This tracks whether the drop happened alongside a context compaction (the process that trims earlier conversation history to save space).

Why

This gives more detail on why thinking blocks get dropped, making it easier to tell whether compaction was a factor in a given 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
Sandbox

SSRF/private-IP check for local tooling simplified and a normalization step added#

The check for whether an address is local was simplified and now strips IPv6 zone identifiers first

Details 0 0 Feedback
What

Claude Code has an internal check for whether a network address counts as "local," used to control whether local tools can bind to it. This check now strips IPv6 zone identifiers (extra suffixes like %eth0 sometimes attached to IPv6 addresses) before evaluating an address. It also consolidates loopback and unspecified-address handling into a single computed result, and hands off unmatched cases to a new helper function instead of separately hardcoding checks for AWS and GCP metadata service IP addresses.

Why

This is a defensive check related to preventing server-side request forgery (SSRF), where a request is tricked into reaching an unintended internal address; normalizing IPv6 zone identifiers first helps make sure such addresses aren't misclassified and slip past the local-address check.

·Internal
Under the hood
Useful1 Signal1
Telemetry no docs found

Worker/environment start now reports machine_id#

Worker/environment start requests now include a machine_id field

Details 0 0 Feedback
machine_id
What

When Claude Code starts a worker or environment, the metadata it sends now includes a machine_id value when one is available, in addition to the existing worker_type field.

Why

This gives Anthropic more detail about which machine started a given worker or environment, useful for diagnostics and tracking.

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

post_turn_summary telemetry payload shrunk#

post_turn_summary telemetry event now records 4 fields instead of 9

Details 0 0 Feedback
What

The post_turn_summary telemetry event, which records information about a turn's summary, previously recorded nine fields including description, points, summary, next_why, and reply_options. It now records only four: summarizes_uuid, status_category, status_detail, and needs_action.

Why

This reduces the amount of data captured in this telemetry event, dropping several detail fields in favor of a smaller, more focused set.

·Internal
Under the hood
Useful1 Signal1
Plugin Hooks no docs found

ui.render hook matcher gets startup advisory logging#

Claude Code warns at startup if a hooks module registers a ui.render matcher with advice available

Details 0 0 Feedback
ui.render
What

A new check runs when a hooks module (a script that registers hook handlers) subscribes to the ui.render event with a matcher (a filter deciding which calls the hook applies to). If there's advice available about that matcher, Claude Code now logs a warning at startup showing the matcher's contents.

Why

This surfaces potential problems with a hook's ui.render matcher up front, rather than leaving the author to discover an issue only when the hook misbehaves.

·Internal
Under the hood
Useful1 Signal1
Permissions

Permission decision helper marks 'promptless' outcomes with a reason string instead of boolean#

Permission-prompt skip decisions now report a specific reason instead of yes/no

Details 0 0 Feedback
What

The internal function that decides whether a tool call can skip the permission prompt now returns one of three specific reasons instead of a plain true/false: "none", "artifact-tool", or "webfetch".

Why

This lets the code that consumes this decision know exactly why a permission prompt was or wasn't needed, rather than just whether it was, which supports more precise handling of each case.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

claude.ai discovery tool schema no longer always deferred#

claude.ai content-search tool no longer always defers loading its schema

Details 0 0 Feedback
What

The tool that searches claude.ai content (used for discovery by keyword) previously always deferred loading its schema. It now only defers when the schema wasn't already loaded up front, via a conditional check rather than a fixed setting.

Why

This avoids unnecessarily deferring the tool's schema when it's already available, which can make the tool ready sooner in cases where its schema was preloaded.

·Internal
Under the hood
Useful1 Signal1
Device Binding

New device-registration-revoked error for cowork/remote device#

New error reports when a device's remote-session registration has been revoked

Details 0 0 Feedback
What

A new error is now raised when the local machine's device registration has been removed from the account, as used by the device registry for cowork/remote-device sessions. This is logged with the telemetry event cowork_remote_device_registration_revoked.

Why

This gives a clearer, specific error when a device's remote-session access has been revoked, instead of it failing in a less identifiable way.

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
Plugin Install no docs found unclear

New marketplace field presentsAs surfaced from plugin metadata#

Plugin marketplace metadata now includes a presentsAs field

Unclear What presentsAs controls or displays is not stated.

Details 0 0 Feedback
presentsAs
What

When Claude Code reads metadata for a plugin or marketplace entry, it now also picks up a presents_as value from the source data and exposes it internally as presentsAs, alongside the existing marketplaceName and installationPreference fields.

Why

The finding doesn't say what presentsAs is used for, but capturing it suggests plugin listings may soon be able to present themselves differently than their underlying name or source.

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

Compaction 'phase' enum gains a 'kept' state#

Compaction status can now be recorded as 'kept', a new fourth state

Unclear What causes a conversation to be marked 'kept', and what that means for the user, is not stated.

Details 0 0 Feedback
What

Compaction is the process where Claude Code condenses a long conversation to save space. The internal tracking for a conversation's compaction status previously allowed three values: "clearing", "cleared", and "untouched". It now allows a fourth: "kept".

Why

The finding doesn't say what triggers the "kept" state, but its addition implies there's now a way for content to be explicitly preserved during compaction rather than only being cleared or left untouched.

·Internal
Under the hood
Useful1 Signal1
Telemetry unclear

New telemetry event names added#

Six new internal telemetry event names appeared, hinting at features in progress

Unclear None of these event names are tied to any described user-facing feature yet.

Details 0 0 Feedback
What

Several new event identifiers were added to Claude Code's internal telemetry event list:

  • mermaid_render
  • query_tool_detach
  • bridge_cancel_queued_message
  • device_mcp_host_consent
  • ccr_dir_sync_attach
  • usage_limit_grace_wrapup_subagent
Why

These are just event names added to internal tracking, so no user-facing behavior is confirmed yet, but they hint at work in progress around rendering diagrams, detaching a query tool, canceling queued bridge messages, MCP host consent on devices, directory-sync attachment, and a grace period around usage limits involving subagents.

·Internal
Under the hood
Useful1 Signal1
Directory Sync

Git dir-sync checkout gains new terminal states#

Directory sync's git checkout logic gains several new named outcome states

Details 0 0 Feedback
What

The directory-sync feature, which checks out git state to keep a synced copy up to date, now recognizes several new outcome states for a checkout operation:

  • checkout_mid_operation
  • checkout_unmerged
  • checkout_unborn
  • checkout_unreadable
  • snapshot_refused
  • no_ref
  • acknowledge
  • other

A new sync kind, checkout_empty, was also added.

Why

More granular outcome tracking lets Claude Code distinguish between different reasons a directory-sync checkout didn't complete cleanly, such as a repository mid-operation, unmerged paths, or an unborn branch, rather than lumping them together.

·Internal
Under the hood
Useful1 Signal1
Terminal Rendering no docs found unclear

PromptHint recognized as a pane region#

A new 'PromptHint' pane region is now recognized alongside AbovePrompt and Pane

Unclear What PromptHint contains and how recognizing it changes the display is not stated.

Details 0 0 Feedback
PromptHint
What

The layout logic that decides where prompt-related visibility rules apply now also checks a new region called "PromptHint", in addition to the existing "AbovePrompt" and "Pane" regions.

Why

The finding doesn't specify what content lives in the PromptHint region or what changes as a result, but it extends the same visibility framework already used for panes shown above the prompt.

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
Plugin UI no docs found unclear

New UI type ToolProgressHint#

A new ToolProgressHint UI element type was added for tool-progress display

Unclear What ToolProgressHint displays and when it appears is not stated.

Details 0 0 Feedback
ToolProgressHint
What

Claude Code's UI type mapping now includes a new entry: ToolProgress maps to a component called ToolProgressHint, joining the existing mappings for ToolUse, ToolResult, and ToolGroup.

Why

This suggests a dedicated visual element for showing progress on an in-flight tool call, separate from the existing tool-use and tool-result displays, though the finding doesn't describe what it looks like or when it appears.

·Internal
Under the hood
Useful1 Signal1
Prompt Queue

Queued command attachments narrowed#

Stripping of render-state fields from queued messages now only applies to queued-command attachments

Details 0 0 Feedback
What

When Claude Code processes queued messages, it strips out internal rendered and renderedInHumanTurn fields before further handling. This stripping now only happens when the attachment's type is specifically queued_command, rather than for any attachment type.

Why

This narrows the cleanup logic so it no longer accidentally touches fields on unrelated attachment types, reducing the chance of other queued attachments losing data they shouldn't.

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
Rate Limits

Rate-limit options UI now requires the Ink renderer#

Rate-limit options screen now requires the Ink terminal UI to be available

Details 0 0 Feedback
What

The hidden feature flag controlling the 'Show options when rate limit is reached' screen now declares requires: { ink: true }, meaning this feature is gated on the Ink terminal rendering library being available.

Why

This ensures the rate-limit options screen only activates in environments that support Ink-based rendering, avoiding attempts to show it where the terminal UI framework it depends on isn't present.

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
Rate Limits

Model usage/dependency tracking now watches growthBookVersion#

Rate-limit usage display now re-renders when GrowthBook feature-flag data updates

Details 0 0 Feedback
What

A component that displays model usage and rate-limit information now watches growthBookVersion as part of its re-render logic. This means the display updates whenever the underlying GrowthBook feature-flag snapshot changes version.

Why

This keeps the usage display in sync with the latest feature-flag configuration, so changes delivered through GrowthBook (the service Claude Code uses to manage remote feature flags) are reflected without requiring a restart or unrelated re-render.

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

session_id telemetry suppressed for remote-trigger entrypoints#

Telemetry no longer records a session_id when Claude Code was started via a remote trigger

Details 0 0 Feedback
What

A telemetry helper that used to attach the current session_id to outgoing telemetry whenever one was available now leaves it out if the process was launched through a remote trigger entrypoint (a way of starting Claude Code programmatically rather than by hand).

Why

This means telemetry from remotely-triggered runs is harder to tie back to a specific session, which matters mainly for diagnosing issues in automated or remotely-started Claude Code runs.

·Internal
Under the hood
Useful1 Signal1
Settings

Settings-sync invalidation now includes a policy_verdict trigger#

Settings and hooks can now be invalidated by a new policy_verdict trigger

Details 0 0 Feedback
What

The list of reasons that can cause Claude Code to invalidate and reload its settings and hooks now includes a new policy_verdict entry, alongside the existing settings_sync, account_change, and hooks_invalidate reasons.

Why

This lets a policy decision (such as one made by an organization's admin controls) trigger a refresh of settings and hooks, so changes driven by policy take effect without needing one of the other existing triggers.

·Internal
Under the hood
Useful1 Signal1
Plugin Install unclear

New plugin-directory identifiers recognized#

Claude Code now recognizes two new plugin marketplace directory names

Unclear The finding does not give the exact new names beyond "anthropic-plugin-directory" for the Anthropic-branded one, nor say what the generic Claude-branded one is called.

Details 0 0 Feedback
What

The set of accepted plugin marketplace directory identifiers now includes both an Anthropic-branded name and a generic Claude-branded name, in addition to whatever names were already accepted.

Why

This lets Claude Code recognize additional official-style plugin directories, so plugins published under either of these names are picked up correctly.

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
Attestation

Session/checkout ID format tightened to a strict UUID regex#

Device attestation status now validates session/checkout IDs as strict UUIDs

Details 0 0 Feedback
What

A constant used in device attestation status checks, which previously matched an ID by string prefix, is replaced with a strict regular expression that only matches a properly formatted UUID (a standard 36-character identifier format).

Why

This makes the check stricter: an ID has to be a well-formed UUID to pass, rather than merely starting with the right prefix, which should reduce the chance of a malformed or spoofed ID being accepted.

·Internal
Under the hood
Useful1 Signal1
Directory Sync unclear

New 'checkout_empty' terminal/session state#

A new checkout_empty state is added to session/folder seeding logic, always reported as not seeded

Unclear The finding does not say what triggers the checkout_empty state or where a user would see it.

Details 0 0 Feedback
What

A function that classifies the state of a session's checkout or folder (previously handling clone and folder-being-seeded cases) gains a new case, checkout_empty, which is always treated as "not seeded."

Why

This gives Claude Code a distinct way to represent a checkout that is empty, rather than lumping it in with other states, which should make status reporting for that situation more accurate.

·Internal
Under the hood
Useful1 Signal1
Session Lifecycle unclear

Session lifecycle events gain a 'detached' outcome#

Session lifecycle logging gains a new detached outcome

Unclear The finding does not say what causes a session to become detached or what a user experiences when it happens.

Details 0 0 Feedback
What

The list of possible session lifecycle outcomes that Claude Code records now includes detached, in addition to the existing recreated, ended, cleared, and start_failed.

Why

This lets Claude Code distinguish a session becoming detached from the other existing outcomes, giving more precise session lifecycle 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

Telemetry failures in request/response logging no longer crash the call#

A telemetry failure while logging request or response content no longer crashes the API call

Details 0 0 Feedback
What

The code that computes telemetry about a request's prefix and a response's content is now wrapped in try/catch. If this telemetry computation fails, Claude Code now logs "request prefix telemetry failed" or "response content telemetry failed" through its debug logger instead of letting the error propagate and interrupt the API call.

Why

Previously, a bug in this telemetry code could break an otherwise-working API request. Now such a failure is just logged, so telemetry problems can't take down a real request or response.

·Internal
Under the hood
Useful1 Signal1
CCR no docs found unclear

CCR worker requests can target a custom session URL#

CCR worker requests can now target a custom session URL instead of the default endpoint

Unclear The finding does not say what CCR stands for or in what situation a custom ccrSessionUrl would be set.

Details 0 0 Feedback
ccrSessionUrl
What

The function that sends CCR worker requests to a Claude session now checks for a ccrSessionUrl() value from the host's launch options first. If one is set (with any trailing slashes removed), it's used as the base address for the /worker/... call; otherwise Claude Code falls back to the default .../v1/code/sessions/{id} URL. When a socket is used for the connection, the log now also notes "over ${socket path}" for extra context.

Why

This allows worker requests to be redirected to a non-default session endpoint, useful when a session isn't reachable at the standard URL.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

REPL bridge placeholder sweep now schema-validates entries before acting on them#

REPL bridge placeholder cleanup now validates entries against a schema before acting on them

Details 0 0 Feedback
What

The periodic sweep that cleans up REPL bridge placeholders (entries expected to have a process ID, optional process-start time, and creation time) now validates each entry against a defined schema before acting on it, rather than assuming the entry has the expected shape. Entries that fail validation are skipped or removed defensively.

Why

This prevents the cleanup sweep from crashing or misbehaving if it encounters a malformed or unexpected placeholder entry.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP tool-use id now sourced from the tool-use record when available#

MCP tool calls now reuse an existing tool-use id instead of deriving one, and add a per-request header

Details 0 0 Feedback
What

When Claude Code makes an MCP (Model Context Protocol) tool call, it now prefers to use the tool-use id already attached to the call record, rather than deriving one from request headers as it did before. It also now adds a new per-request metadata header carrying the request id, in addition to the existing claudecode/toolUseId metadata.

Why

This is an internal correctness and traceability improvement for how MCP tool calls are identified, which can help with matching requests to responses correctly and debugging.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

Scratch-folder path phrase gets normalized/obfuscated before display#

References to the session's scratch folder are now normalized into a fixed phrase before display

Unclear The finding does not explain why paths would sometimes be shown relative to the scratchpad location.

Details 0 0 Feedback
What

Claude Code now recognizes variants of the phrase "in this session's scratch folder" (allowing for different spacing and punctuation) and rewrites them into one fixed, hyphenated form before showing them. A related new function decides whether a file path should be displayed relative to a scratchpad location.

Why

Normalizing the wording keeps references to the scratch folder consistent on screen, regardless of small variations in how the phrase was originally generated.

·Internal
Under the hood
Useful1 Signal1
Terminal Rendering no docs found unclear

Tool-card description height now depends on a 'roomyDescription' flag#

Tool-call cards can now show taller descriptions when a new 'roomyDescription' flag is set

Unclear What determines when roomyDescription is set to true is not stated in the finding.

Details 0 0 Feedback
roomyDescription
What

The cards Claude Code shows for permission requests and tool calls now compute their maximum description height using a new roomyDescription flag. When this flag is true and the terminal window is wide enough, the card is allowed to grow taller (up to a cap) instead of being limited to the previous fixed minimum height.

Why

This lets longer tool-call descriptions display more fully on wide terminals instead of being cut off at a fixed short height.

·Internal
Under the hood
Useful1 Signal1
Plugin Install

Plugin preview cache now prunes old preview trees instead of leaking them#

Plugin preview cache now cleans up old preview trees instead of accumulating them

Details 0 0 Feedback
What

When Claude Code materializes a preview of a plugin, it now tracks how many previews have been made per source. Once a source passes a cap, the oldest preview trees are moved aside and deleted in the background. The code also guards against a caller trying to read a preview that is being pruned at the same time.

Why

This prevents plugin preview files from piling up on disk indefinitely, while avoiding errors if a preview is read at the same moment it's being cleaned up.

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
Plugin Install

Plugin gitCommitSha resolution gains a marketplace-npm fallback#

Plugin version tracking gets a fallback for npm-based marketplaces without a git checkout

Details 0 0 Feedback
What

When Claude Code figures out which version of a plugin's code is installed (by resolving a git commit hash, used for caching), it now handles the case where the plugin's checkout isn't a git repository but comes from an npm-style plugin marketplace. In that case, it falls back to a separate resolver to find a commit-like identifier. A new keepStoredCommit flag also ensures that if neither method can resolve an identifier, a previously stored one isn't discarded.

Why

This prevents plugins installed from npm-based marketplaces from losing their version-tracking information just because they weren't installed via a plain git checkout, and avoids erasing a known-good stored version when a fresh lookup comes up empty.

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
Team Memory

New boot-latency metrics for org/team memory store sync#

New timing metrics track how long syncing org/team memory takes at startup

Details 0 0 Feedback
What

Claude Code now measures how long it takes to pull the team and user memory store when it starts up, recording this as memory_store_pull_ms. It also records memory_store_pull_boot_spillover_ms, which measures how much of that pull happened after Claude Code had already reported itself ready for input. These mirror an existing pair of metrics, memory_context_fetch_ms and memory_context_boot_spillover_ms, that measured similar timing for memory context fetches.

Why

These are internal diagnostics that help identify when memory-store syncing is slow enough to spill over into the time a user is already able to start typing, rather than finishing before startup completes.

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

One MCP-connector tool marked non-backgroundable#

An internal MCP connector lookup tool can no longer run in the background

Unclear The finding does not say what would go wrong if the tool ran in the background, only that it is now disallowed.

Details 0 0 Feedback
What

An internal tool that resolves MCP (Model Context Protocol, a way of connecting external tools and data sources to Claude) connector payloads by a directory identifier is now marked as never backgroundable. This means it can't be run in a background context, such as inside a subagent (a separate Claude instance spawned to do a sub-task).

Why

Restricting this tool to run only in the main session context suggests it depends on state that isn't reliably available, or safe to use, outside that context.

·Internal
Under the hood
Useful1 Signal1
CCR

CCR client-event uploads now record queue-position diagnostics per frame#

Client telemetry uploads now record what each event was queued behind before sending

Details 0 0 Feedback
What

When Claude Code uploads tracked telemetry events, each upload is now tagged with a timestamp of when it was queued (enqueuedAtMs) and a classification of what it was waiting behind before being sent: a hold, a durable post, an ephemeral post, a retry backoff, or nothing.

Why

This is a diagnostic addition that lets Claude Code's telemetry pipeline distinguish delays caused by queuing behind other uploads from delays caused by retries or other holds, which helps pinpoint where event-reporting slowdowns come from.

·Internal
Under the hood
Useful1 Signal1
Models

Model family aliasing now recognizes date-suffixed canonical model ids#

Model-family matching now recognizes date-suffixed model IDs as canonical for Opus, Sonnet, and Haiku

Details 0 0 Feedback
What

Claude Code now has a helper that decides which model ID counts as the 'canonical' representative for each of the Opus, Sonnet, and Haiku model families: an ID qualifies if it starts with claude- and either matches the family's base name exactly, or matches the base name plus a date, or the base name plus @date. When building the map of canonical IDs per family, this canonical form is now preferred over any other ID seen for that family. The code that builds the model list also now loops over a shared list of the three family names instead of writing them out separately each time.

Why

This makes model selection more consistent when multiple IDs for the same model family exist (for example, dated snapshot versions), ensuring the same canonical ID is chosen rather than an arbitrary one.

·Internal
Under the hood
Useful1 Signal1
Transcript unclear

Queued-command attachments from a new 'coordinator' origin are now recognized for filtering/collapsing#

Queued commands from a new 'coordinator' source are now foldable in transcript history like other background messages

Unclear The finding does not say what a 'coordinator' origin is or where queued commands from it come from.

Details 0 0 Feedback
What

Claude Code already collapses certain transcript entries during history filtering and compaction, such as channel messages, peer messages, Slack pings, and task notifications. A new check now also recognizes 'queued_command' attachments whose origin is a 'coordinator', treating them the same way: as candidates for folding or skipping when trimming transcript history.

Why

This keeps transcripts from a coordinator source consistent with other background-origin messages, so they don't clutter the visible history any more than channel or task notifications already don't.

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

Dynamic-workflows tips (workflow-size-prompting) gated on settings.enableWorkflows, function renamed#

Tips about dynamic workflows now only show when the enableWorkflows setting is on

Details 0 0 Feedback
enableWorkflows
What

The tip messages that introduce dynamic workflows and workflow sizing (dynamic-workflows, workflow-size-prompting, and workflow-size-prompting-ambient) now check the enableWorkflows setting before showing. If it's off, either in your own settings or by the account's server-side default, the tips are suppressed.

The workflow-size-prompting tips also require that the current session has already used a tracked tool, and that the tip hasn't been dismissed ('snoozed') before.

Why

This keeps workflow-related tips from appearing for accounts where dynamic workflows (enableWorkflows) are turned off, avoiding advice about a feature you can't use.

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

CLI budget/task-budget argument errors now thrown as a different error class#

Errors for invalid --max-budget-usd or --task-budget values now use a different internal error class, same message

Details 0 0 Feedback
What

When you pass an invalid value to --max-budget-usd or --task-budget (for example, a non-positive number), Claude Code still reports the same error text, but now throws it as a different internal error class.

Why

This is an internal change to error handling and shouldn't be noticeable in normal use; the error message you see stays the same.

·Internal
Under the hood
Useful1 Signal1
Turn Handling no docs found

awaitStagedFiles option added to the pre-turn handoff path#

The pre-turn handoff step can now wait for staged files before continuing

Details 0 0 Feedback
awaitStagedFiles
What

The internal function that handles the handoff at the start of a turn now accepts an awaitStagedFiles option. It's supplied only when a turn-handoff has been admitted, in which case the turn waits for files staged during that handoff.

Why

This helps ensure that files staged as part of handing off between turns are actually ready before the new turn proceeds, avoiding races where a turn starts before its staged files are in place.

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

Bridge control requests now logged with duration/deadline telemetry#

SDK bridge now logs how long each control request took to handle, plus deadline/timeout info

Details 0 0 Feedback
What

The SDK bridge, which relays control requests between a client and Claude Code, now measures and logs how long each control_request took to process. The new telemetry event also records whether the request was "detached" and, when a deadline was set on the request, what that deadline was and whether it was exceeded.

Why

This gives better visibility into bridge performance and helps diagnose slow or timed-out control requests when building on the SDK.

·Internal
Under the hood
Useful1 Signal1
File Sync

stage_file gains a mount-path/output-prefix check and non-filestore concurrency tracking#

stage_file now flags outputs-mount paths and tracks concurrency for non-filestore staging

Details 0 0 Feedback
What

The stage_file control request now checks whether the requested mount_path falls under a new STAGE_FILE_OUTPUTS_MOUNT_PREFIX path and flags it if so. Separately, requests that don't include a filestore_path are now wrapped in a begin/cleanup pair that tracks concurrency and keeps the process alive while staging is in progress, which wasn't done before.

Why

The mount-path check lets Claude Code distinguish files staged to a special outputs location. The added concurrency tracking for non-filestore staging helps ensure such staging operations complete properly rather than being cut short.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Session hint inclusion in error telemetry now has a cooldown/opt-out#

Session hints attached to error telemetry now respect a recent opt-out before being sent again

Details 0 0 Feedback
What

When a request fails with a 400 error, Claude Code can attach hints (like the entrypoint, session ID, and request ID) to the telemetry it sends about that error. Now, if a session recently indicated it should refuse to include those hints, that refusal is remembered and later checks will skip attaching the hints until the cooldown passes.

Why

This avoids repeatedly attaching identifying session hints to error reports after a session has recently declined to include them.

·Internal
Under the hood
Useful1 Signal1
Git Internals

Git helper functions refactored to accept an explicit working directory#

Git diff/status helper functions can now target an explicit working directory instead of always using the process's own

Details 0 0 Feedback
What

A group of internal git helper functions that compute diffs and status were changed to accept an explicit working directory parameter, rather than always operating on the directory the Claude Code process itself is running in. A new helper picks between the normal environment and an isolated environment (with extendEnv turned off) depending on whether a working directory was passed in.

Why

This allows git operations to be run correctly against a different folder than the current process directory, which matters for features that need to inspect git state in another location, such as a separate worktree or machine.

·Internal
Under the hood
Useful1 Signal1
Directory Sync

New 'checkout_empty' dir-sync origin kind, always non-seeded#

A new 'checkout_empty' directory-sync origin kind is always treated as not pre-seeded

Details 0 0 Feedback
What

The code that tracks how a synced directory was originally set up (for example, cloned, seeded, or from an existing folder) gained a new kind called checkout_empty. Unlike the other kinds, it's always treated as never having been pre-seeded with content.

Why

This lets Claude Code's directory-sync feature correctly distinguish an empty checkout from other setup methods, which likely affects what it assumes is already present when syncing starts.

·Internal
Under the hood
Useful1 Signal1
Remote Control unclear

RemoteSessionManager.sendMessage/send gain an extra threading parameter#

RemoteSessionManager's message-sending functions gained an extra parameter threaded through to gate checks

Unclear What the new parameter represents or controls isn't stated, so its practical effect is unclear.

Details 0 0 Feedback
What

The internal sendMessage and send functions used by RemoteSessionManager to deliver messages now take an additional parameter, which is passed through to the function that checks gates (settings that control whether a feature is active) before sending. The retry path that resends a prompt withheld earlier now calls send directly instead of going through the previous sendMessageVia function.

Why

This is an internal plumbing change to how messages are routed and gated in remote sessions; the finding doesn't indicate a new user-visible capability, but it changes how the withheld-prompt retry is wired up internally.

·Internal
Under the hood
Useful1 Signal0
Elsewhere unclear

Removed several optional fields from an internal schema (question/points/summary/next/options/lead/headline)#

An internal schema dropped seven optional fields: question, points, summary, next, next_why, options, lead, headline

Unclear Which feature this schema belongs to and what removing these fields changes for the reader is not stated

Details 0 0 Feedback
What

An internal schema definition no longer includes seven optional fields it previously had: question, points, summary, next, next_why, options, lead, and headline.

Why

What this schema is used for isn't shown, so it's unclear what feature or output this affects.

·Internal
Under the hood
Useful1 Signal0
Updater

Native update cleans up orphaned staging directories on every check#

Native updater's orphaned-staging-folder cleanup was refactored into its own function, always run before plugin-lock cleanup

Details 0 0 Feedback
What

The cleanup logic that removes leftover staging directories from the native updater has been pulled out into its own dedicated function, and is now always run before the plugin-lock cleanup step, rather than being interleaved inline with it as before.

Why

This is a reordering and cleanup of internal update logic; the staging cleanup ran unconditionally before too, so this mainly changes the order and structure of the code rather than adding new behavior.

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
Git Internals

Git diff-stats helpers gained explicit cwd/git-dir plumbing for worktrees#

Git diff-stat helpers now take an explicit working directory instead of assuming the current one

Details 0 0 Feedback
What

A group of internal functions that compute git diff statistics now accept an explicit working directory (cwd) parameter, instead of relying on the ambient current directory or environment. This includes a new check for whether a merge is in progress, which now also takes a working directory.

Why

This makes these git-stats functions work correctly when operating on a git worktree other than the main one, rather than assuming the process's own current directory.

·Internal
Under the hood
Useful1 Signal0
Terminal Rendering

Diagnostics/plan-mode/task-status transcript rendering: minor helper renames, no behavior change spotted#

Transcript rendering helpers were renamed internally, with task-status messages using two of the new names

Details 0 0 Feedback
What

Several internal helper functions used in rendering diagnostics, plan mode, and task-status entries in the transcript were renamed. Task-status messages now go through two of these renamed helpers instead of their old-named counterparts.

Why

This appears to be an internal rename with no observed change in behavior.

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
Sandbox

Bash sandbox execution path — mostly cosmetic variable churn, no clear functional change#

Bash sandbox execution code renamed internally, with no functional change found

Details 0 0 Feedback
What

The code that runs bash commands, sandboxed or not, has had many of its internal variable names changed around building filesystem allow/deny lists, registering network access lists, and spawning subprocesses with telemetry. The underlying logic, including how write access is denied by default (keepBaseDenyWrite) and read access can be dropped (dropAllowRead), tracking of the working directory, and telemetry attributes, appears unchanged.

Why

This looks like internal cleanup rather than a behavior change, so nothing should look different when running 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 Signal0
Artifact Publish unclear

Artifact publish flow: mostly variable renaming, no clear behavior change found#

Artifact publish code reorganized internally with no behavior change found

Unclear Whether any subtle behavior change is hidden among the renaming was not confirmed either way.

Details 0 0 Feedback
What

A large block of the artifact-publish function was restructured, but the changes appear to be variable renaming and reordering from the build process rather than a functional change. The message explaining that the tag always takes precedence over the title, and the file-copy and ownership checks, work the same as before.

Why

No user-facing effect was found in this 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
Useful1 Signal0
API Client

A custom-header spread in the API client now includes an inert no-op spread#

A no-op false value was added to the API client's custom-header spread, with no apparent effect

Details 0 0 Feedback
What

Where the client's default headers previously spread in only one extra source (the ANTHROPIC_CUSTOM_HEADERS-derived anthropic-beta values), the code now also spreads a literal false value immediately before it.

Why

Spreading a boolean false into an object has no effect, so this appears to be an inert change with no impact on the headers Claude Code sends.

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
Slash Commands

Local/prompt slash-command dispatch: cosmetic-only rename, no behavior change found#

Slash-command dispatch code was renamed internally with no behavior change found

Details 0 0 Feedback
What

A large section of code handling local and prompt slash-command execution, including deferring commands to the engine, stacked skills, and UserPromptSubmit hook handling (which runs when you submit a prompt, before Claude processes it), was restructured under new minified variable names. The underlying deferSlashToEngine/engineDeferredSlash mechanism it relies on already existed previously.

Why

No functional change was found in this code; it appears to be a cosmetic rename from the build process.

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
Internals unclear

New logger extension with an explicit level#

A new internal logger extension creates a child logger with an explicit logging level

Unclear The finding doesn't say what triggers this or what pct represents, so it's unclear which part of Claude Code gains its own log level.

Details 0 0 Feedback
What

A new internal call, s.extend({ level: pct }), creates a child logger with a specific logging level set explicitly, rather than inheriting a default one.

Why

This is an internal logging change and doesn't directly affect what you see while using Claude Code, but it lets a specific part of the code log at its own chosen verbosity level.

·Internal
Under the hood
Useful1 Signal0
Terminal UI unclear

Notification rendering drops its keydown capture handler#

Notification popups no longer capture keydown events on their wrapper

Unclear What functionality onKeyDownCapture was providing, and what effect removing it has, is not stated in the finding.

Details 0 0 Feedback
What

The container that wraps notification popups in a column layout no longer passes an onKeyDownCapture handler, removing a key-capture hook that previously existed on that element.

Why

Removing this handler means the notification wrapper no longer intercepts key presses before they reach other parts of the interface, though the finding does not say what behavior this was previously enabling or blocking.

·Internal
Under the hood
Useful1 Signal0
Bash Safety

Write tool's dangerous-rm-on-unset-variable check refactored, message likely unchanged#

Internal cleanup of the dangerous rm-with-unset-variable safety check, no visible behavior change

Details 0 0 Feedback
What

The safety check that warns about bash commands like rm -rf $UNSET/* (deleting based on a variable that might be empty or unset) now builds its warning message through a shared helper function instead of assembling the text inline. The check still fires under the same internal event name, tengu_bash_dangerous_rm_too_complex.

Why

This is an internal refactor; the warning shown to users for this kind of risky command is expected to stay the same.

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
Prompt Input

Pasted-content merging centralized into a helper (uZ)#

Pasted-content merging logic consolidated into a shared uZ helper function

Details 0 0 Feedback
What

Several places in the code that merge pasted content and images (previously done by copying an old object and adding new entries in a loop) now call a shared helper function, uZ(...), to do this instead.

Why

This is an internal cleanup that consolidates duplicated logic into one place; it should not change what a user sees when pasting content.

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

Auto-mode Sonnet-5 classifier probe retained, log wording unchanged but refactored#

Internal refactor of the auto-mode Sonnet 5 classifier fallback, no behavior change

Details 0 0 Feedback
What

The internal logic that lets auto mode fall back to using Sonnet 5 as a classifier (and demotes on error) was refactored internally. The log wording stays the same.

Why

This is a code cleanup with no effect on what you see or how auto mode behaves.

·Internal
Under the hood
Useful1 Signal0
Thinking Display

Thinking-display error detection simplified#

Detection of a specific thinking-display API error now uses only a regex match, not an added string check

Details 0 0 Feedback
What

Claude Code detects a particular API error (a 400-level error about how 'thinking' output should be displayed) in order to handle it specially. The detection logic now relies only on a regular expression match against the error message, dropping a second string-matching condition that used to also trigger the detection.

Why

Simplifying to a single check reduces duplicate logic; the regex alone was apparently sufficient to catch the cases the extra string match was also catching.

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
Feature Gates

Renamed tengu feature flags (bright_ripple → jaunty_ember, cozy_pixel → humble_zephyr)#

Two experiment flags renamed: bright_ripple to jaunty_ember, cozy_pixel to humble_zephyr

Feature flag
tengu_jaunty_ember 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.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

tengu_humble_zephyr 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.277: off

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

tengu_bright_ripple 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.277: not a boolean we can read

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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.277: not a boolean we can read

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
What

Two internal experiment flags were renamed while keeping the same default (off):

The tengu_cozy_pixel flag was previously associated with a remote-control conversation-fork feature (fork_conversation) that lets a remote client branch a running session mid-conversation from a specific point.

Why

Nothing has been read yet about how either renamed gate, tengu_jaunty_ember or tengu_humble_zephyr, is currently configured, so it's not yet known whether the underlying features they control are active.

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 unclear

SDK schema-violation telemetry now samples from a variable rate constant#

SDK's outbound message schema-check sampling now uses a renamed rate variable

Unclear Whether the sampling rate value itself changed, or only the variable's name, isn't stated; the gate tengu_sdk_schema_violation hasn't been read for this site's account.

Details 0 0 Feedback
What

The SDK's internal check that occasionally validates outbound messages against a schema (and reports mismatches via the tengu_sdk_schema_violation telemetry event) still decides randomly whether to run, but now reads its sampling rate from a renamed internal variable, and some of its supporting schema/parsing helper functions were renamed.

Why

This looks like an internal refactor rather than a behavior change readers would notice.

·Internal
Under the hood
Useful1 Signal0
Remote Control unclear

Peer/freshness tracking caches reworked from WeakMap to an id-keyed store, with an offered-set added#

Internal peer and session-freshness tracking was rewritten from identity-based caches to id-based ones with a new offered set

Unclear What user-visible effect this internal rework has, if any, is not stated.

Details 0 0 Feedback
What

Two internal tracking mechanisms, one for tracking peers in a shared ledger and one for tracking remote sessions, were rewritten. They previously used WeakMap-based storage keyed by object identity, with a per-entry invalidation flag; they now use an id-keyed store built around an incrementing global counter (an "era"). The remote session tracker also gained a new offered set, which is cleared whenever a session registers.

Why

This is an internal rework of how Claude Code tracks freshness and offers for peers and remote sessions. The finding doesn't specify what user-visible problem it fixes, but it changes the underlying bookkeeping these features rely on.

·Internal
Under the hood
Useful1 Signal0
Updater

Version-config minimum-version check refactored into a separate function#

Startup version-check logic was refactored into its own function, no behavior change

Feature flag
tengu_version_config 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.277: not a boolean we can read

These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

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

Details 0 0 Feedback
What

The startup check that fetches the tengu_version_config setting and warns when your CLI version is too old has been reorganized: the logic that issues the warning and reports it now lives in its own separate function, instead of being written inline inside the same routine that fetches the config.

Why

This is an internal code cleanup with no described change in behavior; it should not change what you see when your CLI is out of date.

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
Directory Sync

Directory-sync (git-based cloud file sync) upload/retry engine internally reworked#

Directory sync's upload and retry engine was rewritten internally with no apparent behavior change

Details 0 0 Feedback
What

A large portion of the directory-sync engine, the system that keeps files synced between your local folders and the cloud via git, was restructured and renamed internally. This includes push/pull scheduling, the retry backoff used for a file's first upload, the "uncovered" result notices, and the status text shown while an upload is in progress.

Why

The rework appears to be internal cleanup rather than a behavior change, so directory sync should work the same as before from a user's perspective.

·Internal
Under the hood
Useful1 Signal0
Remote Control unclear

Remote Control / live-session messaging helpers renamed and reshuffled (agent-stopped handoff)#

Internal renaming and rework of the Remote Control cross-machine messaging and agent-stopped handoff code

Unclear The finding does not say whether this rework changes any observable behavior beyond the internal code structure.

Details 0 0 Feedback
What

The code behind sending a message to a session on another machine via Remote Control, and the handoff logic that runs when an agent stops, has been renamed and reorganized internally. The agent-stopped case now passes a live transcript and a parent prompt ID computed through new helper functions, replacing the previous versions of those same computations.

Why

This is an internal refactor of existing Remote Control messaging code; the finding does not indicate any change to what Remote Control does from a user's perspective.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

loop-command-nudge tip: renamed gating helpers, command referenced is /loop#

The /loop command's nudge tip had its internal gating checks renamed, no behavior change noted

Details 0 0 Feedback
/loop
What

The tip that nudges you toward the /loop command (which runs any prompt on a recurring schedule, useful for monitoring deploys, babysitting PRs, or polling status) now runs its eligibility checks through renamed internal functions. The tip's text and the /loop command itself are unchanged.

Why

This is an internal rename with no described effect on behavior; it doesn't change what /loop does or when the tip appears.

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
Plugin Hooks

Hooks-module re-entry warnings now name the module by label, not name, and swap origin computation#

Hooks re-entry log messages now show a module's label instead of its name

Details 0 0 Feedback
What

When Claude Code detects a plugin or hooks module trying to re-enter its own code (re-entry), the warning message logged now identifies the module by its label field instead of its name field, and computes the origin information differently internally.

Why

This is a diagnostic-message change: developers debugging plugin or hook re-entry issues will see a differently-sourced identifier and origin string in the log output.

·Internal
Under the hood
Useful1 Signal0
Team Memory

Synced project memory write-permission checks refactored (rename only, same logic)#

Internal rename in the synced project memory write-permission check, no logic change

Details 0 0 Feedback
What

The code that checks whether writes to synced project memory should be local-only or full read-write (rw) now calls renamed internal helper functions. The decision logic itself is unchanged.

Why

This is an internal cleanup with no effect on how project memory syncing 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
Prompt Queue

Command-queue module: internal renaming only#

Internal rename of command-queue functions, no behavior change

Details 0 0 Feedback
What

The functions that manage Claude Code's internal command queue (removing items, consuming them, filtering, clearing, resetting, and popping editable entries) were renamed internally. Their behavior is unchanged.

Why

This is a code-organization change with no user-visible effect.

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

Version bump to 2.1.277#

Claude Code version bumped to 2.1.277

Details 0 0 Feedback
2.1.277
What

This release updates the build's version number, build time, and git commit identifier to mark Claude Code 2.1.277.

Why

This is a routine version marker for the release.

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 unclear

Extensive variable/memo-slot renumbering in the Footer/model-picker component#

Internal renumbering of memoization slots in the Footer/model-picker component, no visible behavior change

Unclear Whether this renumbering accompanies any functional change is not established by the evidence.

Details 0 0 Feedback
What

The internal component that manages the footer, model switching, thinking-mode toggle, fast mode, and related dialogs (workflow panel, bash panel, model picker) had its internal memoization indexing renumbered. The visible logic and behavior appear the same as before.

Why

This looks like internal bookkeeping with no user-facing effect.

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
Terminal Rendering unclear

Cosmetic-looking diff in a deeply nested JSX conditional (symbol La)#

A tiny internal diff in icon-rendering code with no apparent visible effect

Unclear Whether this diff has any functional effect is not established by the evidence.

Details 0 0 Feedback
What

A small piece of internal rendering code for icon markup was rewritten, but the visible text and structure appear identical before and after.

Why

No user-facing effect is evident from this 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
Useful1 Signal0
MCP

MCP task watcher module now lazily loaded via bun chunk#

The MCP task watcher is now loaded lazily as its own bundled module

Details 0 0 Feedback
What

A helper function that needed the MCP (Model Context Protocol) task watcher now loads it lazily from its own bundled chunk, via an mcpTaskWatcherModule() export, alongside similar lazy-loaded modules already used for MCP client, auth, and SDK error classification.

Why

This is an internal loading-strategy change; loading the task watcher only when it's actually needed can help keep startup lighter, without changing what the watcher does.

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
Git Internals unclear

Curious no-op-looking .then() inserted into worktree detection telemetry chain#

An extra pass-through step was added to the internal chain that reports git worktree detection timing

Unclear The extra step returns its input unchanged, so it's unclear what purpose it serves or whether it has any visible effect.

Details 0 0 Feedback
What

The internal code path that measures how long git worktree detection takes (worktrees let you check out multiple branches of a repo at once) now runs one extra step before reporting the tengu_worktree_detection timing telemetry. This step reads the length of a list of results and then passes the list along unchanged.

Why

The step doesn't appear to alter the data, so this looks like an internal adjustment to how the timing is measured or logged rather than a change to worktree detection itself. It's not clear yet what purpose the extra step serves.

2 entries

Removedopen

Removed
Under the hood
Useful1 Signal1
Telemetry

Background thread classifier drops "turn brief" summarization#

Background thread classifier no longer produces its experimental "turn brief" summaries

Details 0 0 Feedback
What

The background classifier that generates recaps of project threads has had its "turn brief" summarization removed. It no longer computes this summary, no longer logs a turnBrief field on the tengu_bg_classify event, and no longer emits the separate turn_brief telemetry event.

Why

This rolls back a feature that had been added but was not yet fully wired up, cleaning up code and telemetry that were not being put to use.

Removed
You'll notice
Useful1 Signal1
Terminal UI

Removed 'todo-list' onboarding tip#

Removed the onboarding tip suggesting users ask Claude to make a todo list for complex tasks

Details 0 0 Feedback
What

Claude Code shows contextual tips and nudges to users. The tip suggesting that users ask Claude to create a todo list when working on complex tasks, to track progress and stay on track, has been removed from the list of tips shown.

Why

This tip will no longer appear as a suggestion, meaning one fewer onboarding hint about using todo lists surfaces to users.

Verbatim
Official · Anthropic

Anthropic’s official release notes

Published verbatim by Anthropic for v2.1.277. 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 87 bullets, 26 name something an entry on this page also names, 34 name something no entry here does, and 27 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 AGENTS.md support: in a project with no CLAUDE.md, Claude Code reads AGENTS.md instead; change it under "Project instructions" in /config (not yet on Bedrock, Vertex or Foundry) No entry names this
  • Added CLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1 for Claude apps gateways whose only egress is a forward proxy: every outbound request hands the proxy the hostname instead of resolving it locally Probably gateway-proxy-can-become-the-sole-egress-boundaryssrf-check, gateway-egress-boundary-mode-outbound-traffic-can-defer-add
  • Added an optional headers: map on Claude apps gateway upstreams, to send static headers to a proxy you run in front of a provider Nothing to match on
  • Added a line saying a background task's update is waiting when it finishes while a panel such as /tasks is open No entry names this
  • Fixed claude -p and Agent SDK sessions that could hang with no result after an internal error; they now report the error and exit with code 1 No entry names this
  • Fixed conversations failing every request with "text content blocks must be non-empty" when an earlier assistant turn held an empty text block beside other content, including after --resume No entry names this
  • Fixed being unexpectedly logged out when an older Claude Code build (for example an IDE extension's bundled CLI) runs on the same machine as the current one Nothing to match on
  • Fixed interactive start-up hanging or showing an error for ANTHROPIC_API_KEY users when ~/.claude.json holds a malformed customApiKeyResponses value No entry names this
  • Fixed update checks erroring every 30 minutes, and claude update hanging when a minimum or maximum version is set, if a proxy returns an invalid version; a malformed minimumVersion is now ignored Probably minimumversion-requiredmaximumversion-update-target-now
  • Fixed claude update on winget- or apk-managed installs reporting "up to date" when the version lookup failed No entry names this
  • Fixed claude plugin install sometimes failing and breaking the installed copy when reinstalling a plugin version that a session or another program was using; an unchanged copy is now left alone No entry names this
  • Fixed Grep and Glob reporting no matches when the search could not start because the system was out of processes, memory or file handles; they now return an error saying so Nothing to match on
  • Fixed the Write tool silently ending the turn as a declined permission when the target path is an existing directory; it now reports a clear error Nothing to match on
  • Fixed the Edit tool treating an escaped backslash followed by uXXXX text as a \uXXXX escape, which could make an edit of a non-ASCII character rewrite an escaped backslash sequence instead Probably edit-tools-uxxxx-escape-text-search-hardened-with-a-length
  • Fixed the Edit tool reporting "Invalid regular expression: regular expression too large" instead of "String not found in file" when a very large edit containing non-ASCII text did not match the file No entry names this
  • Fixed a turn ending early with "Path contains null bytes" when a tool call's file path contained \u0000 written as an escape sequence; escaped control characters now stay as literal text No entry names this
  • Fixed background sessions (claude --bg) exiting when a plugin's LSP server exited or closed its stdin No entry names this
  • Fixed a crash ("Type error") when opening /mcp or /plugin manage with a malformed claudeAiMcpEverConnected value in ~/.claude.json Probably plugin-uninstallremoval-flow-now-cleans-up-stray-reference, mcp-server-management-messages-now-branch-on-a-command-menu, failed-plugin-installs-show-more-of-the-real-error
  • Fixed a crash at launch when ~/.claude.json holds a malformed theme value No entry names this
  • Fixed a crash ("unrecoverable interface error") when the prompt held text containing terminal color codes, for example a prompt recalled from history or text loaded from the external editor No entry names this
  • Fixed a crash when resuming a session whose saved history holds an assistant message stored as a plain string Nothing to match on
  • Fixed sessions on slow or heavily loaded machines sometimes exiting with "Claude Code exited after an unrecoverable interface error" when the first spinner appeared No entry names this
  • Fixed a rare case where the screen could stop updating for the rest of the session after an internal rendering error Nothing to match on
  • Fixed a rare case on Windows where a turn could stop with an error such as "Out of memory" right after Claude replied, so that reply's tool calls never ran No entry names this
  • Fixed sessions continued after /clear (restart, --continue, --resume) missing part of their first message when a SessionStart hook printed output, causing a full prompt-cache miss Probably new-sdk-query-usagecost-fields-get-detailed-docs
  • Fixed messages from other agents (such as a subagent's SendMessage) that arrived mid-turn showing up below the "Ran N shell commands" row instead of where they arrived No entry names this
  • Fixed the "copied" notice not appearing after drag-selecting text in the fullscreen /resume picker and other panels that cover the prompt area No entry names this
  • Fixed $TMPDIR expanding empty in Bash commands that run outside the sandbox while sandboxing is enabled Probably sandboxed-shell-commands-get-a-tmpdir-backstop-when-referen
  • Fixed WebFetch and WebSearch in Cowork cloud sessions not telling Claude why a request was refused, such as a used-up fetch budget or an admin policy Nothing to match on
  • Fixed the Claude apps gateway's telemetry relay ignoring a collector hostname or domain listed in NO_PROXY when a proxy is set Probably no-proxy-aware-telemetry-relay-warning, gateway-egress-boundary-mode-outbound-traffic-can-defer-add
  • Fixed one malformed strictKnownMarketplaces or blockedMarketplaces entry silently disabling the whole enterprise marketplace policy Probably new-enterprise-validation-for-marketplace-restriction-settin, new-settings-validation-for-strictknownmarketplaces-and-bloc, new-client-side-settings-validation-flags-dead-entries-in-po
  • Fixed failed auto-updates leaving large staged downloads behind in ~/.cache/claude/staging No entry names this
  • Fixed /plugin not stripping terminal control characters from messages on the Installed tab, such as the error of a failed plugin update Probably plugin-uninstallremoval-flow-now-cleans-up-stray-reference, failed-plugin-installs-show-more-of-the-real-error
  • Fixed /plugin → Installed and /skills crashing when a skill or legacy command is named like a built-in Object property such as constructor or toString Probably plugin-uninstallremoval-flow-now-cleans-up-stray-reference, skills-with-reserved-names-get-a-new-reserved-name-overrid, skill-discovery-now-also-checks-the-primary-worktree-when-ru, failed-plugin-installs-show-more-of-the-real-error
  • Fixed /plugin closing with no message when every install in a multi-select failed Probably plugin-uninstallremoval-flow-now-cleans-up-stray-reference, failed-plugin-installs-show-more-of-the-real-error
  • Fixed uninstalled plugins reappearing as "failed to load" rows in /plugin Installed, and Remove not clearing such a row Probably plugin-uninstallremoval-flow-now-cleans-up-stray-reference, failed-plugin-installs-show-more-of-the-real-error
  • Fixed plugins from the official marketplace being recorded without their commit in installed_plugins.json, and installed_plugins.json keeping the old commit after updating a pinned-commit plugin No entry names this
  • Fixed plugin reload previews keeping every previewed copy of a plugin archive unpacked until exit, and overwriting the cached --plugin-url archive a reload falls back to when its download fails Probably new-disablesideloadflags-settings-key-hardened-against-malfo
  • Fixed Remote Control session bookkeeping failing when ~/.claude.json holds a malformed placeholder record No entry names this
  • Fixed the error after a revoked claude.ai login blaming an expired Anthropic profile; it now leads with /login Probably login-expired-message-and-dedicated-login-re-auth-copy
  • Fixed typed or pasted text occasionally coming out scrambled in the claude agents dispatch input during key repeat or very fast input No entry names this
  • Fixed a crash ("unrecoverable interface error") when resuming a session whose saved transcript contains a stop hook summary without a well-formed hook list No entry names this
  • Fixed Enter on a selected agent panel row doing nothing when keybindings.json rebinds Enter in the Chat context, for example to chat:queueSubmit No entry names this
  • Fixed PDF page reads on Windows failing when the working folder's path is long (about 120 characters or more) Nothing to match on
  • Fixed a headless resume (claude -p --resume, the SDK, a VS Code extension window reload) starting the session's cost and usage totals at zero; headless sessions now save their totals at exit No entry names this
  • Fixed project skills from the main repository not loading in --worktree sessions when .claude/skills is untracked Probably skill-discovery-now-also-checks-the-primary-worktree-when-ru
  • Fixed a sandbox.excludedCommands glob exempting an entire compound Bash command from the sandbox when only one part matched; every part must now match Probably new-sandbox-escape-detection-heuristics-for-sandboxexclude
  • Fixed resumed subagents and teammates re-rendering the MCP tool definitions they had loaded, which broke prompt caching for that agent Nothing to match on
  • Fixed rate-limited artifact publishes telling Claude to stop retrying; Claude is now told nothing was published and when to send the same publish again Nothing to match on
  • Fixed attachments recorded earlier in a conversation being re-rendered after a resume or relaunch, which dropped extended thinking and missed the prompt cache Nothing to match on
  • Fixed Console sign-in showing only "Request failed with status code 400" when the server refuses to create an API key; it now shows the server's message No entry names this
  • Fixed messages typed while Claude is still working sometimes being ignored by the model Nothing to match on
  • Improved session start-up for SDK and headless (-p) use: the first turn no longer waits on the per-directory CLAUDE.md lookup Nothing to match on
  • Improved the Claude apps gateway's loopback error messages to name CLAUDE_GATEWAY_ALLOW_LOOPBACK Probably gateway-egress-boundary-mode-outbound-traffic-can-defer-add, gateway-self-host-config-per-upstream-custom-headers-and-a
  • Improved /plugin Installed: an MCP server listed apart from its plugin now shows which plugin it belongs to Probably plugin-uninstallremoval-flow-now-cleans-up-stray-reference, failed-plugin-installs-show-more-of-the-real-error
  • Improved claude plugin install on an already-installed plugin: it now says when the marketplace offers a newer version and names the claude plugin update command No entry names this
  • Improved the startup notice overflow line under the logo: it now reads "N more notices hidden" instead of "+N more · /status" Probably new-notices-field-added-to-cloud-session-sdk-stream-schema, git-helper-functions-refactored-to-accept-an-explicit-workin, new-localtools-settings-panel-row
  • Improved prompt handling: invisible Unicode formatting and tag characters in a prompt are removed and the cleaned prompt is shown for review before it is sent Nothing to match on
  • Improved /ultrareview when there's nothing to review: messages say which case you're in, offer a command that reviews your latest commit, and a new repository's first commit is reviewed in full Probably ultrareview-can-now-review-a-first-commit-whole-with-confi
  • Improved artifact link handling so Claude reads claude.ai artifact links with the Artifact tool instead of WebFetch when that tool is available Nothing to match on
  • Improved the dangerous-rm permission prompt to name the flagged rm command and suggest a ${VAR:?} guard, so headless runs can recover No entry names this
  • Improved the Artifact tool's permission prompts: shorter sentences, pages and artifacts named by title or file name, and links listed after the text Nothing to match on
  • Changed Fable to always appear in /model on the Anthropic API; it is greyed out only when your organization's settings disable it Probably extensive-variablememo-slot-renumbering-in-the-footermodel
  • Changed the Bash sandbox instructions on Bedrock, Vertex and Foundry to the first-party wording, which frames the sandbox as the boundary of what the task was given Nothing to match on
  • Changed /ultrareview in non-interactive sessions to refuse when the repository has no base branch or shared history Probably ultrareview-can-now-review-a-first-commit-whole-with-confi
  • Changed subagent results to reach the main agent under a header marking them as subagent output, with the result indented, so text in a subagent's result cannot pass as the session's own instructions Nothing to match on
  • Changed workflow scripts' computed agent() prompts on Bedrock, Vertex and Foundry to reach the subagent framed as script-authored text, so the safety classifier does not read them as the user No entry names this
  • Removed the background Haiku auto-title request from claude -p runs launched outside an SDK or IDE No entry names this
  • Removed the deprecated TaskOutput tool; Claude reads a background task's output file with Read instead, and the taskOutputMaxChars setting and TASK_MAX_OUTPUT_LENGTH no longer have any effect Probably task-max-output-length-removed-from-recognized-settings-list, task-output-max-length-now-derived-per-output-host
  • [VSCode] Added a Sign out row to the panel menu, with /logout in the typed command menu No entry names this
  • [VSCode] Added background shells and other running tasks to the agent map, each with a Stop, and a typed /tasks that opens it No entry names this
  • [VSCode] Added a Copy response button on responses and a typed /copy Probably artifact-publish-now-handles-server-rate-limiting-explicitly
  • [VSCode] Added a one-time notice when inactive sessions are archived automatically, and an "Unarchive all" action on the Archived sessions group No entry names this
  • [VSCode] Added the session's cost and token usage to the Account & usage dialog and the session manager where plan limits do not apply (Vertex, Bedrock, Foundry, API key) Nothing to match on
  • [VSCode] Fixed the "General config" menu row showing /config usage text instead of opening settings, and made typed /mcp, /hooks, /memory, /rewind and similar commands open their dialogs Probably mcp-server-management-messages-now-branch-on-a-command-menu
  • [VSCode] Fixed the effort slider's level not persisting into later sessions on a model that already had a level saved with /effort Probably update-settings-tool-can-now-target-more-than-localsettings
  • [VSCode] Fixed Auto missing from the mode picker for conversations opened in an already-used panel when the saved model setting is a differently-cased alias such as "Sonnet" No entry names this
  • [VSCode] Fixed /fast not saving fast mode as the default, so it was lost when the extension relaunched Claude Code No entry names this
  • [Claude Code on the web] Added Personal and Organization sections to the environment picker on Team and Enterprise plans, and admins can now share a personal environment with the organization Nothing to match on
  • [Claude Code on the web] Changed organization environments to open as a read-only summary from the Code tab on Team and Enterprise plans, with editing under Admin settings → Cloud environments Nothing to match on
  • [Claude Code on the web] Fixed a cloud environment saved with Custom network access and no domains silently reverting to Trusted; the dialog now asks for at least one domain Nothing to match on
  • [Claude Code on the web] Changed the admin Claude Code setting labeled "Web" to "Cloud sessions" and removed the redundant read-only Mobile row beneath it Nothing to match on
  • [Claude Tag] Fixed routines created in a Slack channel on an Enterprise Grid org-wide install failing to read other public channels in their workspace when they ran Nothing to match on
  • [Claude Tag] Fixed the "Learn more" links on credential presets in Claude Tag access bundles to open each vendor's credential-setup page instead of a generic API reference No entry names this
  • [Claude Tag] Changed the Pylon credential preset in Claude Tag access bundles so admins can point it at Pylon's EU host Nothing to match on
  • [Claude Tag] Fixed Google Cloud credential forms in Claude Tag access bundles: a refused key file now says why, the website and scopes stay locked, and a rejected rotation keeps the pasted key Nothing to match on
  • [Claude Tag] Fixed the network events log in Claude Tag admin settings showing no response status for requests through connections that use AWS signing, client certificates or a custom CA Nothing to match on
System prompt

The appended system-reminder blocks moved: 1 line added, 1 line removed.

Claude Code, interactive mode

Documentation

What the docs did around this release

278 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 111 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