Claude Code v2.1.274

425 entries read v2.1.273 → v2.1.274 Markdown Unofficial

This build carries 28 gated additions that stay out of reach. A pasted-content wrapping tag can mark text as untrusted content, but the killswitch tengu_virtual_pancake defaults off, and a new built-in AGENTS.md plugin that can load AGENTS.md as project instructions alongside or instead of CLAUDE.md is also off by default. A hidden, server-armed fallback lane can now retry refused or failed model turns under different telemetry names, and a gated "start kit" feature (tengu_concurrent_candle, or CLAUDE_CODE_ARTIFACT_START_KIT) can auto-bundle an artifact type, design system, and REPL tool once switched on. Compaction has also gained the ability to carry forward a short summary of key attachments across a compaction boundary, and Projects threads can now label replies as sent directly, relayed, or from the timeline behind a killswitch that defaults off.

Of 231 shipped changes, a new built-in "Claude Test" plugin runs plain-language specs against your local dev server in a real browser and reports pass or fail, and the Plugin SDK adds agent.register and session.refreshAgents calls alongside a new register-agent hook, so plugins can define custom agents at runtime. Org admins can now force their default reasoning-effort level onto all users, and public artifact reads from outside your organization are blocked unless a person approved them. Several new environment variables landed too: CLAUDE_CODE_MCP_STARTUP_WAIT_MS caps how long Claude Code waits for MCP servers to start, CLAUDE_CODE_FOOTER_INDICATOR overrides the status line's footer pill text, and CLAUDE_CODE_HOST_SESSION_ID is now recognized for passthrough. The claude gateway command also shuts down gracefully on SIGTERM/SIGINT instead of exiting abruptly, and the MCP client SDK's compiled fallback runtime flipped from v1 to v2.

Among 42 fixes, stdio MCP servers that exit right after a startup probe times out now get one automatic restart, and worktree cleanup now checks whether the .git file still exists before assuming a worktree is safe to remove. Clicking in the terminal UI no longer registers hits on elements clipped outside their scrollable or hidden container, and plugin config sync no longer drops managed plugin entries when remote policy settings haven't caught up yet. OAuth device-flow login now shows a clear message when sign-in attempts hit "slow_down" rate limiting, and device IDs are now validated against a pattern before being trusted for bridge or session connections. Very long proxied requests can also skip the HTTP client's own timeout when a longer timeout is explicitly requested.

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

What probably matters to you

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

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

New built-in 'diff' and 'claude-test' plugins added#

Claude Code now ships built-in 'diff' and 'claude-test' plugins, loaded through a new lazy plugin-loading mechanism

Unclear Whether the tengu_mellow_hollerith gate is switched on for any account is unread, so nothing can be said about its status.

Details 0 0 Feedback
/claude-test

What

  • Two new built-in plugin bundles, named diff and claude-test, are now loaded alongside the existing built-in plugins (sec-default, agents-md, plugin-authoring, tips).
  • The claude-test plugin adds skills (claude-test, claude-test-execute, claude-test-draft), agents (explorer, author, runner), and a browser automation server so Claude Code can run plain-language specs from .claude-test/specs/ against your local dev server in a real headless browser and report pass/fail results with screenshots, via a new /claude-test command.
  • Built-in plugin registration itself was refactored from immediate registration calls into a named, lazy-loading pattern.

Why This adds a ready-to-use way to write and run browser-based tests for your app directly from Claude Code, without installing a separate plugin.

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 Paste Handling Notable no docs found

Pasted content can be tagged as untrusted, gated behind a flag#

Claude Code can now wrap pasted text in tags marking it as untrusted, with matching submit-time re-tagging and system-prompt guidance, all behind the tengu_virtual_pancake flag (off by default).

Feature flag
tengu_virtual_pancake 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_virtual_pancake

What

  • Pasted text in a message can now be wrapped in an id-tagged block with a note that the content inside is untrusted pasted text, applied at message rendering, paste handling, and prompt construction. This is controlled by the tengu_virtual_pancake flag, which defaults to off.
  • Before a message is submitted, a new pipeline can re-wrap pasted blocks (after placeholder substitution) in <pasted_content id="..."> tags, and marks the queued message with pasteTagged: true when it does.
  • The system prompt's Harness section can include a new note explaining that text inside pasted-content tags may contain instructions the user didn't write, that such instructions should only be followed when the user's own message asks for it, and that the tag's random id should never be mentioned to the user.

Why This groundwork lets Claude Code mark pasted text as a separate, less-trusted source from the user's own typed instructions, reducing the risk that instructions hidden in pasted content get followed unintentionally. The feature is currently off by default while it's being rolled out.

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 2 File Sharing unclear

Files can now be shared into a project's Library folder#

Claude can now send files into a project's shared Library folder in bridge sessions, backed by a multi-host projectFilesDoor lookup

Unclear Whether this project-Library delivery path is active for any given account is unknown, since nothing has been read yet about the tengu_bridge_child_file_upload gate that controls it.

Feature flag
tengu_bridge_child_file_upload 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback

What

  • The SendUserFile tool can now place files in a project's shared Library folder (the "project files door"), in addition to its previous destinations. Claude must declare attached_outputs: [{ kind: 'file', ref: <path> }] for delivered files to show up on the thread. This destination is gated to bridge child sessions.
  • SendUserFile also gained a checkPermissions step before it runs, on top of the existing validateInput step.
  • The projectFilesDoor lookup (which supplies channel id, session id, API base URL, and a bearer-token getter) is now aggregated across every active mount host at session startup, returning the first host that has one, instead of assuming a single host. This matters for bridge/multi-agent sessions where more than one host connection can be live at once.

Why This lets Claude deliver files to a shared project location visible to the whole project, not just the current conversation, and makes that delivery work correctly when a session is bridged across multiple hosts at once.

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 4 Plugins Notable

Plugins can register custom agents at runtime#

Plugins can now register their own custom agents, which get merged into the session's available agents automatically

Details 1 0 Feedback

What

  • Plugins gain a new function hook, register_agent (alongside the existing hooks for registering commands and tools), letting a plugin define a custom agent.
  • The plugin SDK exposes an agent.register call that takes a name, description, and prompt (plus other fields), validating that the name only contains letters, digits, underscores, or hyphens and is no longer than 64 characters.
  • Agents registered this way at runtime are merged into the session's list of available agents, tagged as coming from a plugin (source: "plugin", registeredAtRunTime: true).
  • The session/engine layer gains a refreshAgents method, mirroring the existing refreshCommands, to re-read custom agent definitions on demand.

Why This lets plugins extend Claude Code with their own specialized agents without requiring a restart, the same way plugins can already register custom commands and tools.

In dev
Nothing to try yet
Useful3 Signal4
Group of 3 Model Fallback Notable no docs found unclear

New silent fallback lane and arm_source telemetry for retried model turns#

A quieter, server-controlled retry path for refused or failed model turns now records which mechanism armed it

Unclear None of the related gates (tengu_convolute_arcades_retry, tengu_convolute_arcades_tools, tengu_fallback_sweep_tools, tengu_refusal_fallback_triggered) have been read, so nothing can be said about whether this silent lane is active for any account.

Details 0 0 Feedback
convolute_arcadesx-cc-tender-quilt

What

  • A new "silent lane" fallback mechanism sits alongside the existing, user-visible refusal-fallback retry. It can be armed either by a remote config key (convolute_arcades) or by the server sending a response header (x-cc-tender-quilt: 1), which the client latches onto.
  • When armed this way, retries are logged under differently-named, less descriptive telemetry events instead of the usual, plainly-named refusal-fallback events.
  • Telemetry events, including the invalid-content-policy refusal event and tengu_api_success, now attach an arm_source field identifying which mechanism (config key or server header) armed the retry.
  • tengu_api_success also gains a tender_quilt_header flag, set to true when a low-priority/background header condition is present.

Why

This lets Claude Code retry refused or failed turns through a quieter path when the server signals it should, while telemetry now records exactly which mechanism triggered the retry, which helps diagnose why a retry happened.

+New
You'll notice
Useful4 Signal3
Group of 2 Artifacts unclear

Artifact watch tool gains a 'live' mode distinct from 'durable'#

The artifact watch tool now supports a 'live' watch mode alongside 'durable', with reworded messaging about what watching does

Unclear The finding does not say what distinguishes 'live' watching from 'durable' watching in practice, beyond the unwatch description.

Details 0 0 Feedback
livedurable

What

The artifact watch tool's internal checks now branch on a third mode, live, in addition to the existing durable mode (and a default/off state). This changes:

  • The permission-ask messaging shown when enabling watch, which now accounts for the live mode.
  • The description shown for unwatch when live watching is active: it now says unwatching "stops keeping track of new versions published elsewhere" instead of the old wording about "republish notifications and, in cloud sessions, comment wakes."
  • The general help text for watch/unwatch/status, reworded from describing "notify" semantics to describing that Claude Code "keeps track of new versions," and clarifying that a republish elsewhere "starts no turn and sends no notification" in live mode.

Why

This distinguishes a lighter-weight "live" tracking mode from the existing "durable" watch mode and corrects the tool's description so it no longer overpromises an active notification, matching the new passive version-tracking behavior.

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
Project Instructions Notable unclear

New built-in AGENTS.md plugin (off by default)#

A new built-in agents-md plugin can load AGENTS.md as project instructions instead of, or alongside, CLAUDE.md

Unclear Whether this plugin is active for any given account is unknown, since nothing has been read yet about the tengu_agents_md_mod gate.

Feature flag
tengu_agents_md_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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 1 0 Feedback
AGENTS.mdprojectInstructions
What

A new bundled plugin called "agents-md" can load an AGENTS.md file as project instructions instead of, or together with, CLAUDE.md. This is controlled by a projectInstructions user config option with four values:

  • claude (the default): use CLAUDE.md only
  • agents-fallback: fall back to AGENTS.md when there's no CLAUDE.md
  • both: use both files
  • none: use neither

When a project has an AGENTS.md but no CLAUDE.md and the setting is left at claude, Claude Code shows a one-time toast suggesting the user switch the setting to agents-fallback to load it.

Why

This gives projects that already use the AGENTS.md convention a way to have Claude Code pick it up as project instructions.

Related

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

+New
Nothing to try yet
Useful4 Signal4
Skills

New skill-proposal tool surfaces recurring procedures as skill suggestions#

New skill-proposal card suggests skills based on procedures that recur in a session

Details 0 0 Feedback
What

A new render-only tool can show a review card that proposes up to 3 skills (reusable, packaged sets of instructions) when it notices a multi-step procedure recurring in the current session. Proposals can be brand-new skills or improvements to skills the user already owns. This tool cannot write files itself, cannot update plugin skills or Claude Code's own built-in skills, and any proposed improvement must replace the skill's entire SKILL.md file rather than editing part of it.

Why

This surfaces an opportunity to turn a repeated manual workflow into a reusable skill, without the tool silently modifying files on its own; the user still reviews and applies the suggestion.

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

Plugin SDK ($.) gains agent.register and session.refreshAgents, plus a system-prompt-delivered flag consumable once#

Plugin SDK adds agent.register and session.refreshAgents, plus a one-shot flag for whether the system prompt was delivered

Details 0 0 Feedback
agent.register
What

The plugin system's internal dispatch table adds an agent.register action, which validates that a prompt is provided and that the description meets length rules, sitting alongside the existing agent.list action. The headless session's $ scripting surface also gains a refreshAgents() method next to the existing refreshCommands().

Separately, the turn-runner gains a takeSystemPromptDelivered option: a one-shot getter that reads and then clears an internal flag tracking whether the system prompt was delivered.

Why

This lets plugins register new agents programmatically and refresh the list of available agents, and lets other code check exactly once whether the system prompt has already been sent for a turn.

Related

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

Improved
You'll notice
Useful3 Signal3
Group of 3 Artifacts Notable unclear

Public artifacts from outside your organization are now denied by default unless approved#

Reading or writing a public artifact from outside your current organization is now blocked unless a person has approved it

Unclear Whether this behavior is active for any given account depends on the tengu_cobalt_plinth_sedge setting, which no reading has yet confirmed for this release.

Feature flag
tengu_cobalt_plinth_sedge 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.274: 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.274. 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 "public_unasked" reason code and reject path deny reading a public artifact from outside a user's organization unless a person has approved it, meaning no fetch happens at all without approval; a separate "tokenless" public-read path is gated the same way.
  • A new deny check fires whenever an artifact's outsideOrgReader flag is set: any read or write against a public artifact from outside the user's current organization is denied outright, with a message explaining that nothing in the session can reach it.
  • New helpers read a cached, account/organization-scoped "artifact roster" to track approvals, and a dedicated message supplies the refusal text shown when fetching a public artifact from outside the user's organization and nobody has approved it.

Why

This stops artifacts belonging to other organizations from being silently read or modified, requiring explicit human approval first.

In dev
Nothing to try yet
Useful3 Signal4
Background Classifier no docs found unclear

Background classifier gains a (currently dark) turn-brief tail-length knob#

Background classifier gets a new, currently inactive setting to control how much recent conversation text it quotes

Unclear Whether the tengu_bg_classifier_config or tengu_bg_classify gates are switched on for any account is unread, so nothing can be said about their status.

Details 1 0 Feedback
turnBriefTailChars
What

Claude Code runs a background classifier behind the scenes to judge the state of a conversation turn. It has gained a new turnBriefTailChars setting that would control how many trailing characters of the turn's text get quoted when building a "turn brief" summary, replacing a fixed-length cutoff. When this setting is present, the classifier can also produce this new 'turn brief' output, using a larger token budget than before, and report it through a new turn_brief telemetry event alongside the existing background-classification events.

However, the function that would supply this setting is hard-coded to return nothing in this build, so the new behavior cannot actually take effect yet.

Why

This lays groundwork for a future feature that summarizes what happened at the end of a turn, but it has no effect on the current release.

In dev
Nothing to try yet
Useful3 Signal4
Artifacts Notable no docs found

New artifact "quickstart start kit" feature, gated by tengu_concurrent_candle / CLAUDE_CODE_ARTIFACT_START_KIT#

A new gated 'start kit' feature can auto-bundle an artifact type, design system, and REPL tool

Feature flag
tengu_concurrent_candle 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_concurrent_candleCLAUDE_CODE_ARTIFACT_START_KIT

**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
Internals

SSE transport can parse a worker attestation policy header, but nothing installs the sink#

SSE network transport can parse a worker attestation policy header, but nothing installs it yet

Details 0 0 Feedback
What

The SSE (server-sent events, a way of streaming data over HTTP) transport used for network connections gained the ability to hold a "worker attestation policy sink" and, if one is set, to add a worker_capabilities=attestation-floor/1 marker to its connection URL and parse a new x-ccr-attestation-policy response header. That header can specify a mode (off, observe, or enforce) and an acceptance level such as VERIFIED_BY_GATE. Nothing in this build actually sets the sink, so none of this runs yet.

Why

This is groundwork for a future worker-attestation feature (a way to verify properties of the machine handling a request) that isn't wired up or active in this build.

+New
Use it now
Useful4 Signal2
Group of 2 Terminal UI SDK

Ink layout now supports CSS-style positioning, with overflow clipping#

Box/View layout styles now accept position: absolute/relative with offsets, and overflowing content from positioned elements gets clipped

Details 0 0 Feedback
position

What

  • The style validator for Box/View-style layout elements now accepts a position property (relative or absolute), along with top, left, right, and bottom offsets. This was previously unsupported.
  • When a rendered component tree uses one of these absolute/position-styled elements (and the view isn't fullscreen, or is a static frame), the render node now automatically gets overflow: "hidden" set on it, clipping content that would otherwise spill outside its bounds.

Why This lets components be positioned precisely, such as an overlay or badge placed at a specific offset, without its content spilling outside where it's meant to appear.

Improved
You'll notice
Useful4 Signal2
Group of 4 Artifacts

Artifacts can route documents to a Claude Docs connector, with auto_open adjusted accordingly#

Artifacts now hand document creation off to a connected Claude Docs connector when available, and auto_open guidance was updated to match

Details 0 0 Feedback

What

  • When a first-party connector for reading and writing documents (Claude Docs) is attached, the artifacts flow now routes document creation to that connector or its skill instead of creating an Artifact, falling back to the normal quickstart flow otherwise.
  • A validation rule that used to block the auto_open: "after_first_write" option under a certain tool-availability condition has been removed from artifact publishing.
  • The instructions Claude sees when starting a new Artifact now explicitly say auto_open: "after_first_write" should never be used for a type whose content is written through a connector, such as a Claude Docs document.
  • The description of the auto_open parameter on the artifact-creation tool was simplified, dropping an extra sentence that used to appear only when a certain feature flag was on.

Why This avoids opening an artifact automatically for content that is actually being created through a connector like Claude Docs, keeping the auto-open behavior consistent with where the content is really going.

+New
Use it now
Useful4 Signal3
Model Settings Notable no docs found

Org admins can force their default reasoning-effort level onto users#

Org admins can now force their default reasoning effort level onto all users

Details 0 0 Feedback
org_model_default.override_user_effort
What

A new server-side configuration field, org_model_default.override_user_effort, lets an organization force its default effort level (effortLevel, which sets how much reasoning a model does by default) onto all its users for a given model. When this field is set to true, Claude Code's effort-level resolution uses the organization's default_effort_level instead of a user's own saved per-model effort setting.

Why

This gives organizations a way to standardize reasoning effort across their users, overriding individual preferences when the admin wants consistent behavior or cost control.

Related

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

+New
Use it now
Useful4 Signal3
Plugins

Plugin-provided agent definitions can be registered and forgotten dynamically#

Plugins can now register and later unregister their own agent definitions dynamically

Details 0 0 Feedback
What

Plugins can now register custom agent definitions (subagents, i.e. specialized helper agents a plugin provides) under a composite key combining the plugin's name and the agent's name. Plugins can also forget these registrations later, which triggers the agent list to refresh automatically.

Why

This lets plugins add and remove their own agents dynamically, for example if a plugin is disabled or reloaded, without requiring a restart to update the list of available agents.

+New
Use it now
Useful5 Signal2
MCP Notable

New env var caps/controls MCP connector startup wait#

New CLAUDE_CODE_MCP_STARTUP_WAIT_MS env var controls how long Claude Code waits for MCP servers to start

Details 0 0 Feedback
CLAUDE_CODE_MCP_STARTUP_WAIT_MS
What

A new environment variable, CLAUDE_CODE_MCP_STARTUP_WAIT_MS, controls how long Claude Code waits for MCP (Model Context Protocol) connector servers to start up. When set, it overrides the normally computed wait time, though it's still capped by an internal maximum. Setting it to a value greater than 0 also switches on waiting for 'deferrable' MCP connections, which otherwise may not be waited for.

Why

This gives users a way to tune startup behavior for MCP servers that are slow to connect, instead of being stuck with a fixed built-in timeout.

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

Type-locked artifact reads can skip the raw-HTML disk save ("fresh read")#

Artifact reads for type-locked artifacts can now return data without first writing it to disk

Details 0 0 Feedback
CLAUDE_CODE_ARTIFACT_FRESH_READ
What

When an artifact (a file-like object Claude Code creates and manages, such as a document or piece of generated content) is "type-locked" and you own it but haven't yet saved your own files to it, reading it via artifact_bash can now compute a fresh summary directly instead of always writing a raw HTML copy to disk first. This path is controlled by feature flags (typeCatalogOn, typeCreateOn) and a new environment variable, CLAUDE_CODE_ARTIFACT_FRESH_READ.

Why

Skipping the unnecessary disk write for a fresh, unmodified artifact should make reads faster and avoid creating file copies that aren't needed yet.

Related

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

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

HTTP MCP servers now default to auto-negotiating protocol version#

MCP servers of type 'http' now default to auto-negotiating the protocol version instead of falling back to legacy mode

Feature flag
tengu_mcp_protocol_negotiation_http 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_mcp_protocol_negotiation_http

What

For MCP servers configured with type http, the fallback behavior for protocol-version negotiation changed: it now defaults to auto mode (attempting version probing/auto-negotiation) instead of going straight to legacy mode. This is controlled by the gate tengu_mcp_protocol_negotiation_http, which now defaults to enabled (true) unless explicitly turned off. Other MCP connection types (claudeai, stdio, ccr-proxy) are unaffected and still default to legacy fallback.

Why

Auto-negotiation lets Claude Code and an HTTP-based MCP server agree on the best protocol version to use, rather than always assuming the older legacy protocol. This can improve compatibility and unlock newer protocol features automatically for HTTP MCP servers, without any configuration change needed.

Related

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

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

MCP client SDK now defaults to v2#

Claude Code's MCP client runtime now defaults to SDK generation v2 instead of v1, controlled by the tengu_brindle_causeway gate.

Feature flag
tengu_brindle_causeway 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_brindle_causeway

What

  • The function that picks which MCP client SDK generation ('v1' or 'v2') a session uses now defaults to 'v2' instead of 'v1' when the tengu_brindle_causeway gate is at its default value (the gate's default flipped from off to on this release).
  • The MCP_SDK_GENERATION environment variable still overrides this in either direction.

Why Sessions that don't explicitly set MCP_SDK_GENERATION will now use the newer v2 MCP client runtime by default instead of v1.

Improved
You'll notice
Useful4 Signal2
Model Pinning

Model-pinning setup wizard generalized to support both Vertex AI and Bedrock#

The onboarding model-pinning wizard now supports Bedrock as well as Vertex AI

Details 0 0 Feedback
What

The onboarding screen for "pinning" model versions (locking Claude Code to specific model versions for Sonnet, Opus, Haiku, and Fable, rather than always trying newly released models) was rewritten to work with more than one provider. It now takes a provider object that supplies tier defaults, candidate model lists, a probe check, and error labeling, and two providers are wired in:

  • Amazon Bedrock, with automatic AWS profile discovery and region-specific error handling
  • Vertex AI, using the same flow as before

The wizard warns that without pinning, Claude Code will try newly-shipped models even if your account or project hasn't enabled them yet, which can cause connection failures until you pin to a model you have access to or enable the new one.

Why

Bedrock users get the same guided model-pinning setup that was previously only available for Vertex AI, reducing the chance of unexpected connection failures when a new model ships that their account hasn't enabled.

In dev
Nothing to try yet
Useful2 Signal3
Prompt Experiments Notable no docs found

New bash-first prompt steer variant experiment slot#

A new bashFirstSteerVariant experiment slot was added, gated by tengu_cozy_teapot and overridable via CLAUDE_CODE_COZY_TEAPOT

Feature flag
tengu_cozy_teapot 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_cozy_teapotCLAUDE_CODE_COZY_TEAPOT
What

The per-session experiment-memoization system gained a new field, bashFirstSteerVariant, joining existing experiment slots like preReadLineDropped, leanPrompt, modelForPrompt, and delegationCostsFirst. It defaults to "strict" and can be controlled by the tengu_cozy_teapot gate or overridden with the CLAUDE_CODE_COZY_TEAPOT environment variable.

Why

This is infrastructure for testing variants of the 'bash-first' steering wording that pushes Claude toward using Bash for edits, allowing the behavior to be adjusted per session without a code change.

Gate state

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

Agent spawn config now recognizes an 'isolation' key end-to-end#

Spawning an agent can now carry an 'isolation' setting through to its configuration

Details 0 0 Feedback
isolation
What

The list of settings recognized when serializing an agent's spawn configuration (for example, for the SDK) now includes isolation, alongside existing settings like background and omitClaudeMd. Separately, the schema validating spawn options for isolation, observer, and observer message was refactored to use shared helper definitions instead of separate inline ones.

Why

This lets an agent's isolation setting actually be carried through when its configuration is passed along, rather than being dropped during serialization.

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

Fleet view background-agent relaunch can now target a specific agent type#

Fleet view can now relaunch a background agent as a specific agent type after an update

Details 0 0 Feedback
--agent
What

The Fleet view (the screen listing background jobs/agents) now accepts a typedAgent value, which flows through to the helper that relaunches the Fleet UI after an app update. When relaunching, this is passed via a new --agent argument, alongside the existing cwdFilter and dispatchDefaults (with an inherited default permission mode stripped out).

Why

This lets a background agent relaunched after an update keep running as the specific agent type it was dispatched with, rather than losing that setting across the relaunch.

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

New CLAUDE_CODE_HOST_SESSION_ID passthrough env var#

Claude Code now recognizes a CLAUDE_CODE_HOST_SESSION_ID environment variable

Unclear The finding does not say what consumes this value or what behavior depends on it.

Details 0 0 Feedback
CLAUDE_CODE_HOST_SESSION_ID
What

Claude Code now forwards and recognizes a new environment variable, CLAUDE_CODE_HOST_SESSION_ID, alongside existing ones like CLAUDE_CODE_ENTRYPOINT and CLAUDE_CODE_IS_COWORK.

Why

This lets the host environment that launches Claude Code pass through an identifier for the session it is running inside, which other internal logic (such as entry-point-specific gating) can rely on.

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
Terminal UI SDK

New height-locking layout primitive for terminal UI#

New terminal UI component can lock a box's minimum height to prevent output from jumping around, e.g. for parked sessions

Details 0 0 Feedback
What

A new layout building block for the terminal interface renders its contents in a box whose minimum height can be locked to the last-measured size. The lock can apply 'always' or only while the content is offscreen, and a restartKey can reset the lock. It's used to keep output height stable in cases where content might otherwise jump around, such as parked or background sessions.

Why

This prevents the terminal display from visibly resizing or jumping when content changes, particularly for sessions running in the background, making the interface feel steadier.

+New
Use it now
Useful3 Signal2
Host Integrations

Structured startup-refusal reasons for host integrations#

New structured reason codes let a host app tell why Claude Code refused to start

Details 0 0 Feedback
What

Claude Code can now report a specific, structured reason when it refuses to start, instead of just failing silently or with a generic message. This is meant for a host application (like an IDE extension or desktop wrapper) that embeds Claude Code, so it can react to the specific cause rather than just retrying blindly. New reason values include:

  • worktree_resume_refused and worktree_unverified (problems resuming a git worktree, an isolated working copy of a repo)
  • session_held_by_background (another process is using the session)
  • bypass_root (a root-related safety check)
  • shell_tool_missing, tied to the CLAUDE_CODE_USE_POWERSHELL_TOOL setting
  • cli_version_too_old
  • gateway_signin_required and gateway_access_denied
  • org_pin_api_key_conflict, org_verify_failed, org_pin_mismatch
  • managed_settings_invalid and remote_settings_required_unavailable
  • proxy_invalid
  • temp_dir_unusable and cwd_unavailable
Why

Giving each startup failure a distinct machine-readable reason lets host applications show the right message or take the right corrective action automatically, rather than treating every startup refusal the same way.

Related

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

Improved
Use it now
Useful3 Signal2
Gateway Notable

claude gateway gets graceful shutdown on SIGTERM/SIGINT#

claude gateway now shuts down gracefully on SIGTERM/SIGINT instead of exiting abruptly

Details 0 0 Feedback
CLAUDE_GATEWAY_DRAIN_TIMEOUT_MS
What

The claude gateway command now installs signal handlers for SIGTERM and SIGINT (the standard shutdown and interrupt signals). On receiving one, it stops accepting new connections and drains any in-flight requests, waiting up to CLAUDE_GATEWAY_DRAIN_TIMEOUT_MS (default 25000ms) plus a 3-second grace buffer before exiting. If a second signal arrives while shutting down, the gateway force-closes and exits immediately.

Why

This lets requests already in progress finish cleanly when the gateway is stopped or restarted, instead of being cut off mid-flight, while still allowing an impatient operator to force an immediate exit.

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 Signal1
Group of 2 Artifacts

Artifact and skill publishing can now set a content type per file#

Artifact and skill file entries can now be an object specifying a source path and content type, not just a plain path string

Details 0 0 Feedback
contentType

What

When creating or publishing an Artifact or Skill, the files map used to only accept a plain path string for each file. It now also accepts an object with a from field (the source path) and a contentType field, letting a publish call specify a MIME/content type per uploaded file instead of only where it comes from.

The internal handler that admits these files, checking things like path traversal and size limits, was updated to read the source path from from when a file entry uses this new object form, rather than assuming it's always a bare string.

Why

This lets publishers control the content type of individual uploaded files (for example, forcing a file to be treated as plain text or a specific format) rather than relying on automatic detection.

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 Signal1
Group of 2 Gateway Notable

Enterprise gateway gets clearer rate-limit and connection diagnostics#

The self-hosted gateway now gives clearer errors for Postgres connect timeouts, sign-in rate limits, X-Forwarded-For mismatches, and OAuth device-flow limits

Details 0 0 Feedback
store.connect_timeout_seconds

What

  • The gateway server now reads a store.connect_timeout_seconds config value, wraps its initial Postgres connection attempt in a retrying wrapper, and shows a clearer boot error naming that setting if the connection fails.
  • It logs a throttled (once-per-minute) warning when sign-in rate limits (rate_limits.device_authorization.max, rate_limits.device_verify.max) are hit, and a new warning when a request carries an X-Forwarded-For header but its source isn't listed in listen.trusted_proxies.
  • When the /oauth/device_authorization or /device (verify) endpoints hit these same rate limits, the response to the client now explains that the limit may be caused by shared-network noise and points admins at the specific config keys to adjust, instead of a generic "Too many attempts" message. Each rate-limited path also now fires a telemetry call.

Why These changes make it much easier for administrators running a self-hosted gateway to diagnose why sign-ins are being rate-limited or connections are failing, instead of seeing generic errors with no pointer to the relevant setting.

Related

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

+New
Use it now
Useful3 Signal1
Gateway Notable

New connect_timeout_seconds config field for gateway DB pool#

Self-hosted gateway's database config adds a connect_timeout_seconds setting

Details 0 0 Feedback
connect_timeout_seconds
What

The configuration schema for the self-hosted gateway's database connection pool gains a new field, connect_timeout_seconds. It accepts an integer between 1 and 60, defaulting to 5, and sits alongside the existing max_connections setting.

Why

This lets operators of a self-hosted gateway tune how long the database pool waits when establishing a connection, instead of relying on a fixed, unconfigurable timeout.

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 Signal1
Telemetry Notable no docs found

New environment variable CLAUDE_CODE_EMIT_STARTUP_TIMING#

A new CLAUDE_CODE_EMIT_STARTUP_TIMING environment variable turns on startup-timing telemetry outside remote sessions

Details 0 0 Feedback
CLAUDE_CODE_EMIT_STARTUP_TIMING
What

Startup-timing telemetry, which used to only get collected in remote or CCR mode, now also fires when the new CLAUDE_CODE_EMIT_STARTUP_TIMING environment variable is set, even in a regular local session.

Why

This lets someone measure Claude Code's startup timing outside of remote sessions, useful for diagnosing slow starts without needing to run remotely.

Related

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

+New
Use it now
Useful2 Signal1
Group of 2 Telemetry unclear

Managed settings can now be reported to telemetry#

A new OTEL_LOG_MANAGED_SETTINGS env var adds managed/policy settings details to telemetry, with sensitive values redacted

Unclear What effect setting OTEL_LOG_MANAGED_SETTINGS has is not specified beyond it being a recognized telemetry-related variable.

Details 0 0 Feedback
OTEL_LOG_MANAGED_SETTINGS

What

  • A new environment variable, OTEL_LOG_MANAGED_SETTINGS, is now recognized as an OpenTelemetry-related setting.
  • A new telemetry event, managed_settings_resolved, reports metadata about how managed (policy-controlled) settings were resolved: their source, behavior, helper state, whether a helper was applied, and the entry's key, path, and script hash.
  • If OTEL_LOG_MANAGED_SETTINGS is set, this event also includes the actual resolved settings content. Values are redacted to [REDACTED] unless they match the expected tool/permission-rule/value schema, are known tool names, or match an mcp__ tool naming pattern.

Why

This gives administrators visibility into how managed/policy settings are being resolved across an organization's machines, useful for auditing and debugging configuration issues, while redaction keeps unexpected or sensitive values from leaking into telemetry unless explicitly opted in.

Related

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

+New
Use it now
Useful2 Signal1
Group of 5 SDK

Startup failures are now reported as structured JSON in stream-json/SDK mode#

CLI startup failures can now be reported as structured JSON results for SDK and programmatic callers, not just printed to stderr

Details 0 0 Feedback
CLAUDE_CODE_STARTUP_FAILURE_RESULTS

What

  • When Claude Code fails to start (for example: the CLI is too old for the workspace/server, no usable shell tool is found on Windows, proxy configuration is invalid, or another process already holds the session) and is running with --output-format stream-json, it can now emit a structured result message on stdout carrying a machine-readable reason, in addition to (or instead of) the usual stderr text.
  • This reason is carried in a new startup_failure_reason field, with values seen including cli_version_too_old, shell_tool_missing, proxy_invalid, and session_held_by_background.
  • This behavior requires both --output-format stream-json and the environment variable CLAUDE_CODE_STARTUP_FAILURE_RESULTS to be set; the emitting function checks for the env var before doing anything.

Why This lets SDK and other programmatic callers detect exactly why a headless Claude Code process failed to start by parsing structured output, instead of having to scrape human-readable stderr text.

Related

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

Improved
Use it now
Useful2 Signal1
Group of 2 Elsewhere no docs found

Billing confirmations gain a skipLowCreditsNote option#

A new skipLowCreditsNote option controls whether a low-credits note appears in ultra-review billing and credit-overage confirmations

Details 0 0 Feedback
skipLowCreditsNote

What

The pre-flight billing check used for ultra-review now accepts a skipLowCreditsNote option. When it isn't set, Claude Code fetches a low-credits note and appends it under the standard confirmation text warning that the review bills as usage credits.

The same skipLowCreditsNote flag is also used in the credit-overage confirmation flow, where it is computed based on whether the user has confirmed and whether it's a single-pass run, controlling whether that low-credits note is shown there too.

Why

This lets Claude Code skip showing a redundant or unnecessary low-credits warning in situations where it isn't relevant, while still surfacing it when it matters for billing confirmations.

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

Background shell memory-pressure reaping made smarter and better explained#

Claude Code checks real host memory scarcity before killing idle background shells and explains why, with an opt-out env var

Details 0 0 Feedback
CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP

What

  • Before killing a background shell command because of a memory-pressure event, Claude Code now checks actual host memory scarcity (reading /proc/meminfo on Linux/WSL, comparing available memory against both a percentage and an absolute floor) instead of reaping almost unconditionally.
  • More situations now skip a reap: a turn is currently running, delegated agents (subagents) are running, or the session was recently reaped, with deduplicated diagnostic logging explaining why a reap was skipped.
  • When a background shell is stopped for memory pressure, the explanation shown to the agent now explicitly tells it not to debug or auto-restart the command, to report what happened instead, and to only restart it if the user asks.
  • The message also tells the agent about the new CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP environment variable, which lets users turn this reaping behavior off entirely.

Why

This avoids killing background commands unnecessarily, stops the agent from reflexively trying to restart a command the system deliberately stopped, and gives users a way to disable the safeguard if it gets in their way.

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.

4 entries

New Featuresopen

+New
Under the hood
Useful3 Signal3
Group of 7 Chrome Control no docs found

Chrome browser selection improved with persisted hints and clearer prompts#

Claude Code now remembers which Chrome browser you prefer, shows clearer prompts when several are connected, and reports which one is in use

Details 0 0 Feedback
set_chrome_browser_hints

What

  • A new control-protocol message, set_chrome_browser_hints, lets a remote or gateway host tell the built-in Chrome browser extension (used for browser automation) which device to prefer on a given machine, including a preferred device ID, a list of local device IDs, and the host platform. This is stored per remote session.
  • A new browserHints state (preferred device ID and local device IDs) is threaded through the extension-pairing and device-detection logic, powering a rewritten selection helper that automatically picks a persisted device, the only connected extension, or the sole local candidate, or otherwise asks the user to choose.
  • When asking the user to pick a browser, Claude Code now groups the choices into "Browsers on this computer" and "Other connected browsers," always offers a "switch to a different browser" option, and is instructed to always ask when the choice is ambiguous.
  • The list_connected_browsers tool now reports an onThisComputer flag (a more reliable signal than the previous "is local" heuristic) and an inUse flag marking which browser the session's actions currently target, plus readable platform names (macOS, Windows, Linux, etc.) instead of raw platform strings.
  • New helper text tells Claude when a browser was auto-selected (no need to ask the user) versus when it must ask, and a new reportBrowserSelected telemetry event records the outcome along with how many browsers were connected and how many were local.
  • A new timeout message for unresponsive tool calls now mentions that Chrome might be asleep on another computer, depending on whether a routing acknowledgment was received.

Why With several Chrome browsers or computers potentially connected, these changes reduce unnecessary prompts by remembering and auto-selecting the right browser when possible, while making it clearer which browser is in use and giving better options when a manual choice is genuinely needed.

Related

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

+New
Under the hood
Useful3 Signal3
Remote Control

New bridge capability: write files to a remote session channel#

Remote worker sessions can now write files back through the bridge, not just read them

Details 0 0 Feedback
What

A new function lets a remote 'worker' session write a batch of files (sent as base64-encoded content) back through the API to a bridge/channel endpoint. Previously this bridge could only be used to read files.

Why

This lets a remote session push its output files back to the project, rather than only pulling files down, making two-way file exchange possible over the bridge.

+New
Under the hood
Useful3 Signal3
Team Memory no docs found

New 'x-memory-context-stop' response header controls memory-context shutdown#

Server can now tell Claude Code to stop using shared memory context via a new response header

Details 0 0 Feedback
x-memory-context-stop
What

Claude Code now reads a new x-memory-context-stop response header, which can carry the value "org" or "credential". When the server sends this header on certain responses, Claude Code treats it as an instruction to stop using team or shared memory context for the current session, surfaced internally as a stopped_org or stopped_credential state.

Why

This lets the server centrally shut off shared memory context for an organization or a specific credential, for example if access should no longer be granted, without requiring a client update.

Related

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

+New
Under the hood
Useful2 Signal2
Plugins

Plugin agents can now load from a hooks-module 'files' map, not just a folder#

Plugin agents can now load hooks from a files map, not just a folder

Details 0 0 Feedback
What

Plugins that define agents can now supply their hooks module (code that runs around tool or agent actions) in two ways: the existing folder-based layout, or a new files-object keyed by namespace paths. In the new form, each entry is turned into a synthetic builtin: file path and parsed individually.

Why

This gives plugin authors a second, more flexible way to package hooks without needing a folder structure on disk.

141 entries

Improvementsopen

Improved
Under the hood
Useful3 Signal3
Group of 4 Team Memory unclear

Team memory sync adds scope-aware checks and per-file refusal handling#

Team memory sync now reports why a shared basis failed to load, checks mount-dir escapes per scope, and can skip individually refused files

Unclear Whether the tengu_team_mem_basis_unusable gate is switched on for any account is unread, so nothing can be said about its status.

Details 0 0 Feedback

What

  • The team-memory sync system now reports a specific reason when it can't load a shared memory basis, such as the store being empty, unreadable, mismatched, or over a size cap, instead of just failing silently.
  • A new account scope is recognized in several sync checks, for example skipping local-write-preservation checks and allowing pulls even when the walk found nothing.
  • The check that stops memory files from being written outside their allowed mount directory (an escape check) is now scope-aware, handling user, account, and team scopes differently through a shared helper.
  • If the server refuses to save one particular file during a sync, that file is now marked as refused and skipped on retries for a while, while the rest of the sync continues; the file stays local only and its changes will be lost if the machine is recycled. The sync result reports how many files were refused.
  • The internal state Claude Code tracks during a sync now includes fields for refused writes and for whether the shared basis is unusable.

Why These changes make multi-device team memory sync more resilient: one problematic file or an unreadable shared store no longer breaks the whole sync, and the system can explain more precisely what went 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
Useful3 Signal3
Group of 2 Artifacts

Artifacts support a public read path for readers outside the owner's org#

Reading an artifact's asset now has a dedicated public path and refusal message for readers outside the owning organization

Details 0 0 Feedback

What

  • Reading an asset from an artifact (read_asset) now supports a distinct "public read" path used when the requester is outside the artifact owner's organization. The read result gains a public_read/public marker, the underlying fetch function takes a new admitPublicRead callback and returns publicRead in its result, and a dedicated public_refused error reason covers the case where a public artifact doesn't serve that asset to outside readers.
  • A companion refusal path gains a public_outside_org case, returning the same message text used in the resume_replies flow. Share-status records now also track an outsideOrgReader flag, cleared whenever the account boundary changes, alongside the existing probeErrorCode and role fields.

Why This gives artifacts a defined public-read path for people outside the owner's organization, with clear refusal messages when that access isn't available, instead of treating all outside-org reads the same way.

Improved
You'll notice
Useful2 Signal3
Group of 3 Remote Control

New sessionInboxPointers tracker for bridge/remote message delivery#

A new sessionInboxPointers tracker records queued bridge messages, re-notifies unfetched attachments when idle, and taps into command lifecycle events.

Feature flag
tengu_bridge_inbox_pointer_boundary 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.274: 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.274. 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 sessionInboxPointers tracker records queued messages: when a remote/bridge control message or a remote-origin user message is queued, it's registered via noteQueued with its origin, wake state, and id.
  • When the session goes idle, queued file/attachment ids that a remote bridge peer never fetched are now re-sent via renotifyUnfetched, both from the idle-nudge path and a new onIdleReported callback.
  • Session setup now also taps into command lifecycle events via this same tracker.

Why This makes message and attachment delivery to a remote/bridge peer (such as a companion device or connected session) more reliable, ensuring items that were queued but never picked up get another chance to be delivered instead of silently sitting unfetched.

Improved
You'll notice
Useful3 Signal2
Group of 3 Artifacts

Publishing or reading artifacts outside your organization's consented locations now requires consent#

Writing or reading artifacts outside org-consented locations is refused unless approved, replacing a flat hard block

Details 0 0 Feedback

What

  • Writing a file or asset (an artifact's underlying content) to a location outside consented organization locations is now explicitly refused, with reasons like file_outside_org_unasked, asset_outside_org_unasked, or asset_copy_outside_org_unasked, and a new artifact_outside_org_consent telemetry event records it.
  • Reading the HTML page of a public artifact from outside your organization now goes through an admitPublicRead approval check, which defaults to refusing; without explicit approval, the read is blocked instead of silently fetched.
  • The artifact file-read path no longer gives one generic 403 message for all outside-org reads. It now distinguishes cases: for a "publicFile", it explains the bytes aren't returned inline but can be saved to disk via a tool instead; for a "publicUnasked" case (nobody could be asked for consent), it gives a specific explanation and logs telemetry marking the request refused. The approval check itself is now wired to a real permission-aware function that considers prior grants, whether a human started the turn, and the current mode (for example, plan mode).

Why

This prevents artifacts from being silently written to or read from outside boundaries your organization has consented to, while giving clearer, case-specific explanations instead of one blanket block, and still allowing access once consent has actually been granted.

Improved
You'll notice
Useful3 Signal2
Group of 2 Artifacts

Artifact publish now refuses to overwrite a version it knows is behind#

Publishing an artifact is blocked when the client's tracked version is known to be behind the live one, to avoid overwriting newer content

Details 0 0 Feedback

What

  • The artifact-publish logic gained a "stale version guard" that denies publishing (with reasons like stale_version_guard or stale_version_guard_before_card) when the session hasn't read or published the artifact recently, along with new consent wording for publishing artifacts outside your organization and a check that affects when a publish can be auto-approved.
  • A related guard now runs specifically when the client's tracked base version is defined but known to be stale ("behind") relative to the live version: it re-reads the artifact tagged as "known_behind", and if that read still resolves to real text, the publish is refused with reason code known_behind instead of silently overwriting the newer live version.

Why

This prevents a session from accidentally overwriting someone else's newer changes to an artifact when its own local copy of the version is out of date.

Improved
You'll notice
Useful3 Signal2
Group of 2 Permissions

Frame tunnel requests now require session-JWT auth#

Frame tunnel HTTP requests now must carry a session JWT instead of using no authentication at all

Details 0 0 Feedback

What The internal frame-tunnel request helper previously allowed requests to the 'frame' host with no authentication at all. It now requires 'session-jwt' authentication: requests must carry a session JWT (a signed token tied to the current session). Other headers are stripped from frame-tunnel requests, and only the Authorization header captured for the session-jwt case is re-applied.

Why This closes a gap where frame-tunnel requests could be made without any authentication, ensuring they're now tied to an authenticated session.

Related

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

Improved
Under the hood
Useful3 Signal2
Group of 3 API Errors

Structured API error details: new error kinds plus api_error_code and api_error_params#

API errors now carry a structured error code and parameters, not just a message, across telemetry and the UI

Details 0 0 Feedback

What

  • The set of typed API error kinds grew by about 20 new entries, including effort_requires_thinking, advisor_incompatible, tool_history_mismatch, autocompact_thrashing, pdf_too_large, pdf_password_protected, no_response, tls_untrusted_ca, gateway_content_type, provider_credentials, gateway_signin_required, gateway_session_expired, api_key_auth_disabled, org_disabled_credential, invalid_credential_header, model_requires_usage_credits, long_context_credits_required, consent_unanswered, no_allowed_fallback, model_substitution_disabled, and field_not_granted.
  • Two new companion fields were added: api_error_params (holding details like effort, provider, or remedy) and api_error_code (a passthrough of a server-provided error code), letting tools built on Claude Code react to the specific cause of an error instead of parsing its message text.
  • api_error_code is now included in turn-completion telemetry (the SDK's assistant message / turn-result data) alongside the existing api_error_status, carrying the server's error code when a turn ends on an identifiable API error.
  • Error message objects used to render API errors in chat now carry api_error_params and api_error_code end-to-end, alongside the existing api_error field.

Why

This gives tools and interfaces built on Claude Code a reliable, structured way to detect and handle specific error conditions, such as needing more usage credits or an untrusted TLS certificate, instead of having to guess based on error message wording.

Related

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

Improved
You'll notice
Useful3 Signal2
Group of 2 Artifacts

Foreign-org artifact reads get a dedicated permission path#

Reads of artifacts owned by another organization now get their own outside_org permission decision, with a guard against hooks silently approving them

Details 0 0 Feedback

What

  • The read-permission checker now has an explicit branch for content flagged as outside the user's organization (outsideOrg), returning a foreign_read decision tagged about: "outside_org" before falling through to the existing owned/network-off checks.
  • New guard text distinguishes three situations when such a foreign-org read or copy is blocked: nobody was asked and it should be retried, nobody can be asked in this session so it shouldn't be retried, or a PermissionRequest hook (an automated rule that answers permission prompts for the user) already answered on the user's behalf. In that last case, Claude is told that only the user's own approval actually allows the read, and to inform the user that their hook auto-answered.

Why This closes a gap where an automated permission hook could silently approve access to another organization's artifact; Claude now knows to flag that to the user rather than treating the hook's answer as sufficient.

Improved
Under the hood
Useful3 Signal2
Group of 2 Self-Hosted Runner

Inference token refresh rewritten with backoff, TTL tracking and refresh-on-error#

Self-hosted runner's inference token refresh now uses jittered backoff, tracks token TTL, and refreshes immediately on a 401/403 instead of waiting

Details 0 0 Feedback

What

  • The self-hosted runner's inference-token auto-refresh logic was rewritten. It now tracks the token's time-to-live (ttlMs, 30 minutes by default), and retries failed refreshes with exponential backoff plus jitter (a random delay) instead of a fixed interval.
  • Tokens nearing expiry get a separate, shorter retry window (expiredRetryMs).
  • A new error classifier distinguishes errors worth retrying from ones that aren't: a new RemoteConfigWithoutInferenceAuthError, or an HTTP 401/403, is treated as non-network and not retried early.
  • A new onResultApiError callback lets a 401/403 returned by the model API during a child session's turn trigger an immediate, out-of-band token refresh (refreshNow()) instead of waiting for the next scheduled refresh.

Why This makes token refresh more resilient to transient failures while reacting immediately to real auth failures, so a self-hosted runner recovers faster from an expired or rejected inference token instead of a child session stalling until the next scheduled refresh.

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 Artifacts

Artifact database and asset actions get context-aware approval checks#

Artifact database reads/writes and asset actions (delete, create, publish) now compute approval from plan mode, batch size, and call origin instead of always requiring a human, plus a new Windows-path safety check.

Details 0 0 Feedback

What

  • Permission checks for the artifact database's read_db/write_db actions now consider whether the call is a served/background call, whether it's a multi-entry batch, and the current permission mode, instead of always requiring human approval.
  • The same actions gained a new safety check that flags a decision with a "suspicious Windows path" classifier when a risky path condition is detected.
  • Other artifact actions, deleting an asset (delete_asset), creating from a type, and publishing, now compute approval the same context-aware way, also factoring in whether the artifact is already owned or consented to, instead of a hardcoded "must be a human" rule.

Why This lets routine, low-risk artifact operations proceed automatically in more cases while still requiring human approval when the context is riskier (unusual paths, non-batch human-initiated calls), reducing unnecessary approval prompts without loosening protection where it matters.

Improved
You'll notice
Useful2 Signal2
Group of 5 Git Worktrees

Worktree removal now checks for uncommitted submodule work#

Claude Code now checks git submodules before deleting a worktree, and warns when submodule state can't be fully verified

Details 0 0 Feedback

What

  • Removing a git worktree (for example via the claude rm or ctrl+x flow, or automatic agent-worktree/job cleanup) now checks for work inside submodules, not just the top-level worktree. A new submoduleWork concept distinguishes "unverifiable" submodule state (such as a nested repo or an unconfigured gitlink) from ordinary uncommitted "changes" inside a submodule.
  • When submodule work is unverifiable or has changes, worktree removal now refuses to proceed and shows a message naming the issue explicitly, with tailored explanatory text and follow-up instructions for each case; job deletion can likewise keep a worktree around for this reason.
  • The confirmation dialog shown before discarding uncommitted changes in a worktree now separately calls out submodule work that a plain git status in the worktree wouldn't reveal.
  • Before counting changes, the "exit worktree" confirmation dialog now also checks the worktree's git configuration for unsafe settings (such as conditional includes or custom LFS transfer agents); if the worktree can't be safely read, it shows a generic "uncommitted files that could not be counted" warning instead of a count, and checks submodules via a --submodule=short diff, adding a warning line if a submodule can't be checked.
  • The JSON snapshot of git worktree state sent over the remote bridge now includes a submodules_unverified field alongside existing fields like head_sha, unpushed_count, and is_dirty.

Why Submodule changes don't always show up in a normal git status of the parent worktree, so without these checks a worktree could be deleted while it still held uncommitted or unverifiable work inside a submodule. This makes worktree removal safer and more transparent about what it could and couldn't verify.

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 3 Managed Settings

Policy-helper failure tracking avoids duplicate tier-change announcements#

Claude Code now tracks managed-settings policy-helper failures by type so it only announces a tier change once, not on every retry.

Details 0 0 Feedback

What

  • The policy helper (which manages settings pulled from a remote/managed source) now remembers the last failure code it saw and only announces a tier change when the failure changes, not every time it fails.
  • apply() and retireState() reset the tracked failure (and reset selectedEntry when retiring).
  • The mid-session re-check also announces a tier change when the failed config itself changes, not just when other conditions change.

Why Previously, a stuck policy-helper failure could re-trigger the "tier changed" announcement on every retry tick, creating noise. Now it fires once per distinct failure, giving a more accurate signal about when something actually changed.

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 API Errors

API errors now carry machine-readable error codes#

API error responses now include a typed apiError code (and often apiErrorParams) instead of just a human-readable message

Details 0 0 Feedback

What

  • Many request/auth error branches in the API-error formatter now attach a machine-readable apiError code (and sometimes apiErrorParams) alongside the existing human-readable message. This covers tool-use concurrency conflicts, duplicate or orphaned tool_use ids, using an effort setting without thinking enabled, advisor-model incompatibility, disabled API-key auth, and provider credential failures for Bedrock, Vertex, and Foundry (which now include a remedy param).
  • The catch-all error handler now classifies more failure modes with their own typed apiError codes instead of lumping them into a generic error: no_response, tls_untrusted_ca, gateway_content_type (a Bedrock proxy rewriting the event stream), provider_credentials (with apiErrorParams: {provider, remedy: 'host_managed'}), and gateway_signin_required/gateway_session_expired (with remedy: 'gateway_token' when the token came from the environment). Previously most of these produced a generic server_error/unknown message with no machine-readable cause.

Why Typed error codes let tooling and error handling react to the specific cause of an API failure instead of just showing a generic message, making it easier to tell the user what went wrong and how to fix it.

Related

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

Improved
Under the hood
Useful2 Signal2
Group of 2 Managed Settings

Managed-settings failures now include a machine-readable reason#

Managed-settings validation failures now carry a machine-readable reason and policyUnreadable flag, and unreadable policies trigger a dedicated telemetry export.

Details 0 0 Feedback
managed_settings_invalidorg_pin_api_key_conflict

What

  • Org login/managed-settings validation failures now carry a machine-readable reason (for example managed_settings_invalid or org_pin_api_key_conflict) and a policyUnreadable flag, in addition to the existing human-readable message.
  • When managed settings are unreadable or invalid, or a policy refusal state exists, Claude Code now sends a dedicated telemetry export (using OTel, a tracing/telemetry standard) that force-flushes with a timeout, rather than relying on general telemetry.

Why The structured reason and flag let tooling distinguish specific managed-settings failure causes instead of parsing free text, and the dedicated telemetry export makes it more likely that failure data reaches the server before the process exits.

Improved
You'll notice
Useful2 Signal2
Group of 3 Headless Mode unclear

Background task notifications can now be coalesced#

Claude Code can batch multiple background task completion notifications together instead of showing each one separately

Unclear Whether and how the coalescing actually changes visible output in print/headless mode is not confirmed, only that the supporting code and telemetry event were added.

Details 0 0 Feedback

What

  • A new flag tengu_swirling_meteor controls whether task-stop notifications from background agents get coalesced (merged together) during a session's live loop.
  • Print/headless mode gained a coalesceTaskNotifications option and a new print_task_notification_coalesce telemetry event, tracking how much held completion text and workload is batched.
  • The session's message-queue engine gained a coalesceTaskNotifications callback: when enabled, a queued task-notification whose text fits under a length budget is merged into the pending turn instead of being sent out as a separate message. This path is currently gated off by default.

Why

When several background tasks (like background agents or shell commands) finish around the same time, Claude Code can now group their completion notifications into one update instead of interrupting the session repeatedly.

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 Artifacts

Artifacts now passively track versions published elsewhere instead of reactive notices#

Claude Code now passively tracks the newest version of a watched artifact 'heard' from elsewhere, replacing the old reactive republish notice

Details 0 0 Feedback

What

A new tracking system keeps a per-session record (heardVersions) of the newest version of a watched Artifact that has been "heard" from elsewhere, and compares it against the version the current session has itself published, to determine if the session's local copy is behind. A "told" flag avoids repeating the same notice more than once.

The messaging shown to Claude changed accordingly: instead of always saying "Claude will be notified when this artifact is republished," it now branches on whether live tracking is active, in which case it says "Claude will keep track of new versions of this artifact published elsewhere."

Why

This replaces an active notification model with a passive one: rather than interrupting a turn to announce a republish, Claude Code quietly remembers what version it last heard about and only flags it as stale when relevant, avoiding duplicate notices.

Improved
You'll notice
Useful3 Signal2
Artifacts

Artifact publish flow gained a deceptive/unexaminable content guard#

Publishing artifact files now forces a person-only confirmation when a copied file's read permission was judged deceptive or unexaminable

Details 0 0 Feedback
What

When Claude Code publishes or copies files as part of an artifact, it now checks the read-permission decision made for each file. If any file was flagged as "deceptive" or "unexaminable", and the request is happening in plan mode, through a served call, or with redirected roots, the confirmation for that publish is forced to require approval from an actual person rather than something a hook or another agent could silently approve on the user's behalf.

Why

This closes a gap where a suspicious or unreadable file could be published as part of an artifact without a human actually looking at it, ensuring risky publishes always get a genuine human check.

Improved
You'll notice
Useful3 Signal2
Sessions

Rewind now heals subagents and can self-repair a failed persist#

Rewinding a conversation now stops orphaned subagents and can self-repair if saving the rewound state fails

Details 0 0 Feedback
What

New rewind machinery persists a rewound conversation's state, and if that save fails, it now walks backward to find the last user or assistant message and retries mirroring it up to 3 times to bring the local and remote state back into sync, or "heal" it. A companion function also walks the list of currently running subagents, whether teammates or in-process tasks, and when a rewind cuts past the point where one of those subagents was spawned, that subagent is now stopped instead of being left running orphaned.

Why

This makes rewinding a conversation more reliable: a failed save no longer leaves the conversation state out of sync, and rewinding past where a subagent was started no longer leaves that subagent running unattended.

Improved
You'll notice
Useful3 Signal2
System Prompt no docs found

System-prompt hot-swap now takes effect from the next turn, not at next compaction#

Swapping the system prompt mid-session now applies from the next turn instead of waiting for compaction

Details 0 0 Feedback
systemPromptSnapshot
What

When Claude Code's internal system prompt is replaced mid-session, the new prompt text now takes effect starting from the very next turn. Tool definitions already sent to the model in that session stay unchanged. Previously, the new prompt only took effect at the next compaction (the point where conversation history gets condensed), unless a systemPromptSnapshot setting was turned off.

Why

This makes system-prompt changes apply sooner and more predictably, rather than sitting unused until the next compaction happens to occur.

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

New memory-store rejection reasons: content_screened and index_too_large#

Claude Code now explains two new reasons memory writes can be rejected: content screening and an oversized index file

Details 0 0 Feedback
content_screenedindex_too_large
What

When Claude Code tries to save something to its memory store and the server rejects it, two new rejection reasons now come with user-facing explanations:

  • content_screened: the write failed a safety screening, without specifying which part of the content triggered it
  • A size-cap rejection for the memory index file (MEMORY.md), which has a much smaller size limit than the cap applied to individual memory files
Why

This gives clearer feedback when a memory write fails, so you know whether it was blocked for safety reasons or because the index file grew past its (smaller) limit, rather than seeing an unexplained failure.

Improved
You'll notice
Useful3 Signal1
Group of 7 MCP

MCP tools now support 'step-up' re-authentication for insufficient permissions#

MCP tool calls that fail from insufficient permissions now prompt you to re-authenticate for the missing scope, instead of a generic credential error

Details 0 0 Feedback
/mcp

What

  • MCP auth failures are now classified into two distinct kinds: credential_rejected (a flat, generic rejection) and a new step_up, which covers a 403 "insufficient_scope" response. This classification is handled by a new shared function/classifier instead of duplicated inline checks.
  • When an MCP tool call gets a 403 insufficient-scope error, Claude Code now surfaces a specific message asking you to re-authenticate for the additional permissions needed, rather than treating it like a generic expired or rejected credential.
  • Whether a step-up is pending is tracked per MCP client connection (via pendingStepUpScope), and this pending state is now properly cleared: when a fresh 401 (not 403) response is seen, when the underlying credential itself disappears (for example, "no token data found" or "token expired without refresh token"), and it's now only checked/set when the original request actually carried an Authorization header.
  • The auth-challenge interceptor now also ignores responses to requests that had no Authorization header at all, and parses the WWW-Authenticate header's scope through a shared helper instead of inline regular expressions.

Why Previously, an MCP server asking for additional OAuth permissions looked the same as a fully rejected or expired credential, so Claude Code could only tell you to "re-authenticate" without saying why. Now it can tell you specifically that more permissions (scope) are needed, and correctly resets that state once you've re-authenticated or the credential changes.

Improved
You'll notice
Useful2 Signal2
Git

Gerrit-aware push tracking in git command detection#

Claude Code now recognizes Gerrit pushes separately from GitHub-style pushes

Details 0 0 Feedback
What

When Claude Code watches the output of a git push command, it can now tell whether the destination is a Gerrit remote (a code-review system some teams use instead of GitHub pull requests) rather than a GitHub-style provider. Gerrit pushes are now routed through a different notification path than the one used for pull-request pushes.

Why

Gerrit pushes don't create pull requests the way GitHub does, so treating them the same way would produce misleading or missing notifications. This lets Claude Code give Gerrit users appropriate feedback after a push.

Improved
Under the hood
Useful2 Signal2
Headless Mode

Headless/stream-json errors gain a structured startupFailureReason field#

Headless mode's startup-failure errors now include a structured reason code

Details 0 0 Feedback
What

When Claude Code fails to start in headless mode (running without an interactive interface, using stream-json output), the error-reporting helper now accepts a startupFailureReason and a resultIndex, and includes both in the emitted stream-json error object. One concrete reason value is session_held_by_background, used when a session is already held by a background process.

Why

This gives tools and scripts consuming stream-json output a structured way to detect and handle specific headless startup failures, such as a session being locked by another background process, instead of just seeing a generic error.

Related

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

Improved
Under the hood
Useful2 Signal2
SDK

CLI-too-old failure now emits structured JSON in stream-json/SDK mode#

Version-mismatch startup failures now return structured JSON for SDK-driven sessions

Details 0 0 Feedback
What

When Claude Code's CLI is too old to talk to a newer workspace or server, and it's running with --output-format stream-json plus CLAUDE_CODE_STARTUP_FAILURE_RESULTS set, the version-mismatch failure is now emitted as a structured JSON result object with startup_failure_reason: 'cli_version_too_old', instead of only printing a human-readable error to the console before exiting.

Why

Tools and SDKs that drive Claude Code programmatically can now detect and handle this specific failure reason directly from the output stream, rather than having to parse plain-text error messages.

Improved
Under the hood
Useful2 Signal2
Elsewhere

Agent proxy can install its CA into the system trust store 'directly' via a new anchor/layout path, not just via a refresh helper#

Claude Code's local proxy can now install its security certificate into the system trust store directly, not just via a refresh helper

Details 0 0 Feedback
What

Claude Code runs a local agent proxy that needs its certificate authority (CA) trusted by the system so it can inspect secure connections. Installing that certificate into the system trust store now tries a new 'direct' method first, writing the certificate to an anchor location, before falling back to the previous approach of refreshing it through a helper command. Diagnostic telemetry now records which method succeeded (direct or refresh) and gives more detailed failure reasons, such as direct_failed_step, direct_skipped, and hook_incomplete.

Why

A more direct installation path can make trusting the proxy's certificate more reliable, and the added detail makes it easier to see why installation failed when it does.

Improved
Under the hood
Useful2 Signal2
Self-Hosted Runner

Self-hosted runner now surfaces API error status codes from turn results#

Self-hosted runner sessions now surface the API's numeric error status code when a turn fails

Details 0 0 Feedback
What

In the self-hosted runner (used when running Claude Code sessions on your own infrastructure), when a turn result comes back marked as an error and includes a numeric API error status code, a new callback is now invoked with that status code.

Why

This lets self-hosted runner integrations react to the specific API error status code behind a failed turn, rather than only knowing that a turn failed.

Related

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

Improved
You'll notice
Useful2 Signal2
Plugin Marketplace

Marketplace refresh: keep-on-failure fallback now scoped to genuinely unreachable remotes#

Marketplace refresh only keeps a stale local copy on failure when the remote is genuinely unreachable, not on every pull failure

Details 0 0 Feedback
CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE
What

When Claude Code refreshes a plugin marketplace, it now classifies the result of checking the remote as current, unreachable, or stale using a new helper. The CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE environment variable, which keeps the existing local copy instead of failing, is now only consulted in the unreachable case, and only if the existing local clone still validates as a real marketplace. Previously it applied to any pull failure.

Why

This narrows the keep-on-failure fallback to cases where the remote is actually unreachable, rather than masking other kinds of pull failures by silently keeping a possibly outdated local marketplace copy.

Improved
You'll notice
Useful2 Signal2
Artifacts

Published-artifact tool description now scans referenced files for links and reports coverage#

Artifact tool's action summary now scans referenced files for links and reports coverage

Details 0 0 Feedback

**What

When an artifact is created or updated, the human-readable summary of that action now scans each referenced or attached file for links, when a root path is available, and appends notes such as [file N: ...] or [N listed file(s): ...]. If some files were skipped because of scan limits, it now shows a count like (K not examined for links). Large file lists are also now paginated differently, and base-path/root link information is included.

**Why

This gives you more visibility into what links were found (or missed) across the files involved in an artifact action, making it clearer when a summary is incomplete due to scan limits.

Improved
You'll notice
Useful2 Signal2
Artifacts

Artifact file lists can now be read for public artifacts by non-org readers#

Public artifacts' file lists can now be read by people outside the owning organization, with clearer errors when they can't

Details 0 0 Feedback
What

When fetching the list of files inside an artifact (a piece of code or content Claude generates and shares), Claude Code now handles public artifacts differently:

  • If the artifact is publicly readable and the server declines to list files, the error now distinguishes a 'single_page' artifact (one with no separate file list) from a genuine refusal, where files simply aren't available to readers outside the artifact's organization
  • Successful file-list results for public artifacts now carry additional fields marking them as public and possibly narrowed in scope
  • A separate, distinct message now appears when a cloud-session artifact mount can't serve a specific file to an outside-org reader viewing a public artifact, rather than the generic 'no file published' message
Why

This makes it clearer to someone outside an artifact's organization why a file listing or file fetch failed, rather than lumping every failure into one vague error.

Improved
You'll notice
Useful2 Signal2
Elsewhere

Pane teammates can't run plugin-registered agent types#

Subagents from plugin-registered agent types can no longer be spawned as pane-based teammates

Details 0 0 Feedback
What

When Claude Code tries to spawn a subagent as a pane-based teammate (a teammate running in its own terminal pane), it now checks whether the requested agent type was registered at runtime by a plugin. If so, it refuses and throws an error instead of trying to open a pane, telling you to spawn that agent with a different tool or to use an in-process teammate instead.

Why

This prevents a broken or unsupported launch attempt for plugin-registered agent types in pane mode, and points you toward the alternatives that do work: another spawning tool or in-process teammates.

Improved
You'll notice
Useful2 Signal2
API Errors

Retryable-error classifier reworked and widened#

More API error codes are now treated as retryable instead of fatal

Details 0 0 Feedback
What

The logic that decides whether an API error should be retried rather than treated as fatal now treats any error in the 4xx range as retryable, except for 401 (unauthorized), 403 (forbidden), and 429 (rate limited). Previously only the specific codes 400, 404, and 405 were treated this way. The check also now reads the error's text body using a different helper function.

Why

This means more kinds of client-side errors from the API will be retried automatically instead of immediately surfacing as a failure, which should reduce the number of errors that interrupt a session 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
Elsewhere no docs found

Explore agent no longer inherits model cap on non-first-party providers#

The Explore agent no longer has its model capped when using non-Anthropic API providers

Details 0 0 Feedback
CLAUDE_CODE_DISABLE_EXPLORE_INHERIT_CAP
What

The built-in Explore agent (used for fast, read-only code searches) has logic that decides whether to cap which model it can use, or let it inherit the same model as the main session. That logic now immediately returns "inherit" (no cap) whenever the active authentication provider is not Anthropic's own first-party API, before even checking the CLAUDE_CODE_DISABLE_EXPLORE_INHERIT_CAP environment variable.

Why

Users connecting through a non-Anthropic provider will have the Explore agent run on the same model as the rest of the session, rather than being capped to a smaller model, regardless of that environment variable's setting.

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

Plugin skill search gated behind HIPAA policy#

Plugin and skill search is now gated by a HIPAA-specific policy check that denies it outright under HIPAA mode

Details 0 0 Feedback
What

A new capability check, allow_plugin_skill_search, controls whether plugin and skill search is available. It is explicitly denied under HIPAA, an org policy mode for healthcare-regulated accounts. The underlying check also denies search when the feature is explicitly turned off by the organization, when it's latched to a previous decision, when it's unregistered, or when HIPAA mode is on; otherwise it falls back to a normal read/eligibility check.

Why

This adds an explicit compliance gate so accounts under HIPAA policy cannot have Claude Code perform plugin or skill search, on top of the scope and policy checks already in place around search.

Improved
Under the hood
Useful2 Signal2
Tool Use

Tool-result pairing repair now detects and reports 'misplaced' tool results#

Tool-result repair now detects and reports 'misplaced' tool results in debug output

Details 0 0 Feedback
What

The internal pass that repairs mismatched tool calls and their results now includes a check for tool results that are "misplaced." When this happens, the debug information generated (both in telemetry and in the strict-mode error message) now includes a misplaced_tool_results=[...] list for each affected assistant message.

Why

This gives more detail when diagnosing cases where a tool's result got separated from or mismatched with its originating call, making it easier to understand what went wrong in a conversation's transcript.

Improved
Under the hood
Useful2 Signal2
Artifacts

Artifact create-from-type: server can reject a client-supplied request_id and get a retry without it#

Artifact creation retries automatically if the server rejects its request_id

Details 0 0 Feedback
What

When Claude Code creates an artifact from a type, it now attaches a request_id to the create request. If the server responds with a 400 error specifically rejecting that request_id field, Claude Code strips it and retries the creation once automatically, logging a request_id_rejected telemetry event. The result of a successful create can also now include a provisioned object.

Why

This means an artifact creation that would otherwise fail outright because of a rejected request_id now has a chance to succeed on retry, without the user seeing an error.

Improved
Under the hood
Useful2 Signal2
API Errors

New structured apiError codes attached to rate-limit/format error responses#

API error responses now carry structured error codes like pdf_too_large alongside plain-text messages

Details 0 0 Feedback
What

When the API returns a rate-limit or invalid-request error, Claude Code now attaches a structured apiError code identifying the specific cause, in addition to the existing free-text error message. New codes include:

  • model_requires_usage_credits
  • long_context_credits_required
  • pdf_too_large
  • pdf_password_protected
Why

Structured error codes let Claude Code (and anything reading these errors) distinguish specific failure causes, such as an oversized or password-protected PDF, rather than relying only on parsing a text message.

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
Artifacts unclear

Artifact 'copy_from' action gated behind a frozen/combined feature check#

Artifact copy_from now also requires a combined feature check, or it fails outright

Unclear What the two underlying checks (Qst and pme) actually gate is not stated.

Details 0 0 Feedback
What

The copy_from action, which copies assets (like files or images) directly between artifacts on the server, now requires two internal feature checks to both pass before it can run. If either check fails, the action is refused with an explicit message saying it is not enabled for the account, instead of running or falling back to the older permission-rule checks alone.

Why

This adds another gate on top of the deny/ask permission-rule checks introduced previously, so copy_from can be turned off for an account independently of those rules.

Improved
Under the hood
Useful2 Signal2
Artifacts

Public-artifact live-subscribe now stops on org mismatch / not-found / public-outside-org, and boots the watch during subscribe#

Live-subscribing to a public artifact now stops cleanly on org mismatch, not-found, or public-outside-org cases

Details 0 0 Feedback
What

The internal helper that live-subscribes to a public artifact now starts the artifact's watch (tracking for new versions) as part of subscribing, via a watchBoot setting. It also now recognizes three failure cases instead of two: public_outside_org, not_found, and other_org. In each case it stops any running task tied to that artifact and reports a read_stopped_... telemetry event along with advice text.

Why

This makes live-subscribing to a public artifact more robust: if the artifact turns out to belong to a different organization, doesn't exist, or is public but outside the current organization, Claude Code now stops cleanly and gives context about why, instead of the earlier handling that only covered two of these cases.

Improved
Under the hood
Useful2 Signal2
Artifacts

Artifacts file listing can now report a narrowed (partial) file set for outside readers#

Artifacts file listings can now be flagged as a narrowed, partial view for outside readers

Details 0 0 Feedback
What

When the Artifacts tool lists files, results can now carry a narrowed flag. When set, Claude is told that the listing shown is only the published subset that an outside reader can see, and that some files may be left out.

Why

This prevents Claude from assuming a file listing is complete when it's actually been filtered down to what an outside viewer is permitted to see.

Improved
Under the hood
Useful2 Signal2
Elsewhere

Prompt-suggestion generation can now reuse a precomputed 'turn brief' instead of a fresh model call#

Prompt suggestions can now reuse a precomputed 'turn brief' instead of always making a fresh model call

Details 0 0 Feedback
What

When generating a suggested next prompt in SDK or print mode, Claude Code now first checks for a precomputed 'turn brief' - a short summary produced as part of a turn's post-turn classification. If that precomputed brief matches the current turn, it's used directly as the suggestion instead of triggering a new generation request to the model.

Why

This can make prompt suggestions appear faster and avoids an extra model call when a suitable summary is already available.

Related

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

Improved
You'll notice
Useful3 Signal1
Ultrareview

Ultrareview shows remaining usage credits before running#

Ultrareview now warns how much usage credit you have left before it runs

Details 0 0 Feedback
What

Before running an ultrareview (a deep, multi-agent code review), Claude Code now checks your remaining usage credits and, when they're getting low, shows a line like "About $X of usage credits left. A review usually uses about $Y and stops if credits run out," or "Less than $1 of usage credits left..." if you're nearly out.

Why

Ultrareview can use a meaningful chunk of usage credits, so this warns you up front instead of letting a review stop partway through because it ran out of budget.

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 Signal1
Artifacts

Quickstart flow gains a real 'document' Artifact type path#

Artifact quickstart for 'document' now looks up a real matching document type

Details 0 0 Feedback
What

When the Artifact tool's quickstart flow handles a request for a 'document', it now goes through the same type-lookup process already used for 'slides' and 'design': it looks up a matching artifact type, lists candidates if the request is ambiguous, and handles the case where no type catalog is available. Previously, 'document' requests were hard-coded to always fall back to a first-party Docs connector or a generic quickstart.

Why

This makes document quickstarts behave consistently with slides and design, correctly picking a specific document type when one is available instead of always falling back to a generic path.

Improved
You'll notice
Useful2 Signal1
Group of 3 Git Security

Git subprocess environment hardened, with explicit control over terminal prompts#

Git commands Claude Code runs internally are now locked down against unexpected network access and interactive prompts

Details 0 0 Feedback

What

  • New, frozen sets of environment variables are applied to internal git invocations: GIT_ALLOW_PROTOCOL="none", GIT_NO_LAZY_FETCH="1", GIT_NO_REPLACE_OBJECTS="1", GIT_TERMINAL_PROMPT="0", and, unless SSH is explicitly allowed, GIT_SSH_COMMAND="false".
  • The internal git command-construction helper gained a new allowGitTerminalPrompt option; unless a call explicitly allows it, GIT_TERMINAL_PROMPT is stripped from the environment passed to the git subprocess, whereas before it could pass through unfiltered.
  • Git push calls used internally (for worktree operations and plugin tag creation) now explicitly set allowGitTerminalPrompt: disabled for background worktree pushes, enabled for interactive plugin tag pushes.

Why

This reduces the risk of internal git commands silently reaching the network, replacing objects, or hanging on an interactive credential prompt, while still allowing prompts in the specific cases where a human is present to answer them.

Related

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

Improved
You'll notice
Useful2 Signal1
Group of 3 Elsewhere

Git LFS files in marketplace checkouts now get pointer-file warnings, and --skip-lfs is a documented no-op#

Claude Code warns when marketplace files tracked by Git LFS were checked out as pointer stubs instead of real content

Details 0 0 Feedback

What

  • New code scans a working tree's git index (and any nested .gitattributes files) for files tracked with filter=lfs (Git Large File Storage), checks whether they were checked out as literal LFS pointer files rather than real content, and surfaces a warning telling the user to run git lfs pull if so.
  • Marketplace add/refresh logic was restructured around a shared clone helper, whose result now feeds a new step that logs and reports this git-LFS warning after the clone completes, replacing the old approach of passing a skipLfs option inline to the clone call.
  • The --skip-lfs marketplace option's description was rewritten to clarify it now has no effect: Claude Code's own git never downloads LFS content regardless of the setting, LFS-tracked files are always checked out as pointers, and getting the real content requires running git lfs pull manually in the marketplace checkout.

Why

This makes it clear to users when marketplace plugin files are just LFS pointer stubs rather than real content, and clarifies that --skip-lfs doesn't need to be set since LFS content is never fetched automatically anyway.

Improved
You'll notice
Useful2 Signal1
Group of 2 Artifacts

Artifact watch no longer implies a live notification on republish#

Artifact watch/subscribe no longer claims a republish elsewhere triggers a notification; it now tracks versions silently and warns on the next read

Details 0 0 Feedback

What

The help text and behavior around watching an Artifact (a published file Claude Code can track for changes) has changed:

  • The tool description no longer says that a republish from elsewhere "arrives as a notification telling you to re-read it before editing."
  • It now says a republish elsewhere "starts no turn and sends no notification."
  • Instead, Claude Code silently keeps track of the artifact's version in the background.
  • The next time the artifact is read or a publish is attempted, the result is prefixed with a warning telling Claude a newer version exists, and instructing it to re-fetch the URL and merge its edits onto that version.
  • The description also explains what to do if a publish is rejected because the artifact changed underneath it.

Why

Previously the description implied a republish elsewhere would actively wake the session with a notification, which wasn't accurate. The new wording sets correct expectations: nothing interrupts the current turn, but the next read or publish attempt will catch Claude up and prompt it to merge its changes onto the latest version instead of overwriting it.

Improved
You'll notice
Useful2 Signal1
Group of 4 Memory unclear

Memory dialogs and control responses now include a full list of saved memories#

The memory status dialog and its control-protocol response now list every saved auto-memory file, not just folder counts

Unclear The finding shows the schema gained this field but does not confirm the dialog UI itself displays it yet.

Details 0 0 Feedback

What

  • The terminal's status dialog schema now includes an optional memories field, listing saved auto-memory entries drawn from the MEMORY.md index and each file's modification time, capped at 200 entries.
  • The status call that reports auto-memory/auto-dream status now also returns a memories array whenever memory folders are present.
  • A new schema describes a single memory entry: its name (a relative path, or "MEMORY.md" for the index file), its absolute path, an optional description and type (user, feedback, project, or reference) from its frontmatter, and its last-modified time.
  • The get_memory_dialog control-protocol response, used by hosts that build their own /memory UI, now includes this same memories array alongside the existing folder list.

Why Tools and custom UIs built on top of Claude Code can now show users exactly which memories are saved, with descriptions and types, instead of only folder-level summaries.

Improved
You'll notice
Useful2 Signal1
Group of 2 Model Settings

Effort selector distinguishes org's starting effort from its default effort#

The effort-level UI now separately notes when an organization pins the starting effort for new sessions, distinct from its overall default effort.

Details 0 0 Feedback

What

  • The effort-selector UI can now show a note that the organization pins the starting effort for new sessions on a model, separate from the existing note about the organization's overall default effort.
  • When a user picks an effort level that ends up capped, the confirmation message can now explain that even though their choice was saved, the organization forces new sessions on that model to start at a different effort.

Why This clears up potential confusion where a user's saved effort preference doesn't match what a new session actually starts at, by explaining that the organization controls the starting point separately from the general default.

Improved
You'll notice
Useful2 Signal1
Group of 2 Cloud Sessions

"Claude Code on the web" renamed to "cloud session" in user-facing text#

References to "Claude Code on the web" are now called "a cloud session" throughout menus and messages

Details 0 0 Feedback

What

  • The authentication-required error message changed from "Claude Code web sessions require authentication..." to "Claude Code cloud sessions require authentication...".
  • Menu descriptions changed from "launch in Claude Code on the web" to "launch in a cloud session", including the remote-control disable option.
  • Ultraplan's user-facing wording was updated the same way, including its refine-prompt option and its startup message.

Why

Keeps terminology consistent across the product now that sessions can run in the cloud, so users see the same term everywhere instead of an older, more specific phrase.

Improved
You'll notice
Useful2 Signal1
Group of 2 MCP

sse-ide and ws-ide MCP server types are now treated as host-only#

Claude Code now blocks adding sse-ide/ws-ide (and sdk) MCP servers to config and routes them into the blocked list during server-set updates, since these are managed by the host app, not stored config.

Details 0 0 Feedback
sdksse-idews-ide

What

  • Adding an MCP server via config now checks its transport type against a host-only set (sdk, sse-ide, ws-ide) and throws a clear error explaining that such servers are registered by the host application at runtime and can't be stored in configuration.
  • When processing an mcp_set_servers update, servers of type sse-ide or ws-ide are now routed into the blocked/dropped map alongside already-registered names, instead of falling through to the general allow/block logic.

Why These transport types represent servers that only make sense as live, host-managed connections (such as an IDE's own SSE/WebSocket endpoint), so storing or generally allow/block-listing them as regular config entries doesn't make sense; this change makes that restriction explicit and consistent.

Improved
Under the hood
Useful2 Signal1
Group of 2 Gateway

Self-hosted gateway now warns about request backpressure#

The self-hosted gateway logs a throttled warning when open client requests outpace what it can forward upstream

Details 0 0 Feedback

What

The self-hosted-runner gateway process now tracks how many client requests are currently open compared to how many it is able to forward upstream at the same time. When the number of open requests exceeds the configured (or default) outbound concurrency limit, it logs a rate-limited warning.

The warning suggests either adding more replicas or raising BUN_CONFIG_MAX_HTTP_REQUESTS, along with the replica's memory limit, to allow more concurrent outbound requests.

Why

This helps operators running a self-hosted gateway notice and diagnose a bottleneck before it causes request failures or timeouts, and points them directly at the two knobs (replica count and BUN_CONFIG_MAX_HTTP_REQUESTS) that can relieve 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 Signal1
Group of 2 Elsewhere

Smarter guidance when a model or 1M-context request can't be fulfilled#

Messages suggesting /model, --model, or usage credits now adapt based on whether you're in an interactive session, self-hosted, or using the SDK/CLI/GitHub Action

Details 0 0 Feedback
/usage-credits/modelDISABLE_EXTRA_USAGE_COMMAND

What

  • When 1M-context usage requires usage credits, the guidance message now checks whether the session is non-interactive or self-hosted-like, and whether the extra-usage-credits command is actually available (which itself depends on the DISABLE_EXTRA_USAGE_COMMAND setting). Depending on the result, the message either offers the /usage-credits command or only mentions /model.
  • Similarly, when a requested model isn't available, the suggestion of switching via /model versus the --model flag now takes into account whether the session is interactive, and whether it's running in contexts like the SDK, CLI, or claude-code-github-action.

Why

Previously these suggestions could point users toward commands or flags that don't actually work in their current context (for example, suggesting an interactive /model command inside a non-interactive script or GitHub Action). The messages now match what's actually usable in the situation.

Related

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

Improved
You'll notice
Useful2 Signal1
Group of 2 MCP

First turn now waits briefly for still-connecting SDK MCP servers#

Claude Code now waits briefly for SDK-configured MCP servers to finish connecting before starting the first turn

Details 0 0 Feedback

What

When a session is configured with SDK MCP servers (external tool servers set up through the SDK), the first query of a turn now waits for any of those servers that are still connecting, instead of immediately proceeding without their tools. A new tracker keeps a list of configured-but-not-yet-connected servers and the turn logic waits on it before continuing.

The wait is bounded by the existing MCP connect timeout (default 5 seconds). Claude Code logs whether the wait timed out and which servers were still pending. If a server still hasn't connected once the wait ends, the turn proceeds without that server's tools and a warning is shown.

Why

Previously a turn could start before slow-to-connect MCP servers were ready, silently missing their tools for that turn. This change gives those servers a short grace period to finish connecting, reducing the chance that a tool is unexpectedly unavailable just because it hadn't connected yet.

Improved
Under the hood
Useful2 Signal1
Group of 2 Artifacts

Artifacts quickstart and design-system saving improved#

The artifacts quickstart tool can now save matched design-system files to the session scratchpad, and start-kit failures report clearer reasons

Details 0 0 Feedback

What

  • The artifacts quickstart tool now advertises that, when possible, it saves the matched artifact type's published files (and, for slides or design intents, the default design system's files) to the session's scratchpad and lists them, rather than only reading titles, descriptions, and README text.
  • The design-system/start-kit save path now returns more specific reasons when files aren't saved, such as "list the files yourself" or "read with your own calls" instead of a generic fallback, and separately tracks whether a REPL tool is available in the tool pool from whether start-kit mode itself is enabled.

Why These changes make it easier for Claude to reuse saved design-system files directly and to understand why a save didn't happen when it fails, instead of guessing.

Improved
You'll notice
Useful2 Signal1
Group of 2 Elsewhere

Fast mode gating and per-session opt-in logic reworked#

Claude Code reworked how fast mode ('penguin mode') decides organization eligibility and per-session opt-in

Details 0 0 Feedback

What

The logic controlling fast mode (internally called "penguin mode") was changed in a few ways:

  • Organization-status handling for fast mode is now split depending on whether the session is an SDK-style context, using new helper logic.
  • A per-session opt-in check gained a sessionOnly parameter.
  • A new auto-trigger prefetches the organization's fast-mode status whenever settings show fastMode=true but the org status is still pending or assumed disabled.
  • Separately, the policy override gate for fast mode now applies whenever policySettings.fastMode === false, even if the caller did not explicitly request fast mode for that request; previously this override only took effect when fast mode had already been requested.

Why

These changes make fast-mode eligibility checks more consistent across SDK and non-SDK contexts and ensure an organization policy that disables fast mode is enforced even when a particular request didn't ask for fast mode, closing a gap where the override could be skipped.

Improved
Under the hood
Useful2 Signal1
Group of 3 Git Teleport

Teleport's git helpers now target the right checkout, verify it, and can auto-stash changes#

Git operations used by Claude Code's teleport feature now run against the correct working directory and can auto-stash uncommitted changes first

Details 0 0 Feedback

What

  • Internal git helpers used for the "teleport" feature (upstream-set, branch checkout, current-branch lookup) now resolve a stable checkout root via a new helper and pass an explicit working directory and environment to every git subprocess, instead of relying on the process's ambient working directory.
  • A new verification step checks that the checkout's .git entry actually points back to the resolved repository, throwing an error ("Could not verify this checkout's git repository") if it doesn't.
  • A new auto-stash helper stages untracked files and runs git stash push --message, backing a new "Teleport auto-stash" flow that stashes uncommitted changes before teleporting.

Why

This prevents teleport's git commands from accidentally acting on the wrong repository or directory, and avoids losing uncommitted work by stashing it automatically before switching.

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
Group of 2 Projects

Edited comments and messages are now detected instead of being treated as already-seen#

Project-thread and artifact comment dedup logic now hashes message text so edited or resent content is no longer skipped as already-processed

Details 0 0 Feedback

What

  • The dedup logic that decides whether a project-thread message notification needs re-processing ('judged' messages) now hashes the message text and stores it alongside the existing id and timestamp used as the dedup key.
  • The same text-hashing approach was applied to 'other comments' shared state, and to artifact autoreact logic, using matching helper functions.
  • A new textsForgotten flag and a lastText map track when a comment's or message's content has changed since it was last judged or reacted to.

Why

Previously, dedup was based only on a message's id and timestamp, so if a message or comment was edited but kept the same id and timestamp, it was wrongly treated as already-seen and skipped. Hashing the actual text means edited or resent content is now correctly detected and re-processed.

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 Signal2
Bash Safety no docs found

Bash parameter-expansion safety checks tightened, gated by tengu_shimmying_mochi#

Claude Code's bash-safety checker now rejects more risky variable-expansion patterns

Feature flag
tengu_shimmying_mochi 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_shimmying_mochi
What

The analyzer that judges whether a shell command's variable expansions are safe or need extra scrutiny now refuses two more patterns: ${!...} forms used for name-listing or positional parameters, and ${ |...} patterns. It also added a stricter "canonical form" check, requiring that the parsed pieces of an expansion reconstruct the original text exactly before it's treated as safe.

Why

This tightens the safety checks Claude Code runs on bash commands before executing them, catching more shell syntax that could behave unexpectedly.

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
Filesystem Security

Directory-descent symlink/mount verification hardened against races and EPERM/EACCES#

Symlink and mount checks while walking into directories are hardened against races and permission errors

Details 0 0 Feedback
What

When Claude Code verifies that a file path's parent directories are what they're expected to be (checking they haven't been swapped out for a symlink, for example), it now walks the path one directory level at a time, re-verifying each level even if the normal file-status check fails with a permission error. As a fallback, it opens the directory directly with a flag that refuses to follow symlinks, in order to check it safely.

Why

This closes a race-condition window (called TOCTOU, time-of-check to time-of-use) where a symlink could be swapped in partway through a path check, and it makes the check more robust on systems where permission errors would otherwise have blocked verification entirely.

Related

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

Improved
You'll notice
Useful2 Signal1
Plugins

Plugin ZIP install gets content-hash based preview caching#

Plugin ZIP installs now reuse a cached extraction based on the archive's content hash

Details 0 0 Feedback
What

When installing a plugin from a ZIP file, Claude Code now computes a sha256 hash of the archive's contents. If a matching hash has already been extracted (or staged for preview) for that directory, it reuses that existing extraction instead of unzipping the file again. Otherwise, it extracts the plugin into a new directory named after the hash.

Why

This avoids repeatedly re-extracting the same plugin archive, speeding up installs and previews when the same ZIP is processed more than once.

Related

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

Improved
You'll notice
Useful2 Signal1
Elsewhere

Task-notification wording now distinguishes lingering background work#

Task-stop notifications now say when a result may still change because background work is ongoing

Details 0 0 Feedback
What

When an agent (a task Claude Code runs on your behalf) stops but still has background work of its own running, the task-notification message now says so explicitly: it warns that the result 'may be interim' and that the same task ID will send another notification once that background work finishes. Previously, all stop notifications used the same generic wording regardless of whether background work was still in progress.

Why

This prevents readers from mistaking a partial or provisional result for the final one, and tells them to expect a follow-up notification rather than assuming the task is fully done.

Improved
You'll notice
Useful2 Signal1
Plugins

Git tag signing for plugin release tags#

Plugin release git tags now get signed using your git signing configuration

Details 0 0 Feedback
What

When Claude Code creates a git tag for a plugin release, it now reads your git commit/tag signing configuration and applies it when creating the tag. If that configuration can't be read, it falls back to creating an unsigned tag and shows a warning that the tag was created unsigned. The tag creation now also runs through a sanitized, isolated environment.

Why

This lets plugin release tags be signed the same way your other git tags are, instead of always being created unsigned, while still working (with a clear warning) if signing configuration isn't available.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact type/design-system file resolution now checks project/ prefix and supports installing saved design-system tokens directly#

Artifact file lookups now also check a project/ prefix, and saved design tokens can be installed directly

Details 0 0 Feedback
What

When Claude Code looks up type or design-system files for an Artifact (things like README.md or tokens.json), it now checks both the plain path and a project/-prefixed version of that path.

It also lets the model install a previously-saved design system directly: instead of re-reading and re-typing the file's contents, it can send the saved tokens.json (and, for the 'design' type, bundle.js, bundle.css, and index.d.ts) as a files entry that just points from a path with a contentType. There's also special handling for the 'slides' type's designSystems unpinned flag.

Why

This avoids unnecessary re-reading and retyping of design-system content that's already saved, and makes file lookups more resilient by checking an additional common path location.

Improved
You'll notice
Useful2 Signal1
Filesystem Security

New macOS-specific 'redirect' detection for staged/network/home paths#

New macOS/WSL path-redirect detection feeds into file trust checks

Details 0 0 Feedback
What

Claude Code adds new internal checks that detect when a file path resolves through a redirect specific to macOS or WSL (Windows Subsystem for Linux) setups, including:

  • macOS /Volumes network mount paths
  • /home symlinks
  • WSL UNC-style paths like //wsl$/...

These checks feed into the logic that decides whether a given path needs extra trust verification.

Why

Paths that quietly redirect to a network location or a different filesystem can be a way to sneak untrusted content past normal trust checks, so detecting these redirect patterns lets Claude Code apply extra scrutiny where it's warranted.

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
Git Security

Bare-repo/gitdir-redirect trust gate reworked with WSL UNC path support#

Bare-repo trust check now also recognizes WSL UNC-style redirect paths

Details 0 0 Feedback
What

The git_bare_repo_gate check, which looks at whether a .git symlink or gitdir file redirects somewhere untrusted, now uses a shared WSL UNC-path test instead of its own inline regular expression. This is part of a broader refactor of the logic that classifies paths as plantable, trusted, or oversized.

Why

Reusing a common, presumably more thorough path check makes this trust gate consistent with the other new redirect detection, reducing the chance of a WSL-style redirect path slipping past the bare-repo trust check.

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

Marketplace refresh now surfaces git-lfs warnings during clone#

Marketplace refresh now surfaces git-lfs warnings while cloning plugins

Details 0 0 Feedback
What

When Claude Code clones a plugin repository from the marketplace, it now checks for git-lfs (Git Large File Storage, an extension for handling big files in git repos) related messages during the clone and logs them, prefixed with [git-lfs], and reports them through the progress callback so they're visible during the refresh.

Why

If a plugin repository uses git-lfs and something goes wrong or needs attention, you'll now see a clear warning instead of the clone silently succeeding or failing without explanation.

Related

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

Improved
You'll notice
Useful2 Signal1
Elsewhere

Transcript truncation-detection now covers queued-command and teammate-mailbox attachments#

Transcript truncation now also applies to queued-command and teammate-mailbox attachments

Details 0 0 Feedback
What

The logic that decides whether a message row in the transcript should show as truncated or collapsible now specially handles two more attachment types: queued_command (checked by origin or prompt length) and teammate_mailbox (checked by message count). Plain assistant text messages can also now be collapsed based on their origin or length when the transcript isn't in verbose mode.

Why

This keeps long transcripts readable as more kinds of messages and attachments are introduced, collapsing ones that would otherwise clutter the view.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Shell snapshot creation now takes plugin bin paths and gains a usability check#

Shell startup snapshots now account for plugin binary paths and check they still exist before reuse

Details 0 0 Feedback
What

The code that builds the bash shell's startup snapshot now accepts plugin binary paths (pluginBinPaths) in addition to the existing storage data it used before. The shell object also gains a new isSnapshotUsable() method that re-checks the snapshot file still exists on disk before the snapshot is used.

Why

This keeps shell snapshots aware of plugin binaries and avoids trying to reuse a snapshot whose underlying file has disappeared.

Improved
You'll notice
Useful2 Signal1
MCP

MCP server config now validates "sdk" type entries against an allowed channel#

MCP server configs of type "sdk" are now validated against an allowed channel before loading

Details 0 0 Feedback
type: "sdk"
What

When Claude Code loads MCP (Model Context Protocol) server configuration at startup, entries with type: "sdk" are now checked against a validation function before being accepted. Entries that fail this check are dropped, with a warning, instead of being silently loaded.

Separately, Anthropic's documentation notes that in cloud sessions, Claude Code ignores server-delivered mid-session MCP updates reaching cloud sessions through cloud session configuration or SDK setMcpServers() calls, though in-process type: "sdk" entries stay exempt from that restriction.

Why

This stops sdk-type MCP server entries from loading outside the channel they're meant to run in.

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

New marketplace checkout freshness probe avoids unnecessary re-clones#

Claude Code checks a plugin marketplace's remote git ref before re-cloning it, skipping the clone when nothing changed

Details 0 0 Feedback
What

Before refreshing a plugin marketplace's local git checkout, Claude Code now runs git ls-remote (a command that lists what commits a remote git repository currently has) against the configured ref, or HEAD, and compares the result to the commit the local checkout already has. It only re-clones when the sparse checkout paths changed, HEAD can't be read, the ref isn't advertised by the remote, or the commit hashes differ. Otherwise it reports the checkout as already current.

Why

This avoids unnecessary re-cloning of a marketplace repository when nothing has actually changed, saving time and network calls when Claude Code checks whether plugin marketplaces are up to date.

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
Self-Hosted Runner

Self-hosted runner: inaccessible context-source repos are skipped instead of failing the whole clone#

Self-hosted runner now skips context-source repos it can't access instead of failing the whole clone

Details 0 0 Feedback
What

When a self-hosted runner (the claude runner binary used to run hosted or CI-style pools of sessions) prepares context sources for a session, it used to fail the whole clone if one repo couldn't be reached. Now, if a repo that isn't a work repo (it has no push_targets entry) can't be accessed through the git mount or proxy because of an authentication or permission problem, the runner logs a warning, records the skip as context_source_access_denied, and shows a step message telling the user to check their GitHub connection or ask an admin to check org access.

Why

This keeps one inaccessible repo from blocking an entire session's setup, and it gives users a clear next step (check GitHub access, or ask an admin) instead of an opaque failure.

Related

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

Improved
You'll notice
Useful2 Signal1
Git

Git repository access errors are now classified into denial reasons#

Git access failures during clone/fetch are now classified into specific denial reasons

Details 0 0 Feedback
What

When a git command fails while cloning or fetching a repository (for example, for git-backed connectors), Claude Code now matches the failure's error text against known patterns and classifies it as one of: repo_not_found_or_no_permission, no_credentials, authentication_failed, or blocked_by_git_proxy. This is attached to a new RepositoryAccessError.

Why

Classifying git failures this way means error handling and user-facing messages can be more specific about why access failed, instead of showing a generic git error.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Memory-pressure banner split into separate 'high' and 'critical' tiers#

Memory-pressure warning now shows separate 'high' and 'critical' banners instead of one combined one

Details 0 0 Feedback
What

The hook that checks memory usage and warns the user used to return a single status. It now takes a threshold and a flag for whether to emit telemetry, and runs twice: once to check the 'high' tier and once for the 'critical' tier, each producing its own banner in the interface. The tengu_memory_threshold_crossed telemetry event now only fires from the critical-tier check.

Why

Splitting the warning into two tiers lets Claude Code distinguish a milder heads-up (high memory use) from a more urgent one (critical), rather than treating both the same way, while only counting the more severe crossing in telemetry.

Improved
You'll notice
Useful2 Signal1
Artifacts

Better error messages when Artifacts need a claude.ai login, especially in remote/injected-credential sessions#

Error messages for Artifacts requiring a claude.ai login are now more specific about remote and host-injected-credential sessions

Details 0 0 Feedback
What

When Artifacts (Claude's rendered code/content outputs) need you to be signed in to claude.ai and you're not, Claude Code now shows a more precise error depending on your situation:

  • A generic message telling you to run /login
  • A remote-session message explaining that the host machine (the one actually running the session) needs to be signed in
  • A message for sessions where credentials are injected by the host environment, noting this can't be changed locally
Why

Previously the login error was likely one generic message regardless of setup. Now, if you're in a remote session or one where your login comes from the environment rather than a local /login, the error tells you where the actual problem is instead of pointing you at a command that won't fix it.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact-watching notification and confirmation copy overhauled#

Wording around artifact-watching notifications and confirmations rewritten to clarify that new versions and republishes don't interrupt Claude

Details 0 0 Feedback
What

Several pieces of text related to watching an artifact for changes have been rewritten:

  • The notification banner shown for artifact updates
  • The message sent to Claude explaining republish and comment behavior
  • The confirmation-dialog text shown when approving artifact watching or auto-reply

The new wording centers on making clear that 'a new version starts no turn and sends no notification' and 'a republish starts no turn.'

Why

This clarifies, in the copy itself, that these artifact-watch events don't automatically trigger a new conversation turn or notification, which should reduce confusion about whether Claude will react to artifact changes on its own.

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
Elsewhere

Cloud gateway settings failures now carry a structured reason and forbidden flag#

Cloud gateway settings-load failures now report a specific reason and a 'forbidden' flag

Details 0 0 Feedback
What

When Claude Code's cloud gateway fails to load settings, the failure result now includes a forbidden boolean and a reason field, set to one of gateway_signin_required, gateway_access_denied, or remote_settings_required_unavailable. These are added alongside the existing exitMessage and endedSession fields, and cover the 401 (unauthorized), 403 (forbidden), and other error cases.

Why

This gives more precise, structured information about why a settings load failed, which should make it easier to distinguish an access-denied case from a sign-in problem or an unavailable service.

Improved
You'll notice
Useful2 Signal1
Plugins

Plugin tool registration can be withheld by a deny rule without waiting#

Plugin tool registration blocked by a deny rule now fails instantly instead of waiting

Details 0 0 Feedback
What

When a plugin registers a new tool and a permission deny rule matches that tool by name (or by MCP server plus tool name), Claude Code now returns immediately saying the tool is withheld from the session, instead of polling and waiting for the tool to show up in the session's tool list.

Why

Previously this case likely caused a delay or timeout while Claude Code waited for a tool that was never going to appear because it's blocked. Failing fast avoids that wasted wait.

Improved
You'll notice
Useful2 Signal1
MCP

MCP config 'sdk' server type now rejected outside SDK host registration#

MCP servers of type 'sdk' in config files are now rejected unless registered by the SDK itself

Details 0 0 Feedback
sdk
What

An MCP server declared with type "sdk" in a configuration file is now explicitly rejected with a dedicated error, unless the configuration comes from the in-process SDK (marked as source dynamic). The general "unknown server type" error message also no longer lists sdk as a valid type unless the source is dynamic.

Why

This closes off a way of declaring an sdk-type server that only an SDK host application should be able to register, giving a clearer error instead of letting it fail as a generic unknown type.

Improved
You'll notice
Useful2 Signal1
Artifacts

Auto-replies: new 'signed in outside the org' refusal reason for resume#

Auto-replies to Artifact comments can no longer resume for accounts signed in outside the artifact's organization

Details 0 0 Feedback
What

Claude Code's automatic-reply system for Artifact comments gains a new refusal reason, public_outside_org. If an Artifact is public and the account currently signed in is outside the organization that owns it, automatic replies can no longer be resumed. When this happens, Claude Code tells the user about it and is instructed not to retry.

Why

This closes a case where an account outside an Artifact's organization could re-arm automatic replies on a public Artifact, which presumably isn't meant to be allowed across an organization boundary.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact republish notice changed from live notification to passive marker#

Artifact republish notices now describe a passive note instead of promising an active notification

Details 0 0 Feedback
What

The message shown when attaching to a watched Artifact changed. It used to promise the user would be actively "notified" if the Artifact was republished elsewhere. It now says a republish (from another session, or someone saving from the page) "starts no turn" on its own, and instead some future Artifact tool results will simply open with a one-line note that a newer version was published.

Why

This sets more accurate expectations: republishing elsewhere doesn't proactively interrupt or notify a session, it just gets mentioned the next time an Artifact tool result happens to come up.

Improved
You'll notice
Useful2 Signal1
Elsewhere

apiKeyHelper failure now surfaced in status/settings display#

Settings/status now shows a 'Failing' row with last-run time when your apiKeyHelper command errors

Details 0 0 Feedback
apiKeyHelper
What

The settings and status display now shows a 'Failing' row when your configured apiKeyHelper (a command you set up to generate an API credential) fails to run. Normally this row includes the timestamp of the last run attempt, but in demo mode it just says 'Failing' without the timestamp.

Why

This makes it easier to notice when your apiKeyHelper command is broken, instead of failures happening silently.

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
Memory

Two new memory-write rejection reasons: index too large and content screened#

Shared memory writes can now fail because the index file is too large or content was screened out

Details 0 0 Feedback
What

Claude Code's shared memory write path now recognizes two additional rejection reasons from the server, each with its own guidance shown to the agent:

  • the MEMORY.md index file exceeding a size cap that is separate from the limit on individual files
  • content being rejected by an unspecified safety screening check
Why

This gives clearer, more specific feedback when a memory write is rejected, so the agent (and by extension the user) understands whether the problem is the index file being too big or content being blocked, rather than a generic failure.

Improved
Under the hood
Useful2 Signal1
Elsewhere

Governed mount read failures now return typed reasons instead of null#

Governed mount read failures now report a specific reason instead of a generic null

Details 0 0 Feedback
What

For self-hosted deployments that use a governed mount (a controlled file location Claude Code reads from), a failed read used to just return nothing (null) with no explanation. Now it returns a result like {ok: false, reason: ...}, with the reason being one of not_regular_file, read_error, or absent.

Why

This lets the code that calls this function tell the difference between a missing file, a file that isn't a regular file, and a read error, instead of treating every failure the same way.

Improved
You'll notice
Useful2 Signal1
Background Tasks

Background task exit now flushes buffered output into its notification#

Background task exit notifications now include any output that hadn't been flushed yet

Details 0 0 Feedback
What

When a task running in the background finishes, Claude Code sends a notification about it. There's now a reportExit() step that, on exit, drains any output that was still sitting in the buffer and hadn't been shown yet, and folds it into that exit notification. If no notification had been created yet, a new one is created to carry this output.

Why

Previously, output produced right before a background task exited could be left out of the notification. Now the final notification reliably reflects everything the task printed, even in its last moments.

Improved
Under the hood
Useful2 Signal1
Elsewhere

Cloud gateway sign-in error now a structured error code#

Cloud gateway sign-in failure is now a structured error with a 'signin_required' code

Details 0 0 Feedback
/login
What

When Claude Code isn't signed in to the Cloud gateway, the resulting failure is now thrown as a typed error carrying the code signin_required, instead of a plain, generic error. The message shown still tells the user to run /login.

Why

A structured error code lets other parts of the code detect and handle this specific failure (for example, prompting sign-in) rather than only being able to match on the error's text.

Related

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

Improved
You'll notice
Useful2 Signal1
Elsewhere

New git worktree-create refusal for unsafe LFS config keys#

Creating a git worktree can now be refused if the repo's git config sets an unsafe Git LFS-related key

Details 0 0 Feedback
What

Claude Code can now refuse to create a git worktree or checkout with a new reason, unsafe_key, when the repository's own git config sets an LFS (Git Large File Storage)-related config key that names a program git-lfs would run during checkout or status.

Why

A repository's git config can be crafted to make git-lfs automatically run an arbitrary program. Refusing the worktree creation in that case stops Claude Code from triggering that program without the user knowing.

Improved
You'll notice
Useful2 Signal1
Auth

New auth error message for unverifiable org token#

New error message tells users when their organization can't be verified for their current auth token

Details 0 0 Feedback
claude auth login
What

Claude Code now shows a specific error message when it can't verify the organization tied to a user's current authentication token, telling them to retry or run claude auth login.

Why

This gives a clearer, actionable message when organization verification fails, instead of a generic error, so the user knows exactly what to do next.

Related

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

Improved
You'll notice
Useful2 Signal1
Elsewhere

New version-mismatch update prompt#

New message tells users their Claude Code version must be updated before continuing, with the exact update command

Details 0 0 Feedback
claude update
What

A new message tells the user that their current version of Claude Code is too old, states the minimum version now required, and tells them to run claude update.

Why

This makes clear why Claude Code has stopped working and gives the exact command to fix it, instead of leaving the user to guess what to do.

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
Git Security unclear

Git env allowlist changed: config-override vars removed, namespace/worktree vars added#

The GIT_* environment variables Claude Code sanitizes before running git changed: config-override vars dropped, namespace/worktree vars added

Unclear It isn't clear why the config-override variables, previously called out for safety reasons, were removed from this list.

Details 0 0 Feedback
What

The set of GIT_* environment variables that Claude Code scrubs before running git commands changed:

Why

This changes exactly which environment-based ways of redirecting a git command's behavior Claude Code sanitizes against before running it, dropping the config-override variables from the list and adding namespace and work-tree ones instead.

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
Elsewhere

Certificate errors now classified for cert-chain failures#

TLS certificate errors are now classified into specific known cert-chain failure codes

Details 0 0 Feedback
What

A new list of known TLS certificate error codes, UNABLE_TO_VERIFY_LEAF_SIGNATURE, UNABLE_TO_GET_ISSUER_CERT, UNABLE_TO_GET_ISSUER_CERT_LOCALLY, DEPTH_ZERO_SELF_SIGNED_CERT, and SELF_SIGNED_CERT_IN_CHAIN, is now used with a new helper function to extract a readable reason string from certificate errors.

Why

This lets Claude Code recognize and report specific certificate chain problems, like self-signed or unverifiable certificates, with a clearer reason instead of a generic connection failure.

Improved
Under the hood
Useful2 Signal1
System Prompt

System-prompt/tool-schema info is now cached and hashed#

System prompt and tool schema extraction is now cached and hashed instead of reparsed each time

Details 0 0 Feedback
What

The internal function that extracts the active system prompt, tools, and tool schemas now caches its parsed result instead of redoing the work on every call, and adds a systemPromptHash field computed by a new hashing function.

Why

Caching avoids repeatedly re-parsing the same system prompt and tool information, and the new hash gives a quick way to check whether the system prompt has changed.

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

New prompt_render_point cause 'set_model_system_prompt'#

A new marker tracks when the system prompt was re-rendered specifically because the model changed

Details 0 0 Feedback
What

Claude Code now records a marker in the conversation, tagged cause: 'set_model_system_prompt', when the system prompt is regenerated as a result of a model change. New logic uses the position of these markers in the conversation history to decide whether the system prompt needs to be re-rendered again after a model switch.

Why

This helps Claude Code avoid unnecessarily re-rendering the system prompt, by keeping track of exactly when it was last regenerated due to a model change.

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
Startup

Startup now fails gracefully with a structured result when cwd is unavailable#

Claude Code now exits with a structured JSON error, not just a printed message, when its working directory is unavailable at startup

Details 0 0 Feedback
What

If Claude Code starts up and finds that its current working directory is missing or unreadable, it now produces a structured result with the reason cwd_unavailable before exiting, instead of just printing an error message. This puts it in line with other startup failure reasons like temp_dir_unusable (temporary directory can't be used) and shell_tool_missing (required shell tool not found).

Why

A structured, machine-readable failure result makes it easier for scripts, integrations, or tools that launch Claude Code to detect exactly why startup failed and react accordingly, rather than having to parse free-form error text.

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
Artifacts

New guard on artifact file reads triggered by unattended auto-reply notifications#

Artifact file reads triggered by unattended auto-reply notifications are now blocked outside background/subagent contexts

Details 0 0 Feedback
What

The permission check for reading artifact files now explicitly refuses to allow the read when it was queued as a result of an unattended auto-reply notification, unless the current context is a background or subagent context.

Why

This closes off a path where an automatic, unattended notification reply could trigger a file read outside of a controlled background process, keeping such reads confined to contexts where they're expected.

Improved
You'll notice
Useful2 Signal1
Git Worktrees

Worktree/job deletion now detects in-progress submodule work before removing#

Deleting a job's worktree now checks for in-progress submodule work before removing it, instead of only tracked-file state

Details 0 0 Feedback
What

When Claude Code deletes a job and cleans up its associated git worktree (a separate working copy tied to a branch), it now also checks the status of any git submodules. If submodule state can't be verified, the worktree is kept rather than deleted, with a new 'submodule' reason recorded for why it was kept. Previously this check only looked at whether tracked files were dirty or whether there was a nested repository.

Why

This avoids accidentally deleting a worktree that has in-progress or unverifiable submodule work, reducing the risk of losing uncommitted changes inside a submodule.

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

Headless SDK sessions now detect and re-inject a changed system prompt mid-session#

Headless SDK sessions now detect a changed system prompt mid-session and re-inject it into the transcript

Details 0 0 Feedback
systemPromptSnapshot
What

In headless SDK sessions (Claude Code used programmatically rather than interactively), a new check compares whether the system prompt was already sent against whether the caller's systemPromptSnapshot has since changed. If it has changed, the new system prompt is pushed into the session transcript as an event and telemetry is recorded, before the system prompt is applied for that turn.

Why

This lets a long-running headless session pick up a system prompt change partway through, rather than being stuck with whatever prompt was set at the start of the session.

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
Elsewhere

Agent-summary generation now rejects unusable replies and tracks consecutive rejects#

Background-agent summaries now get rejected outright if unparseable, with a running count of failures

Details 0 0 Feedback
What

When Claude Code generates a short summary of what a background agent (a subagent running a task in the background) is doing, it now parses the model's reply and, if that parsing fails, throws the reply away instead of storing it as the summary. Previously it would just trim any non-empty reply and use it regardless. A count of consecutive rejected replies is now tracked and reported.

Why

This avoids showing garbled or unusable text as a background agent's summary, at the cost of sometimes having no summary at all when the model's reply can't be parsed.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact comment-read errors now carry structured, more specific explanations#

Artifact comment-read failures now show specific reasons instead of one generic error

Details 0 0 Feedback
What

When Claude Code can't read comments on an artifact (a shared document or file created in a conversation), it now explains why in more detail. A new internal helper translates specific failure reasons, such as the artifact belonging to another organization, not being a shared link, not currently being served, being blocked by a permission rule, having a pending notice, or a check failing, into a plain-language explanation plus a suggested next step (like saying so, making your own calls, or listing available items).

Why

Previously all these situations produced the same generic "its sharing could not be checked" message. Now you get a more specific reason and a hint about what to try next, making it easier to understand why an artifact comment couldn't be read.

Improved
You'll notice
Useful2 Signal1
Git

Git bundle upload now auto-falls-back to a squashed snapshot for partial/promisor clones#

Git bundle uploads now fall back to a squashed snapshot when the repo uses partial or promisor clones

Details 0 0 Feedback
What

When creating a git bundle fails on a repository that isn't hardened and wasn't deliberately aborted, Claude Code now checks the repo's git config for signs it's a partial or promisor clone (settings like extensions.partialclone, a remote.*.partialclonefilter, or a remote.*.promisor entry). If any of these are present, it automatically retries, forcing the operation into a "squashed" mode that bundles a snapshot of the working tree instead, and marks the result as a promisor fallback.

Why

Partial and promisor clones don't have all the git objects needed to build a normal bundle, which used to just fail. Now Claude Code recovers automatically by bundling a snapshot instead, so the upload still succeeds.

Related

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

Improved
You'll notice
Useful2 Signal1
MCP

MCP prompts/resources list-changed listeners no longer require the server to advertise listChanged#

Claude Code now listens for MCP prompt/resource list-changed updates whenever a server offers prompts or resources at all

Details 0 0 Feedback
What

When connecting to an MCP server, Claude Code used to only subscribe to notifications that a server's list of prompts or resources changed if the server explicitly advertised support for that (listChanged). Now it subscribes as soon as the server declares the prompts or resources capability at all, whether or not it explicitly says it supports change notifications.

Why

This means Claude Code can pick up updates to a server's available prompts or resources from more servers than before, including ones that didn't explicitly flag support for change notifications.

Improved
Under the hood
Useful2 Signal1
Artifacts

Artifact provenance text-normalization gets a new "created by this session" tag and looser matching#

Artifact text scrubbing now recognizes more phrasings of 'created in this session'

Details 0 0 Feedback
What

The internal helper that detects and scrubs artifact-provenance phrases (text describing where an artifact's content came from) now also recognizes phrases like "created ... by ... this ... session" with any punctuation or non-letter separator between the words, not just plain whitespace. It also adds new fixed annotation strings for marking artifact ownership and for flagging screened destinations.

Why

This broadens the matching so more real-world phrasings of session-provenance text get caught and handled consistently.

Improved
Under the hood
Useful2 Signal1
Chrome Control

Multi-browser device selection state added to the Chrome bridge connector#

Chrome bridge now re-runs device discovery while a multi-browser selection is pending

Details 0 0 Feedback
What

The browser bridge tool, which connects Claude Code to a browser like Chrome, gained a new multiBrowserPendingSelection flag. Device discovery (finding connected browser instances) now also runs, or re-runs, whenever a multi-browser selection is pending, not only when discovery had never completed before.

Why

This should make browser selection more reliable when multiple browsers are connected and a choice between them is still awaiting an answer, rather than getting stuck on stale discovery results.

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
Gateway

Self-hosted gateway retries Postgres connection at boot#

Self-hosted gateway now retries the Postgres connection up to 3 times at startup instead of failing immediately

Details 0 0 Feedback
What

A new retry wrapper, internally called Ote, has been added around the Postgres database connection that the self-hosted gateway makes while loading its configuration at startup. If the connection attempt fails with a connection-refused-style error, it is retried up to 3 times before the gateway gives up.

Why

This helps the gateway start up cleanly in cases where Postgres isn't quite ready yet (for example if the database container is still starting), instead of failing on the first attempt.

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
Group of 2 Auth unclear

403 retry and design-consent handling gated by an additional origin check#

Bearer-token 403 retry logic and the design-consent MCP error path now both require an extra same-origin check (Nk) before triggering.

Unclear What condition the new Nk(s) check actually verifies is not specified.

Details 0 0 Feedback

What

  • The fetch wrapper that retries a request after a 403 response with a sent bearer token now also requires a new check (Nk) to pass, in addition to the existing check that the response was a 403 with a token sent.
  • The same check now gates whether a 403 response gets turned into a needs_consent design-MCP error, restricting that behavior to first-party design MCP endpoints.

Why This narrows when the 403-retry and design-consent behavior kicks in, preventing them from firing for responses that aren't actually from the first-party design MCP service.

Improved
Under the hood
Useful1 Signal1
Group of 2 Artifacts

Remote fetch checks now also recognize 404 as a non-fatal status#

Claude Code's remote-fetch and artifact-fetch checks now treat HTTP 404 like they already treated 403, instead of failing

Details 0 0 Feedback

What

Two places that fetch remote content used to only special-case HTTP 403 (forbidden) responses when deciding whether a failure was fatal:

  • The generic remote-config/answer-fetch helper, used for things like skill or answer retrieval, now also checks for HTTP 404 using a new omn check before treating the response as an unrecognized status failure.
  • The egress probe used before fetching artifact content now also has a parallel 404 path (checking for a plain-text response with a "not found" reason), alongside its existing 403 (forbidden) check.

Why

Previously a 404 response in these paths could be treated as an unexpected failure. Now it is recognized as a normal, non-fatal outcome, similar to how 403 was already handled, so Claude Code can respond to a missing resource more gracefully instead of erroring out.

Improved
Under the hood
Useful1 Signal1
Group of 2 Plugins

Builtin plugin loading now tracks failures and blocks retrying a failed plugin#

Claude Code now records why a bundled plugin failed to load and stops treating that plugin as available afterward

Details 0 0 Feedback

What

Loading a bundled (builtin) plugin now goes through new helper logic that requires the plugin, checks its shape, and registers it, recording a structured failure entry (keyed by plugin name and the phase it failed at: require, shape, register, or is_available) when something goes wrong, along with a telemetry event.

The check for whether a builtin plugin is enabled now also looks at this failure record: a plugin is treated as unavailable if it previously failed to load, in addition to the existing isAvailable() check.

Why

This prevents Claude Code from repeatedly trying to use a builtin plugin that already failed to load, and gives clearer, phase-specific information about why a given plugin isn't working.

Improved
You'll notice
Useful1 Signal1
Elsewhere

Old version folders under a 'claude-test' staging area now get proactively cleaned up#

Claude Code now automatically cleans up old version folders left behind in its 'claude-test' staging area

Details 0 0 Feedback
What

A new cleanup routine runs against the staging directory used by the claude-test feature: it updates the directory's modification time, then, once a version check succeeds, deletes sibling version folders that are older than the currently installed version's own folder. If cleanup fails, it logs claude-test: old version folders not cleaned up rather than stopping.

Why

This keeps old, unused version folders from accumulating in the claude-test staging area over time.

Improved
Under the hood
Useful1 Signal1
Gateway

Gateway server gains a graceful drain/shutdown path#

Local managed-gateway server gains a graceful drain step before shutdown

Details 0 0 Feedback

**What

The local gateway server that Claude Code runs to manage API requests now tracks how many requests are still in flight and adds a drain method (alongside the existing stop) that stops accepting new work, waits for pending requests up to a timeout, flushes billing/metering data, and reports how many requests were still pending when it finished. The server also now checks whether a request originated from an internal/in-VPC address for logging purposes, and its housekeeping reports now include an outboundLimit value.

Separately, the server-side billing and spend-limit code now tracks in-flight spend-check and metering work and exposes a flush function that waits for all of it to finish before the process exits, using a timeout-bound abort mechanism for the spend-check request itself.

**Why

This reduces the chance of losing in-flight requests or billing/metering data when the gateway shuts down, ensuring usage is accurately recorded rather than dropped mid-request.

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
Elsewhere

Force-login-org / policy validation failures now get logged and reported with a reason#

Failed org/policy validation during headless startup now gets logged with a reason

Details 0 0 Feedback

**What

When Claude Code runs in headless mode (--print) and account or organization policy validation fails, it now records a report before erroring out. If the policy couldn't be read (policyUnreadable), a policy_invalid event is reported. In the final force-login-org check, a failure now also logs the session ID, message, and reason, and runs an additional cleanup step.

**Why

This gives better visibility into why a headless session was blocked by organization policy, making these failures easier to diagnose instead of just failing silently.

Improved
You'll notice
Useful1 Signal1
Git Worktrees

Worktree removal failure reason "nested_repositories"/"nested_unverified" merged into a single "submodule" case#

Two separate nested-repository worktree-removal errors were merged into one "submodule" case with clearer wording

Details 0 0 Feedback
What

When Claude Code refuses to remove a git worktree because of nested repositories, it used to report two separate reasons internally (nested_repositories and nested_unverified). These are now merged into a single "submodule" case, with wording that tells apart a worktree holding a separate git repository, which should be moved or deleted, from a submodule whose state can't be verified, which needs a manual check.

Why

This gives clearer, more consistent guidance when a worktree removal is blocked by nested repository content, telling the user directly whether they need to move or delete something versus check it manually.

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

/review's help text now hedges on which cleanup categories are covered#

/review's description now says cleanup suggestions are covered only where the review recipe supports them

Details 0 0 Feedback
/review
What

The help text for /review no longer unconditionally promises that it covers reuse, simplification, and efficiency cleanups alongside correctness bugs. It now says those cleanups are included only 'where the model's review recipe covers them.'

Why

This sets more accurate expectations: /review may not always surface reuse, simplification, or efficiency suggestions, depending on which review recipe is in use, whereas the previous wording implied it always would.

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
Elsewhere

Shell snapshot invalidation tracks plugin bin/ PATH changes#

Cached shell snapshots are now invalidated when plugin bin/ directories change what's on PATH

Details 0 0 Feedback
What

Claude Code caches a snapshot of your shell environment for performance. New logic now decides whether to drop that cached snapshot whenever plugins refresh, checking for any of these conditions:

  • Whether plugin bin/ directories added to your PATH have changed
  • Whether the shell configuration's snapshot has become unusable
  • Whether the shell configuration was still in the process of building

One of these specific reasons is logged before the snapshot is invalidated.

Why

This keeps the cached shell snapshot from going stale when plugins change what commands are available on PATH, so Claude Code doesn't keep using outdated shell state after a plugin refresh.

Improved
You'll notice
Useful1 Signal1
Artifacts

Live-subscribe 'flag off' wording softened from an explicit capability claim#

Message about disabled live-updates on Artifacts reworded to avoid overpromising

Details 0 0 Feedback
What

When the live-subscribe feature is turned off for a session, the message shown changed wording. It used to say Claude "will not be notified" about new versions of an Artifact; it now says "this session does not keep track of new versions of this artifact" instead.

Why

The new wording is more neutral and accurate about what's actually happening: the session isn't tracking new versions, rather than making a specific claim about notifications.

Improved
Under the hood
Useful1 Signal1
Elsewhere

Prompt hook blocking-error truncates overly long prompt commands#

Prompt hook error messages now truncate overly long prompt text instead of embedding it in full

Details 0 0 Feedback
What

When a prompt hook's condition isn't met, the resulting blocking-error message now truncates the prompt command or label if it's too long, instead of always embedding the full raw prompt text.

Why

This keeps error messages from a prompt hook readable and prevents very long prompt text from bloating the error output.

Improved
Under the hood
Useful1 Signal1
Elsewhere

Memory-sync 'empty file restored' notice suppressed for account-scoped memory#

Notice about memory sync restoring empty files is now suppressed for account-scoped memory

Details 0 0 Feedback
What

Claude Code can warn users when memory sync restores a file that turned out to be empty (0 bytes) from shared memory storage. That notice is now routed through a helper that skips showing it entirely when the memory store's scope is "account".

Why

This avoids surfacing a notice about empty restored files in the account-scoped memory case, where it apparently isn't useful or applicable, cutting down on notifications that don't need the user's attention.

Improved
You'll notice
Useful1 Signal1
Artifacts

Artifact watch/attach status text simplified#

The message shown after tracking an artifact version was reworded from a republish promise to a general statement

Details 0 0 Feedback
What

The confirmation text shown after attaching to a watched artifact or version was reworded. It no longer promises to notify the user specifically about republishing, and instead just states that Claude keeps track of new versions.

Why

The new wording is a more general description of what the tracking feature does, rather than a specific promise about republish notifications.

Improved
You'll notice
Useful1 Signal1
Bash Safety

More shell env vars blocked from bash tool#

The bash tool now also blocks SHELLOPTS, BASHOPTS, BASH_VERSINFO, and BASH_ARGV0 environment variables

Details 0 0 Feedback
What

The list of environment variables the bash tool refuses to let a command set now also includes SHELLOPTS, BASHOPTS, BASH_VERSINFO, and BASH_ARGV0, in addition to the existing blocks on variables like PS4 and IFS.

Why

These shell variables can change how bash itself parses and runs commands, for example turning on debugging or tracing options, so blocking them closes off ways a command could alter shell behavior unexpectedly.

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

WAYLAND_DISPLAY now cleared alongside DISPLAY on Linux#

Claude Code now clears WAYLAND_DISPLAY along with DISPLAY when forcing headless behavior on Linux

Details 0 0 Feedback
WAYLAND_DISPLAY
What

On Linux, when Claude Code strips graphical display environment variables to force headless or command-line browser behavior, it now clears WAYLAND_DISPLAY in addition to DISPLAY.

Why

This closes a gap where a Wayland desktop session could still cause graphical behavior to leak through even after DISPLAY was cleared, since Wayland systems use WAYLAND_DISPLAY instead of (or alongside) DISPLAY.

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

More bash reserved/protected variable names added#

More bash variable and config key names are now protected from being overwritten

Details 0 0 Feedback
What

The list of protected bash shell variable and configuration names grew to include:

  • BASH_MONOSECONDS
  • BASH_TRAPSIG
  • BASH_SOURCE_PATH
  • bash_cmds
  • bash_aliases
  • execignore
  • bash_source_path
Why

Protecting these names prevents Claude Code, or commands it runs, from accidentally overwriting bash internals or configuration keys that could break shell behavior.

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

OTEL raw request/response body dumping rewritten to atomic writes#

OTEL debug logging of raw request/response bodies now writes files atomically instead of writing then handling errors after the fact

Details 0 0 Feedback
OTEL_LOG_RAW_API_BODIES
What

When Claude Code is configured to log raw request and response bodies for OpenTelemetry (OTEL, a standard for exporting logs and metrics), the internal code that writes those dump files now builds its file paths differently and writes the file using an atomic 'replace' operation, instead of writing the file directly and catching errors afterward.

Why

An atomic write means the file is either fully written or not written at all, which avoids leaving behind a half-written or corrupted dump file if the write is interrupted. This is an internal reliability fix for anyone relying on these OTEL debug logs.

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

GitHub connect dialog copy changed to 'cloud sessions'#

GitHub connection dialog now says 'Connect cloud sessions to GitHub?' instead of referencing 'Claude on the web'

Details 0 0 Feedback
What

The dialog shown when connecting GitHub now reads 'Connect cloud sessions to GitHub?', replacing earlier wording that asked about connecting 'Claude on the web' to GitHub.

Why

This is a wording update to the connection prompt, aligning its terminology with 'cloud sessions.'

Improved
Under the hood
Useful1 Signal1
Git Worktrees

Worktree resume: git reset now uses '--' separator and per-directory env; new verified-worktree check gates fast-resume#

Worktree fast-resume now checks the worktree is verified before resetting, and handles reset failure more safely

Details 0 0 Feedback
What

When resuming a git worktree (a separate working copy of a repository) quickly, the code now:

  • builds its git environment per working directory instead of sharing one environment across worktrees
  • adds a -- separator to the git reset --hard command, which prevents a branch or ref name from being misread as a file path
  • checks that the worktree is in a verified state with no pending marker before attempting the fast reset
  • on reset failure, returns nothing and logs a warning instead of silently continuing as if the reset had worked
Why

These changes make worktree resume safer: a failed or unverified reset no longer proceeds silently, which could otherwise leave a worktree in an unexpected state without any warning.

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
Artifacts unclear

Artifact read permission messages can now include an additional public-read admission note#

Artifact read permission prompts can now include an extra note about public-read admission

Unclear The finding does not say what the added clause's text says or exactly when it appears, only that a condition can trigger it.

Details 0 0 Feedback
What

The permission prompt Claude shows before reading an artifact ("Claude wants to read...") can now include an additional sentence under certain conditions, alongside existing flags used to build that prompt.

Why

This gives you more context in the permission prompt itself when a specific public-read condition applies, rather than a generic ask.

Improved
Under the hood
Useful1 Signal1
MCP

MCP OAuth-token fallback now requires a design-server URL match#

MCP OAuth-token reuse now also requires the server's URL to match design-connector rules

Details 0 0 Feedback
What

When Claude Code decides whether an SSE or HTTP MCP (Model Context Protocol) server can skip its own OAuth check because a suitable access token already exists, it now also requires that server's URL to match the design-connector check before falling back to a generic OAuth probe.

Why

This narrows when an existing access token can be reused to satisfy an MCP server's authentication, tying that shortcut specifically to design-connector servers rather than any server with a token available.

Improved
Under the hood
Useful1 Signal1
MCP

OAuth failure messages during tool-triggered MCP connect now include richer context#

OAuth failure messages from tool-triggered MCP connections now include richer context

Details 0 0 Feedback
What

When an OAuth authentication flow fails after being started by a tool call (for example, connecting to an MCP server), the error that gets logged and shown is now wrapped with additional context via a new helper before being reported, instead of showing the raw error text.

Why

This should make failures during tool-triggered OAuth connections easier to diagnose, since the reported error carries more context about what triggered it.

Improved
You'll notice
Useful1 Signal1
Artifacts

Artifact watch wording clarified: no turns, no notifications from new versions#

Artifact watch messages now clarify that new versions don't start a turn or send a notification

Details 0 0 Feedback
What

The text shown for an active artifact watch (watch.watches/watch.status) was reworded. It previously said the session would be "notified if it is republished elsewhere." It now says explicitly that a new version "starts no turn and sends no notification," and that the session merely "keeps track of" new versions published elsewhere.

Why

This clears up a possibly misleading implication that watching an artifact would actively alert you or interrupt the conversation when a new version appears. It now makes clear that watching only keeps a record, without triggering any action.

Improved
Under the hood
Useful1 Signal1
MCP

First-party MCP auto-auth fallback narrowed to design servers requiring consent#

Automatic MCP re-authentication using a stored design token now only applies to /v1/design/ server URLs, not other first-party servers

Details 0 0 Feedback
What

For first-party MCP (Model Context Protocol, the system Claude Code uses to talk to external tool servers) servers, Claude Code previously had a fallback that could automatically re-authenticate using a consent-gated callback for any first-party-looking server. Now that fallback only fires when the server's URL is https, first-party, and its path starts with /v1/design/. A separate check for what counts as a matching first-party URL was also widened to include a new /v1/claude/test/ path, but the actual token-fallback behavior still only applies to /v1/design/ URLs.

Why

This narrows automatic authentication so that other first-party MCP servers no longer silently pick up a stored design-related credential; only design servers get that fallback now.

Gate state

No sentence about tengu_mcp_first_party_auto_auth since nothing has been read about it yet.

Improved
Under the hood
Useful1 Signal1
Background Tasks

task_status system-reminder text now sanitizes task fields before insertion#

Background task status messages now sanitize task fields before inserting them into the model's reminder text

Details 0 0 Feedback
What

When Claude Code reports the status of a background task or agent (running, stopped, a summary of changes, or an output path) back to the model as a system reminder, the task's description, id, type, and delta summary now pass through a sanitizing function before being inserted into that text.

Why

This guards against task data containing content that could otherwise be inserted unsafely into the text sent to the model.

Improved
Under the hood
Useful1 Signal1
MCP

MCP credential-rejection reconnect now checks an explicit reason code#

MCP reconnect-and-retry on credential failure now checks for a specific "credential_rejected" reason rather than any generic failure

Details 0 0 Feedback
What

When an MCP tool call fails, Claude Code has logic to clear the cached connection and retry once. This retry used to trigger on a generic boolean condition, but now it only triggers when the failure reason is specifically credential_rejected.

Why

This makes the reconnect-and-retry behavior more precise, so Claude Code only clears and retries the connection when the failure was actually a credential rejection, rather than any other kind of failure.

Improved
Under the hood
Useful1 Signal1
Slash Commands

Slash-command/title extraction from transcript text now strips XML-like tags first#

Session titling now strips XML-like tags before extracting slash commands from transcript text

Details 0 0 Feedback
What

The internal helper that pulls a slash command or bash-input line out of a stored message (used for things like naming a session or listing recent commands) now first runs the message text through a cleanup step that strips out matched <tag>...</tag> blocks, before it tries to extract the command with its usual pattern matching.

Why

Without this, leftover XML-like tags in a message could interfere with correctly detecting the slash command or bash input inside it, leading to wrong or missing session titles and recent-command entries.

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
Artifacts unclear

Artifact repeated-failure warning now exempts certain rejection reasons#

Artifact tool's 'stop retrying' warning now skips certain rejection reasons

Unclear The finding does not say which reasons are exempted or why.

Details 0 0 Feedback
What

When an Artifact tool call fails with the same reason three times in a row, Claude Code appends an escalating warning telling it to stop retrying. Now, before attaching that warning, it also checks that the failure reason isn't in a new exemption list, and skips the warning if it is.

Why

This prevents the "stop retrying" warning from being shown for certain failure reasons where it presumably isn't appropriate or useful.

Improved
Under the hood
Useful1 Signal1
Artifacts

read_page_data now refuses on public, out-of-org artifacts#

read_page_data now refuses to return data for public artifacts from outside your organization

Details 0 0 Feedback
What

The read_page_data action, which reads an artifact's structured page data, now explicitly refuses to return that data when the target artifact is a public artifact created outside the caller's organization. This returns a dedicated error with its own reason code instead of proceeding.

Why

This closes a gap where structured page data for public, out-of-org artifacts could otherwise be read that shouldn't be accessible here.

Improved
Under the hood
Useful1 Signal1
Remote Control

request_id validated with a strict pattern in control-protocol payloads#

Bridge control-protocol messages now validate request_id against a strict pattern before forwarding it

Details 0 0 Feedback
What

Claude Code's bridge control-protocol message handling now includes a helper that only forwards a request_id field if it matches the pattern req_ followed by 4 to 128 letters, digits, underscores, or hyphens. A companion helper checks whether a JSON payload textually contains a given key.

Why

Validating the shape of request_id before forwarding it guards against malformed or unexpected values being passed through the bridge's control-protocol messages.

Improved
Under the hood
Useful1 Signal1
Elsewhere

Postgres query gains an explicit statement timeout under a wrapped transaction#

A Postgres query now runs with an explicit 2-second statement timeout inside a wrapped transaction

Details 0 0 Feedback
What

A rewritten internal database query helper now wraps its work in an explicit transaction: BEGIN, then SET LOCAL statement_timeout = '2s', then COMMIT, run with Promise.allSettled and an abort check before it even starts. This replaces an older version that made a single call without this wrapping.

Why

This puts a hard 2-second cap on how long this particular database query can run, preventing it from hanging indefinitely and holding up whatever depends on its result.

Improved
You'll notice
Useful1 Signal0
Git Worktrees

--force-remove-worktree help text now mentions submodules#

--force-remove-worktree help text now clarifies its 'no uncommitted changes' rule covers submodules too

Details 0 0 Feedback
What

The command-line help text for --force-remove-worktree now clarifies that its safety requirement of having no uncommitted changes applies to tracked files, including submodules.

Why

This makes the existing safety rule clearer, so users understand that submodule changes count toward blocking a forced worktree removal, not just changes to regular tracked files.

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
Permissions

Permission approval message for copied files simplified#

The approval prompt for copying local files dropped its "so only you can approve this" wording

Details 0 0 Feedback
What

When Claude Code asks for your approval before copying local files, the message it shows has been reworded. It used to end with a phrase explaining that the approval step exists so only you can approve the action; now it just lists the files and ends with a period.

Why

This is a wording tweak to the permission prompt you see when Claude Code needs your OK to copy files. The approval step itself works the same; only the phrasing changed.

Improved
Under the hood
Useful1 Signal0
Git Worktrees

Worktree cleanup git calls now pin an explicit --git-dir#

Worktree cleanup git commands now explicitly pin the git directory instead of relying on current folder

Details 0 0 Feedback
What

The logic that removes or verifies worktrees (used when exiting or cleaning one up) now resolves the git directory up front and passes it explicitly via --git-dir to every subsequent git worktree list and git worktree remove command, instead of letting git discover it based on the current working directory.

Why

This makes worktree cleanup more reliable by pointing git at the correct repository directly, avoiding cases where relying on the current directory could pick the wrong git directory.

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

Git diff baseline for cloud/session diffing now computed lazily#

Git diff baseline for cloud/session diffing is now computed lazily on first use instead of upfront

Details 0 0 Feedback
What

The object that computes diffs against a baseline (used for cloud sessions and session diffing) used to compute that baseline immediately when created. It now computes the baseline only once, the first time a diff is actually requested, and a related lookup path can explicitly skip computing it altogether.

Why

This avoids doing potentially unnecessary work up front when a diff baseline is never actually needed, which should make constructing these diff sources cheaper in cases where no diff is fetched.

33 entries

Bug Fixesopen

Fixed
You'll notice
Useful2 Signal2
Background Tasks unclear

Orphaned background-task recovery on resume now restricted to remote transport#

Recovering interrupted background tasks on restart now requires a remote session

Unclear The finding doesn't say why recovery is now restricted to remote sessions specifically, only that the condition was added.

Details 0 0 Feedback

**What

On startup, Claude Code can recover background tasks that were still running when a previous session was interrupted, controlled by the CLAUDE_CODE_RESUME_INTERRUPTED_TURN setting. This recovery now also requires that the session is using remote transport, meaning it won't attempt this recovery for local sessions.

**Why

This narrows automatic recovery of interrupted background work to remote sessions, presumably because that's where recovering an orphaned task makes sense; local sessions no longer attempt it.

Fixed
You'll notice
Useful2 Signal1
Internals

Global config read errors now surface instead of being silently swallowed#

Errors reading the global config file are now shown instead of being silently hidden

Details 0 0 Feedback
What

The function that reads account login information (oauthAccount) from Claude Code's global configuration file now throws explicit errors, 'global config not readable through storage' and 'global config not parseable', when something goes wrong. Previously, any error in this process was caught and the function simply returned nothing, without explaining why.

Why

Surfacing the actual error makes it much easier to diagnose problems with a corrupted or inaccessible config file, instead of silently behaving as if no account were logged in.

Fixed
You'll notice
Useful2 Signal1
Auth

OAuth device-flow login handles 'slow_down' rate limiting#

Login now shows a clear message when sign-in attempts are being rate-limited

Details 0 0 Feedback
What

When logging in via the device-code flow (the "go to this URL and enter this code" sign-in method), Claude Code now detects a slow_down response from the server and shows "The gateway is limiting sign-in attempts right now. Wait a few minutes and try again," instead of a generic error.

Why

This gives a clear, actionable message when sign-in is being rate-limited, instead of a confusing generic failure.

Fixed
You'll notice
Useful2 Signal1
Artifacts

File-publish source verification hardened against symlink/hardlink spoofing, with an explicit refusal path#

File-publish source verification now has a dedicated refusal for files it can't safely confirm, guarding against symlink spoofing

Details 0 0 Feedback
What

Before publishing a staged file, Claude Code verifies that the source file is what it appears to be. This check now uses a dedicated refusal response when a file's path can't be safely verified, for example because a symbolic or hard link makes the true source unclear. Previously this case was handled by a separate, duplicated deny object.

Why

This hardens the publish path against symlink or hardlink tricks that could otherwise be used to substitute a different file than the one that was actually staged.

Fixed
You'll notice
Useful2 Signal1
Plugins

Plugin sync now tolerates unsettled remote managed-plugin config#

Plugin config sync no longer drops managed plugin entries when remote policy settings haven't caught up yet

Details 0 0 Feedback
What

When Claude Code syncs its installed_plugins.json file, it now checks whether a plugin's remote-managed policy has simply not settled yet, and if so, keeps that plugin's managed entry instead of dropping it as orphaned. It logs a specific message, "Remote managed settings not settled; keeping managed record(s) for...", in this case.

Why

This avoids incorrectly discarding managed plugin records due to a temporary lag in remote policy settings, which could otherwise cause plugins to appear unmanaged or missing.

Fixed
You'll notice
Useful2 Signal1
Terminal UI

Ink renderer: scroll-hint fast-path now avoided when absolute-positioned overlays are present#

Ink's terminal renderer skips a scroll shortcut when overlay elements are on screen

Details 0 0 Feedback
What

Claude Code's terminal UI is built with a rendering library (Ink) that has a performance shortcut for scrollable boxes: instead of redrawing everything, it can just shift existing content up or down. That shortcut is now skipped whenever the box overlaps with an absolutely-positioned element (like a popup or overlay) that was present in the previous frame.

Why

This avoids visual glitches where an overlay would be left behind or drawn incorrectly when the terminal tried to take the fast scrolling path instead of a full redraw.

Fixed
You'll notice
Useful2 Signal1
Elsewhere

Fork-conversation now rejects targets that split a tool call#

Forking a conversation now refuses fork points that would split a tool call from its result

Details 0 0 Feedback
What

When forking a conversation at a specific message, Claude Code now checks whether that fork point would separate a tool call (tool_use) from its result (tool_result). If it would, the fork is refused with an error instead of proceeding.

Why

This prevents creating a forked conversation whose transcript would be invalid because a tool call is missing its matching result.

Fixed
You'll notice
Useful2 Signal1
Terminal UI

TUI hit-testing now respects overflow:hidden/scroll clipping#

Clicking in the terminal UI no longer registers hits on elements clipped outside their scrollable or hidden container

Details 0 0 Feedback
What

In Claude Code's terminal interface, figuring out what you clicked on now respects overflow:hidden and overflow:scroll styling. If you click at a spot that falls outside a container's visible box on an axis where that container hides or scrolls its overflow, Claude Code no longer looks inside that container for something to match, even if a child element is technically positioned there.

Why

Before this, a click could accidentally register on a child element that was rendered outside the visible, clipped area of its parent (for example, scrolled out of view), causing clicks to land on the wrong thing. Now clicks only match what's actually visible.

Fixed
You'll notice
Useful2 Signal1
Git Worktrees

Git-worktree safety vetting: relative gitdir path check reworked#

Worktree safety check for the 'gitdir' pointer file was reworked to correctly detect unsafe relative paths

Details 0 0 Feedback
What

The routine that validates a worktree's gitdir pointer file, used to decide whether it's safe to treat as a real git directory, now normalizes the path relative to the repository's common directory before checking it for .. or . segments. This replaces a previous check that appeared buggy, since it searched the wrong variable (r) instead of the freshly-split path.

Why

This fixes a worktree safety check so that suspicious relative paths in a gitdir file (the kind git itself would not normally write) are properly detected, reducing the chance of treating an unsafe location as a legitimate git directory.

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
Elsewhere

Cancelled composer text now filters/normalizes leading '/' commands separately#

Cancelling a queued message now avoids accidentally turning its text into a slash command

Details 0 0 Feedback
What

When you cancel a message that was queued up in the composer, Claude Code puts its text back for you to edit. That text now goes through a cleanup step that normalizes things like image placeholders. If that cleanup happens to make the text start with a / (which would make Claude Code treat it as a slash command) but the original raw text didn't start with /, Claude Code now keeps the original raw text instead.

Why

This prevents a queued message from being misinterpreted as a slash command just because of how its text was cleaned up, which could otherwise trigger unintended command behavior when a cancelled message is restored.

Fixed
You'll notice
Useful2 Signal1
Remote Control

New device-ID validation before trusting bridge/session peer#

Device IDs are now validated against a pattern before being trusted for bridge/session connections

Details 0 0 Feedback
What

When a device ID is used to identify a peer (another connected device or session, such as over a bridge connection), Claude Code now checks it against a regular expression before accepting it. This applies both to the general device-ID validity check and to the step that pushes external configuration to a peer. Previously any non-empty string was accepted as a valid device ID.

Why

This stops malformed device IDs from being treated as valid, which could otherwise let unexpected or malformed values flow into peer connections and configuration syncing.

Fixed
You'll notice
Useful2 Signal1
Internals

Long-running proxied requests now suppress fetch's own timeout#

Very long proxied requests can now skip the HTTP client's own timeout when a longer timeout is requested

Details 0 0 Feedback
What

Two internal network request helpers now disable the underlying HTTP client's built-in timeout whenever the caller asks for a timeout longer than 300000 milliseconds (5 minutes). Previously, the client's own timeout could still cut the request short even when a longer timeout was requested.

Why

This lets requests that are meant to run for a long time, such as slow or heavily proxied operations, actually run that long, instead of being cut off by a timeout mechanism the caller never intended to trigger.

Fixed
Under the hood
Useful2 Signal1
Git Worktrees

Worktree keep/reap dirty-check reworked around .git existence#

Worktree cleanup now checks whether the .git file still exists before assuming a worktree is safe to remove

Details 0 0 Feedback
What

The internal function that decides whether to keep or discard a git worktree (a separate working copy of a repository) now checks whether the worktree's .git file still exists before treating it as clean. Previously, the fast path assumed a worktree was clean whenever it had no recorded head commit, without this check.

Why

This avoids incorrectly treating a worktree as safe to discard just because its head commit info is missing, reducing the risk of losing work in edge cases where the worktree's git link is in an unusual state.

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
Elsewhere

Draft restoration now preserves pasted-content mode correctly#

Restoring a saved draft now correctly preserves pasted content only for prompt-mode drafts

Details 0 0 Feedback
What

When Claude Code restores a previously saved draft of your input (for example after using summarize or undo), it now checks what kind of draft it is:

  • prompt drafts are re-parsed so any pasted-content placeholders are correctly restored
  • other kinds of drafts, such as bash input, keep their raw text and are treated as having no pasted content
  • the function that restores pasted content is only called when there is actually pasted content to restore
Why

Previously, restoring a draft could mishandle pasted content depending on the draft's mode. This fix makes sure pasted text (like a block of code or file contents you pasted in) comes back correctly when you return to a prompt draft, without incorrectly applying pasted-content logic to non-prompt drafts like bash commands.

Fixed
You'll notice
Useful2 Signal1
Elsewhere

File chunk reads no longer split a multi-byte UTF-8 character at the boundary#

File chunk reads no longer cut a multi-byte character in half at the boundary

Details 0 0 Feedback
What

When Claude Code reads a file in chunks (for example, reading just the end of a large file), it now checks up to 3 bytes before a chunk boundary to see whether it would split a multi-byte UTF-8 character (used for non-ASCII text like accented letters, emoji, or non-Latin scripts) in half. If so, the chunk is trimmed to avoid cutting the character apart. It also strips a leftover byte that can result from a byte-order-mark (a marker some files use at the start to indicate text encoding).

Why

Previously, reading a chunk of a file could end mid-character, producing garbled or invalid text in the output. This fix ensures chunked file reads always end on a clean character boundary.

Fixed
You'll notice
Useful2 Signal1
MCP

Stdio MCP servers that exit mid-initialize after a probe timeout now get one restart#

Stdio MCP servers that exit right after a startup probe times out now get one automatic restart

Details 0 0 Feedback
What

When Claude Code connects to an MCP server over stdio (standard input/output, used for local server processes), it sometimes runs a version-negotiation probe first. If that probe times out and the server process then closes while still initializing, Claude Code now recognizes this specific pattern - a likely slow-starting server that exits on requests sent before it's ready - and restarts the server once without the probe, using whatever time is left in the connection budget.

Previously, only a different failure (a version-negotiation error causing the connection to close) triggered a stdio server restart; a probe-timeout-induced close was not handled.

Why

This reduces false failures for MCP servers that are simply slow to start up, giving them a second chance to connect properly instead of failing outright.

Fixed
You'll notice
Useful1 Signal1
Elsewhere

Many-image dimension error no longer suggests /compact when compaction is disabled#

Image-too-large error stops suggesting /compact when compaction is disabled

Details 0 0 Feedback

**What

When an image in your conversation exceeds the size limit for many-image requests (2000px), Claude Code normally tells you to run /compact to remove old images from context. Now it checks whether compaction has been disabled (via the DISABLE_COMPACT environment variable) first, and if so, tells you to start a new session instead of suggesting /compact.

Why

This avoids pointing you to a command that won't work if compaction has been turned off, giving you a suggestion that will actually resolve the problem.

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
Artifacts

Bug fix: artifact-bundle text extraction used the wrong loop variable#

Fixed a bug where artifact text extraction always checked the same wrong item

Details 0 0 Feedback

**What

When building the list of text content for an artifact's initial bundle, the code that extracts text fields from a list of items had a bug: it referenced the outer loop variable instead of the current item being processed, so it effectively checked the same item repeatedly rather than each item in turn. This has been fixed to correctly reference each item.

**Why

This bug could have caused artifact text content to be extracted incorrectly or incompletely; the fix ensures each item in the list is actually checked for its own text content.

Fixed
You'll notice
Useful1 Signal1
Git Worktrees

Worktree cleanup gains an extra path-resolution step before chdir/removal#

Worktree cleanup now resolves the worktree path with a fallback before using it

Details 0 0 Feedback
What

When cleaning up a git worktree, the code now computes a resolved version of the worktree path (falling back to the original path if resolution fails) before proceeding, and uses that resolved path consistently in the subsequent steps, including changing directory and running git worktree remove.

Why

This makes worktree cleanup more robust in cases where the raw path and its resolved form differ.

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

IDE lockfile discovery also checks the home directory when cwd is blank#

IDE lockfile discovery now also checks the home directory when the working directory is blank

Details 0 0 Feedback
CLAUDE_CONFIG_DIR
What

Claude Code scans certain directories to discover IDE lockfiles (used to detect a running IDE integration). That scan already included the home .claude/ide directory when CLAUDE_CONFIG_DIR was set; it now also includes it whenever the resolved working directory is an empty string.

Why

This closes a gap where IDE lockfile discovery could miss the home directory location in cases where no working directory was resolved, helping the IDE integration connect reliably in more situations.

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
Elsewhere

file: URL resolver now also normalizes bare absolute paths#

The file: URL resolver now also accepts plain absolute paths, not just file:// URIs

Details 0 0 Feedback
What

The internal function that converts file:// URLs into filesystem paths now also accepts plain paths that already start with /, as long as they aren't already recognized in another form, rather than requiring a full file: URI.

Why

This means code paths that expect a file: URL will now also correctly handle a bare absolute path being passed in, instead of failing or mishandling it.

Fixed
Under the hood
Useful1 Signal1
Elsewhere

HIPAA cache restamp now checks a session-generation token#

HIPAA cache restamping now checks a session-generation token to avoid stale writes

Details 0 0 Feedback
What

The function that restamps the HIPAA-related cache (restampConfirmedCache) now takes a new session-generation parameter, and checks it twice: once before and once after performing an asynchronous write. If the current session generation doesn't match the one passed in, the restamp bails out.

Why

This prevents a restamp write from a superseded, older session generation from landing late and overwriting the cache with stale data after a newer session generation has already taken over.

Fixed
You'll notice
Useful1 Signal1
Elsewhere

Bash-input command extraction bug fix#

Fixed a bug where extracting a bash command from message text checked the wrong variable

Details 0 0 Feedback
What

Claude Code has an internal helper that looks for a fallback bash command embedded in message text (inside <bash-input> tags). It was mistakenly checking an outdated variable left over from a previous loop iteration instead of the current one, so it could look at stale text. It now consistently checks the correct, current text.

Why

This fixes a bug that could cause the wrong bash command to be extracted from a message, since the check was looking at leftover data instead of the actual current input.

Fixed
Under the hood
Useful1 Signal1
Plugins

Extraction-swap failure path now distinguishes a superseded extraction from a genuine restore failure#

Failed extraction restores now tell you if the backup was superseded rather than truly broken

Details 0 0 Feedback
What

Claude Code installs plugins and tools by swapping in a new "extraction" (an unpacked copy of the files) and moving the old one aside as a backup. If that swap fails and the code tries to restore the old backup, it now first checks whether a newer extraction has already been put in place. If so, it reports that a newer extraction is live and the backup was simply moved aside, instead of reporting a generic restore failure.

Why

This prevents a confusing false alarm: previously any error thrown while restoring the backup was treated as "could not restore," even when the real story was that a newer version had already taken over and restoring the old one wasn't needed or possible. The new message tells you what actually happened.

Fixed
Under the hood
Useful1 Signal1
Git

Branch checkout commands now use -- end-of-options guard#

Branch checkout git commands now add a trailing -- to prevent branch names being misread as options

Details 0 0 Feedback
What

Git checkout commands run internally, including plain checkout, checkout with a new branch tracking a remote, and checkout tracking a remote branch, now append a trailing -- argument.

Why

The -- tells git that everything after it is a file or branch name, not an option flag. This prevents a branch name that happens to look like a flag (for example, one starting with a dash) from being misinterpreted as a git option.

Fixed
You'll notice
Useful1 Signal1
Elsewhere

Ordered-list markdown rendering preserves the original marker punctuation#

Ordered markdown lists now keep their original marker style, like '1)' versus '1.', when re-rendered

Details 0 0 Feedback
What

When Claude Code re-serializes an ordered (numbered) list item back into markdown text, it now tries to reuse the original list marker punctuation captured from the raw source text — for example keeping 1) as 1) rather than converting it to 1. — and only falls back to a computed numbering scheme if the original marker isn't available.

Why

This preserves the original formatting style of numbered lists instead of silently normalizing all markers to the same punctuation.

Fixed
Under the hood
Useful1 Signal1
Permissions

Parked-permission strict-answer handling gets a clearing step and new outcomes#

Parked permission approvals now clear pending state first, with new outcomes if that fails

Details 0 0 Feedback
What

When Claude Code resolves a previously saved ("parked") permission answer, it now performs an additional clearing step before applying the answer, and tracks a flag to avoid race conditions during that process. If the clearing step can't be confirmed, the answer is now dropped, recorded under new outcome labels such as clear_pending and clear_unconfirmed.

Why

This is meant to prevent a stale or conflicting permission state from being acted on incorrectly, at the cost of sometimes dropping an answer if the system can't confirm it's safe to apply.

Fixed
You'll notice
Useful1 Signal1
Internals

SSE transport reconnect: fixed stale-variable bugs in header refresh and retry logging#

Fixed a bug where refreshed auth headers weren't actually applied on SSE reconnect, and retry logs showed the wrong status

Details 0 0 Feedback
What

When Claude Code's SSE (Server-Sent Events, a streaming connection type) transport reconnects, it refreshes authentication headers, but a bug meant the freshly computed headers weren't actually applied to the request — an undefined or stale variable was used instead. This is now fixed so the real refreshed headers are assigned. A related bug in POST-retry logging and telemetry, where the logged response status or error came from a mismatched variable left over from a previous iteration, is also fixed to report the actual current status.

Why

Before this fix, a reconnecting SSE connection could silently keep using stale credentials, and retry logs could report misleading status information, both of which made connection problems harder to diagnose.

Fixed
Under the hood
Useful1 Signal1
Sessions

Staged file-list credential fetch hardened against reuse and cancellation#

Staged file-list credential handling now blocks reuse and cancellation of the fetch

Details 0 0 Feedback
What

The internal worker code that fetches the list of staged files and parses the credentials for it was hardened. The fetch can now be cancelled with an AbortSignal (a standard way to stop an in-progress operation), and the credential-parsing step is wrapped by a single-use guard: if it is somehow triggered a second time, it fails immediately with the error read failed: credential expired instead of proceeding.

Why

This closes off a case where stale or reused credentials could be parsed twice, which could otherwise lead to confusing failures or wasted work. It also lets this internal fetch be cancelled cleanly if it's no longer needed.

Fixed
Under the hood
Useful1 Signal0
Auth

OAuth pendingStepUpScope reset now conditioned on handleRedirection#

Clearing the pending OAuth step-up scope on token save now only happens when handleRedirection is set

Details 0 0 Feedback
What

When Claude Code saves or refreshes an MCP (Model Context Protocol) OAuth token, it can clear a stored _pendingStepUpScope value, which tracks a scope the user still needs to re-authorize. This clearing used to happen unconditionally on token save, or on any change to the access token, at two different call sites. Both now only clear it if (this.handleRedirection).

Why

This avoids discarding a pending re-authorization request in situations that aren't actually handling a redirect, so a scope still waiting on the user's approval isn't silently forgotten.

Fixed
Under the hood
Useful1 Signal0
Artifacts unclear

Artifact-type discovery prompt text lost an appended trailing addendum in one branch#

A trailing addendum text that used to be appended to the quickstart artifact-type description was dropped in one code path

Unclear What the dropped trailing string said or what practical difference its absence makes is not shown by the finding.

Details 0 0 Feedback
What

The functions that build the Artifact-type description text for "quickstart" mode lost a parameter, and along with it, a conditional trailing string that used to sometimes be appended to the end of the quickstart description.

Why

The finding doesn't say what the dropped text contained or what effect losing it has, only that this particular addendum is no longer appended in this branch.

Fixed
Under the hood
Useful1 Signal0
Git Security

Bug fix: bare-git-repo scrub used mismatched variable when falling back to a directory check#

Bug fix: bare-git-repo path scrubbing now checks and acts on the same variable

Details 0 0 Feedback
What

In the logic that scrubs file paths for bare git repositories, a fallback directory check was comparing one variable but then acting on a different one, inconsistent with the surrounding code. This has been fixed so the check and the resulting action both use the same path variable.

Why

This fixes a mismatch that could have caused the wrong path to be checked or acted upon during path scrubbing.

Related

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

16 entries

In Developmentopen

In dev
Nothing to try yet
Useful3 Signal3
Group of 2 Projects no docs found unclear

New prompt text marks project-thread replies sent directly in the thread#

Claude Code Projects now adds explanatory text distinguishing messages sent directly in a thread from ones relayed via a coordinator, behind a killswitch

Unclear Whether this labeling is active for any given account is unknown, since nothing has been read yet about the tengu_projects_thread_reply_lead_killswitch gate that controls it.

Feature flag
tengu_projects_thread_reply_lead_killswitch 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_projects_thread_reply_lead_killswitch

What A new block of prompt-construction logic builds explanatory "lead" text that tells Claude how a project member's message reached it. Previously the prompt distinguished only messages relayed via a coordinator session or returned from thread-fetch tools; it now also marks a third case: a message the person sent directly in the current thread, with a lead saying it was "sent here, not relayed". This is wired into the message-formatting path and controlled by a gate function (tengu_projects_thread_reply_lead_killswitch) that decides whether the new behavior is active.

Why This helps Claude correctly understand how a message in a Claude Code Projects thread reached it, so it doesn't treat a directly-sent reply as if it had been relayed through a coordinator. The behavior sits behind a killswitch that defaults off, so it can be disabled if it causes problems.

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

Compaction can now keep a tail-announcement summary of key attachments across a compact boundary#

Compaction can now carry forward a short summary of key attachments across the compaction boundary

Unclear Whether the tengu_calm_noodle gate is active for any account hasn't been read, so nothing can be said about whether this behavior runs anywhere yet.

Feature flag
tengu_calm_noodle 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_calm_noodle
What

When a conversation is compacted (its history condensed to save space), Claude Code can now build a short 'kept tail' summary noting which key attachments, such as instructions, session context, coordinator context, context sections, and date attachments, were carried forward past the compaction point. This emits a compact_kept_tail_announcements telemetry event recording whether it was enabled, where it was placed, and which types were kept. If a related feature flag check fails, it bails out early and records enabled:false.

Why

This makes it possible to track, and eventually improve, how well important context survives compaction instead of silently being dropped or duplicated.

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

Public (non-member) artifact reads now conditionally admitted#

Public, non-member reads of artifact content are now gated and flagged separately from relay reads

Unclear It is not known whether this gate is currently enabled for any account, since no reading has been taken under this release yet.

Feature flag
tengu_cobalt_plinth_sedge 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_cobalt_plinth_sedge
What

When someone without membership access (a "public" or tokenless reader) tries to read an artifact's content or files, Claude Code now checks a permission gate before allowing it. If the check fails, it returns a "tokenless" error; if it passes, the result is now marked with a publicRead flag, separate from the existing relay flag.

Why

This adds a controllable checkpoint for public, non-member artifact reads, so this kind of access can be turned on or off independently of other read paths.

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

Automounter-lookup path refusal exists but nothing turns it on#

New code can refuse macOS automounter-lookup paths, but nothing in this build turns it on

Details 0 0 Feedback
refuseAutomounterShapes
What

A new internal permission check can refuse to read a file path if it looks like a macOS "automounter" lookup path, such as the /Network browse root or an auto_home entry, with its own denial message and reason code. However, this check only runs when an optional setting called refuseAutomounterShapes is passed in, and the only place in the codebase that calls this check never passes that setting, so the new refusal never actually triggers.

Why

This is dormant code: the capability exists internally, but no path in this build exercises it, so it has no effect on current behavior yet.

In dev
Nothing to try yet
Useful2 Signal3
Policy no docs found

Cross-boundary policy identity change can be deferred instead of forcing reload#

Identity changes mid-session can now defer a policy reload instead of immediately reloading as an account change

Feature flag
tengu_steady_marshmallow 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_steady_marshmallow
What

When the credential identity (principal) behind a session changes mid-session, Claude Code can now, in a new gated code path, keep using the currently loaded policy verdict while fetching the new principal's policy in the background, instead of immediately reloading everything as if the account had changed. It handles two cases differently: one where a policy check is already in flight (marking a principalCheckOwed flag) and one where things have settled, in which case it fetches the new policy while keeping the old verdict active in the meantime.

Why

This is a mechanism to avoid disruptive, immediate policy reloads triggered by mid-session identity changes. Its associated gate tengu_steady_marshmallow returned off for this site's account and off for the anonymous baseline, and no reading has been taken under this release yet; the related gate tengu_policy_limits_principal_changed hasn't been read at all, which is not the same as being off.

In dev
Nothing to try yet
Useful2 Signal3
MCP no docs found

MCP connect-timeout retry and legacy SSE fallback gates referenced#

MCP connection code references two settings controlling connect-timeout retries and legacy SSE fallback

Feature flag
tengu_mcp_connect_timeout_retry 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.274: 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.

tengu_mcp_legacy_sse_fallback 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_mcp_connect_timeout_retrytengu_mcp_legacy_sse_fallback
What

MCP (Model Context Protocol) connection handling now references two settings: tengu_mcp_connect_timeout_retry, which controls whether a connection timeout is treated as something worth retrying, and tengu_mcp_legacy_sse_fallback, which controls whether Claude Code falls back to the older HTTP+SSE (Server-Sent Events) connection style when a server rejects its initial connection request.

Why

These give Claude Code more resilient fallback behavior when an MCP server times out or doesn't support the newer connection method, though no reading of either setting's current value is available yet for this account.

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

New stdio MCP protocol-negotiation gate added#

A new gate lets stdio MCP connections also try the newer protocol-negotiation handshake

Feature flag
tengu_mcp_protocol_negotiation_stdio 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_mcp_protocol_negotiation_stdio
What

MCP servers connected via stdio (standard input/output, a local process-based connection type) can now use the same automatic protocol-version negotiation that other connection types have, including their own probe timeout setting, instead of always using the older legacy handshake.

Why

This extends newer protocol-negotiation support to stdio-based MCP servers, though it is controlled by a gate that determines whether it's actually turned on for a given account.

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

Elevated device-bind tier request with retry-on-rejection#

Session device-binding can now request an elevated security tier, retrying without it if the server rejects the request

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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
cloud_elevated_create
What

When creating a device-bound session, Claude Code can now ask the server for an 'elevated' security tier as part of an 'ask' proof-header flow. If the server rejects that elevated request with a 4xx error, the client logs the reason and retries the same bound-session creation without asking for elevation. A new telemetry event, cloud_elevated_create, records whether the elevation request was honored, unsupported, or refused, distinguishing reasons like an untrusted device or an unavailable device check.

Why

This lets Claude Code opportunistically request a stronger security tier for a device-bound session while still falling back gracefully and completing the session setup if the server can't or won't grant it.

Gate state

No sentence about tengu_breezy_fairy on/off for this release; the finding notes it read off for this site's account and off for the anonymous baseline, with no reading taken under this release yet.

Related

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

In dev
Nothing to try yet
Useful2 Signal3
Artifacts no docs found

Artifacts tool result text now distinguishes fully-public artifacts from org-internal ones#

Artifacts tool now warns more strongly when a fully public artifact was made outside your organization

Feature flag
tengu_cobalt_plinth_sedge 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_cobalt_plinth_sedge
What

When the Artifacts tool (used to create and view pages on claude.ai) reads or lists files, it now checks whether a result is marked as fully publicly readable. When an artifact is both public and was created outside the user's own organization, Claude now gets a stronger warning that the artifact could have been written by anyone on the internet. This is separate from the existing warnings about artifacts with outside writers or co-written artifacts.

Why

This gives Claude clearer signal about the trustworthiness of content it's reading from artifacts, so it can treat fully public, externally-authored content with appropriate caution.

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
Artifacts unclear

Artifact-watch status text now distinguishes 'hears comments' capability, gated by an unresolved condition#

Artifact-watch status message can now mention 'hearing comments' as a capability, under an unresolved condition

Unclear The finding does not say what the other two conditions checked by the new helper represent or when exactly comment-watching becomes possible.

Details 0 0 Feedback
What

The status text shown when watching an artifact (a generated file or piece of content) for changes can now include an extra clause. Instead of only saying the session 'does not keep track of new versions of this artifact,' it can say it 'does not keep track of new versions of this artifact or hear comments on it.' A new internal check decides which wording to show, based on whether something is in a 'live' state along with two other unnamed conditions.

Why

This lets Claude Code more precisely describe what a watch session can and cannot detect, distinguishing tracking new versions from hearing comments left on an artifact.

In dev
Nothing to try yet
Useful1 Signal3
Artifacts

Artifact-roster refresh denial backoff is stored but never consulted#

A new backoff check for denied artifact-list refreshes is recorded but never actually applied

Details 0 0 Feedback
What

When a request to refresh the list of artifacts is denied with a 401 or 403, Claude Code now records the denial (status, time, and token expiry). A new check exists that could use this record to hold off retrying for a period of time, but nothing in the current build actually calls that check.

Why

This is groundwork with no visible effect yet: the denial is logged and cleared on account switch, but retries after a denial aren't currently held back by it.

In dev
Nothing to try yet
Useful1 Signal3
Git Security unclear

Git tag/GPG signing config keys defined but apparently unused#

New git config entries for tag and commit signing (like tag.gpgSign, gpg.format) added, purpose unclear

Unclear Whether these new keys and forced values are actually applied anywhere, or just defined, is not shown by the evidence.

Details 0 0 Feedback
What

A new regular expression matching git signing-related configuration keys, such as tag.gpgsign, user.signingkey, gpg.format, and gpg.program, was added, along with a paired list of key/forced-value combinations like tag.gpgSign set to false and gpg.ssh.defaultKeyCommand set to empty.

Why

This extends the earlier work that let Claude Code trust and automatically configure git signing settings for commits, now recognizing more signing-related keys such as tag signing settings, though the finding doesn't show these new entries actually being applied yet.

Related

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

In dev
Nothing to try yet
Useful1 Signal2
Elsewhere no docs found unclear

New gate tengu_tidy_fern controls an alternate user-message construction path#

New gate tengu_tidy_fern can add an extra value into how user messages are built

Unclear Nothing has been read about the tengu_tidy_fern gate, and what the extra computed value actually does isn't stated.

Feature flag
tengu_tidy_fern Not enough to say

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

This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_tidy_fern
What

A new internal flag, tengu_tidy_fern, controls whether an extra value is computed and passed along when Claude Code builds a user message for tool use. Previously this value was always left empty; now, when the flag is on, it is computed via a new function and included instead.

Why

The finding doesn't say what this extra value is used for, so it's unclear what practical difference this makes for a user.

In dev
Nothing to try yet
Useful1 Signal2
Tool Use no docs found unclear

Gated: eager unresolved-tool-use detection path (tengu_eager_pillow)#

A gated code path changes how Claude Code detects unresolved tool uses

Unclear Whether tengu_eager_pillow is enabled is unread and not established by this finding.

Feature flag
tengu_eager_pillow 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_eager_pillow
What

The function that finds unresolved tool uses (findUnresolvedToolUse) now has a new code path controlled by a feature flag. When enabled, it uses a new lookup function combined with the existing check for the last assistant turn, instead of the previous lookup function it used before.

Why

This appears to be a behind-the-scenes change to how Claude Code identifies tool calls that haven't been resolved yet, likely aimed at improving accuracy or performance of that detection.

The tengu_eager_pillow gate controlling this path has no recorded reading, so nothing can be said here about whether it's on or off.

In dev
Nothing to try yet
Useful1 Signal2
Artifacts no docs found

Live-subscribe ('artifact watch') feature flag remains off by compiled default#

Explanation text for a disabled 'live-subscribe' artifact-watch feature was reworded

Feature flag
tengu_slate_lantern 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.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_slate_lantern
What

The feature that lets a session track republishes of a watched artifact is controlled by a flag called tengu_slate_lantern. When that flag resolves to false, the reason given is flag_off; this release only changed the wording of the explanation shown in that case, not the underlying logic.

Why

This is a text-only change to how the disabled state is explained. The flag itself has been read as on for this site's account and on for the general anonymous baseline in past checks, but no reading has been taken under this specific release.

Related

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

In dev
Nothing to try yet
Useful1 Signal2
Artifacts unclear

Roster-cache freshness check (q7r) similarly appears unused#

A new roster-cache freshness check exists in the code but appears to have no caller

Unclear Whether q7r is genuinely unused or simply not reachable from the parts of the bundle that were inspected is unclear.

Details 0 0 Feedback
What

A new internal function, q7r, checks whether the cached list of artifacts (the "roster") is still fresh, using a 4-hour window based on its last-fetched time. No code in the bundle appears to call it yet.

Why

Since nothing currently calls this function, it has no visible effect on Claude Code's behavior yet.

Related

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

91 entries

Internal Changesopen

·Internal
Under the hood
Useful2 Signal3
Sessions

Stage-file (remote session upload/output) can be invoked without CLAUDE_CODE_REMOTE_SESSION_ID via a 'vouched' path#

Remote-session file staging can now skip the session-ID requirement via a new 'vouched' path

Details 0 0 Feedback
CLAUDE_CODE_REMOTE_SESSION_ID
What

The function that stages files for upload or output in a remote session now accepts a second, optional parameter. When it's set, file staging can proceed without the usual CLAUDE_CODE_REMOTE_SESSION_ID requirement, and the mount is marked as "vouched" instead of tied to an actual remote session ID. This path is refused for synced, filestore-backed documents, with the message "synced documents are not staged here."

Why

This adds a way to stage files in remote-session contexts without a real session ID present, while still excluding documents that are synced through the filestore, which need to go through their normal path instead.

·Internal
Under the hood
Useful2 Signal2
Group of 2 Artifacts

Artifact creation now reports where it's stored#

Artifact create results now include a 'provisioned' field describing the storage backend (store, project_id, file_id, node_id)

Details 0 0 Feedback

What

  • Artifact publish/session objects, and the result of a successful artifact-create call, now carry an optional provisioned field.
  • This field describes where and how the artifact is backed in storage: a store reference, project_id, and optional file_id/node_id, parsed from the server's response via a new schema/validator.
  • Whether an artifact was provisioned (provisioned: true/false) is also recorded in telemetry.

Why

This lets Claude Code (and its telemetry) know exactly which storage backend and location an artifact ended up in, which is useful for debugging and for features that need to reference the artifact's underlying storage location later.

·Internal
Under the hood
Useful2 Signal2
Elsewhere

Command.run answers now carry structured 'context' alongside text#

Command-run answers can now carry structured 'context' data, not just text

Details 0 0 Feedback
What

When a hook modifies the answer produced by running a command, it can now override a context field in addition to the answer's text. The internal mechanism for settling and re-telling these answers can drop the text or the context independently of one another.

Why

This lets hooks attach structured information to a command's result, separate from its plain text output, and gives finer control over which part of a hook's answer is kept or discarded.

·Internal
Under the hood
Useful2 Signal2
Elsewhere unclear

Status-report 'brief' shape added to teammate/status serialization#

Status reports gain a new 'brief' format with points, a question, and reply options

Unclear The finding doesn't say which feature or UI actually generates or displays a 'brief'-shaped status report.

Details 0 0 Feedback
What

The internal function that formats status reports for teammates/subagents now understands a new input shape called brief, in addition to the existing recap shape and its default handling. A brief includes points, a question, a summary, a "next why" explanation, and options, and gets turned into fields like status_category, needs_action, description, points, summary, next_why, and reply_options.

Why

This adds a more structured way for a status update to pose a question with selectable reply options, rather than just a free-form recap, though the finding doesn't say where in the product this new shape is actually produced or shown.

·Internal
Under the hood
Useful2 Signal2
Team Memory

New team-memory / mount-dir error taxonomy#

Team memory and mounted-directory features now report many more specific error codes

Details 0 0 Feedback
What

Claude Code's shared team memory and mounted-directory storage can now fail in a much wider variety of clearly named ways, including:

  • team_memory_too_many_entries, team_memory_entry_too_large
  • team_memory_group_acl_denied, team_memory_group_acl_unconfigured, team_memory_feature_unavailable
  • mount_dir_foreign_partition, mount_dir_unmanifested_nonempty, mount_dir_unreadable
  • store_full, content_too_large, content_secret, content_screened
  • index_too_large, invalid_path, store_archived
Why

A larger, more specific set of error codes means Claude Code can explain more precisely what went wrong when a team memory write or mounted-directory access fails, 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.

·Internal
Under the hood
Useful2 Signal2
Tool Use no docs found

Strict tool-result pairing mode gated by client launch option, not a simple flag#

Strict tool-result pairing mode is now controlled by the client's launch options, not an experiment gate

Details 0 0 Feedback
strictToolResultPairing
What

The setting that decides whether Claude Code throws an error (instead of silently repairing) when tool calls and their results don't line up correctly has moved to a different check. It's now read from host.launchOptions.strictToolResultPairing(), a value the client application provides at launch, rather than from an internal experiment flag.

Why

This puts control of strict pairing behavior in the hands of whatever application is embedding Claude Code, rather than in a centrally managed experiment.

·Internal
Under the hood
Useful2 Signal2
Artifacts

read_file/batch file read now take byteBudget and admitPublicRead options; new asset-existence HEAD check#

Artifact file-read functions gain options for public reads, byte limits, and a new file-existence check

Details 0 0 Feedback
What

The functions that read a single artifact file or a batch of artifact files now accept extra options: whether to admit a public (non-member) read, and for batch reads, a byte budget limiting how much data is fetched at once. A new helper also does a quick existence check (an HTTP HEAD request, which asks whether a file exists without downloading it) for a specific artifact version's asset bundle.

Why

These options let artifact file reads be tuned per request, controlling both who can read public artifacts and how much data a batch read pulls back, and let Claude Code confirm an asset exists before trying to fetch it.

·Internal
Under the hood
Useful2 Signal2
Slash Commands

Local slash-command execution can now append extra 'meta' text blocks#

Local slash commands can now append extra hidden 'meta' text blocks to their output messages

Details 0 0 Feedback
What

The internal function that assembles the messages produced by running a local slash command can now accept extra text blocks marked isMeta: true. When present, these are appended to the message list, and the result carries a metaTexts field noting they were added.

Why

This gives local slash commands a way to attach additional metadata-style content to their output alongside the regular command result.

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
Slash Commands

Slash-command / local-command output can be patched in place after the fact#

Slash-command output can now be edited in place after it's already been produced

Details 0 0 Feedback
What

A new internal function can update the output of an already-completed slash command or local command (such as its stdout or stderr text) with new content, and can also replace related context entries. This only happens if the current turn hasn't already moved on, such as by querying further, advancing to the next input, or finishing.

Why

This allows command output to be corrected or supplemented after the fact, as long as the turn is still in a state where that update can safely apply.

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

hostSessionId now reported, reading CLAUDE_CODE_HOST_SESSION_ID#

Session registration now reports a hostSessionId read from the CLAUDE_CODE_HOST_SESSION_ID environment variable

Feature flag
tengu_tidy_fern Not enough to say

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

This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.274: 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.274. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
CLAUDE_CODE_HOST_SESSION_ID
What

Claude Code now reads a CLAUDE_CODE_HOST_SESSION_ID environment variable, subject to two other conditions, and includes its value as hostSessionId in the payload sent when registering a session. One other place that reads this value is itself controlled by a separate flag.

Why

This lets Claude Code identify and report the host session a given session belongs to, which is useful in setups where sessions run under a managing host 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
Useful2 Signal2
Session Management no docs found unclear

Session metadata gains hostSessionId and outsideOrgReader fields#

Session metadata and permission info now include new hostSessionId and outsideOrgReader fields

Unclear What hostSessionId and outsideOrgReader are used for is not stated.

Details 0 0 Feedback
hostSessionIdoutsideOrgReader
What

Session data now carries two small additions:

Why

The finding doesn't say what these fields are used for, but their presence means session snapshots and permission checks now carry more information than before.

·Internal
Under the hood
Useful2 Signal2
Artifacts no docs found unclear

Artifact page-data reads gained a manifest/store-usage/content-store surface (manifestPaths, storeDocuments, contentStore)#

Artifact file reads can now include manifest paths, store usage documents, and a content store reference

Unclear The finding shows these fields were added to the read result but not how or where Claude Code uses them afterward.

Details 0 0 Feedback
manifestPathsstoreDocumentscontentStore
What

When Claude Code reads an artifact's page data, the result can now include three new pieces of information that did not exist before:

Why

This gives Claude Code more detail about an artifact's underlying storage and file manifest when reading it, though the finding does not say what these fields are used for downstream.

·Internal
Under the hood
Useful2 Signal1
Group of 2 Terminal UI unclear

Transcript messages become expandable and collapsible#

Message components in the transcript (task, user-channel, cross-session, inbound) now support expanding and collapsing via shared isExpanded/origin/messageId props

Unclear The finding describes the new component structure but not what the expand/collapse behavior looks like or does for a user.

Details 0 0 Feedback

What Several message-rendering components in the transcript view — task messages, user-channel messages, cross-session messages, and inbound/task-notification messages — now receive isExpanded, messageId, and origin props they didn't take before. New render functions support these props along with verbose and taskDelivery, and an existing inbound-message renderer was refactored to delegate to one of them. A single expanded/collapsed value is now computed once per render and passed through consistently to all of these components.

Why This lets any message in the transcript be expanded or collapsed consistently, regardless of what kind of message it is or where it came from.

·Internal
Under the hood
Useful2 Signal1
MCP

New MCP tool metadata field describing the serving MCP server#

MCP tools now carry structured metadata identifying which server and source they came from, for security purposes

Details 0 0 Feedback
What

Tools provided by MCP (Model Context Protocol) servers now carry structured metadata describing the server that's serving them: the server's configuration key name, and a source value drawn from a fixed set of options (sdk, plugin, user, project, local, dynamic, managed, enterprise, claudeai, agent) describing where that server's definition came from. The tool-wrapper builder now threads this source value through into the tool's metadata.

Why

The metadata explicitly instructs consumers to trust the source field, not the tool's name or its mcp__ prefix, for security purposes. This closes a gap where a tool's name or prefix alone could be spoofed or misleading about where it actually came from.

·Internal
Under the hood
Useful2 Signal1
MCP

MCP server 'source' attribution (sdk / plugin / config scope) added to schemas#

MCP server status now reports where each server definition came from

Details 0 0 Feedback
What

MCP (Model Context Protocol) server status information now includes an optional source field, showing whether a given server was registered in-process via the SDK, came from a plugin, or came from a config scope such as user, project, local, dynamic, managed, enterprise, claudeai, or agent. This is computed internally from the server's metadata and exposed on mcp_servers status entries.

Why

This lets you (or tools reading this status) tell where an MCP server definition actually originated, rather than relying on its name alone, which is useful when the same server name could be defined in more than one place.

·Internal
Under the hood
Useful2 Signal1
Subagents unclear

Agent-evicted resume/mailbox handling reworked#

Agent-evicted teammate event handling reworked to match tasks differently

Unclear unused placeholder, replaced below

Details 0 0 Feedback

**What

·Internal
Under the hood
Useful1 Signal1
Group of 2 Remote Control

New server_authored/server_replayed event origins normalized in bridge attestation#

Remote-control bridge events can now be tagged as server_authored or server_replayed, and attestation filtering treats both the same as unspecified.

Details 0 0 Feedback

What

  • The function that maps event-origin strings to display values now recognizes two new values, server_authored and server_replayed, mapping them to SERVER_AUTHORED and SERVER_REPLAYED respectively.
  • When remote-control bridge events are filtered by device attestation status, events with a SERVER_AUTHORED or SERVER_REPLAYED status are now normalized to UNSPECIFIED before the accept-level/accept-status checks run.

Why This lets the bridge distinguish events that were authored or replayed by the server itself from device-attested events, while ensuring attestation filtering doesn't mistakenly treat them as attested device events.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Artifacts unclear

Artifact requests gain explicit kind and watchBoot parameters#

Artifact boot and fetch requests now take explicit kind (default 'probe') and watchBoot parameters instead of implicit behavior

Unclear The finding doesn't describe any visible effect of this beyond the internal request format.

Details 0 0 Feedback

What

  • The artifact frame-boot request function now takes a kind parameter (defaulting to "probe") and a watchBoot flag. Probe requests append &bk=probe to the query string, while watch/sync/peer requests append a &vn= version parameter.
  • The artifact-fetch helper used by the publish/read flow likewise now takes kind (default "probe") and watchBoot, alongside its existing relayOnly/agentPeer/syncLive/speculative options, feeding into the same underlying request.

Why Making the request kind and boot-watching explicit lets the different artifact flows (probing, watching, syncing, peer requests) be distinguished consistently wherever an artifact request is made.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Sessions unclear

Remote bridge sessions gain worker-epoch tracking#

The remote/headless session bridge now tracks a worker epoch alongside the existing worker bearer token, and reworked its teardown telemetry.

Unclear Nothing has been read yet about the tengu_bridge_repl_teardown gate, so whether this behavior is active for any account is unknown.

Details 0 0 Feedback

What

  • The remote session-bridge teardown path now assembles its preflush-hold and archive-status telemetry via helper functions, and exposes a new getWorkerEpoch accessor on the bridge host interface (alongside the existing getWorkerBearerToken) when a worker bearer token is available.
  • The headless/print-mode bridge mount setup now also passes a getWorkerEpoch accessor through to the same mount configuration.

Why This lets the bridge track which "epoch" (generation/instance) of a worker it's dealing with, which is internal plumbing that supports more accurate teardown and credential handling for remote/headless bridge sessions.

·Internal
Under the hood
Useful1 Signal1
Permissions

Rewrite-detector generalized to catch control characters in any prop, not just origin#

The check for hooks secretly rewriting UI text now covers more fields and blocks hidden control characters

Details 0 0 Feedback
What

Claude Code has an internal check that catches a hook or plugin silently rewriting the text a UI element displays. Previously this check only looked at one field, a message's origin. It now checks a wider set of fields (origin, isExpanded, task, from), and separately flags any of these values as suspicious if it contains a control character (a hidden escape sequence the terminal would act on) or is unexpectedly long.

Why

This closes gaps where a hook could have altered what a user sees in ways the old, narrower check wouldn't catch, making it harder for a hook to disguise a rewrite as ordinary printable text.

·Internal
Under the hood
Useful1 Signal1
Memory

Memory backend list/read/create/update/delete now share a single 'store not provisioned' status handler#

Memory-storage error handling for 'store not provisioned' and conflicts was consolidated and renamed internally

Details 0 0 Feedback
What

The internal client that talks to the memory-storage backend (used for listing, reading, creating, updating, and deleting memory data) now routes all of these operations through one shared helper that turns HTTP error codes, like 404, into a consistent typed error before any operation-specific handling runs. This replaces duplicated handling that previously existed separately for each operation. The internal error types for "store not provisioned" and "conflict" were also renamed.

Why

This is an internal cleanup that makes error handling for memory storage more consistent across list, read, create, update, and delete operations, reducing the chance that one operation handles a missing store or a conflict differently from another.

·Internal
Under the hood
Useful1 Signal1
Auth

First-party design auth now double-checked against request URL#

First-party design auth classification now also checks the request URL, not just the token

Details 0 0 Feedback
What

The internal check that classifies a request as using "first_party_design_auth" now also requires a URL-based check to pass, in addition to the existing authentication lookup it already performed.

Why

This tightens how Claude Code decides a request qualifies as first-party design authentication, requiring the request's URL to also match expectations rather than relying on the auth lookup alone.

·Internal
Under the hood
Useful1 Signal1
Permissions

mcp_server field added to tool permission event schemas#

Tool permission events now record which MCP server a tool belongs to

Details 0 0 Feedback
What

The event schemas used for tool-use permission requests, denials, and asks (which record things like tool_name, tool_input, tool_use_id, and permission_suggestions) now include an optional mcp_server field. A new helper function fills this field in by looking up the tool in the MCP (Model Context Protocol) tool registry when a permission decision is made.

Why

This lets permission-related records show which MCP server a tool came from, which is useful for tracking or auditing permission decisions involving tools provided by MCP servers rather than built-in tools.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact frame watch-token calls gain a version query param and a publicOutsideOrg case#

Artifact frame token requests add a version marker and a new publicOutsideOrg error case

Details 0 0 Feedback
What

The request Claude Code sends to renew an artifact frame's watch-token now includes a version marker (?vn=) in the URL. Separately, when parsing frame info from a response, a case with no assetToken present now returns a distinct publicOutsideOrg error, instead of falling through to the normal token-parsing path.

Why

Distinguishing the 'public outside org' case gives a clearer, more specific error when an artifact frame's token can't be found because it's public and outside the organization, rather than treating it as a generic parsing failure.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Diff-size finder-subagent budget hint can now use a caller-supplied diff line counter#

Sizing hints for diff-review subagents can now reuse a caller-supplied line count instead of always recomputing it

Details 0 0 Feedback
What

When Claude Code estimates how many helper subagents to use for reviewing a diff, it computes a budget hint based on how many lines changed. This logic can now accept a pre-supplied diff line count from the caller instead of always recalculating it itself, and adjusts its "about N lines" guidance text and subagent count accordingly.

Why

This avoids redundant recomputation when a line count is already available, and keeps the guidance text accurate to whichever count is actually used.

·Internal
Under the hood
Useful1 Signal1
MCP unclear

MCP catalog lookup source changed#

MCP catalog lookups now read from a served catalog cache instead of a host-keyed source

Unclear What effect this source change has on behavior visible to the user is not specified.

Details 0 0 Feedback
What

The internal function that looks up the MCP (Model Context Protocol) catalog now returns its data from a servedCatalogByKey source instead of the previous host-based lookup.

Why

This changes where Claude Code's MCP catalog data comes from internally; the finding does not specify what practical difference this makes for users.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Git diff review pane now tracks explicit fullscreen state and a cwd override#

Git diff review pane tracks its working directory and fullscreen state more precisely, and cancels stale background work on session changes

Details 0 0 Feedback
What

The git diff review pane (the view that shows pending changes for review) now tracks more state internally:

  • a cwd field, so process runs use an explicit working directory when one is set
  • an isEmpty flag, letting it skip re-checking git status when a session is already known to have no repository
  • an epoch counter, which cancels in-progress work to resolve a diff's base when a session is cleared or resumed

Separately, whether the pane is shown fullscreen is now derived from the actual render viewport instead of being assumed, and the pane now only auto-opens when it is explicitly confirmed to be fullscreen.

Why

These changes make the review pane more accurate about its own state, avoiding wasted work on repo-less sessions, stale background lookups after switching sessions, and auto-opening under the wrong screen layout.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

Query engine events now dispatched through a frame notifier instead of applied inline#

Engine events during a query are now deferred to a frame boundary instead of applied immediately

Unclear What user-visible difference this timing change produces is not stated.

Details 0 0 Feedback
What

In the main query-turn handler, incoming engine events used to be applied straight away. They are now routed through a frame notifier that defers applying them until a frame boundary is reached.

Why

Deferring event application this way changes the timing of when state and UI updates take effect during a turn, though the finding doesn't specify the visible effect.

·Internal
Under the hood
Useful1 Signal1
Startup

Structured exit-reason telemetry added to early CLI startup failures#

Early CLI startup failures now report a categorized reason via telemetry before exiting

Details 0 0 Feedback
What

Several places where Claude Code exits early during startup now report a categorized reason before exiting:

  • a failed security dialog or forced refresh reports force_refresh_failed
  • being rejected by the gateway reports gateway_rejected
  • running a version below the minimum required reports version_below_minimum
  • running --dangerously-skip-permissions as root reports bypass_root

A new subscription also reports consent_rejected when consent is rejected.

Why

This gives clearer, categorized telemetry for why Claude Code fails to start, making it easier to diagnose startup problems like an outdated version, a rejected gateway, or an unsafe root and --dangerously-skip-permissions combination.

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

Tool-result elision generalized to a list of open/tail marker pairs#

Tool-result collapsing in non-verbose mode now uses a general list of marker pairs instead of hardcoded prefixes

Details 0 0 Feedback
What

When Claude Code shows a tool's result in non-verbose mode, it collapses (elides) long or error-wrapped content so the terminal doesn't fill up. That detection used to rely on hardcoded prefix checks; it now first checks a general list of open/tail/end marker pairs, falling back to the old prefix-based check only if none match.

Why

This is an internal restructuring of how collapsed content is recognized, making it easier to add new collapsible content types without touching the fallback logic. It shouldn't change what a user sees.

·Internal
Under the hood
Useful1 Signal1
Remote Control

Bridge inbox message fetch now logs fetch attempts against the message queue#

Bridge inbox message fetch now logs each fetch attempt against the message queue

Details 0 0 Feedback
What

The tool that fetches an inbound bridge message by its file ID now receives the current session and messageQueue when it's created, and records each fetch attempt, whether it succeeds or fails, via a new noteFetchAttempt call.

Why

This adds visibility into message-fetch attempts on the bridge, which should make it easier to diagnose problems with inbound messages not arriving or being missed.

·Internal
Under the hood
Useful1 Signal1
MCP unclear

MCP tool descriptions carry provenance ('source') into the render payload#

MCP tool data sent to the UI now includes where each MCP client came from

Unclear It's unclear whether or how this source information is currently surfaced to the user in the interface.

Details 0 0 Feedback
What

When Claude Code passes information about connected MCP clients (Model Context Protocol servers providing extra tools) into the data used to render the interface, each client entry now includes a source field alongside its name and type, computed by a new internal helper.

Why

This adds provenance information about MCP tools that the interface (or other consumers of this data) can use, though the finding doesn't specify what visibly changes for users yet.

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
Git Worktrees

Worktree-registration vetting before deletion#

New internal check vets a repository's worktree registrations with git before removal proceeds

Details 0 0 Feedback
What

A new internal function checks whether a repository's worktree registrations can be safely verified with git before an operation (such as removing a worktree) proceeds. It resolves pointer or symlinked .git directories, and distinguishes between two outcomes: 'unlisted' (the worktree is gone or not a real repository) and 'kept' (git couldn't be asked yet, so the entry is preserved).

Why

This reduces the risk of incorrectly discarding worktree registrations when git can't yet be consulted, by keeping them by default until they can be properly checked.

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

Teleport client-directory-sync retraction now sends a trusted-device token#

Retracting the Teleport client-directory-sync tag now sends a trusted-device token

Unclear Nothing has been read yet about the tengu_teleport_client_directory_sync_retracted gate, so it's unclear whether or how it governs this behavior.

Details 0 0 Feedback
What

When Claude Code retracts (undoes) its Teleport client-directory-sync tag, the request now also includes a trustedDeviceToken value, in addition to the parameters it already sent.

Why

Including a trusted-device token on this call lets the server verify the request is coming from a recognized device when the sync tag is being retracted.

·Internal
Under the hood
Useful1 Signal1
Telemetry

New shutdown-time telemetry for unsent/backlogged events#

Claude Code now reports backlogged, unsent telemetry events when a session ends

Details 0 0 Feedback
What

Claude Code now tracks how many usage/telemetry events are still waiting to be sent when a session shuts down. A new internal check reports the number of unsent client events, the number of unsent internal events, how long the oldest queued event has been waiting, and whether sending is currently backing off. This information is attached to telemetry as unsent_client_events_at_close, unsent_internal_events_at_close, and hold_preflush_inflight_age_ms at the moments a connection closes or no listener is holding events.

Why

This gives visibility into whether Claude Code is losing or delaying telemetry data at shutdown, which helps diagnose gaps in usage reporting rather than leaving them silent.

·Internal
Under the hood
Useful1 Signal1
Telemetry

New telemetry event for queued-message delivery timing#

New telemetry event tracks how long queued messages wait before being delivered

Details 0 0 Feedback
What

Claude Code now records a queued_message_delivered telemetry event whenever queued commands or prompts are dispatched. It logs the delivery mode, how many commands and prompts were included, and how long the oldest item in the queue had been waiting.

Why

This gives insight into how queued messages and commands are actually delivered and how long they sit waiting, which helps identify delays in message handling.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

New 'must be an integer within N (character cells)' settings validation rule#

Settings validator adds a rule requiring some values to be whole numbers of "character cells"

Unclear The finding doesn't say which specific settings keys this new rule applies to.

Details 0 0 Feedback
What

Claude Code's settings validation now includes a new rule for certain configuration keys, requiring their value to be a finite whole number within a set range, described in terms of "character cells". This is separate from the existing rule that validates color-string settings.

Why

This lets Claude Code catch invalid values earlier for settings that must be sized in character cells, giving a clearer error instead of accepting a malformed value.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP server identity now threaded through permission requests#

Permission prompts now carry which MCP server is asking, including its name and source

Details 0 0 Feedback

**What

An MCP server is an external tool provider Claude Code can connect to. Permission requests (the prompts asking whether Claude Code may use a tool) can now include an optional mcp_server field with name and source, which is validated and stripped out with a warning if malformed. This information is also passed through to the permission dialog shown to the user, and to the tools that check request formatting.

Why

When a permission request comes from an MCP-provided tool, the person approving it can now see which MCP server is making the request, rather than seeing only the tool name with no indication of which external server it came from.

·Internal
Under the hood
Useful1 Signal1
Telemetry

post_turn_summary telemetry/schema gains richer structured fields#

Turn-summary telemetry now carries a description, points, summary, and suggested replies

Details 0 0 Feedback
What

The internal post_turn_summary event, which records data about a completed turn (one back-and-forth exchange with Claude), now includes several new fields on top of what it already tracked: description, points, summary, next_why, and reply_options.

Why

This gives whatever consumes this telemetry a richer picture of what happened at the end of a turn and what might reasonably follow, rather than just a status code and a short detail string.

·Internal
Under the hood
Useful1 Signal1
Telemetry

New telemetry categories: cloud_elevated_create and compact_kept_tail_announcements#

Two new telemetry categories track elevated cloud session creation and kept compaction announcements

Details 0 0 Feedback
What

The list of recognized telemetry event categories gained two new entries:

  • cloud_elevated_create, tracked when an elevated cloud session is created
  • compact_kept_tail_announcements, related to announcements kept at the tail end of a conversation compaction (the process that shortens a long conversation history)
Why

This lets Claude Code's telemetry track these specific events separately rather than lumping them into an unrelated or generic category.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Sandboxed dynamic-render-hook runtime template hardens against global tampering#

Sandboxed render-hook runtime now locks down global objects before running untrusted code

Details 0 0 Feedback
What

When Claude Code runs a render hook (custom code that draws part of the interface) in its sandboxed JavaScript runtime, that runtime now captures references to Object.freeze, defineProperty, defineProperties, keys, Array.isArray, Map, JSON.stringify, Error, and TypeError into local constants up front, instead of referencing the global versions directly each time.

Why

This guards against a render hook tampering with these global objects or methods to interfere with how the sandbox itself works, making the sandbox more resilient against misbehaving or malicious render-hook code.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP server source now reported to clients#

MCP server status sent to hosts and the SDK now includes where each server's configuration came from

Details 0 0 Feedback
What

Status information about MCP (Model Context Protocol) servers, sent both in the MCP servers listing and in the initial status payload, now includes a source field describing where that server's configuration came from.

Why

This lets a host application or the SDK show or reason about where an MCP server's settings originated, rather than only seeing the resulting configuration.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact reads track skipped/refused files with size limits#

Artifact validation now checks a list of skipped/refused files against count and length limits too

Details 0 0 Feedback
What

When Claude Code validates artifact type files, it now also checks a skipped files list, files that were skipped or refused, against a maximum count and per-entry length limits on the path and reason text, in addition to the existing checks on regular file paths.

Why

This stops an artifact from listing an unbounded or oversized set of skipped files, keeping validation consistent for both processed and skipped files.

·Internal
Under the hood
Useful1 Signal1
Tool Use

New helper for locating an unresolved tool_use's full message-row group#

New helper functions can locate the full message group behind an unresolved tool call

Details 0 0 Feedback
What

A new set of internal helpers can reconstruct which rows in a conversation transcript belong to the assistant message that produced a tool call whose result was never resolved, so that message can be restored.

Why

This supports repairing conversations where a tool call is left dangling, by making it possible to find and restore the full context it came from.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact live-subscribe republish handling no longer directly composes a re-read prompt#

Live artifact republish updates no longer inject a re-read prompt message, just log it passively

Details 0 0 Feedback
What

When a live artifact Claude Code is watching gets republished elsewhere, the handler used to build a message telling Claude the artifact appears to have been republished and should be re-read before editing, and queue it as a task notification. It now instead just records that the new version was heard and logs telemetry, without composing or sending that message.

Why

This is consistent with the shift to passive version tracking: rather than actively interrupting with a re-read prompt each time, the update is recorded quietly and surfaced differently.

·Internal
Under the hood
Useful1 Signal1
Subagents

New telemetry before resuming a subagent#

Resuming a subagent now logs diagnostic details about how it's being resumed

Details 0 0 Feedback
What

When Claude Code resumes a subagent (a helper agent handling part of a task), it now records a telemetry event with details about that resume: whether sidecar metadata was found, where the originating prompt came from, whether a task record exists, whether this continues an interrupted turn, whether the resumer is itself a subagent, and whether a newer storage system (storageV5) is active.

Why

This gives more visibility into how and why subagent resumes happen, which can help diagnose problems with resuming interrupted or nested agent work.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact comment-reply and asset-copy calls now record consent/telemetry via new helper calls#

Artifact comment reads and asset copies now log more detailed consent/telemetry records

Details 0 0 Feedback
What

When Claude Code reads comments on an artifact, it now separately records which specific comment IDs were shown to you, in addition to the existing record of the read happening. When copying an asset between artifacts (the copy_from action), it now records consent-tracking telemetry for the copy source before performing the copy, in addition to the deny/ask permission-rule checks already in place.

Why

This adds more precise tracking of what was shown and copied, supporting the permission and consent checks that already govern artifact reads and asset copies.

·Internal
Under the hood
Useful1 Signal1
Artifacts unclear

Newly-created artifacts tracked per account/conversation epoch as 'own created'#

Claude Code now tracks which artifacts you created, per account and conversation, as 'own created'

Unclear The finding doesn't say what consumes this new ownCreatedSlugs tracking or how it changes visible behavior.

Details 0 0 Feedback
What

When an artifact is created, Claude Code now records its slug (identifier) into a new session-state map called ownCreatedSlugs, tagged with the current environment. This only happens when the acting agent isn't the top-level agent-context-skip case, and when the account/conversation matches the one that made the create call. This tracking is separate from the existing roomStoppedByUser tracking.

Why

This is internal bookkeeping that lets Claude Code know which artifacts were created by the current session itself, likely to support other logic that behaves differently for artifacts you created versus ones you didn't.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact create call now threads an explicit requestId#

Artifact creation calls now can carry an explicit requestId

Details 0 0 Feedback
What

The function that creates a new artifact now accepts an additional parameter and, when it's set, forwards it as requestId in the request sent to create the artifact.

Why

This is internal plumbing that lets an artifact-creation request be tagged with a specific request identifier; it has no direct visible effect on how artifacts are created.

·Internal
Under the hood
Useful1 Signal1
Plugins unclear

Plugin install/materialize helper gains a preview option#

Plugin install helper gains a preview option, and marketplace installs reuse an already-resolved registry lookup

Unclear What the new preview option actually does when enabled is not stated in the finding.

Details 0 0 Feedback
What

The internal helper that materializes (installs and links) plugins now accepts a new preview option, off by default, alongside its existing linkFarm/linkFarmProducer options. Separately, when installing a plugin from a marketplace entry, the code now reuses an already-resolved registry lookup to find the marketplace directory instead of performing a second, separate lookup.

Why

These are internal groundwork changes; the preview option's effect isn't described, and the marketplace-lookup change is a small efficiency cleanup rather than a behavior 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 Signal1
Slash Commands

Slash-command-dispatched user messages now carry an explicit permissionMode field#

Messages created from slash commands now explicitly carry the current permission mode

Details 0 0 Feedback
What

The internal function that builds user-message objects when Claude Code dispatches a slash command now takes a permissionMode parameter and stamps it directly onto every message it creates.

Why

This ensures messages generated by slash commands carry an explicit record of the permission mode active at the time, keeping that state consistent with how it's already tracked elsewhere in the settings change-log system.

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

Prompt submissions are now tracked with a per-submission UUID for the duration of processing#

Prompt submissions now get a unique ID tracked through processing

Details 0 0 Feedback
What

When a prompt is submitted, Claude Code now opens a short-lived tracked record for that submission, containing the agent ID, mode, value, and a unique ID (UUID). This same UUID is then passed along to the code that processes the submission.

Why

Giving each submission its own tracked ID makes it possible to correlate a specific submission with its processing, which is useful for tracing what happened to a given prompt.

·Internal
Under the hood
Useful1 Signal1
Subagents unclear

liveTranscript flag for spawned agent prompts is now conditional instead of always true#

Subagent prompts now enable live transcript conditionally instead of always

Unclear What condition ps(r) checks to decide whether liveTranscript is enabled is not stated.

Details 0 0 Feedback
What

When a subagent (a separate Claude instance spun up to handle part of a task) is started, the liveTranscript setting passed along is now computed by a function instead of always being turned on. The related parentPromptId lookup was also changed to read from the current message container rather than a different one.

Why

This means live transcript streaming for a subagent's prompt is no longer unconditional; it now depends on the computed condition, though the finding does not specify what that condition checks.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact publish/version actions now thread a requestId for idempotency#

Artifact publish actions now pass a requestId through to the backend for idempotency

Details 0 0 Feedback
What

The artifact publish "version" action, along with its three underlying implementations (workshop files-only publish, live-doc publish, and the general publish path), now pass a requestId taken from the incoming request through to the backend publish call.

Why

Threading a request ID through publish calls supports idempotency, meaning a repeated or retried publish request can be recognized as the same request rather than causing a duplicate action.

·Internal
Under the hood
Useful1 Signal1
Artifacts unclear

Artifact create-from-type now threads a request id and extra param into page creation#

Artifact creation now passes a request ID through, and auto-opening after first write has an extra gate

Unclear What the extra parameter and the new auto-open gate condition specifically check is not stated in the finding.

Details 0 0 Feedback
What

When the Artifacts tool creates a new artifact from a type, the call that builds the artifact page now also passes along a request ID and an additional parameter that weren't included before. Separately, the path that automatically opens an artifact after its first write is now gated by an additional check before it will open.

Why

Threading a request ID through artifact creation likely helps associate the creation with the request that triggered it. The added gate on auto-opening means the artifact won't necessarily pop open automatically in every case it used to.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifacts tool gains restoreTransientForRemap hook#

Artifacts tool gains a restoreTransientForRemap hook shared with other tool-result mappers

Details 0 0 Feedback
What

The Artifacts tool, which renders an HTML file as a page on claude.ai, now includes a restoreTransientForRemap method. This is a hook already used elsewhere in Claude Code for restoring temporary state when a tool result's ID gets remapped.

Why

This brings the Artifacts tool in line with other tool-result handlers so its temporary state is preserved correctly across ID remaps, rather than being a user-facing change on its own.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Auto-mode transcript builder gains a 'summary' turn frame#

Auto-mode's transcript reconstruction now handles 'summary' turn frames, not just 'invisible' ones

Details 0 0 Feedback
What

The internal function that rebuilds conversation history for auto-mode's project-ownership classification now handles a new case: a 'summary' frame. When it encounters one, it folds the summarized text into a synthetic user-turn entry via a helper function. Previously, only 'invisible' frames were handled specially at this point.

Why

This lets the auto-mode classification process take summarized turns into account when reconstructing history, rather than only recognizing invisible ones.

·Internal
Under the hood
Useful1 Signal0
Group of 2 MCP unclear

MCP tool-call 'awaiting user input' handling consolidated into one function#

Internal cleanup consolidates the MCP tool-call awaiting-user-input logic into one shared function, with no user-visible behavior change

Unclear Whether this refactor has any subtle behavioral effect beyond code reorganization is not established by the evidence.

Details 0 0 Feedback

What

The code that handles an MCP (Model Context Protocol) tool call that is waiting on user input was restructured. The onAwaitingUserInput callback, which starts and stops a background-eligibility timer while a tool call is paused waiting for the user, used to be written inline for each call path. It is now pulled out into a single standalone function that both the retry path and the pending-elicitation background-task path reuse. Several internal helper names were also renamed as part of the cleanup.

Why

This is an internal code-quality change with no identified effect on behavior; it just reduces duplication in how Claude Code tracks tool calls that are waiting on user input.

·Internal
Under the hood
Useful1 Signal0
Group of 2 Permissions

Tool list access consolidated into a shared toolCatalog#

Session and permission setup now pass tool-list access (getAllBaseTools, getTools, assembleToolPool) through a shared toolCatalog object instead of calling separate global functions.

Details 0 0 Feedback

What

  • The code that builds the tool permission context (which tools are allowed/disallowed, including --tools narrowing) now receives getAllBaseTools as an explicit parameter instead of calling a fixed global function directly.
  • Session and agent setup (main loop, subagents, resumed sessions) now threads a shared toolCatalog object ({ getAllBaseTools, getTools, assembleToolPool }) through options, alongside the existing tools field, replacing scattered direct calls.

Why This is an internal cleanup that makes tool-list access consistent and explicit across the codebase, reducing the chance of different code paths using mismatched or stale tool lists.

·Internal
Under the hood
Useful1 Signal0
Git

Git subprocess calls widely switched to a new env-builder ss()/Ji() in place of ko()#

Git subprocess calls widely switched to a new environment-builder in place of the old one

Details 0 0 Feedback
What

Many internal functions that invoke git (for status, diff-cost estimation, worktree creation and removal, rev-parse, and config listing) were changed to build their process environment using a new helper instead of the previous one, and several of these now pass along a value scoped to a specific repository.

Why

This is an internal refactor to how git subprocesses get their environment variables; it doesn't change what these git operations do, but centralizes and scopes how their environment is constructed.

·Internal
Under the hood
Useful1 Signal0
Git

Git config include-filtering (-c overrides) reworked into direct call with envPins/pin args#

Git config override-filtering logic reworked to take explicit args and pins instead of returning a result object

Details 0 0 Feedback
What

The internal function that builds -c key=value override arguments from git config --includes -z --list output was restructured. Previously it was a self-contained routine that returned a success/failure result; now it's a lower-level helper that takes explicit arguments, environment pins, and a repository pin directly, and is used by the git environment-building code.

Why

This is an internal refactor to how git config overrides are constructed and threaded through to git calls, changing how the logic is organized rather than what it accomplishes.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

New broad cache-invalidation helper (Bd) clears output styles, workflows, skills, agents#

One new function clears cached output styles, workflows, skills and agents together

Details 0 0 Feedback
What

A new internal helper function clears several caches at once: the cached lists of output styles, workflows, skill directories, markdown files, and agent definitions. This runs alongside an existing reset function that already handled other cached data.

Why

Grouping these resets into one call makes sure that when Claude Code needs to refresh its view of custom configuration, none of these related caches are left stale by accident.

·Internal
Under the hood
Useful1 Signal0
Terminal UI

Ink root double-mount guard#

Claude Code now errors loudly instead of silently overwriting a stuck terminal UI root

Details 0 0 Feedback
What

Claude Code's terminal interface is built with a library called Ink, which mounts a "root" to take over the terminal and put it in raw input mode. Previously, if something tried to mount a second root on a stream while a prior root was still holding the terminal in raw mode, the tracking silently overwrote the old root. Now this situation throws an explicit error telling the caller to unmount the previous root first.

Why

This surfaces a bug condition immediately instead of letting it fail silently, which should make it easier to catch and fix cases where the terminal UI is being mounted incorrectly.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

Repo-detection caches now get invalidated by path (HUe)#

Repo-detection caches are now cleared by path when a directory changes

Details 0 0 Feedback
What

Claude Code keeps several internal caches about repository identity, such as which root directory a path belongs to, its canonical root, its remote slug, and its git directory. A new helper walks these caches and evicts any entries whose key path matches or contains a given path.

Why

This prevents stale repository-identity information from lingering after a directory is moved or a repository changes, which could otherwise cause Claude Code to misidentify which repository or root a path belongs to.

·Internal
Under the hood
Useful1 Signal0
Elsewhere unclear

New no-op state initializer j4o feeding a context provider#

A new always-null state value was added feeding an internal context provider

Unclear It is unclear what user-facing feature or purpose this new state and context provider serves; the finding only shows a null-returning initializer being wired into a context.

Details 0 0 Feedback

**What

·Internal
Under the hood
Useful1 Signal0
Artifacts

Artifact tool input-validation error paths reordered/renamed#

Artifact tool's input-validation checks reordered and error codes renamed

Details 0 0 Feedback

**What

The artifact_bash tool's input-validation logic now runs a combined check earlier than before, reuses existing helper functions, and replaces some error codes for local-only and eval-stub validation checks with named constants instead of raw values.

**Why

This is an internal code-quality change to how validation errors are structured; it doesn't change what triggers a validation error, just how it's represented internally.

·Internal
Under the hood
Useful1 Signal0
Startup

Startup: fastMode/advisor settings sync extracted into shared helper#

Headless startup's fastMode and advisor settings sync moved into shared helper functions

Details 0 0 Feedback

**What

When Claude Code starts up in headless mode (--print, used for non-interactive/programmatic use), the code that syncs fastMode and advisor-related settings has been moved out of inline logic into two dedicated functions, one of which adds a new settings subscription.

**Why

This is an internal restructuring of startup code; it doesn't change what settings are available or how fast mode 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
Elsewhere

Background/workflow agent(schema) execution loop — renames only#

Background agent structured-output execution loop internally renamed with no logic change

Details 0 0 Feedback

**What

The code implementing the structured-output execution loop for background/workflow agents (handling retries, stalled/error states, and token/tool-call accounting) had its internal variable names changed, with no identifiable change in logic.

**Why

This is an internal cleanup with no expected effect on 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
MCP

MCP client reconnect logic — renames only#

The MCP client's reconnect handler was renamed internally with no logic change

Details 0 0 Feedback
What

The code that handles reconnecting an MCP (Model Context Protocol) client after a dropped connection was reshuffled: internal variable names changed, but the reconnection backoff timing, retry limits, and notification logic all stayed the same.

Why

This is internal cleanup with no effect on behavior; nothing changes for people using Claude Code.

·Internal
Under the hood
Useful1 Signal0
Plugins unclear

Plugin agent loader refactored to take a single options object and drop try/catch wrapper#

The plugin agent loader now takes a single options object instead of separate arguments, and lost its own error-catching wrapper

Unclear The finding suggests error handling for load failures likely moved to the calling code but doesn't confirm where it now lives.

Details 0 0 Feedback
What

The internal function that builds an agent definition from a plugin's agent markdown file now takes a single destructured options object instead of a list of separate positional arguments. It also no longer has its own try/catch block that caught load failures, logged an error, and returned null.

Why

This is an internal refactor to how plugin agents are loaded.

·Internal
Under the hood
Useful1 Signal0
Terminal UI

Absolute-positioned element overdraw tracking in terminal renderer#

Terminal renderer now tracks and repaints stale absolutely-positioned elements that overlap new content

Details 0 0 Feedback
What

Claude Code's terminal rendering engine gained new internal logic to track absolutely-positioned elements (parts of the interface pinned to a specific spot rather than flowing with the rest of the layout). New helper functions check whether such an element's rectangle stays within its parent's bounds, and detect when a leftover rectangle from a previous frame overlaps a newly drawn element. A new repaintAfterStaleAbsolutePaint method uses this to trigger a repaint when that happens.

Why

This is a rendering correctness fix: it should prevent stale visual artifacts from absolutely-positioned elements lingering on screen and overlapping new content after the layout changes.

·Internal
Under the hood
Useful1 Signal0
Chrome Control unclear

Browser-selection prompt-builder simplified to a name lookup#

Internal browser-selection prompt builder simplified to just naming the tool, with instruction text moved elsewhere

Unclear The finding does not say what replaced the removed text-building logic beyond suspecting it moved into related new helpers, so the net effect on the final prompt text isn't confirmed.

Details 0 0 Feedback
What

An internal function used to build the mandatory browser-selection instructions was simplified. It previously constructed the full multi-paragraph instruction text itself; now it just returns a short phrase naming the tool to use (like 'the X tool') or a fallback mentioning the ask-user tool. The actual instruction text is now built elsewhere.

Why

This is an internal restructuring of how browser-selection prompts are assembled; it doesn't change what instructions Claude ultimately receives, just how the code produces 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
Useful1 Signal0
Elsewhere

Critical memory usage banner text unchanged but reformatted with memoized hook#

The 'Critical memory usage' banner code was reorganized with memoization, keeping the same wording

Details 0 0 Feedback
What

The 'Critical memory usage' banner, which suggests restarting and resuming with --continue and, in some cases, running /compact to free up context, is now rendered by a memoized component. It still only appears when memory usage is at the 'critical' tier, not the 'high' tier. The banner's text itself is unchanged.

Why

This is an internal rendering change; the guidance shown to users when memory usage is critical stays the same.

·Internal
Under the hood
Useful1 Signal0
Internals

registerWorker request now sends a User-Agent header#

Worker registration requests to the backend now include a User-Agent header

Details 0 0 Feedback
What

The request that registers a worker with the backend now sends a User-Agent header, built by a helper function, in addition to the existing Authorization, Content-Type, and anthropic-version headers.

Why

This gives the backend more information about the client making the registration request, which can help with diagnostics or compatibility handling on the server side.

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

Diff/gitdir baseline computation made lazy and cached#

Repository-diff computation now happens lazily and is cached instead of running eagerly upfront

Details 0 0 Feedback
What

The internal helper that computes repository diffs no longer eagerly computes the git baseline it needs as soon as it runs. Instead, it computes and caches that baseline only when fetchDiff is actually called. A related function, headKeyOf, now explicitly passes a null baseline rather than a computed one.

Why

This avoids doing potentially unnecessary work computing a git baseline when it isn't needed, improving efficiency for code paths that don't end up calling fetchDiff.

·Internal
Under the hood
Useful1 Signal0
SDK

CreateSession request can now attach extra headers per-call#

Session-creation requests can now carry extra custom headers

Details 0 0 Feedback
What

The internal function Claude Code uses to create a session can now accept an extra set of HTTP headers for a given call, which get merged on top of the default headers. Previously it always sent the same fixed set of headers.

Why

This is an internal plumbing change that allows specific session-creation calls to add headers as needed, rather than being locked to one fixed set.

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

'core.excludesfile' resolution simplified to a pure function#

Global gitignore file lookup no longer runs the git command itself, just processes the result

Details 0 0 Feedback
What

Claude Code figures out where your global gitignore file lives (the core.excludesfile git setting) so it can respect files you've told git to ignore everywhere. Previously, the function that determined this path ran the git config --global --get core.excludesfile command itself. Now that function just takes the already-looked-up value as plain text and processes it, without running git.

Why

Separating the git lookup from the processing logic is an internal cleanup; it should not change what path Claude Code ends up using, but makes that piece of code simpler to run and test on its own.

·Internal
Under the hood
Useful1 Signal0
Artifacts

Artifacts login-required message consolidated into a shared constant#

The 'Artifacts need a claude.ai login' message is now defined once as a shared constant

Details 0 0 Feedback
What

The message "Artifacts need a claude.ai login", shown as part of a model-precedence error, is now built from a single shared constant instead of being written directly inside that one function.

Why

This is an internal cleanup that keeps the wording consistent if the message is needed in more than one place; it doesn't change what the user sees.

·Internal
Under the hood
Useful1 Signal0
Terminal UI

Screen-diff renderer gains overlap detection (blitsOver)#

Terminal screen-diff renderer can now detect when a region overlaps a previous 'blit' operation

Details 0 0 Feedback
What

The part of Claude Code that tracks what's been drawn to the terminal screen (to figure out what needs redrawing) gained a blitsOver(rect) method, which checks whether any previously recorded "blit" (block image/content transfer) operation overlaps a given rectangular region.

Why

This is used to decide whether a region left over from a previous frame that wasn't refreshed actually needs to be cleared, which helps the terminal renderer avoid unnecessary or incorrect redraw work.

·Internal
Under the hood
Useful1 Signal0
Git

git env helper renamed/changed from ko() to Ji(e) across many git operations#

Internal git environment-building helper was swapped out across many git operations

Details 0 0 Feedback
What

Dozens of internal git command wrappers, covering things like deleting branches, locking worktrees, listing revisions, and reading config, switched from an older environment-building helper to a new one that is also passed the working directory explicitly.

Why

This is an internal refactor. Passing the working directory explicitly to the environment builder makes git operations less dependent on ambient process state, which can make behavior more consistent across different working directories.

·Internal
Under the hood
Useful1 Signal0
API Errors

Refusal-message helper renamed/consolidated (Po -> xo)#

Content-policy refusal responses now use the same result-wrapping helper as other API errors

Details 0 0 Feedback
What

The code that builds a refusal message for content-policy violations now wraps its result using the same helper function used elsewhere for API error responses, rather than a separate one.

Why

This aligns refusal responses with the same internal shape as other API errors, which is an internal consistency change rather than something that changes what a user sees.

Related

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

·Internal
Under the hood
Useful1 Signal0
Artifacts unclear

Artifact database tool description strings reordered/refactored#

Artifact database tool descriptions had their wording reordered

Unclear Which release's prompt capture actually shows this reordering is not established, since no capture has been taken under this release yet.

Details 0 0 Feedback
What

The descriptions shown for the artifact tool's read_db and write_db actions (used for auto-classification and permission prompts) had parts of their sentences reordered, such as where the note about being "requested after an unattended auto-reply notification" and the shared-with clause appear.

Why

This is a wording change to how these descriptions read; it isn't tied to a specific version since no capture of the new text has been taken under this release yet.

·Internal
Under the hood
Useful1 Signal0
Telemetry

Request telemetry gains rawRequestBodyId and a requestBodyId threaded into assistant-response logging#

Assistant-response logging now threads a requestBodyId through the telemetry that records completions

Details 0 0 Feedback
What

The internal function that logs completion telemetry now takes and passes along a rawRequestBodyId value (previously stored under a differently named slot), and forwards a requestBodyId into the code path that saves assistant responses.

Why

This is internal bookkeeping for how Claude Code correlates a logged response with the request that produced it. It has no direct effect on how you use the tool.

·Internal
Under the hood
Useful1 Signal0
MCP

Design-connector MCP detection consolidated into a shared helper#

Design-connector MCP detection logic was consolidated into shared helper functions

Details 0 0 Feedback
What

Two nearly identical internal functions that decide whether a design-tool MCP (Model Context Protocol) server should get special design-connector treatment used to each inline their own URL-scheme/path check and auth-header check. Both now call the same shared helper functions instead.

Why

This is an internal cleanup that removes duplicated logic; it should not change behavior for users but makes the design-connector detection easier to maintain consistently.

·Internal
Under the hood
Useful1 Signal0
Elsewhere unclear

Skill index cache gets an explicit clear function#

A new function can explicitly clear the cache of indexed Skills

Unclear The finding does not say when or under what circumstances this new clear function is actually called.

Details 0 0 Feedback
What

A small new function was added that clears the cached skill index, the in-memory list Claude Code keeps of available Skills.

Why

Having an explicit way to clear this cache lets Claude Code force a fresh read of available Skills when needed, rather than relying on stale cached data.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

Interrupted-response continuation reminder wording unchanged, only internal renames#

Interrupted-response continuation reminder is unchanged, only internal code renamed

Details 0 0 Feedback
What

The [reply-on-resume] mechanism, which prefixes a prior interrupted response with an <interrupted-output> reminder when Claude Code continues after being cut off, still shows the same text to users. Only internal variable and helper names changed.

Why

This is a behind-the-scenes rename with no visible effect for users.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

Transfer-copy upload code renamed only (no behavior change)#

Transfer-copy upload verification code renamed internally with no behavior change

Details 0 0 Feedback
What

The code that handles clipboard/transfer-copy uploads, reading a transfer copy, verifying its integrity, writing it to disk with a hashed filename, and returning counts, had its internal variable names changed. The underlying logic is the same.

Why

This is an internal rename with no effect on behavior.

·Internal
Under the hood
Useful1 Signal0
Sessions

rewind_conversation internals refactored into shared helper functions#

rewind_conversation's internals were split out into shared helper functions, with no behavior change noted

Details 0 0 Feedback
What

The handler for the rewind_conversation remote request - which rewinds a conversation to an earlier point - has been restructured. The logic for persisting the rewind, checking whether the session state has drifted, mirroring and logging failures, and stopping any in-flight agents past the cut point now lives in separate helper functions instead of being written inline. Stopping in-flight agents is now driven by a cut index rather than the previous predicate-based walk through agent ancestry.

Why

This is an internal code reorganization rather than a change in what rewind_conversation does for the user.

·Internal
Under the hood
Useful1 Signal0
Plugins unclear

Plugin skill loading now passed the plugin name#

Plugin skill loading now also receives the plugin's own name

Unclear What using the plugin name in the skills loader actually changes for the reader is not stated.

Details 0 0 Feedback
What

When Claude Code lists what a plugin provides - its commands, agents, skills, hooks, and MCP servers - the function that loads the plugin's skills now also receives the plugin's name, in addition to the skill file path(s) it already received.

Why

Passing the plugin name alongside its skill paths likely lets the skill loader associate skills with the plugin they came from, though the finding doesn't specify what this enables in practice.

·Internal
Under the hood
Useful1 Signal0
Terminal UI

Session/turn wiring in the REPL hook (v8e) renumbered, no behavior change found#

REPL session/turn wiring code was renumbered internally with no behavior change found

Details 0 0 Feedback
What

A large block of internal caching slots used by the React compiler in the REPL's session hook was renumbered, and some local variable names were swapped around. The same underlying session, turn, and notification objects - including idle-notification thresholds - are still wired up the same way.

Why

This is an internal code reshuffle with no found effect on behavior.

Verbatim
Official · Anthropic

Anthropic’s official release notes

Published verbatim by Anthropic for v2.1.274. 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 108 bullets, 20 name something an entry on this page also names, 25 name something no entry here does, and 63 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 a visible warning when memory usage is critical, with steps to free memory or restart safely Nothing to match on
  • Added CLAUDE_CODE_MCP_STARTUP_WAIT_MS to bound how long the first non-interactive turn waits for connecting MCP servers (0 = don't wait) Probably new-env-var-capscontrols-mcp-connector-startup-wait
  • Added effort attribute to the claude_code.llm_request OpenTelemetry trace span, matching the api_request event No entry names this
  • Added claude_code.managed_settings_resolved OTel event: managed-settings sources and policy helper state; redacted settings and digests with OTEL_LOG_MANAGED_SETTINGS=1 Probably managed-settings-now-reported-to-telemetry-with-redaction, new-otel-log-managed-settings-telemetry-env-var
  • Added store.connect_timeout_seconds to the Claude apps gateway config to lengthen the Postgres connect timeout (default 5 seconds), and improved the boot error when the database is unreachable to point to store.postgres_url and the configured timeout Probably enterprise-gateway-configurable-postgres-connect-timeout-r
  • Added enduser.sub, the IdP subject, to the telemetry Claude Desktop and Cowork send through a Claude apps gateway No entry names this
  • Added a Claude apps gateway warning when a replica has more requests open than the 256 it sends upstream at once, and a startup log line showing that limit Nothing to match on
  • Added click-to-expand for collapsed teammate and agent messages in fullscreen mode Nothing to match on
  • Fixed sessions getting stuck endlessly retrying "unexpected tool_use_id" 400 errors: corrupted transcripts now self-heal where possible, and otherwise a clear error (with a /rewind hint) ends the loop No entry names this
  • Fixed MCP servers configured as http that only speak legacy HTTP+SSE failing to connect when they answer the first request with 422 or another 4xx error Nothing to match on
  • Fixed Streamable HTTP MCP tool calls timing out after about 5 minutes even when a longer per-server timeout was set Nothing to match on
  • Fixed MCP prompts and resources not refreshing when a server sends list-changed notifications without declaring listChanged Probably mcp-promptsresources-list-changed-listeners-no-longer-requi
  • Fixed MCP tool calls refused with 403 insufficient_scope being reported as an expired sign-in: the error now names the missing permissions and points to /mcp re-authentication Probably mcp-tool-call-reauth-new-step-up-scope-handling-for-insuffi
  • Fixed hook-driven sessions (such as an active /goal) ending with "Prompt is too long" instead of compacting when the context overflowed again after a reactive compaction No entry names this
  • Fixed an active /goal being lost when resuming (--continue / --resume) a session that had compacted Probably critical-memory-usage-banner-text-unchanged-but-reformatted
  • Fixed claude agents losing --model, --effort, --permission-mode, --allow-dangerously-skip-permissions and --agent after an auto-update relaunch Probably model-switch-suggestion-text-now-considers-config-sources-be, fleet-view-background-agent-relaunch-can-now-target-a-specif
  • Fixed a per-turn slowdown when a language server publishes project-wide diagnostics for thousands of files Nothing to match on
  • Fixed subagents with model: "opus" on Bedrock, Vertex or Foundry leaving the session's model when its id has no recognizable model family (unless ANTHROPIC_DEFAULT_OPUS_MODEL is set) No entry names this
  • Fixed self-hosted runner sessions failing every turn with a 401 after a few failed token refreshes, until the next scheduled refresh; the runner now keeps retrying, and fetches a new token after a 401 Nothing to match on
  • Fixed clickable links to local file paths doing nothing in VS Code and other terminals that require a file:// URI Probably file-url-resolver-now-also-normalizes-bare-absolute-paths
  • Fixed the transcript renumbering ordered lists in your own messages (typing "3. 2. 1." displayed "3. 4. 5."); numbers and "N)" markers now show as typed No entry names this
  • Fixed AskUserQuestion preview notes being attached to a previously chosen option instead of the highlighted one Nothing to match on
  • Fixed AskUserQuestion preview mode dropping the highlighted option when submitting a note with Enter Nothing to match on
  • Fixed a resumed background agent keeping half of an interrupted tool batch when one of its calls was approved with a message Nothing to match on
  • Fixed a local claude -p --resume started with CLAUDE_CODE_RESUME_INTERRUPTED_TURN not reporting background tasks the previous process left unfinished Probably orphaned-background-task-recovery-on-resume-now-restricted-t
  • Fixed the first turn of a cloud session sometimes starting without the tools of an SDK-hosted MCP server that was still connecting Nothing to match on
  • Fixed background agent notifications claiming the agent had no live background work when it was still waiting on its own background task and would resume Nothing to match on
  • Fixed error hints in Claude Desktop sessions to suggest slash commands like /usage-credits instead of CLI flags that cannot be used there Probably usage-credits-1m-context-guidance-message-reworked-with-new
  • Fixed /schedule saving a routine's prompt without its message role when Claude writes the routine in the shape that listing routines returns No entry names this
  • Fixed /status not showing the apiKeyHelper failure that its own error banner told you to check Probably status-report-brief-shape-added-to-teammatestatus-seriali, apikeyhelper-failure-now-surfaced-in-statussettings-display
  • Fixed /fast on in non-interactive sessions reporting on and then turning off under an organization's managed fast mode policy; it now says the organization has disabled it No entry names this
  • Fixed the Artifact tool asking you to approve an update to an artifact that it then refused because the session had not read the latest version Nothing to match on
  • Fixed Cowork and claude.ai cloud sessions with network access on treating reads of a teammate's artifact as if network access were off Nothing to match on
  • Fixed a plugin or marketplace directory with no git repository of its own taking its version from an enclosing git repository, such as a git-managed ~/.claude No entry names this
  • Fixed --strict-mcp-config with an empty --mcp-config holding the first non-interactive turn for up to MCP_TIMEOUT on incidental MCP servers No entry names this
  • Fixed Stop prompt hooks re-sending their whole prompt on every block in a conversation; repeat blocks now name the condition with a 500-character label Nothing to match on
  • Fixed extra empty editor windows opening at startup on Linux under Wayland when running inside the Cursor or VS Code terminal Nothing to match on
  • Fixed an unhandled promise rejection in the Claude apps gateway when Postgres drops a connection during a spend check Nothing to match on
  • Fixed Claude apps gateway cutting every open stream on SIGTERM: it now lets in-flight requests finish for up to 25 seconds before exiting (CLAUDE_GATEWAY_DRAIN_TIMEOUT_MS) Probably claude-gateway-gets-graceful-shutdown-on-sigtermsigint
  • Fixed installed_plugins.json being rewritten on nearly every start-up when plugin policy comes from remote managed settings, which made Claude Desktop reload every open session's plugins Probably plugin-sync-now-tolerates-unsettled-remote-managed-plugin-co
  • Fixed headless and SDK sessions making a separate model call for every background task that finished; completions already queued are now answered by one call Nothing to match on
  • Fixed the Bash tool re-sourcing the shell profile (a multi-second stall on the next command) after every plugin reload; it now does so only when the plugins' bin/ directories changed Probably shell-snapshot-invalidation-tracks-plugin-bin-path-changes
  • Fixed plugins with a top-level $schema in hooks/hooks.json showing an "unknown key" notice No entry names this
  • Fixed MCP connection errors and the MCP login tool's description showing secrets resolved from ${VAR} placeholders in MCP configs No entry names this
  • Fixed Bash permission checks for commands that loop over or assign certain special shell variables; these commands now ask for permission Nothing to match on
  • Fixed worktree-isolated sessions accepting Bash commands with certain nested shell expansions; these are now refused Nothing to match on
  • Fixed the Edit permission prompt preview sometimes showing a different location than the approved edit in files with multi-byte characters Nothing to match on
  • Fixed background commands being stopped after 30 idle minutes on machines under mild memory pressure; they're now stopped only when memory is critically low, and the debug log says why Nothing to match on
  • Fixed a message a subagent sends to the main session disappearing from the Claude Desktop transcript after a relaunch Nothing to match on
  • Fixed a plugin loaded from a .zip being served from a stale extraction after several overlapping reloads Nothing to match on
  • Fixed a sub-agent's progress summary being replaced by a runaway multi-paragraph reply Nothing to match on
  • Improved startup in --input-format stream-json sessions: the first turn no longer waits up to 2s for still-connecting MCP servers whose tools tool search defers; they arrive on a later turn No entry names this
  • Improved Monitor tool notifications: a script's final output and its exit now arrive as one notification instead of two, saving a model turn Nothing to match on
  • Improved Artifact tool errors: when you are not signed in to claude.ai the terminal now says so on the first attempt, and Claude is told to stop retrying a rejected call sooner Nothing to match on
  • Improved artifact publishing: a publish built on an older version is stopped before it is sent, with the newer page to merge Nothing to match on
  • Improved safety checks before removing an agent worktree that contains submodule checkouts Nothing to match on
  • Improved OTEL_LOG_RAW_API_BODIES=file:<dir> output: a new index.jsonl and request_body_id / message.id event attributes link each response to its request file and transcript message Probably otel-raw-api-body-writer-now-guards-against-symlinkhardlink, otel-raw-requestresponse-body-dumping-rewritten-to-atomic-w
  • Improved Claude apps gateway boot: it now tries the first Postgres connection up to three times before exiting, so a database that is reachable a few seconds late no longer fails the boot Nothing to match on
  • Improved the Claude apps gateway's spend-limit check under load: it now takes one database round trip instead of four, so fewer checks time out on a busy gateway Nothing to match on
  • Improved Claude apps gateway sign-in rate limit errors: /login now explains the refusal, and the gateway log says which limit was hit and which setting to change Probably better-error-messages-when-artifacts-need-a-claudeai-login, cloud-gateway-sign-in-error-now-a-structured-error-code
  • Changed Bedrock, Vertex, Foundry and telemetry-disabled installs to use the v2 MCP client and MCP 2026-07-28 negotiation with direct HTTP servers by default, as other installs already do (opt out: MCP_SDK_GENERATION=v1 or MCP_PROTOCOL_NEGOTIATION=legacy) Probably mcp-client-sdk-runtime-now-defaults-to-v2-not-v1, mcp-sdk-generation-default-flips-to-v2-via-tengu-brindle-cau
  • Changed /code-review to use leaner inline review prompts for every model that has no tuned settings of its own, instead of spawning many review subagents No entry names this
  • Changed "type": "sdk" MCP entries in .mcp.json, settings, plugins and agent files to be skipped with a warning: only an SDK host application can register in-process servers No entry names this
  • Changed artifact watching in local sessions: a new version published elsewhere no longer starts a turn; Claude learns of it from a later Artifact tool result Nothing to match on
  • Changed plugin and marketplace clones to leave Git LFS files as pointers instead of downloading them; git lfs pull in the checkout fetches them Probably git-lfs-pointer-file-detection-with-a-new-warning-message, skip-lfs-marketplace-option-documented-as-a-no-op
  • Changed self-hosted runners to skip a read-only repository the git host refuses at the access check instead of failing the session start Nothing to match on
  • Changed the /status GitHub line to read "Cloud sessions", and /web-setup, /ultrareview, and teleport messages to say "cloud session" instead of "Claude Code on the web" Probably claude-code-on-the-web-renamed-to-a-cloud-session-clo, status-report-brief-shape-added-to-teammatestatus-seriali, apikeyhelper-failure-now-surfaced-in-statussettings-display, new-telemetry-categories-cloud-elevated-create-and-compact, ultraplan-web-session-wording-changed-to-cloud-session, github-connect-dialog-copy-changed-to-cloud-sessions
  • [VSCode] Added continuation of the step a window reload interrupted, labeled in the chat, with a Claude Code: Continue After Reload setting to turn it off Nothing to match on
  • [VSCode] Added Memory and Instructions entries to the Customize menu: Memory shows the auto-memory toggles, the saved memories and the memory folders, and Instructions edits the CLAUDE.md files Nothing to match on
  • [VSCode] Added a claudeCode.lockEditorGroups setting to stop Claude from locking the editor groups it opens in No entry names this
  • [VSCode] Fixed a /btw side question asked in a new conversation's first seconds occasionally showing another session's side-question history No entry names this
  • [VSCode] Fixed a brief freeze when the extension first looks up your global gitignore file Nothing to match on
  • [VSCode] Fixed a message sent while Claude was running a tool disappearing from the conversation after a window reload Nothing to match on
  • [VSCode] Fixed the Manage Plugins enable toggle and MCP servers dialog rows being unreachable from the keyboard Nothing to match on
  • [VSCode] Fixed sign-ins and sign-outs made in a terminal not showing until a reload after CLAUDE_CONFIG_DIR changed in the Environment Variables setting Probably ide-lockfile-discovery-also-checks-the-home-directory-when-c
  • [VSCode] Fixed Edit diffs in the chat being cut off at the bottom at some panel widths and for long wrapped lines; diff boxes now fit the rows shown Nothing to match on
  • [VSCode] Fixed overlapping settings writes from the extension leaving ~/.claude/settings.json unparseable or dropping a setting No entry names this
  • [VSCode] Fixed Open in New Tab (Ctrl/Cmd+Shift+Esc) sometimes leaving the new tab's message box unfocused, so typing went nowhere until you clicked it Nothing to match on
  • [VSCode] Fixed reopening a closed Claude tab splitting the editor layout when its locked group still holds another Claude tab and a file Nothing to match on
  • [VSCode] Fixed New session opening another locked editor group whenever a file tab shared the group with your Claude tab Nothing to match on
  • [VSCode] Fixed session names shifting sideways in the session picker while typing a search query Nothing to match on
  • [VSCode] Fixed the plan review card cutting off its Send feedback button and reason field when a plan has several comments; the comment list now scrolls Nothing to match on
  • [VSCode] Fixed inline code and code blocks in chat replies being unreadable under the High Contrast themes Nothing to match on
  • [VSCode] Improved screen reader navigation of the conversation: each message is announced as "You" or "Claude", with the tool name for tool steps Nothing to match on
  • [VSCode] Changed the default global gitignore file to $XDG_CONFIG_HOME/git/ignore when XDG_CONFIG_HOME is an absolute path No entry names this
  • [Claude Code on the web] Added a "Compare against" branch picker to a cloud session's diff view, so you can diff its changes against any branch instead of only the base branch No entry names this
  • [Claude Code on the web] Fixed git operations in cloud sessions failing with "service unavailable" when GitHub's token renewal briefly errors No entry names this
  • [Claude Code on the web] Fixed editing a routine occasionally making it fire twice or re-enabling a routine that had just been paused Nothing to match on
  • [Claude Code on the web] Fixed commits in cloud sessions occasionally failing with a signing error for a few minutes after the session's credentials refreshed Nothing to match on
  • [Claude Code on the web] Fixed the toast after saving a routine whose GitHub trigger couldn't be linked to show the reason, such as a per-repository trigger limit, instead of only "edit to retry" No entry names this
  • [Claude Code on the web] Fixed sessions sometimes flipping back to unread right after you mark them read Nothing to match on
  • [Claude Code on the web] Changed routines to skip a run and retry for up to 72 hours when the owner's GitHub connection is missing, instead of switching the routine off at the first failed check Nothing to match on
  • [Claude Code on the web] Changed a routine's on-hold notice: when your subscription is paused it now tells you to turn the routine back on yourself instead of promising an automatic resume Nothing to match on
  • [Claude Tag] Added a Guests setting to the Add channel and Add workspace forms in Claude Tag admin settings, so owners can pick Inherit, Allow, Channel only or Restrict up front Nothing to match on
  • [Claude Tag] Fixed Claude not answering when another Slack app or bot @mentions it; the tag now gets a reply and wakes Claude in a channel it had stopped following after days of inactivity Nothing to match on
  • [Claude Tag] Fixed Claude missing another app's message that tagged @Claude right after a new Slack channel was created; it's now delivered once Claude has joined Nothing to match on
  • [Claude Tag] Fixed Claude folding a follow-up sent minutes after its last Slack message into it as a silent edit; late updates such as blockers now post as a new reply that notifies Nothing to match on
  • [Claude Tag] Fixed Claude's Slack search failing with an error whenever it searched within a single channel; it now returns that channel's matching messages Nothing to match on
  • [Claude Tag] Fixed a safety-filter stop silently resetting a Slack thread's context when nobody was waiting; Claude now always says so and no longer cancels background work still running Nothing to match on
  • [Claude Tag] Fixed email addresses in Claude's Slack replies rendering with a visible mailto: prefix; they now show as the plain, clickable address Nothing to match on
  • [Claude Tag] Fixed Claude refusing to watch an Enterprise Grid channel shared with the whole organization when asked from another workspace in the grid Nothing to match on
  • [Claude Tag] Fixed the Environment picker in Claude Tag admin settings showing a raw environment ID instead of the environment's name for archived or app-created environments Nothing to match on
  • [Claude Tag] Improved Claude's live progress checklist in Slack: capped at 2,000 characters, reposted at most every 15 minutes in busy threads, with older "Latest task list" links updated No entry names this
  • [Claude Tag] Removed the repeated guest-attribution note Claude appended to a Slack canvas each time it edited one in a channel using the "Channel only" guest setting No entry names this
  • [Code Review] Fixed re-reviews occasionally leaving a fixed finding's thread open when the new review also filed a lower-severity note under it Nothing to match on
  • [Code Review] Fixed rare reviews ending with "Code review encountered an error" when GitHub or an internal service failed transiently at launch; they now wait and retry No entry names this
  • [Code Review] Improved how Code Review words each posted finding: short plain sentences that say who is affected, where the code goes wrong, and the fix up front Nothing to match on
  • [Code Review] Improved the check-run card and PR comment when a review is skipped because of an organization limit: each cause now links the admin page that fixes it Nothing to match on
System prompt

1 of 28 tool descriptions changed. The appended system-reminder blocks moved: 2 lines added, 2 lines removed.

Claude Code, interactive mode

Documentation

What the docs did around this release

483 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 78 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