Claude Code v2.1.275

464 entries read v2.1.274 → v2.1.275 Markdown Unofficial

This build carries 54 gated additions that stay out of reach. The largest is a new post-turn memory system: a 'memory' settings layer plus an MCP tool for writing, reading, appending to, and deleting notes across turns, held behind the CLAUDE_CODE_POST_TURN_MEMORY environment variable. Plugin marketplaces gain npm as a source, with pip, uv, cargo, github, and gh reserved but not usable yet, and npm-direct plugin installs sit behind their own flag. Also present but inactive: a plugin API method ui.panes for listing a plugin's own UI panels, the ability to park and resume an interrupted background agent instead of just stopping it, kitty-protocol terminal image rendering detection, a startup promo system with a limit-wall "claim credit" option, and logic for defaulting plain claude runs to cloud sessions that is currently hardcoded off.

Several of those cloud and memory features have a usable counterpart today. Cloud sessions by default is now a real flag that can silently route plain claude invocations to the cloud, and the new 'memory' settings layer ships with replace, append, and insert edit modes. Remote control can now push a model or effort-level change into a running session, and a SubagentStop hook event joins the existing SubagentStart. Plugin hooks gain a $.prompt.read API for reading prompt-box text and cursor position, plus new session.end and session.measure lifecycle events; deep links can trigger a direct plugin install via claude://install-plugin, and /plugin adds install-from-source and npm-aware installs. Subagents are now capped at 20 concurrent runs by default, adjustable with CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS, and a new --project-config-root flag lets a host pin the project directory separately from the working directory.

Among 47 fixes, account-level memory storage has been removed and now errors instead of working. Transcript loading repairs malformed or unreadable rows instead of failing outright, and oversized tool, binary, or hook output that can't be saved to disk now shows a truncated preview rather than being silently cut. Remote sessions no longer clear every in-progress tool indicator when an unrelated message arrives, and answering a permission prompt from outside the session now counts as a denial. Grep failures get distinct errors for oversized or failed ripgrep output, and artifact network errors now explain that outbound HTTPS on port 443 is required.

Reading as
Show only
Tier
Flag state
Names
Pick an entry · j / k steps through · rest on a row to peek
40 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 3 Advisor Notable

New internal 'advisor' tool, gated to first-party accounts with entitlement#

A new gated 'advisor' tool was added, restricted by an env var and account entitlement, with clearer in-context messaging about when it applies

Details 0 0 Feedback
CLAUDE_CODE_DISABLE_ADVISOR_TOOL/advisor

What

A new internal tool/event kind called "advisor" has been introduced.

  • It can be disabled with an environment variable, and otherwise requires a first-party Anthropic account plus an internal entitlement check before it's available.
  • The availability check was refactored into a shared helper function, replacing inline checks that combined the disable env var, first-party account check, and entitlement check.
  • When you change the advisor model setting mid-conversation (from the /advisor UI or its slash command), Claude Code now shows a contextual note explaining when the new setting will actually take effect — for example, if the API already refused to use the advisor this turn, or if the conversation already locked in a different advisor model or tool declaration.

Why

This lays the groundwork for an advisor feature restricted to eligible accounts, and helps avoid confusion by telling you explicitly when a mid-conversation change to the advisor setting won't apply immediately.

Related

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

In dev
Nothing to try yet
Useful5 Signal5
Memory Notable

Post-turn memory: new 'memory' settings layer and MCP memory tool with read/write/append/delete, gated by CLAUDE_CODE_POST_TURN_MEMORY#

A new 'memory' settings layer and MCP memory tool let Claude write, read, and edit notes across turns

Details 0 0 Feedback
CLAUDE_CODE_POST_TURN_MEMORYmemory_writememory_readmemory_appendmemory_delete
What

Claude Code's settings system now includes a new layer called memory, added to the existing list of layers (managed, user, project, local). Alongside it, a new internal tool exposes memory operations: memory_write, memory_read, memory_str_replace, memory_append, and memory_delete. The whole feature is gated by the environment variable CLAUDE_CODE_POST_TURN_MEMORY; when it isn't set, the related post-turn memory writing logic stays inactive. Write operations support three modes: replace, append, and insert.

Why

This lays groundwork for Claude to persist notes or state after a turn finishes and read them back later, using a dedicated settings layer and a small set of file-like operations, though it only activates when CLAUDE_CODE_POST_TURN_MEMORY is set.

Related

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

+New
Use it now
Useful4 Signal4
Group of 6 Cloud Sessions Notable no docs found unclear

Plain claude runs can now default to a cloud session, with a new --local flag to opt out#

Running plain claude can now be automatically routed to a cloud session unless you pass the new --local flag

Unclear Whether cloudSessionsByDefault is on for any given account is decided server-side and not stated by this finding.

Details 0 0 Feedback
cloudSessionsByDefault

What

  • A new setting (cloudSessionsByDefault) can cause a plain claude invocation — one with no explicit session, resume, continue, teleport, connect, SSH, worktree, or remote-control flags — to be automatically routed to a cloud session instead of running locally.
  • A new --local flag lets you opt out and force a local session; internally the outcome of this decision is tracked as "none", "declined" (for example because --local was passed), or "applied".
  • This decision (defaultedToCloud) is threaded through the session startup configuration, and reported in telemetry, including a new cloud_session_default event fired on cancel, failure, or success.

Why

This means running Claude Code the normal way could start a cloud session rather than a local one, depending on account or organization configuration. The --local flag is how to guarantee you get a local session.

Related

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

In dev
Nothing to try yet
Useful5 Signal3
Group of 6 Plugins Notable

Plugins can now be installed and updated directly from the npm registry#

Claude Code plugins can now come from npm packages, not just git or the marketplace, behind a gate

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

Details 0 0 Feedback

What

  • Plugin installs and updates can now use an npm registry as the source, alongside the existing git and claude.ai sources. Install records track npmVersionSpec, npmResolved, npmIntegrity, and npmRegistry, and installation refuses to proceed if the package's integrity can't be verified.
  • Plugin identifiers can now reference npm-scoped packages, such as @scope/name, and @scope/name@npm is understood as that package sourced from npm.
  • claude plugin install recognizes an @npm-suffixed spec (name@npm, @scope/name@npm, [email protected]@npm) and a new --registry option to install straight from a given npm registry URL, bypassing the marketplace system entirely.
  • A deep link (claude://install-plugin) can now install a plugin directly, taking a plugin name and an optional marketplace, which can also point at an npm source.
  • This whole capability is gated behind an account flag and a feature gate (tengu_plugins_npm_marketplace).

Why

This lets teams distribute and install plugins as ordinary npm packages instead of requiring a git-based marketplace, while still verifying the downloaded package's integrity before trusting it.

+New
Use it now
Useful4 Signal3
Group of 4 Project Config Notable

New --project-config-root flag lets a host override the project directory everywhere#

A new --project-config-root flag repoints CLAUDE.md, settings, skills, MCP, and hook resolution to a different project directory

Details 0 0 Feedback

What

  • A new --project-config-root CLI flag lets a host pin the "project" directory used for CLAUDE.md discovery, project settings, skills directories, .mcp.json resolution, scheduled tasks, and plugin environment variables like CLAUDE_PROJECT_DIR, instead of always deriving it from the current working directory.
  • Internally, a new accessor (host.launchOptions.projectConfigRoot()) is now checked ahead of the normal working-directory-based project root in many places: project settings path resolution, CLAUDE_SKILL_DIR/CLAUDE_PROJECT_DIR substitution in skills and slash commands, the environment and working directory used to spawn MCP stdio servers, and the working directory used for LSP server processes. When this override is set, dynamic skill-directory scanning is skipped entirely.
  • Hook execution and path handling, and subagent statusLine scripts, now also resolve their working directory and CLAUDE_PROJECT_DIR from this override before falling back to the normal project root.

Why

This lets a host application run Claude Code against a project directory that differs from the process's actual working directory, useful when embedding Claude Code somewhere the "project" isn't simply wherever the process happened to start.

Related

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

+New
Use it now
Useful4 Signal3
Group of 4 Plugin API Notable

Slash commands and plugins can now append or insert into the input box, not just replace it#

Plugins and hooks can fill the prompt input box in replace, append, or insert mode, with new APIs to read and stamp these actions

Details 0 0 Feedback

What

The internal system plugins and hooks use to put text into your input box (the "draft") has been extended.

  • The fillDraft API, used by plugins and hooks to populate the input box, now takes a mode: replace (the old default, replaces everything), append (adds text to the end of what's already there), or insert (inserts text at your cursor position).
  • A companion readDraft API (also exposed as the hook method $.prompt.read) lets a plugin read the current input box text and cursor position before deciding what to do.
  • Slash-command-triggered plugin actions of type prompt.fill (defaulting to replace mode) and prompt.suggest now get the same default plugin-origin metadata that command.run actions already had.
  • A new settings layer called memory was added alongside the existing managed/user/project/local layers, and the replace/append/insert modes are validated against an explicit list, with an error shown for invalid modes.

Why

This gives plugins finer control over how they interact with whatever you're already typing, instead of always overwriting it. A plugin can now add a suggestion after your text or insert something right where your cursor is, and it can check what's already in the box first.

In dev
Nothing to try yet
Useful4 Signal3
Group of 7 Terminal Rendering Notable no docs found

Terminal can now render inline images (kitty graphics protocol)#

Claude Code can now draw inline images directly in supporting terminals via the kitty graphics protocol

Details 0 0 Feedback
kittyGraphics

What

  • Terminal capability detection now checks for kitty graphics protocol support (a new kittyGraphics capability, alongside kittyKeyboard/synchronizedOutput/extendedKeys), matching the terminal name against a kitty/ghostty allowlist and minimum version; it's off by default inside tmux/screen and disabled entirely for background workers, but can be forced on with an environment variable.
  • A new Image content type was added alongside existing block types like Markdown and Raster, so images can appear as their own block wherever those are rendered.
  • Images can be sent as PNG data or raw RGBA pixel data, with validation of the data's format (base64 padding, PNG signature/header), byte size against width and height, and overall prop shape.
  • The terminal renderer tracks when on-screen images go stale (e.g. after a screen reset, alternate-screen toggle, or focus reset) and retransmits/redraws them so they don't disappear or look broken after a redraw.
  • A byte-size cap was added so a UI element tree is rejected once the combined size of its images exceeds a threshold.

Why

Previously the terminal could only show text; on terminals that support it, Claude Code can now display real inline images (for example, screenshots or generated pictures) directly in the session, while guarding against oversized image payloads and stale or broken redraws.

In dev
Nothing to try yet
Useful4 Signal3
Group of 2 Plugins Notable no docs found

Installed plugins' hook modules now gated behind a rollout flag#

Hook code from installed (non-built-in) plugins now loads only when a rollout flag or override env var is on

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

Details 0 0 Feedback
CLAUDE_CODE_ENABLE_FUNCTION_HOOKStengu_plugin_hooks_modules

What

A plugin's hooks module (the code that lets a plugin react to events like tool calls) is now skipped for all plugins except Claude Code's own built-in ones, unless a rollout flag called tengu_plugin_hooks_modules is turned on. Built-in plugins always load their hooks regardless of the flag. When the flag is off, Claude Code logs a message explaining that the installed plugin's hook module was not loaded because the rollout flag is off. Internally, the loading path computes a builtinsOnly flag and passes it into hook registration.

The gate can be overridden by setting the environment variable CLAUDE_CODE_ENABLE_FUNCTION_HOOKS, which forces hook modules to load even when the rollout flag is off.

Why

This limits which plugins can run custom hook code by default, likely as a staged rollout for hook support in third-party (installed) plugins. If a plugin's hooks stop firing, check whether this rollout flag is on, or set CLAUDE_CODE_ENABLE_FUNCTION_HOOKS to force them on.

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

Remote-control lane can now push model and effort picks into a running session#

The SDK-host remote-control lane can now apply a model or effort switch to an already-running session

Details 0 0 Feedback
applyModelPickapplyEffortSeed

What

  • New applyModelPick and applyEffortSeed capabilities let the SDK-host (bridge/server) side of remote control apply a model change or an effort-level (reasoning effort) change to a session that is already running.
  • The bridge reads a claude_code_args value from auto-mode facts, and when a model or effort value is present and different from the last one applied, it calls these functions on the session, logging sdk-host lane model pick applied or sdk-host lane effort seeded.
  • If the running session declines the change, the attempt is logged as a refusal warning rather than silently failing.

Why This lets a remote controller adjust which model or effort/reasoning level a live session uses without restarting it, while making it visible when the session refuses to accept the change.

In dev
Nothing to try yet
Useful4 Signal4
Background Tasks Notable unclear

Interrupted background agents/tasks can be 'parked' and resumed instead of just stopped#

Interrupting a background agent now 'parks' it for resuming instead of stopping it outright

Unclear The gate tengu_zinc_harbor is currently reading off for this site's account and for the anonymous baseline, and no reading has been taken under this release yet, so it's unclear whether this parking behavior is active.

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

Details 0 0 Feedback
What

When a user interrupts Claude Code while background agents or the main session (acting as a sub-agent) are running, they are no longer always stopped. Instead, they can now be "parked": their progress is preserved and they can be resumed later by sending a message. The interruption notification now distinguishes parked agents from stopped ones.

Why

This means interrupting running background work doesn't necessarily throw away its progress; it can be picked back up later instead of having to start over.

In dev
Nothing to try yet
Useful4 Signal4
Plugin API Notable no docs found unclear

New plugin API method ui.panes with no permission check, wired end-to-end but never called by anything else in the bundle#

New plugin API method ui.panes lets plugins list their own UI panels, with no permission check

Unclear The finding shows the method wired into the dispatch table and SDK but not called elsewhere, so what a plugin author would use it for in practice is unclear.

Details 0 0 Feedback
ui.panes
What

A new method, ui.panes, was added to the plugin runtime API. It returns the list of UI panes (panels) that belong to the calling plugin, including each pane's id, title, and whether it's shown, focused, or placed. The plugin SDK now exposes this as panes(). Unlike the similar ui.open, ui.close, ui.scroll, and ui.focus methods, ui.panes has no permission check attached to it.

Why

This gives plugin authors a way to inspect their own panes' state, though nothing else in Claude Code currently calls it, so its practical use isn't yet visible.

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

npm-sourced plugin marketplaces added; several other sources reserved for future use#

Plugin marketplaces can now source plugins from npm; pip/uv/cargo/github/gh sources are reserved but not yet usable

Details 0 0 Feedback
@npm
What

Plugin marketplaces can now use npm as a real source, letting you install plugins from an npm registry using the form <package>@npm. Several other source names — pip, uv, cargo, github, and gh — are also now recognized as reserved names, but they are not yet available for actual use.

Why

This gives plugin authors and users a working way to distribute and install plugins through npm today, while signaling that support for other package ecosystems is planned.

+New
Use it now
Useful4 Signal2
Group of 3 Terminal UI Notable unclear

New keybinding to send queued input immediately#

ctrl+x ctrl+s and ctrl+enter now send your queued message right away, interrupting any in-progress response

Unclear The finding does not say what key combination triggers this action.

Details 0 0 Feedback
chat:sendNow

What

  • Two new key chords, ctrl+x ctrl+s and ctrl+enter, are added to the chat keymap, both mapped to a new "send now" action alongside the existing enter and ctrl+x-enter bindings.
  • This action immediately sends whatever input is currently queued, interrupting the streaming response if Claude is still replying to a previous message.
  • A new sendQueuedNow method implements this, distinct from the existing submitEmpty action, and triggers the telemetry event input_send_now_key.

Why

This gives a quick way to force a queued message through right away instead of waiting for the current response to finish.

+New
Use it now
Useful4 Signal2
Group of 2 Plugins Notable no docs found

/plugin install gains a --marketplace flag#

/plugin install now accepts --marketplace to install a plugin and add its marketplace source in one step

Details 0 0 Feedback
/plugin install --marketplace

What

  • /plugin install now supports a --marketplace <source> (or --marketplace=<source>) flag that installs a plugin and adds its marketplace source at the same time, and the help text now documents this usage.
  • The command reports usage errors for a missing source, the wrong number of arguments, or when the plugin name also embeds a marketplace (e.g. plugin@marketplace) at the same time as --marketplace is passed.
  • The add-marketplace UI gained a confirmAdd field that can trigger an automatic confirmation step when installing this way.

Why

This lets you install a plugin from a marketplace you haven't added yet without a separate /plugin marketplace add step, while still catching ambiguous or malformed commands.

Related

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

+New
Use it now
Useful4 Signal2
Group of 2 Plugins Notable

Marketplace add-by-link now requires confirmation, plus new install routing#

Adding a plugin marketplace from a link now shows a confirmation step, with new install-from-source and npm-aware install flows

Details 0 0 Feedback
/plugin install

What

  • Adding a marketplace from a link or URL, whether via /plugin marketplace add <path/url> or by installing a plugin from a link, now carries a confirmAdd payload. The add-marketplace screen automatically shows a confirmation step when this hasn't been set yet but a link-based source was provided.
  • A new install-from-source action routes to the add-marketplace screen with plugin and link-origin details for this confirmation step.
  • A new usage-error fallback routes back to the plugin menu instead of failing silently.
  • Installing now short-circuits to an npm-install path when the target parses as a plugin@npm spec.

Why

This adds a safety check before trusting and adding a marketplace source from an arbitrary link, and cleans up how installs from different kinds of sources (links, npm packages, usage errors) are routed.

Related

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

+New
Use it now
Useful4 Signal2
Group of 2 Subagents Notable

Subagent concurrency cap simplified to one env-configurable limit#

Subagent spawning is now limited only by a single concurrency cap, configurable via CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS

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

Details 0 0 Feedback
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS

What Subagent spawning previously refused once a subagent hit both a fixed lifetime total and a fixed concurrent-run cap. Now only the concurrent-run limit remains, defaulting to 20 and overridable with the CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS environment variable. When the cap is reached, a new subagent launch is refused with a message telling the user to raise CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS, and the refusal is recorded as a subagent_concurrency_cap event.

Why Dropping the separate lifetime-total cap means subagents are no longer blocked just because many have run in sequence over a long session; only how many are running at once matters now, and that limit can be tuned per environment.

Related

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

Improved
You'll notice
Useful4 Signal2
Group of 8 Artifacts

Artifacts tool: icon replaces favicon, and read/list report editing access#

Artifact publishing now uses a generic icon word instead of a favicon emoji, and reads/lists show whether you can edit a shared artifact

Details 0 0 Feedback

What

  • The Artifacts tool's favicon parameter (an emoji, e.g. "one or two emoji") is deprecated in favor of a new icon parameter that takes a single descriptive word like chart, calendar, recipe, code, or map instead of an emoji, and must not be a product or brand name.
  • Publishing an artifact no longer requires a favicon at all; only file_path is required now.
  • The publish result now reports whether the icon was accepted, dropped by the server, fell back to the old favicon emoji, or was never sent, via new response fields (iconDropped, icon, faviconSent).
  • Reading or listing artifacts now reports whether you have edit ("writer") access to a shared artifact. Only artifacts you can write to can be updated directly; otherwise Claude has to publish a separate copy. Artifacts shared from another organization may be missing from the listing entirely.

Why

This tells Claude up front whether it can update an existing shared artifact or must create a new one, and simplifies icon selection to a plain word instead of picking an emoji.

Improved
You'll notice
Useful4 Signal2
Group of 3 Project Config

CLAUDE.md/AGENTS.md instruction-file loading reworked: caching, nested discovery, and 'none' mode#

Project instruction-file loading now caches unchanged content, discovers nested CLAUDE.md/AGENTS.md files, and 'none' mode keeps org-managed instructions

Details 0 0 Feedback
CLAUDE.mdAGENTS.md

What

The pipeline that loads CLAUDE.md and related project-instruction files was reworked in several ways:

  • Loading now computes the set of instruction files first and compares it to the previous version, reusing cached CLAUDE.md text when the instruction files haven't changed, instead of always recomputing.
  • Instruction-file discovery was rewritten to resolve a session root and walk parent directories for nested CLAUDE.md/AGENTS.md files, deduping files by both path and trimmed content across project, local, user, and memory sources.
  • The projectInstructions setting's none mode now behaves differently: it drops only the project's own and your personal instruction files, while your organization's managed CLAUDE.md and memory still load. Previously, none dropped the managed CLAUDE.md too.

Why

These changes make instruction-file loading faster (via caching), more thorough (finding nested files in parent directories), and change what none actually excludes — organizations relying on managed CLAUDE.md should note it now stays loaded even when a user sets projectInstructions to none.

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

New plugin/session lifecycle hook events session.end and session.measure#

Two new lifecycle events, session.end and session.measure, added for plugins and hooks

Unclear The finding does not say what session.measure actually measures or when it fires.

Details 0 0 Feedback
session.endsession.measure
What

Claude Code added two new lifecycle events, session.end and session.measure, to the set of events that plugins and hooks (scripts that run automatically at specific points) can respond to. These join existing session-related events like session.compact and session.attach. The new events are wired through the schema, an internal raiser mechanism, and real call sites that emit them during a session.

Why

This gives plugins and hooks more points in a session's lifecycle to hook into, specifically when a session ends and when some kind of measurement occurs.

Improved
You'll notice
Useful4 Signal3
Team Memory Notable

Team memory sync can now hold local-only files through a broken manifest instead of dropping them#

Team memory sync now holds onto local-only files instead of dropping them when its sync record is broken

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

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

This account: on · anonymous baseline: on · compiled default in v2.1.275: 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.275. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
What

Team and organization shared-memory sync now has a "held" state. If a memory store's local folder loses its usable record of what's already been synced (its .memory-sync manifest becomes untrustworthy), Claude Code no longer discards or overwrites the local memory files. Instead it keeps them on disk, tracks them in a heldLocal list, and notifies the user that "Memory sync for the ... memory store is off for now." When sync recovers, it reconciles which held files were edited, deleted, or already appeared on the server, tells the user sync "is back on," and records a new tengu_team_mem_rejoin telemetry event.

Why

This protects local memory edits from being silently lost when sync state gets corrupted, and gives a clear signal to the user about when sync has paused and resumed.

Related

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

Improved
Use it now
Useful3 Signal2
Group of 2 Models Notable

New 'settings_env_default' model-source label for ANTHROPIC_DEFAULT_*_MODEL env vars#

Models picked via ANTHROPIC_DEFAULT_*_MODEL environment variables are now attributed to a distinct 'settings_env_default' source

Details 0 0 Feedback

What Model-source attribution logic now recognizes environment variables shaped like ANTHROPIC_DEFAULT_[A-Z]+_MODEL (for example a variable ending in _MODEL). When the organization's model-attribution mode is set to env and the active model matches one of these variables, the reported source is now settings_env_default instead of falling through to remap/agent/settings-based logic.

Why This gives clearer, more accurate reporting of why a particular model was selected when it comes from an ANTHROPIC_DEFAULT_*_MODEL environment variable set via managed settings, rather than lumping it in with unrelated attribution sources.

+New
Use it now
Useful3 Signal2
Group of 2 Plugin Testing Notable

New UI-mount test harness for plugin testing#

claude plugin test now includes a scriptable UI harness for mounting and interacting with plugin Client components

Details 0 0 Feedback
ui.mountact

What

  • A new in-process terminal UI test harness lets tests mount plugin 'Client' components and drive them with key, pointer, post, and advance actions, then unmount them, using a virtual clock, without needing a real terminal.
  • The plugin-testing engine used by claude plugin test now exposes this as a clients interface with record, mount, act (covering drawn/key/pointer/post/advance/unmount), and releaseAll methods. The engine's generic call() now feeds "ui.render" operations into this recorder, and close() releases all mounted clients.

Why

This lets plugin authors write automated tests that render and interact with their plugin's terminal UI components directly, instead of only testing non-UI logic.

Related

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

+New
Use it now
Useful3 Signal2
Group of 3 Terminal Rendering Notable

Your message dims while it's waiting for a response#

A message you sent now renders dimmed and colorless while Claude is still working on it, distinguishing it from settled messages

Details 0 0 Feedback
monochrome

What

The text-rendering component underlying Claude Code's terminal output gained a monochrome prop that, when set, strips out color so text renders as plain/dim/italic only, with no ANSI color codes.

  • The "You" message row (what you typed) now tracks an awaitingModel state, derived from the message ID, which is true while a response is still in flight or the message is queued.
  • While awaitingModel is true, the label and body of your message render in a subtle/inactive color using this monochrome mode, in both the brief and normal transcript layouts.

Why

This gives a visual cue that distinguishes a message you just sent (still being processed) from earlier messages that have already been fully handled, without needing to read timestamps or scroll 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
Useful4 Signal2
Hooks Notable

SubagentStop hook event#

A SubagentStop hook now fires when a subagent finishes, alongside the existing SubagentStart hook

Details 0 0 Feedback
SubagentStop
What

Hooks are user-configured scripts that run automatically at specific points in Claude Code's operation. The internal hook-event handling now treats SubagentStop the same way it already treats SubagentStart, which means a Stop-style hook can now fire when a subagent (a separate Claude instance handling a sub-task) finishes, not just when one is spawned.

Why

This gives users a way to run a hook specifically when a subagent completes its work, complementing the existing SubagentStart hook that fires when one is spawned.

Related

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

Improved
You'll notice
Useful4 Signal2
Artifacts

Artifact publish: file-not-found handling gains restore-from-Artifact recovery#

Claude Code can now restore a missing Artifact file from its last published version

Details 0 0 Feedback
What

If the file backing a previously published Artifact goes missing, for example because a session resumed on a different machine or its temporary files were cleared, Claude Code can now detect this and restore the last-published version of the file to disk so it can be re-edited and re-published. Distinct messages are shown depending on whether the file can be read, is blocked, or is gone entirely.

Why

Previously a missing backing file would likely have blocked further edits to a published Artifact. This recovery path lets work continue without losing the published content.

Improved
You'll notice
Useful4 Signal2
Artifacts no docs found

Artifacts can be published by someone with write (not just owner) access#

Artifacts can now be published by anyone with write access, not only the owner

Details 0 0 Feedback
canWrite
What

Publishing or writing to an artifact you don't own is now allowed without an extra prompt, as long as you have writer or owner access to it, the change isn't going public, and the artifact wasn't shared with you via another organization. This is tracked through new canWrite and invitedByOtherOrg fields, and the artifact URL tool's description was updated to say an artifact must be one the person owns or was given edit access to (shown as 'writer').

Why

This lets collaborators who've been given write access to an artifact actually publish changes to it, instead of that ability being limited to the original owner.

Related

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

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

Hooks can be disabled per-agent via settingsHooksOff#

A new settingsHooksOff option can disable all hook execution for a given agent or subagent run

Unclear The finding doesn't say what user-facing setting or scenario sets settingsHooksOff, so how a user would trigger this isn't clear.

Details 0 0 Feedback
settingsHooksOff
What

Several internal functions responsible for assembling and running hooks (user-configured scripts that run at specific points, including agent-context hooks) now check for a new settingsHooksOff option. When it's set to true, they short-circuit and skip running any hooks entirely for that agent or subagent run.

Why

This provides a way to fully disable hook execution for a specific run, which is useful for situations where hooks shouldn't fire, such as isolated or internal subagent invocations.

+New
Use it now
Useful3 Signal2
Plugins Notable no docs found

Marketplace add gains an opt-in strict name-collision refusal#

Marketplace add gets an opt-in refuseNameCollision option to stop silent overwrites

Details 0 0 Feedback
refuseNameCollision
What

The logic behind adding a marketplace now accepts an options object with a refuseNameCollision setting. When it's turned on, trying to add a marketplace whose name already exists but points to a different source now throws an error instead of silently overwriting the existing entry.

Why

This prevents accidentally replacing an existing marketplace's source under the same name when the stricter option is used.

+New
Use it now
Useful3 Signal2
Promotions Notable

New "limit wall" promo banner system, tied to five-hour rate limits#

A new dismissible promo banner can appear when you hit the five-hour usage limit

Details 0 0 Feedback
What

Claude Code has a new dismissible promotional banner tied to hitting the five-hour rate limit (the 'limit wall'). Clicking it opens a claim page, either in the browser or via a desktop path, and if the underlying configuration can't be reached, it shows the message "This offer isn't available right now." The banner's appearance, dismissal, and clicks are all tracked with their own telemetry events.

Why

This gives Claude Code a way to surface offers or promotions to users at the moment they run into rate limits, though whether and how it appears depends on server-side rollout.

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

New env var CLAUDE_CODE_PARKED_PERMISSION_WAIT_MS with 2000ms fallback#

New CLAUDE_CODE_PARKED_PERMISSION_WAIT_MS env var sets a 2 second default wait for parked permissions

Details 0 0 Feedback
CLAUDE_CODE_PARKED_PERMISSION_WAIT_MSCLAUDE_CODE_RESUME_INTERRUPTED_TURNCLAUDE_CODE_ADOPT_UNDERIVABLE_PARKED_PERMISSIONCLAUDE_CODE_PARKED_STOP_RETIRES
What

A new environment variable, CLAUDE_CODE_PARKED_PERMISSION_WAIT_MS, controls a wait time used in logic around "parked" permissions and resuming a turn. If it isn't set, it defaults to 2000 milliseconds (2 seconds). It appears alongside other related environment variables: CLAUDE_CODE_RESUME_INTERRUPTED_TURN, CLAUDE_CODE_ADOPT_UNDERIVABLE_PARKED_PERMISSION, and CLAUDE_CODE_PARKED_STOP_RETIRES.

Why

This gives more control over timing in the logic that resumes interrupted turns and handles permission requests that were left pending ('parked'), building on the existing CLAUDE_CODE_RESUME_INTERRUPTED_TURN recovery behavior, which was previously narrowed to remote sessions and fixed to report unfinished background tasks after a local claude -p --resume.

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

Plugin API: ui.log gains a to destination field#

Plugin ui.log gains a to field to route output to the transcript or a debug-only log

Details 0 0 Feedback
ui.log
What

The ui.log operation, which plugins use to write log output, now accepts a to parameter that chooses where the text goes: either the normal visible UI log ("transcript") or a debug-only log line. Previously, ui.log always appended to the visible UI log.

Why

This lets plugin authors send diagnostic or debug output to a separate debug log instead of cluttering the visible transcript that users see.

+New
Use it now
Useful3 Signal2
Scheduled Tasks Notable

Scheduled/autonomous-loop task wakeups can be disabled per component instance#

Scheduled task wakeups, including /loop, can now be disabled per component instance

Details 0 0 Feedback
disabled
What

The component responsible for scheduled tasks, which handles /loop, cron-style scheduled prompts, and teammate task notifications, now accepts a disabled setting. When set, it skips all of its scheduling behavior, including firing handlers, randomized timing jitter, and extra routine cron tasks.

Why

This lets scheduled-task behavior be turned off for a given instance of the component, which is useful in contexts where scheduled wakeups shouldn't run.

Related

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

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

Two new passthrough environment variables: CLAUDE_CODE_DISABLE_ATTRIBUTION_CROSS_REPO and CLAUDE_CODE_SDK_HAS_OAUTH_REFRESH#

Two new environment variables are now recognized: CLAUDE_CODE_DISABLE_ATTRIBUTION_CROSS_REPO and CLAUDE_CODE_SDK_HAS_OAUTH_REFRESH

Unclear What CLAUDE_CODE_DISABLE_ATTRIBUTION_CROSS_REPO actually does, and whether it changes CLAUDE_CODE_SDK_HAS_OAUTH_REFRESH's existing behavior, isn't stated.

Details 0 0 Feedback
CLAUDE_CODE_DISABLE_ATTRIBUTION_CROSS_REPOCLAUDE_CODE_SDK_HAS_OAUTH_REFRESH
What

Claude Code now recognizes and passes through two additional environment variables: CLAUDE_CODE_DISABLE_ATTRIBUTION_CROSS_REPO and CLAUDE_CODE_SDK_HAS_OAUTH_REFRESH. The former is added to the general list of recognized environment variables, and the latter appears in an SDK-related context.

Why

The finding doesn't say what effect either variable has beyond being recognized, so no further behavior can be stated.

+New
Use it now
Useful3 Signal1
Group of 5 Artifacts

upload_asset can now upload several files to an artifact in one call#

The artifact tool's upload_asset now accepts a list of files (file_paths) instead of just one at a time

Details 0 0 Feedback

What

  • upload_asset now accepts a file_paths array to upload several local files into one artifact in a single call, alongside the existing single-file file_path. A human-readable summary, like "3 files · "a.png", "b.png", 1 more", is shown for what was uploaded.
  • The artifacts tool also gained a copy_from/asset_ids action to copy assets from another artifact server-side.
  • Batch uploads via file_paths are disabled for non-interactive/scripted (SDK) callers, which must still upload one file per call.
  • If the asset store starts rate-limiting mid-batch, the remaining files in a file_paths call are held back with a specific retry message instead of the whole call failing.
  • A new error, asset_upload_pin_mismatch, is returned if an approval that covered a batch upload is retried as a single-file call, or vice versa.

Why

This makes it much faster to attach multiple images or files to one artifact, instead of needing a separate tool call and approval for each file.

Improved
Use it now
Useful2 Signal2
Poll Events Notable no docs found

CLAUDE_CODE_POLL_EVENTS gate simplified — extra guard conditions removed#

CLAUDE_CODE_POLL_EVENTS alone can once again switch on poll-event delivery

Details 0 0 Feedback
CLAUDE_CODE_POLL_EVENTS
What

The function that decides whether Claude Code uses poll-based event delivery previously required two additional internal conditions to be true on top of the CLAUDE_CODE_POLL_EVENTS environment variable. Those extra conditions have been removed, so the function now only checks CLAUDE_CODE_POLL_EVENTS.

Why

This reverses a prior change that had required the SDK or streaming-input entry path to separately confirm that event ingress was wired before the environment variable would take effect. Now, setting CLAUDE_CODE_POLL_EVENTS is sufficient on its own again.

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

$.model.complete maxTokens is now validated against the actual model's output ceiling, not a fixed global cap#

$.model.complete's maxTokens limit now matches each model's real output ceiling instead of one fixed number

Details 0 0 Feedback
maxTokens
What

The hook API's $.model.complete previously rejected any maxTokens value above a single hardcoded limit of 8192, regardless of which model was being used. It now looks up the actual output ceiling for the specific model being called (still capped globally at a larger number) and rejects requests that exceed it with 'maxTokens ${s} is past what ${w} can produce in one reply (${O})'.

Why

Models that can produce longer replies than 8192 tokens are no longer artificially capped, while models with smaller limits are still protected from requesting more than they can actually return.

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
Plugins

New 'Add marketplace?' confirmation prompt with y/n gate#

Claude Code now shows an 'Add marketplace?' confirmation before adding a plugin marketplace

Details 0 0 Feedback
What

When adding a plugin marketplace through a confirm-style flow (for example, from a plugin recommendation), Claude Code now shows a new confirmation screen titled Add marketplace? before the marketplace is actually added. It displays the resolved source, an optional warning if a version is pinned, and asks for a yes/no answer before proceeding.

Why

This gives you a chance to review what's being added and where it comes from before a marketplace source is registered, instead of it being added silently.

+New
Use it now
Useful3 Signal1
Self-Hosted Runner Notable

New self-hosted-runner drain grace: SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS#

Self-hosted runners now wait briefly after a turn finishes before shutting down, so results aren't lost

Details 0 0 Feedback
What

When a self-hosted runner is told to drain (stop accepting new work and shut down), it now treats a turn that just finished as still "in flight" for a short grace period, until the session process confirms to the server that the turn has actually ended. This period is controlled by a new environment variable, SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS, which defaults to about 2 seconds. The runner's startup log now reports this setting as post-turn-settle.

Why

Without this grace period, a runner shutting down (via SIGTERM, the signal used to stop a process) right after a turn appears complete could lose that turn's result before it was fully reported. This change closes that small window so results aren't silently dropped during a drain.

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

Terminal now supports ctrl+c copy-of-selection inside the resume/session-picker screen, active only in fullscreen mode#

Ctrl+C now copies selected text within the session resume/picker screen, but only in fullscreen mode

Details 0 0 Feedback
What

A new wrapper around the resume-conversation and session-picker screens (the "Loading conversations…" and "Resuming conversation…" views) adds support for copying selected terminal text with ctrl+c (or super+c on some systems). Pressing it while text is selected copies that selection, or clears the copy if it was already copied. This behavior is only active when the terminal is running in fullscreen mode.

Why

This lets users copy text they've selected while browsing or resuming past sessions, something that previously wasn't wired up on that particular screen, though only when running in fullscreen mode.

Improved
You'll notice
Useful3 Signal1
Plugins Notable

32-command-per-plugin registration cap removed#

Plugins can now register more than 32 slash commands

Details 0 0 Feedback
What

Plugins that register slash commands using functionHooks used to hit a hard limit of 32 commands per plugin. Trying to register a 33rd command failed with an over_limit error. That limit and the check enforcing it have been removed entirely.

Why

Plugin authors can now register as many commands as they need without running into an arbitrary registration ceiling.

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

Everything else

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

1 entry

New Featuresopen

+New
Nothing to try yet
Useful3 Signal2
Subagents no docs found

Forked agent runs can report token usage per-request#

Forked agent runs can now report token usage as it streams in, not just at the end

Details 0 0 Feedback
onRequestUsage
What

When Claude Code runs a forked agent (a subagent branched off to do a separate task), it can now report token usage incrementally through a new onRequestUsage callback as responses stream in, in addition to the final total usage it already reported.

Why

This lets code that manages forked agents track token consumption in near real time rather than waiting until the run finishes.

Related

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

105 entries

Improvementsopen

Improved
You'll notice
Useful3 Signal2
Group of 2 Poll Events

Poll and wake events can now carry media#

Delivered poll/wake events can now include a media array of images or PDFs alongside the event data

Details 0 0 Feedback

What

When Claude Code delivers queued poll or wake events (the background mechanism that hands off notifications and updates to a teammate or agent), the delivered content can now include a media array alongside the existing event fields. This array can hold base64-encoded images (jpeg, png, gif, webp) or PDF documents, matched 1:1 with the events they belong to. The media field is only included in the schema and telemetry when at least one event actually carries media.

Why

This lets images and documents travel through the same poll/wake-event delivery path as other event data, so a teammate or agent can receive visual or document content as part of an event notification instead of losing 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
Useful3 Signal3
Artifacts

Artifacts: new 'source restore' read path and Artifact Types catalog#

New backend support for restoring a published Artifact's source and reading Artifact Types

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

Details 0 0 Feedback
What

A large new module adds the ability to read back the published source of an Artifact (a piece of generated content Claude Code can publish, such as a document or app) through a new artifact_source_restore path. It reports detailed reasons when this fails, including permission checks, blocked outbound network access, organization mismatches, read timeouts, version lag, and warnings when another writer has changed the content.

Alongside this, new plumbing supports "Artifact Types": reading a type's catalog entry, its instruction file, and the content of individual files within it via artifact_type_link_read. This is tied to a feature state called frozenArtifactTypes.

Why

This lays groundwork for Claude Code to fetch back and inspect previously published Artifacts and their type definitions, with clearer error messages when that read fails.

Improved
Nothing to try yet
Useful3 Signal2
Group of 4 Turn Handoff no docs found

Turn handoffs can now carry a memory_context, including a laptop-specific tag#

Handoffs between sessions can carry a memory_context, tagged for laptop sessions, and tracked in bug-report telemetry

Details 0 0 Feedback
memory_context

What

When work is handed off between sessions (for example between a laptop and another environment, a feature sometimes called "cowork"), the handoff can now carry extra memory information:

  • Handoff payloads can include an optional memory_context field alongside the existing relay_marker field.
  • If it's valid and not already used, it's attached to the handoff as a cowork_memory_context entry (with a version and content). If it's malformed or conflicts with something already present, it's logged and the handoff continues without it.
  • When the memory context is built for a laptop session specifically, it's tagged with leg: "laptop".
  • When you submit a bug report or feedback, the report's telemetry now includes a laptop_memory_rows_dropped count, tracking how many of these laptop-tagged memory context entries were stripped out of the transcript before the report was sent.

Why

This lets Claude Code carry richer memory context across a handoff between devices while keeping track of, and excluding, laptop-specific memory data from bug reports so it isn't sent along 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
Useful3 Signal2
Group of 2 Telemetry

OpenTelemetry header helper: prefetching and failure warnings#

Claude Code now prefetches your custom OpenTelemetry header helper for HTTP exporters and warns you if it fails

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

Details 0 0 Feedback
/status

What

  • For OpenTelemetry (OTel, a standard for exporting telemetry data) exporters using HTTP-based protocols (http/json or http/protobuf), a user-configured otelHeadersHelper is now prefetched once per process to prime its cache, instead of being fetched lazily on the first request.
  • If otelHeadersHelper fails, Claude Code now shows a dismissible warning notification (visible for 30 seconds) telling you that telemetry is not being exported and to check /status for details.

Why

Prefetching avoids a delay on the first telemetry request, and the new warning makes it clear when your custom header helper is broken instead of silently dropping telemetry exports.

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

Artifact republish no longer re-asks when it's routine#

Redeploying an Artifact that was already published routinely skips the confirmation prompt, tracked via routineRepublishedPaths

Details 0 0 Feedback

What

  • Publishing an Artifact now checks the Artifact's type-lock and capabilities before deciding whether to prompt for confirmation, and denies publishing a contract or type change once an Artifact is type-locked.
  • A new routineRepublishedPaths set and a routineUnasked flag track when a redeploy of the same path was already routine, so Claude Code doesn't ask for confirmation again for it.
  • This routineUnasked state is checked per path on frameUrls and is stamped onto both app state and the tool's returned data when it applies.

Why

This avoids repeatedly asking for confirmation when republishing an Artifact that's already been routinely republished, while still protecting against unexpected type changes on a locked Artifact.

Improved
You'll notice
Useful2 Signal2
Group of 4 Bash Tool

A read-only Bash restriction for 'coordinator' sessions is built but disabled#

Code exists to restrict a 'coordinator' role's Bash calls to verified read-only commands, but it's currently hardcoded off

Details 0 0 Feedback

What

New, currently inactive code restricts Bash tool calls made by "the coordinator" role (an agent run without a remote call or agent ID):

  • Such a call must be verifiably read-only and must stay in the current working directory, checked using an AST-based (syntax-aware) command classifier.
  • It may only pass command, description, and timeout — options like run_in_background, cd, pushd/popd, chdir, or sandbox bypass are not allowed.
  • Anything that doesn't qualify is refused (or routed to an "ask" confirmation) with an explicit message saying it must instead be run from a worker.
  • A related tool-list filtering branch was also added to restrict which tools a coordinator can even see.

All of this is controlled by a single gate function that is currently hardcoded to always return false, so none of the new restriction logic actually runs yet in this build.

Why

This appears to be preparatory work for separating a "coordinator" role (which would be limited to safe, read-only Bash commands) from "worker" roles that can do more. Since the gate is off, it has no effect on current behavior 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
Reminders

Reminders can now carry attached media, not just text#

System reminders inserted into a conversation can now include attached media, not just text

Details 0 0 Feedback
What

Reminders — short system-generated notes inserted into the conversation, either attached to something the user typed or as their own standalone message — can now carry a media array of attachments alongside their text.

Why

This allows reminders to include images or other media content rather than being limited to plain 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
Useful3 Signal2
MCP

New MCP connection failure diagnostics: error_code enum surfaced to hosts#

MCP server connection failures now report a specific error code explaining why

Details 0 0 Feedback
error_code
What

When a connection to an MCP server (Model Context Protocol, used to connect Claude Code to external tools and data) fails, the status output now includes an error_code field giving a specific reason, such as a rejected claude.ai login token, a rejected first-party Anthropic credential, or a connection that's pending approval.

Why

This makes it clear why an MCP connection is failing, such as needing to sign in again, instead of just showing a generic failure with no 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
Useful3 Signal2
Artifacts

Artifact write auto-approval for routine, private, own-org writes#

Routine, private writes to your own org's artifacts can now skip the approval prompt

Details 0 0 Feedback
What

Claude Code's permission logic for writing to artifacts (files or outputs Claude creates) has a new automatic-approval path. A write is now approved without asking the user when all of the following are true:

  • it's a routine write
  • the artifact is not public
  • the caller already has write access
  • the write wasn't invited by another organization

This applies even when the turn wasn't started by a human.

Why

This cuts down on unnecessary approval prompts for writes that are low-risk and entirely within the user's own organization, while writes involving other organizations or public artifacts still go through the normal ask path.

Improved
You'll notice
Useful3 Signal2
Models

Offline/fallback model catalog switches ccr/ccd default model from Sonnet 4.6 to claude-opus-5#

Fallback model list now defaults 'ccr' and 'ccd' to claude-opus-5 instead of Sonnet 4.6 when the live catalog is unreachable

Details 0 0 Feedback
claude-opus-5
What

Claude Code ships a signed, static backup list of models to use if it can't fetch the live model catalog. In this release, the default model for two of the listed surfaces, 'ccr' and 'ccd', changed from claude-sonnet-4-6 to claude-opus-5. The 'cc' surface entry was already set to claude-opus-5 and is unchanged.

Why

If Claude Code ever falls back to this offline catalog, users on the 'ccr' and 'ccd' surfaces will now get claude-opus-5 by default instead of claude-sonnet-4-6.

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
Artifacts

Cross-organization artifact reads now tracked and flagged as untrusted input#

Content read from another organization's artifact is now explicitly flagged as untrusted

Details 0 0 Feedback
What

Claude Code now tracks, per tool use, whether the user has consented to reading artifacts belonging to another organization. When content from such an artifact (either shared directly from another organization, or a public artifact from outside the user's organization) is included, it's now given an explicit warning label instructing that it be treated as untrusted input.

Why

This reduces the risk of content from outside an organization being treated as trustworthy instructions or data by default, similar to how other external content is already handled.

Improved
You'll notice
Useful2 Signal2
Sandbox

Working-directory anchors now support multiple session working directories, not just one#

Path validation for publishing and reading artifacts now accounts for multiple session working directories, not just one

Details 0 0 Feedback
What

Claude Code validates file paths against a set of allowed "anchor" locations, such as the current working directory, when checking where artifacts can be published or read from. Previously this logic assumed a single working directory plus a scratchpad. It now works from a general list that also includes any additional configured working directories, each labeled by kind (cwd, dir, or scratchpad). Error messages about disallowed paths now list all of the session's working directories instead of just one.

Why

Sessions that work across more than one directory get accurate validation and clearer error messages instead of being checked against only a single assumed location.

Improved
You'll notice
Useful2 Signal2
Project Config

Project-scope MCP server and scheduled-task edits blocked under --project-config-root#

Sessions started with --project-config-root can no longer edit project-scope MCP servers or create durable scheduled tasks

Details 0 0 Feedback
What

When a session is started with the --project-config-root flag, Claude Code now blocks two things:

  • adding or removing project-scope MCP servers (connections to Model Context Protocol tool servers)
  • creating durable scheduled tasks

Both now throw an error directing the user to use the local or user scope instead.

Why

This prevents project-scope changes that wouldn't make sense or wouldn't be reliably saved when the session's project config root has been overridden, pointing users to a scope that will work correctly instead.

Related

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

Improved
You'll notice
Useful2 Signal2
Sandbox

Sandboxed shebang/interpreter reach-checking now understands per-interpreter safe-flag grammars#

Sandbox checks now recognize safe argument flags for many more scripting-language interpreters

Details 0 0 Feedback
What

When Claude Code's sandbox checks whether a script invoked via a shebang line (the #!/usr/bin/... line that names an interpreter) is safe to run, it now uses a large table of argument grammars specific to each interpreter, including bash, dash, zsh, node, Rscript, osascript, fish, tclsh, wish, python, perl, ruby, awk, sed, php, csh, expect, and make. Previously this check was simpler and less permissive.

Why

Scripts that invoke a recognized interpreter with known-safe flags can now be judged safe more accurately, rather than being treated conservatively across the board.

Improved
You'll notice
Useful2 Signal2
Permissions

Security hardening for git/ssh URL credential and host obfuscation#

Claude Code now detects hidden or spoofed hosts in git/ssh/http(s) URLs and redacts credentials from them

Details 0 0 Feedback
What

A set of new URL-parsing checks now looks for tricks that can hide or spoof the real destination of a git or ssh URL, such as a percent-encoded '@' (%40), a backslash, or IPv6-bracket formatting used to disguise the host. These checks feed into two things: redacting any embedded credentials before a URL is shown, and deciding whether a URL should be trusted.

Why

Malicious repositories or links sometimes disguise a URL so it looks like it points to a trusted host when it actually points somewhere else, potentially exposing credentials. This hardens Claude Code against that kind of spoofing.

Improved
You'll notice
Useful2 Signal2
Artifacts

New cross-organization restriction on copying artifact files during publish#

Publishing an artifact now blocks copying files from another organization's artifact unless ownership is confirmed

Details 0 0 Feedback
What

When publishing an artifact that copies files from another artifact via a files map, Claude Code now checks whether the source artifact belongs to a different organization. If it does and that ownership can't be confirmed, the whole publish is rejected with a new error. Separately, publishing is now explicitly denied outright when the destination artifact itself belongs to a different organization.

Why

This closes off a way that content could be copied across organization boundaries without proper ownership checks, protecting artifacts from being published into or sourced from an organization that shouldn't have access to them.

Improved
You'll notice
Useful2 Signal2
Permissions

Path checks for local-dir/owner-repo args now detect network-location symlinks#

Directory and repo path arguments are now checked for symlinks that sneak in a network location

Details 0 0 Feedback
What

When Claude Code is given a path as a local-directory or owner/repo argument and needs to check it (via stat), it now does more validation first:

  • It outright rejects Windows device-namespace paths (those starting with \\?\ or \\.\), since these can't be safely checked for symlinks
  • For other paths, it walks the chain of symlinks (the ancestry of links) to see if the path passes through a symlink pointing to a network location, or to a link target that can't be read

If either case is found, it refuses the path with a specific error instead of proceeding.

Why

A symlink pointing to a network location could let a path argument silently redirect Claude Code to read from or interact with a remote location instead of the local one you intended. Rejecting these cases up front avoids that kind of surprise redirection.

Improved
You'll notice
Useful2 Signal2
Subagents

In-process ('script') tool calls can now trigger fork-agent availability and get plan/dontAsk fork restrictions#

Forking a subagent from an in-process tool call is now blocked in plan and dontAsk permission modes

Details 0 0 Feedback
What

When a subagent (a secondary Claude instance handling part of a task) is launched from an in-process, tool-triggered call rather than a direct user action, Claude Code now checks the parent's permission mode. If the parent is in plan mode or dontAsk mode, forking a new agent is refused with a message explaining that the fork would otherwise run without the parent's restriction, and suggesting starting a fresh context instead.

Why

This closes a gap where a tool-triggered fork could bypass the stricter permission restrictions of plan or dontAsk mode, since a forked agent wasn't previously bound by the mode its parent was running under.

Improved
You'll notice
Useful2 Signal2
REPL

REPL sandbox now scopes filesystem-looking strings to workspace roots instead of scanning code for imports#

REPL sandbox check now matches file paths against workspace roots instead of scanning code for import statements

Details 0 0 Feedback
What

A helper function used by the REPL (the interactive code-execution environment) sandbox no longer inspects input as JavaScript looking for require/import-style statements to block with a "sealed vm context" error. Instead, it treats the input as a file path: it expands $HOME or ~ prefixes, normalizes the path, and checks whether it falls under one of the configured workspace roots, returning true or false instead of throwing an error.

Why

This changes the sandbox's filtering from code-pattern detection to path-based scoping, which is a more direct way to decide whether a given path is inside allowed workspace boundaries.

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
Slash Commands unclear

Skill/command execution now restricted to composer or bridge message origins#

Skills and slash commands now only run when triggered from the composer or a bridge message

Unclear The finding does not say what other origins previously could trigger execution or what the placeholder text says.

Details 0 0 Feedback
What

Running a command (command.run) or a skill (skill.prompt) now checks where the request came from. It only actually executes if it originates from the composer (the message input box) or a bridge message; otherwise it returns a placeholder message instead of running.

Why

This restricts skill and command execution to trusted origins, preventing them from being triggered from other, less expected sources.

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

plugin.command.run character-limit check silently removed#

Plugin command.run no longer rejects overly long arguments, only logs their length

Details 0 0 Feedback
command.run
What

The check that runs before a plugin's command.run operation executes used to reject the call with an error if its arguments exceeded a maximum length. That rejection has been removed: the check now only records the argument length for telemetry (internal usage tracking) and always allows the call to proceed.

Why

Plugin commands with very long arguments that would previously have been blocked can now run instead, since the length limit is no longer enforced, only measured.

Improved
You'll notice
Useful3 Signal1
Auth

Gateway sign-out now revokes OAuth tokens on the gateway#

Signing out now revokes your OAuth tokens on the gateway server, not just locally

Details 0 0 Feedback
What

When you sign out of a gateway (a login/authentication server Claude Code connects through), Claude Code now tries to revoke both your session token and, if present, your identity provider's refresh token directly on the gateway. It finds the right endpoint to call by looking up the gateway's .well-known/oauth-authorization-server metadata. If that lookup or the revocation call fails, Claude Code logs the failure and falls back to simply ending the session on your local machine.

Why

Previously, signing out only cleared credentials locally, so a stolen or leaked token could potentially still be used elsewhere. Actively revoking the tokens on the server closes that gap when the gateway supports 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 Artifacts

Artifact reads now include Share menu access details#

Reading an artifact you own now returns who can access it via the Share menu, including external sharing and invite status

Details 0 0 Feedback

What

  • When reading an artifact as its owner, the response can now include a shareMenu object listing which read access modes are assignable, plus optional externalSharing and externalInvites flags, derived from permission data.
  • For owner-role artifacts that aren't type-locked and have a share menu, Claude Code now appends a descriptive text summary to the artifact's audience description, phrased like "(from the page's Share menu the user's plan and organization allow: ...)", noting whether a public link is unavailable and whether external email invites are turned on or off.

Why

This surfaces sharing and access permissions directly when reading an artifact, so it's clear who can see or be invited to it without checking the Share menu separately.

Improved
You'll notice
Useful2 Signal1
Group of 3 Artifacts

Artifacts support uploading multiple files at once#

A new asset_uploads (plural) feature lets Artifacts upload several files in one batch, with per-file results and a summary view

Details 0 0 Feedback

What

  • A new asset_uploads result type (alongside the existing singular asset_upload) supports uploading multiple files in one batch.
  • Each file in the batch is reported individually as uploaded (with id, url, size, content type, and sha256), failed, or not attempted, with a reason/message and an optional may_be_stored flag.
  • The UI now shows a summary line like "uploaded N of M files" followed by a per-file status list showing the URL, "not attempted", or "failed" for each file.
  • A new asset_uploads permission-scope entry was added alongside the existing singular asset_upload scope.

Why

This lets Artifacts upload several files in a single operation with clear per-file feedback, instead of requiring one upload call and result per file.

Improved
You'll notice
Useful2 Signal1
Group of 2 MCP

claude.ai MCP server fetch now includes additional installs, with fallback#

Claude Code now fetches 'additional install' MCP servers from claude.ai and falls back gracefully if that request is refused

Details 0 0 Feedback

What

The fetch of MCP (Model Context Protocol) servers hosted on claude.ai now requests include_additional_installs=true. Entries flagged as an additional install are collected separately, sorted by creation time, and appended after the primary de-duplicated list. If the extended request fails with certain errors, Claude Code retries once against the plain endpoint (without additional installs) without using up a full attempt from the normal retry budget, and logs a telemetry reason for the fallback.

Why

This surfaces MCP servers that were installed as extras and weren't previously shown, while keeping server fetching resilient if the new request parameter isn't supported.

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

File-tracking gains explicit written/removed lists, including content-hash pins for artifacts#

Artifact and design-system save operations now report which files were written or removed, with artifacts also tracked by content hash

Unclear What the gating condition controls, and when files_written/files_removed appear versus not, isn't stated.

Details 0 0 Feedback

What

  • Artifact publish, read, and list results now feed a new tracking system that records each file's path, sha256 content hash, and version as a "pin," tagged with where it came from (publish, list, or read). These pins are stored in a pathPins map that persists across conversation restore.
  • Design-system save operations gained a matching files_written (path + sha256) and files_removed (path) schema block in their response.

Why This lets Claude Code know exactly which files a publish or save actually touched, including their content hashes, instead of only knowing that "a save happened," making it possible to detect stale or unchanged files reliably.

Improved
You'll notice
Useful2 Signal1
Group of 2 Artifacts

list_types flags Docs artifact types that can't be filled#

Artifact type listings now note when a Docs-connector type can't be filled because Claude Docs isn't connected

Details 0 0 Feedback

What

The artifact list_types output now includes a docs_unfillable field, set when the results include a Claude Docs-backed artifact type but the Claude Docs connector isn't attached to the current session. When this happens, the response appends an explanatory line to the type-list summary telling the user why that type can't be used.

Why

This avoids confusion where a Docs-based artifact type shows up as available but silently fails, by explaining upfront that the Docs connector needs to be attached first.

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

Queued notifications now require a remote connection to deliver#

Queued notification messages are relayed through Remote Control but get dropped with a warning if there's no remote transport to route them to

Details 0 0 Feedback

What

  • The Remote Control REPL bridge now relays queued notifications into the app during a bridge session, using the same handler as before.
  • An incoming queued_notification control message is now dropped (and not acknowledged) unless the session is using a remote transport, logging a warning and recording a new telemetry reason.
  • The warning text shown when a queued notification has nowhere to go was reworded from referencing "remote mode" to referencing a missing "ingress host".

Why

This ensures queued notifications are only delivered when there's an actual remote connection able to receive them, and makes the failure message clearer about why a notification was dropped.

Improved
You'll notice
Useful2 Signal1
Group of 5 Auth

Gateway login adds an account-confirmation step and safer OAuth revocation#

Enterprise gateway sign-in now confirms your account before applying org settings, and revokes tokens more safely on sign-out

Details 0 0 Feedback

What

  • Signing in through a custom or enterprise login gateway now shows a new "confirm account" step after sign-in completes: it displays the signed-in (truncated) email and asks you to confirm it's the right account, with "Yes, continue"/"No, go back" options, before organization settings are applied to the machine; Escape is blocked while it's saving.
  • OAuth discovery now checks that an advertised revocation_endpoint is on the same origin as the gateway URL before trusting it; otherwise it's ignored and a warning is logged, meaning sign-out won't revoke the token in that case.
  • When a valid revocation_endpoint is advertised, it's now stored on the persisted auth record along with the account's email, and sign-out sends an RFC 7009 revocation request for the bearer token (and the refresh token if one was issued). Accounts that signed in before this existed get their metadata re-checked so revocation still works for them. A new PROJECTS_SCOPES_REGISTERED OAuth scope flag is also tracked, alongside the existing plugins scope flag.

Why

This reduces the chance of applying an organization's settings to the wrong account, and makes sign-out actually invalidate tokens with the identity provider instead of just discarding them locally, while guarding against a malicious or misconfigured revocation endpoint.

Improved
You'll notice
Useful2 Signal1
Group of 3 Skills

Warning when editing a SKILL.md file that won't actually save#

Editing a skill file inside the synced-skills folder now warns Claude and the user that the change may not be saved

Details 0 0 Feedback
SKILL.md

What

When Claude edits or writes a SKILL.md file, the Edit and Write tool results now include a syncedSkillNext field with guidance whenever that file sits in the folder that holds synced copies of the user's account skills. Edits made directly in that folder aren't actually saved and can be overwritten the next time skills sync, so the guidance tells Claude to instead use a save tool, call a propose tool, send the file to the user to save manually, or, if none of those are available, tell the user the change wasn't saved.

Why

This stops silent data loss: without it, an edit to a synced skill file could look successful but disappear on the next sync.

Improved
You'll notice
Useful2 Signal1
Group of 4 Remote Control no docs found

Remote worker sessions gain sender attestation checks#

Remote/hosted worker sessions now verify caller attestation and report a new 'unattested_request' outcome when it fails

Details 0 0 Feedback
unattested_request

What

  • Remote/hosted-worker session transport now tracks a workerAttestationPolicy, set via a new setWorkerAttestationPolicySink callback, and reacts when that policy reports a fault.
  • A new unattested_request outcome was added: it appears in tool-call outcome tracking alongside unknown_call, no_approval, stale, queue_full, rate_limited, and duplicate_call, and is shown to users in Remote Control/device-linking error explanations when a machine's account requires sender attestation that the service couldn't verify.
  • The method that judges inbound session-channel frames (renamed from dropsUnverifiedSessionChannelFrame to sessionChannelFloorVerdict) now returns one of three outcomes, "passed", "dropped", or "refusal_rebuilt", instead of a plain true/false, and a new judgeInboundFrame step classifies frames against the attestation policy.

Why

This adds a way to detect and reject remote tool calls or session frames that can't be verified as coming from an attested sender, surfacing a clear reason instead of failing silently or ambiguously.

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

New ip_restricted error reason for IP-allowlist rejections#

Requests blocked by an org's IP allowlist now surface a distinct ip_restricted error instead of a generic failure

Details 0 0 Feedback

What

A new error reason, ip_restricted, was added alongside the existing not_permitted and lane_unavailable reasons in the map from internal error reasons to a public credential-scope error code. It now also appears specifically when a model catalog fetch fails because an organization's IP allowlist rejected the request (HTTP 403 with code ip_not_in_allowed_range), with its own log message and telemetry off_reason, distinguishing it from the prior two failure reasons.

Why

This lets users and logs distinguish being blocked by an organization's IP allowlist from other credential or availability failures, making it clearer what needs to be fixed.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Audio playback: per-session play-count cap removed, only concurrency cap remains#

Audio playback no longer caps the total number of plays per session, only how many can play at once

Details 0 0 Feedback
What

The $.audio.play helper used to enforce two limits: a total number of plays allowed per session, and a limit on how many sounds could play at the same time. The per-session total-plays cap has been removed, along with its internal tracking. Only the concurrent-plays limit remains.

Why

Sounds that were previously refused after a session played too many of them will now keep playing, as long as too many aren't overlapping at once.

Related

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

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact listing now merges externally-shared artifacts from a second source#

Artifact listings now also include artifacts shared with you from an external source, merged with your own

Details 0 0 Feedback
What

When Claude Code lists artifacts, it now also queries a second source of externally-shared artifacts (unless the listing scope is explicitly "mine") and merges those results in, marked as shared and external, with duplicates by slug removed. Whether the listing was truncated now also accounts for this second source running out of results.

Why

This lets artifact listings surface artifacts that were shared with you from outside your own set, rather than only your own artifacts.

Improved
You'll notice
Useful2 Signal1
Artifacts

Docs artifact type now requires the first-party Claude Docs connector#

The 'Docs' artifact type now requires the first-party Claude Docs connector to be attached

Details 0 0 Feedback
What

Claude Code now blocks use of the 'Docs' artifact type unless the first-party Claude Docs connector is attached to the session. If it isn't attached, Claude is shown a message telling it to create a page instead of starting from that type.

Why

The Docs artifact type only works when it can pull content through the Claude Docs connector, so this check stops Claude from attempting something that would fail and steers it toward a working alternative instead.

Improved
You'll notice
Useful2 Signal1
Telemetry

otelHeadersHelper failures are now typed and telemetered#

otelHeadersHelper failures now carry a specific error type and are reported to telemetry

Details 0 0 Feedback
otelHeadersHelper
What

When otelHeadersHelper (a user-supplied command that generates rotating OpenTelemetry headers) fails, Claude Code now records exactly why. Errors are classified into one of eight kinds: timeout, bad exit code, killed, failed to spawn, empty output, invalid JSON, output that isn't an object, or a non-string value inside it. Each failure is reported through a new event, tengu_otel_headers_helper_failed, that includes the failure kind and exit code, and is also broadcast so anything watching can react to it. The helper is now also fetched in the background ahead of time rather than only on demand.

Why

This makes it much easier to diagnose why a custom OpenTelemetry header command isn't working, since the failure is now categorized instead of surfacing as a generic error.

Related

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

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact sharing-level explanations added for publish/present flows#

Claude can now explain an artifact's exact sharing level in detail when asked

Details 0 0 Feedback
What

A new function generates a detailed, role-specific explanation of an artifact's sharing state, whether it's private, shared within an organization, shared with specific people, or public via a link, or unknown. Claude is instructed to relay this explanation to the user when relevant, and each explanation ends with a reminder that Claude cannot change the sharing setting itself, that has to be done from the page's Share menu.

Why

This lets Claude give a clear, accurate answer when asked who can see a shared artifact, while making clear it can't act as a substitute for the Share menu.

Improved
You'll notice
Useful2 Signal1
Artifacts

Live artifact version notifications now tracked per-agent#

Notifications about a newer live artifact version are now tracked per agent, not just once overall

Details 0 0 Feedback
What

Previously, Claude Code tracked whether a user or agent had been told about a newer live version of an artifact with a single yes/no flag per artifact. Now it tracks a set of agent IDs that have already been told, so when multiple teammates or agents are working concurrently, each one gets notified independently about the same version update instead of only the first one. A new telemetry signal also fires when a reported version appears to be ahead of the local clock.

Why

This fixes a case where, in a session with multiple concurrent agents, only the first agent to see a live artifact update would be told about it, leaving the others unaware.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Self-hosted runner: some context-source repos may now be exempt from silent skip-on-not-found#

Self-hosted runners now check a per-source "required" setting before silently skipping missing context repos

Details 0 0 Feedback
What

When the self-hosted runner encounters a problem with a context-source repository, such as a missing branch reference, a failed checkout hook, or an access-denied error, it decides whether to silently skip that source or treat it as an error. Previously this decision was based only on whether the source had a matching entry in push_targets. Now it also checks whether that source is explicitly marked as required; sources marked this way are no longer silently skipped.

Why

This means a repo that's genuinely needed for the run will now surface a problem instead of being quietly ignored, while other context sources can still be skipped as before.

Related

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

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact comment threads gain an "outside your organization" access note and reply lockout#

Artifact comment threads now flag out-of-organization participants and block Claude from replying on their behalf

Details 0 0 Feedback
What

When Claude Code processes comment threads on an artifact or document, it now tracks a second set of accounts representing organization membership. When a commenter is marked as "outside your organization," the access explanation now clarifies that this means the server recorded that person as invited from another organization. Additionally, when a thread is flagged this way, Claude is instructed not to reply to or resolve the thread directly; instead it must answer within the session and tell the user the answer can't be posted to the thread from there.

Why

This prevents Claude from acting on comment threads involving people outside the organization in ways that might not be appropriate, while still letting the user get an answer through the session itself.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact publish results can now nudge the model to preview before publishing#

Artifact publish results can now prompt the model to preview a file before it goes live

Details 0 0 Feedback
What

Artifact publish results can now include a previewHint flag. When set, the result text tells the model that the file hasn't been previewed yet this session, and suggests using the preview action to catch layout or loading problems before viewers see them, since certain capability calls only work once the artifact is actually published.

Why

This nudges the model to check its work with a preview before publishing, reducing the chance that broken layouts or load errors reach an artifact's viewers.

Improved
You'll notice
Useful2 Signal1
Artifacts

New cross-organization warning label on Artifacts#

Artifacts from another organization now get an explicit untrusted-content warning shown to the model

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

Details 0 0 Feedback
What

When an Artifact (a generated file or piece of content shown alongside a conversation) belongs to a different organization than the current user, or is a public artifact from outside the user's organization, Claude Code now appends a bracketed warning to its description: that it belongs to another organization and its content should be treated as untrusted input.

Why

This tells the model explicitly not to blindly trust content in cross-organization artifacts, reducing the risk that instructions or data embedded in someone else's artifact get treated as trustworthy by mistake.

Improved
You'll notice
Useful2 Signal1
Sandbox

Sandbox/BYOC git helper hard-disables SSH when GIT_ALLOW_PROTOCOL=none#

Git subprocesses now fully block SSH when GIT_ALLOW_PROTOCOL is set to 'none', closing a bypass

Details 0 0 Feedback
What

When Claude Code's sandbox or BYOC (bring-your-own-cloud) git helper sets GIT_ALLOW_PROTOCOL to "none" to disable git network protocols, it now also adds extra git arguments and forces GIT_SSH_COMMAND to "false".

Why

Previously, setting GIT_ALLOW_PROTOCOL to "none" didn't fully stop git from still reaching out over SSH, leaving an apparent bypass of the protocol restriction. This closes that gap so disabling git protocols actually blocks SSH access too.

Improved
You'll notice
Useful2 Signal1
MCP

MCP/connector name resolution in Artifacts pages gets fuzzy-match suggestions#

Artifact pages now get a fuzzy-match suggestion when a connector name in the manifest doesn't match any session connector

Details 0 0 Feedback
What

When an Artifact's page manifest (page.json) references an MCP connector name that doesn't match any connector actually available in the session, Claude Code now searches for the closest matching name and includes it as a suggestion in the warning message, instead of just reporting a failure.

Why

This helps developers building Artifact pages quickly spot and fix typos or naming mismatches in connector references, since the warning now points toward the exact spelling that viewers expect.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Multi-file reads now set aside files protected by edit-safety rules#

Multi-file reads now split out files protected by edit-safety rules to read them individually

Details 0 0 Feedback
What

When reading multiple files at once, Claude Code now checks each file against its file-edit safety rules, which protect things like git internals, hooks, tool and agent settings, and shell profile files. Files that match these protections, have suspicious names, or are links pointing outside the working scratchpad are set aside and read one at a time instead of being bulk-read with the rest.

Why

This keeps sensitive or unusual files from being silently swept into a bulk read, ensuring they get individual handling consistent with the same rules that already protect them from unsafe edits.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Usage-limit check can now be answered from a locally cached snapshot instead of hitting the endpoint#

Checking your usage limit can now be answered from a recent cached value instead of a network request

Details 0 0 Feedback
What

Before checking how much of your usage limit you've used, Claude Code now first looks at a recently cached local snapshot. If that snapshot is less than 60 seconds old and no newer usage information has come in since, it answers from that cached value and skips calling the server entirely, logging a message noting how old the snapshot was.

Why

This avoids unnecessary network requests when the usage information is already known to be fresh, making usage checks faster and lighter without affecting accuracy.

Improved
You'll notice
Useful2 Signal1
Terminal Rendering

Ink renderer now holds frames back when stdout output is backlogged#

Terminal UI now delays drawing new frames when output to the terminal is backed up

Details 0 0 Feedback
What

The terminal interface's frame-pacing logic now checks how much output is still queued to be written to the terminal. If that backlog gets too large, it holds off scheduling the next frame and retries after a short delay, instead of always redrawing on a fixed time schedule regardless of how much output is waiting.

Why

This should prevent the terminal display from piling up redraw work when output is already struggling to keep up, keeping the interface more responsive during heavy output.

Related

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

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact 'shared from another organization' text now distinguishes writer role#

The warning for artifacts shared from outside your org now says specifically if you can edit them

Details 0 0 Feedback
What

When Claude explains that an artifact (a file or piece of content Claude created and shared) came from a different organization, the message now tells you more precisely what kind of access you have. If you have write access, the message now says so explicitly, calling out that the content is untrusted third-party content authored outside your org, rather than using a generic label that didn't distinguish writers from viewers.

Why

Knowing whether you can only view or also edit an externally-sourced artifact helps you judge how much to trust it and what risk comes with it, since content from outside your organization should be treated as untrusted.

Improved
You'll notice
Useful2 Signal1
Plugins

Plugin dependency install refuses to run bun when a bunfig.toml is present#

Plugin dependency installer now refuses to run bun if a bunfig.toml file is found

Details 0 0 Feedback
bunfig.toml
What

When Claude Code installs a plugin's dependencies, it used to just run bun install. Now, before doing that, it checks whether a bunfig.toml configuration file sits next to the lockfile. If it finds one, it skips the install entirely and shows an explicit security message instead of running bun.

Why

A bunfig.toml file can load and run code during installation through bun's install.security scanner feature. Since a plugin's dependency folder could contain a bunfig.toml crafted by someone else, running bun automatically could execute unexpected code. Skipping the install in that case avoids running code you didn't ask for.

Improved
You'll notice
Useful2 Signal1
Remote Control no docs found unclear

Bridge REPL can relay a queued notification from another session as a user frame#

The bridge REPL can now relay a queued notification from another session as if it were that session's own message

Unclear The finding does not say what produces a queued_notification message or what user-visible effect the relayed message has.

Details 0 0 Feedback
queued_notification
What

The bridge (a communication channel used by the REPL, or interactive command loop) now recognizes a new incoming message type called queued_notification. When one arrives, it is re-delivered as if it were a regular user message belonging to the other session it references. If no notification buffer is configured to hold it, the message is instead logged and dropped.

Why

This allows notifications generated in one session to be surfaced inside another session's conversation flow, rather than being lost when there's nowhere to route 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
Chat UI

Message restore/edit can now merge drafts from multiple prior messages#

Restoring a message draft can now merge in drafts from several earlier messages at once

Details 0 0 Feedback
What

The function that restores a message's draft (restoreMessageSync) now accepts an optional list of extra messages. When provided, it rebuilds the draft's text and any pasted content from all of those messages combined with the target message, and concatenates their text together, instead of restoring only a single message's draft.

Why

This allows a restored draft to combine content from multiple prior messages at once, rather than being limited to whichever single message is being restored.

Related

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

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact URL 'update in place' now allows granted editors, not just owners#

Artifact 'update in place' now works for editors given write access, not just the owner

Details 0 0 Feedback
What

When updating an artifact in place using its url, the tool used to require that the artifact belong to the user. Now it also accepts an artifact the user was merely given edit access to, shown internally as the 'writer' role.

Why

This means artifacts shared with edit permission can be updated by the person they were shared with, not only by whoever originally created them.

Improved
You'll notice
Useful2 Signal1
Hooks

Hooks modules must now be 'named like code'#

Plugin hook modules must now use a recognized code file extension or they won't load

Details 0 0 Feedback
hooks.json
What

For plugins, the module field in hooks.json (the file that registers a plugin's hooks, which are scripts that run at specific points in Claude Code) must now point to a file with a recognized code file extension, and every file it imports from the plugin must too. Files with other extensions are rejected and simply not loaded, and a specific error message now lists which extensions are valid.

Why

This catches misconfigured or mistyped plugin hook files early, with a clear error instead of a silent failure to load.

Related

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

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact styling instructions differ when fonts are already on disk#

Artifact styling instructions now check for fonts already on disk before telling Claude to fetch them

Details 0 0 Feedback
What

When Claude Code prepares styling instructions for building an artifact (a generated file such as a webpage), it now checks whether any of the system's files look like font files. If so, the instructions say fonts are already on disk and explicitly forbid fetching fonts from named web addresses. Otherwise, it keeps the previous instruction to obtain font files only through the Artifact tool.

Why

This avoids telling Claude to fetch fonts from the internet when suitable font files are already available locally, which should make artifact styling more reliable when fonts are already present.

Improved
You'll notice
Useful2 Signal1
Plugins

GitHub-shorthand normalization applied when adding a marketplace from a git URL#

Adding a marketplace from a GitHub git URL now normalizes it to GitHub shorthand form

Details 0 0 Feedback
What

When adding a plugin marketplace, a new helper now normalizes the source entry: if the source type is github, it normalizes the repository string; if the source type is git and the URL actually points to a GitHub repository, it rewrites the entry to use source: "github" with the shorthand repo name instead of keeping it as a raw git URL.

Why

This means marketplaces added by pasting a plain GitHub git URL get stored in the same normalized shorthand form as ones added directly as GitHub sources, keeping marketplace entries consistent regardless of how they were added.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Improved /desktop failure messages#

/desktop now gives clearer error messages when it can't open Claude Desktop

Details 0 0 Feedback
/desktop
What

The /desktop command (which continues the current session in the Claude Code Desktop app) now shows clearer error text when something goes wrong:

  • the too-old-version message is now shorter: "Claude Desktop ${version} is too old. Update to ${version} or later."
  • the open-failure message now states the specific reason and what to do next: "Couldn't open Claude Desktop (${detail}). Open Claude Desktop and run /desktop again."
Why

Instead of a generic failure, users now get a concrete reason and a clear next step when /desktop can't launch or connect to Claude Desktop.

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

CA-cert troubleshooting message now lists concrete env vars#

SSL certificate error message now lists the specific env var to check per tool

Details 0 0 Feedback
SSL_CERT_FILENODE_EXTRA_CA_CERTS
What

The TLS/certificate troubleshooting message now names the specific flag or environment variable relevant to each tool that might be involved in a certificate error: --cacert, SSL_CERT_FILE, NODE_EXTRA_CA_CERTS, REQUESTS_CA_BUNDLE, AWS_CA_BUNDLE, DENO_CERT, CARGO_HTTP_CAINFO, PIP_CERT, GIT_SSL_CAINFO, BUNDLE_SSL_CA_CERT, HEX_CACERTS_PATH, and NIX_SSL_CERT_FILE.

Why

Certificate errors can originate from many different tools (curl, Node, Python, Deno, Rust's cargo, git, Ruby's bundler, Elixir's hex, or Nix), each with its own way of pointing to a trusted certificate. Listing the exact variable for each makes it much faster to find and fix the right one instead of guessing.

Related

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

Improved
You'll notice
Useful2 Signal1
Auth

Gateway account email shown in status (non-demo)#

Status/diagnostics view now shows the gateway account's email when logged in via gateway, outside demo mode

Details 0 0 Feedback
What

When you're authenticated through 'gateway', the status or diagnostics view now also prints that gateway account's email address. This does not happen when running in demo mode.

Why

It makes it easier to confirm which account you're actually authenticated as when using a gateway login.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifacts gain 'external organization' sharing metadata#

Artifacts shared in from another organization now show that origin with dedicated metadata and UI text

Details 0 0 Feedback
What

Artifacts (generated files or outputs shared within Claude Code) now carry extra sharing metadata when shared in from outside your own organization: an external flag and a role on shared artifacts, a derived invitedByOtherOrg field, and an external_listed response flag. The interface now shows the text '(from another organization)' for artifacts shared this way.

Why

This makes it clear when an artifact you're viewing was shared in from a different organization than your own, rather than looking like it came from within your own org.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Module resolution now also tries .mts/.cts for .mjs/.cjs#

Import resolution now also tries .mts and .cts file extensions for .mjs and .cjs imports

Details 0 0 Feedback
.mts.cts
What

When resolving an import path, Claude Code's module resolver now also tries a .mts file if the import ends in .mjs, and a .cts file if it ends in .cjs. This joins the existing mapping that tries .tsx for a .jsx import.

Why

This lets imports resolve correctly to TypeScript source files (.mts, .cts) even when the import specifier uses the compiled JavaScript extension (.mjs, .cjs).

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact error messages distinguish cross-org shared/public artifacts#

Artifact error messages now distinguish public-outside-org artifacts from ones shared from another organization

Details 0 0 Feedback
What

When an artifact's publish target is gone or ownership needs to be described, Claude Code now separately identifies two cases: an artifact that is public but belongs to a different organization than the user's, versus one that was specifically shared with the user from another organization. For the latter, a new explanation is added noting that access may have been withdrawn by its owner.

Why

This gives clearer, more accurate error messages when an artifact becomes inaccessible, helping distinguish a general cross-organization visibility issue from a revoked share or lost edit access.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact asset copy_from now supports cross-org destinations with a retry probe#

Artifact copy_from now supports copying across organizations and retries once if the destination isn't found yet

Details 0 0 Feedback
What

The copy_from action, used to copy assets between artifacts, now supports copying across organizations in some cases. It checks organization membership and probe state to determine whether a cross-organization copy is allowed (crossOrgOk), and blocks the copy with a specific error if the destination artifact is outside the user's organization and not allowed. If the first copy attempt fails because the destination isn't found yet and hasn't been probed, Claude Code now automatically retries once with a fresh probe.

Why

This makes copying assets between artifacts more reliable when the destination artifact is newly created or not yet visible, while still enforcing organization boundaries where required.

Related

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

Improved
You'll notice
Useful2 Signal1
Artifacts

Quickstart flow now handles a missing Docs connector explicitly#

Artifact quickstart now explains clearly when no Claude Docs connector is attached

Details 0 0 Feedback
What

When starting a new artifact of type 'document' without a first-party Claude Docs connector attached to the session, Claude Code now shows a dedicated explanation that a Docs artifact can only be filled in through that connector, and suggests making a plain page instead. The general list of available artifact types also now notes this caveat, and adjusts its "No published Artifact types" message to "No other published Artifact types" when the Docs connector is the reason.

Why

This makes it clearer why a Docs-type artifact isn't available in a given session, instead of leaving the user to guess why that option is missing.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Scratchpad file uploads gain a dedicated font-file category and case-insensitive name collision check#

Scratchpad file uploads now have a separate font-file limit and block case-only duplicate names

Details 0 0 Feedback
What

When uploading files to the scratchpad (the attachment area for files you give Claude), fonts are now recognized as their own file category based on extension or content type. Fonts get their own byte-size and file-count limits (rejecting uploads with more than a set number of fonts), separate from the existing 8MB-per-file and total file-count caps that already applied to other files.

Uploads are also now checked for name collisions that differ only by letter case (after normalizing the filename); a file with the same name as an existing one except for capitalization is rejected.

Why

This prevents font uploads from silently exceeding size budgets meant for other file types, and stops uploads from creating two files whose names differ only by case, which can cause confusion or conflicts on case-insensitive filesystems.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Ripgrep spawn helper rewritten with streaming truncated buffers and richer failure handling#

Internal ripgrep process runner rewritten for streaming output and clearer failure types

Details 0 0 Feedback
What

The internal component that runs ripgrep (used to power search/grep) was rewritten. Output from the search process is now collected with a streaming buffer instead of simple string concatenation, there is a new error path for when writing to the process's input fails, and failures are now reported with distinct error types depending on the cause: file-not-found, an internal range error, or a generic spawn failure.

Why

This is mostly an internal reliability change. It should make search and grep failures more consistent and better labeled, though it is largely invisible to end users beyond clearer error messages when something goes wrong.

Improved
You'll notice
Useful2 Signal1
Elsewhere

Worktree image-cache cleanup added to the retention sweep#

Stale image caches in git worktrees are now cleaned up during retention sweeps

Details 0 0 Feedback
What

Claude Code's periodic cleanup process now scans each session's git-worktree cache folders for old images subfolders and removes any older than a cutoff age. This replaces older, more generic placeholder cleanup logic, and the results (what was removed, and any errors) now show up in the same summary as the existing history and session cleanup.

Why

This keeps cached images from git worktrees from accumulating and taking up disk space indefinitely.

Improved
You'll notice
Useful2 Signal1
Elsewhere unclear

New 'script' activity indicator in tool-use summaries#

Turn summaries can now show a 'script' activity indicator alongside bash, read, and other categories

Unclear The finding does not say what condition triggers the 'script' indicator or what kind of activity it represents.

Details 0 0 Feedback
What

When Claude Code finishes a turn, it prints a short summary line of what happened (for example, how many files it read or shell commands it ran). That summary can now include a new 'script' category showing a 'working' indicator, alongside the existing bash, read, list, mcp (external tool connections), agent, and repl (interactive code execution) categories.

Why

This gives a more complete picture of what a turn actually did, so script-related activity shows up in the summary instead of being invisible.

Improved
You'll notice
Useful2 Signal1
Hooks

Hook-command relative-script risk detection greatly expanded#

Claude Code now detects many more ways a hook script could break if run from a different folder

Details 0 0 Feedback
What

Claude Code can warn when a hook (a shell command that runs automatically at certain points, configured via plugins or settings) implicitly depends on the folder it's launched from, which can make it fail when run elsewhere. This detection was substantially expanded:

  • it now strips hidden NUL bytes before decoding the script
  • it recognizes more shells: ash, ksh, mksh, rbash, and fish
  • it separates the shebang line (the #!/bin/... line that names the shell) from the rest of the script for more accurate analysis
  • it adds a check specific to the csh shell for set path = (...) lines that contain relative or . (current directory) entries
  • it detects relative file includes pulled in via make include or awk @include
Why

Hooks that quietly rely on the current working directory can fail unpredictably when Claude Code runs them from a different location. Catching more of these cases means more accurate warnings before a hook silently breaks.

Improved
You'll notice
Useful2 Signal1
Hooks

Large hook additionalContext entries can now be persisted to disk instead of truncated inline#

Oversized hook context is now saved to a file instead of being cut off

Details 0 0 Feedback
additionalContext
What

Hooks can return extra context text (additionalContext) that gets added to what the model sees. When a single hook's context text is too large for its allotted space, Claude Code now writes the full text to disk and passes along a reference to that file plus a truncated preview, instead of simply cutting the text short and discarding the rest.

Why

Previously oversized context was hard-truncated and the rest lost. Saving it to disk means the full content isn't discarded, even though only a preview is shown inline.

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
Message Queue unclear

New "prompts awaiting model" tracking surfaces queued-but-undelivered user input#

Claude Code now tracks queued messages that haven't reached the model yet, including ones queued behind the current one

Unclear The finding doesn't say whether or how this tracking is surfaced visually to the user beyond the internal state.

Details 0 0 Feedback
What

Claude Code now keeps track of prompts you've queued (typed and sent while a previous message was still being handled) that haven't actually reached the model yet. This tracking clears once the model starts responding to that prompt. A related addition tracks and can display the list of prompts queued up behind the one currently being processed.

Why

This groundwork lets Claude Code more accurately show you what's queued and waiting versus what's actually being worked on, reducing confusion about whether your queued input has been picked up 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
Useful2 Signal1
Auth

Logout now revokes/cleans up enterprise gateway auth state#

Logging out now also revokes and cleans up enterprise gateway authentication state

Details 0 0 Feedback
What

When logging out, if the current authentication method is an enterprise gateway, Claude Code now waits up to 5 seconds for any in-flight gateway calls to finish, invalidates the cached credentials, and looks up the stored gateway configuration to run a cleanup step on it before continuing with the rest of logout.

Why

This ensures logging out fully revokes enterprise gateway credentials instead of leaving stale gateway auth state behind, and avoids cutting off requests that were already in progress.

Improved
You'll notice
Useful2 Signal1
Terminal UI

New queued-notifications rendering UI with per-origin labeling#

Queued notifications now display with labels showing where each one came from

Details 0 0 Feedback
What

Queued notifications (messages waiting to be shown) now render with labels that identify their origin:

  • notifications from a GitHub webhook are labeled 'github'
  • notifications from a scheduled trigger are labeled 'scheduled trigger'
  • notifications from another Claude session sending a message are labeled 'claude session'

Each notification shows a summary, body text, and an 'inbound:' badge. When there are more notifications than can be shown, a footer reads 'more N notifications still queued'.

Why

This makes it easier to tell at a glance where an incoming notification came from and how many more are waiting, instead of seeing an undifferentiated list.

Improved
You'll notice
Useful2 Signal1
Artifacts

artifact read: falls back to reading it as a frozen artifact type link on a 404#

Reading an artifact that 404s now falls back to returning its type declaration if it's a frozen artifact type

Details 0 0 Feedback
What

When reading an artifact page or file returns a 404 (not found) error, Claude Code now checks whether the requested URL actually refers to a 'frozen artifact type' (an entry in a type catalog). If it does, it returns that type's declaration and instructions instead of just reporting the 404 as a failure. This applies to both the page read action and the single-file read_file action.

Why

This avoids a misleading failure when the URL was never a live artifact page in the first place but a reference to a known artifact type, giving useful information instead of a plain error.

Improved
You'll notice
Useful1 Signal1
Group of 2 Plugins

Claude Test plugin subagents get tighter tool restrictions and clearer naming#

The bundled Claude Test plugin's subagents gained explicit names, a stricter tool allowlist, and a clearer error message

Details 0 0 Feedback

What

  • The explorer subagent is now explicitly barred from the mcp__plugin_claude-test_browser__claude_test_allow MCP tool, on top of its existing Read/Grep/Glob-only restriction.
  • The author and runner subagent definitions both gained an explicit name field (author and runner respectively) in their frontmatter.
  • The runner's "browser helper not loaded yet" fallback message was replaced with a static, more actionable error that names a likely cause: a duplicate, non-built-in Claude Test plugin.

Why These changes make the plugin's subagents more predictable (the explorer can no longer reach a browser-allow tool it shouldn't need) and easier to identify and debug (explicit names, a clearer failure message) when something goes wrong.

Improved
You'll notice
Useful1 Signal1
Group of 3 Permissions

Permission decisions now record a separate decision_reason_code#

Permission-decision telemetry now includes a structured decision_reason_code alongside the existing reason text

Details 0 0 Feedback

What

When Claude Code makes a permission decision (allowing, denying, or asking about a tool use), it now records a new decision_reason_code field in its internal telemetry, in addition to the existing decision_reason/decision_reason_type fields.

  • The code is one of a closed set of values, including outside_reads_blocked (when permissions.blockReadsOutsideWorkingDirectories refused a path), memory_paused (triggered by /pause-memory), and classifier_transcript_too_long (when an auto-mode classifier's transcript exceeded the context window).
  • Permission-deny messages for file access outside the working directory now also include a blockedPath field naming the offending path.
  • Internally, the reason code and reason message are now produced by separate helper functions, splitting what used to be one derived value into a code plus a human-readable message.

Why

Splitting the reason into a stable code and a separate message makes it easier to reliably track and analyze why permission requests were denied or required confirmation, without depending on parsing free-form text.

Improved
You'll notice
Useful1 Signal1
Artifacts

Artifact type-reading tool output now reports whether the type file was actually read#

Artifact type tool output now shows whether the type file was actually read

Details 0 0 Feedback
What

When Claude Code displays the result of a tool call that reads an artifact's type, it now checks a new type_file field in the result. If present, it shows either "read <path> of artifact type" or "did not read <path> of artifact type", depending on whether the file was actually read.

Why

This gives a clearer, more honest account of whether the type information came from an actual file read or not.

Improved
You'll notice
Useful1 Signal1
Remote Control

Remote-control bridge clears post-turn summary/recap metadata when a new turn starts#

Remote Control clears the previous turn's summary and recap as soon as a new turn starts

Details 0 0 Feedback
What

When a session controlled remotely transitions into a "running" state (meaning a new turn has started), the bridge now proactively tells the remote client that the post_turn_summary and recap (the end-of-turn summary data shown after a turn finishes) are null, and runs an additional cleanup step.

Why

This prevents a remote client from continuing to show summary or recap information left over from the previous turn once a new turn has already begun.

Improved
You'll notice
Useful1 Signal1
Artifacts

db_read / db_write tool errors now carry richer diagnostic detail#

db_read and db_write tool errors now include extra diagnostic detail like error code, reason, and slug

Details 0 0 Feedback
What

When the artifacts db_read or db_write tool encounters an error, the error message shown now includes additional detail such as the error code, reason, and slug, rather than just passing along the server's raw error text.

Why

The extra context makes it easier to understand why a database read or write inside an artifact failed, instead of seeing only a generic server message.

Improved
You'll notice
Useful1 Signal1
Artifacts

Publish responses can now report a dropped icon#

Artifact publish results now report if an icon was dropped from the payload

Details 0 0 Feedback
What

The result returned after publishing an Artifact now includes an iconDropped field, indicating when an icon or favicon was stripped out of the publish payload, similar to the existing deadlineDropped field.

Why

This lets whoever consumes the publish result know that the icon didn't make it into the published output, rather than that information being silently lost.

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
Subagents

Subagent file-report note wording changed for zero-directory runs#

Subagent file-report note now distinguishes zero-directory runs from restricted-but-listed file access

Details 0 0 Feedback
What

When a subagent (a Claude Code task delegated to a separate agent) finishes, its tool results include a note about which files it's allowed to claim as its own work. This note now has different wording depending on the situation: if no save directories are configured at all, it says the subagent produced "no files during this run"; if saves are restricted but some files are still trustworthy, it now says the subagent may claim "only the files this note lists or counts."

Why

This makes the file-attribution note more precise, so it's clearer whether a subagent had no file output at all versus limited, specifically listed file output.

Improved
You'll notice
Useful1 Signal1
Elsewhere

Working-directory read summary distinguishes multi-directory sessions#

File-read summaries now say 'working directories' plural for sessions spanning more than one

Details 0 0 Feedback
What

When Claude Code reports how many files it read from outside the current folder, the message now checks a new elsewhereBeyondCwd flag. If a session has more than one working directory, the message says "the session's working directories" in the plural, instead of "the working directory" in the singular.

Why

This makes the summary accurate for sessions that span multiple working directories, rather than implying there is only ever one.

Improved
You'll notice
Useful1 Signal1
Artifacts no docs found unclear

Bulk file upload support for artifact asset uploads#

The artifact tool's upload_asset can now describe uploading a list of multiple local files at once

Unclear The finding shows the description change implying multi-file support, but doesn't confirm the underlying upload mechanism itself changed.

Details 0 0 Feedback
upload_asset
What

The description Claude sees for upload_asset, part of the Artifact tool, now distinguishes between uploading a single local file and uploading a list of several local files, phrased as "a list of N local files." This follows earlier work that expanded which file types (adding stylesheets and scripts) could be uploaded as assets.

Why

This suggests upload_asset can now handle multiple files in one call rather than requiring a separate call per file, which would make attaching several assets to an artifact more efficient.

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

File-history backup restore now deduplicates concurrent copy operations by backup filename#

Restoring file-history backups now avoids duplicate copy operations for the same backup file

Details 0 0 Feedback
What

When Claude Code restores file-history backups for a resumed session, it now keeps track of in-flight backup-copy operations, keyed by the backup file's name. If multiple messages reference the same backup file at once, they now share a single copy operation instead of each triggering a redundant copy.

Why

This avoids unnecessary duplicate work when restoring a resumed session, which is more efficient and reduces the chance of conflicting concurrent copies of the same backup file.

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
Artifacts

Artifact read-tool now stamps a 'save source of artifact' note#

Reading an artifact's saved source file now notes it only counts as viewed once fully read

Details 0 0 Feedback
What

When Claude reads the file that is the saved source of an artifact, the Read tool result now attaches a note like "This file is the saved source of artifact ... at version ...", stating that this version only counts as viewed once every line of it has been read.

Why

This stops Claude from treating a partial read of an artifact's source file as if it had seen the whole thing, which matters since decisions about an artifact's current state depend on knowing its full, current contents.

Improved
You'll notice
Useful1 Signal1
Background Tasks

Background monitor tool description clarifies cwd with --project-config-root#

Background monitor tool docs now note that --project-config-root changes the working directory it reports

Details 0 0 Feedback
What

The background-monitor tool's built-in description now explains that when a host application sets --project-config-root, that path becomes the effective working directory (the folder a command is considered to run in) for the session, instead of just saying the command runs in the session's working directory.

Why

This is a documentation clarification for the tool itself, so anything reading that description (including Claude) understands where commands are actually running when a host has overridden the project root.

Improved
You'll notice
Useful1 Signal1
Artifacts

Simplified 'file not found' artifact error message, drops markdown-sibling suggestion#

Artifact 'file not found' error message simplified, no longer offers to build an HTML page from a markdown sibling

Details 0 0 Feedback
What

The helper that builds the "file not found" hint for artifacts was simplified. It now either returns a short "Did you mean X?" suggestion, based on filename similarity or a matching .html/.htm sibling file, or returns nothing at all. The previous, longer message text and the special-case suggestion to auto-author an HTML page from a markdown sibling file have been dropped.

Why

This makes the "file not found" message shorter and more focused on a direct filename suggestion, removing a more elaborate but narrower behavior around markdown-to-HTML suggestions.

Improved
You'll notice
Useful1 Signal1
Sandbox

Sandbox status output now reports Bash auto-allow state#

sandbox status command description now mentions it reports Bash auto-allow state

Details 0 0 Feedback
What

The description for the sandbox status command was updated to say that it prints the Bash auto-allow setting, in addition to the enabled state, source, strict mode, and filesystem policy it already reported.

Why

This makes it clearer from the command's own description that checking sandbox status also tells you whether Bash commands are set to auto-allow.

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
Artifacts

New watch-brief live-subscription status message#

New status text explains when a live subscription doesn't apply to a session

Details 0 0 Feedback
What

When a tool call is a "watch brief" (watchBrief === true) and its live subscription type is publish_context, Claude Code now shows a specific status message instead of a generic one: "Live subscription: none in this kind of session (see the earlier publish result); not an error."

Why

This clarifies that the absence of a live subscription in this situation is expected behavior, not a failure, so it shouldn't be mistaken for a bug when publishing artifacts.

Improved
You'll notice
Useful1 Signal1
Permissions

Parked permission requests retired in transcript on new input#

Pending permission requests are now cleaned up if new input arrives before they're handled

Details 0 0 Feedback
What

If a permission request (a prompt asking you to approve a tool call) is still waiting and hasn't been picked up yet, and new input arrives while the session isn't shutting down, Claude Code now explicitly retires that pending request in the conversation transcript, and records how long it sat waiting before being retired.

Why

This avoids leaving stale, unanswered permission requests hanging around in the transcript when the conversation has already moved on, and gives visibility into how long such requests went unhandled.

Improved
You'll notice
Useful1 Signal1
Sandbox

auto-allow-bash-if-sandboxed setting surfaced in diagnostics with its source#

Diagnostics now report whether autoAllowBashIfSandboxed is on and where that value came from

Details 0 0 Feedback
autoAllowBashIfSandboxed
What

A settings snapshot used for diagnostics and telemetry now reports whether the autoAllowBashIfSandboxed setting is enabled, along with where that value was set from: unsupported, policy, default, or settings.

Why

This makes it easier to see, when diagnosing a session, whether bash commands are being auto-allowed because they're sandboxed, and whether that behavior comes from a policy, a default, or the user's own settings.

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
Env Vars

Env var passthrough allowlist grows: AWKPATH, AWKLIBPATH, DEVELOPER_DIR#

Environment variable passthrough list adds AWKPATH, AWKLIBPATH, and DEVELOPER_DIR

Details 0 0 Feedback
What

The list of environment variables Claude Code considers safe to pass through (alongside existing ones like GNUMAKEFLAGS, MFLAGS, and MAKEFILES) now also includes AWKPATH, AWKLIBPATH, and DEVELOPER_DIR.

Why

This lets commands run by Claude Code correctly inherit these variables, which matter for tools like awk (which uses AWKPATH/AWKLIBPATH to find its scripts) and Apple's developer toolchain (which uses DEVELOPER_DIR), instead of having them stripped from the environment.

Improved
You'll notice
Useful1 Signal1
Permissions

Dangerous-env-var regex now flags NLSPATH and DEVELOPER_DIR#

Claude Code now flags NLSPATH and DEVELOPER_DIR as potentially hijacking environment variables

Details 0 0 Feedback
What

Claude Code checks environment variables for ones that could hijack a command by pointing it at attacker-controlled code or libraries. That check now also catches NLSPATH and DEVELOPER_DIR, in addition to the existing LD_, DYLD_, GCONV_PATH, and PYTHON-prefixed variables.

Why

NLSPATH and DEVELOPER_DIR can be abused the same way as the variables already covered, so flagging them closes a gap in the safety check that warns about risky environment variable usage.

Improved
You'll notice
Useful1 Signal1
Bash Tool

New bash risk explanation for env -P#

Claude Code now explains the risk of running env -P with a relative directory

Details 0 0 Feedback
What

Claude Code's bash command safety analyzer, which explains why a command might be risky before it runs, now has a specific explanation for env -P: when given a relative directory, the program env runs is looked up starting from the directory you launched the command in, not from a fixed location. This joins existing explanations for commands that wrap other commands or run without a fixed shell, like parallel, script, su, and sudo.

Why

This helps you understand why env -P with a relative path is flagged, since it means the actual program executed depends on where you happen to be standing when you run the command.

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

File extension map extended: .cjs, .mts, .cts#

File extension detection now recognizes .cjs, .mts, and .cts

Details 0 0 Feedback
.cjs.mts.cts
What

The map used to detect a file's language from its extension now includes .cjs (mapped to JavaScript) and .mts and .cts (both mapped to TypeScript), alongside the existing .jsx, .js, and .mjs entries.

Why

This lets Claude Code correctly recognize these CommonJS and TypeScript module file extensions wherever the language is used, such as syntax highlighting or file-type-aware behavior.

Improved
You'll notice
Useful1 Signal1
Message Queue

Command queue draining now accounts for 'stale' classifier screening on submitted prompts#

Queued prompts now stop batching together once a stale screening result is detected

Details 0 0 Feedback
What

When Claude Code drains a queue of pending prompt messages to send them together, it now checks each one's "screening" status (a classifier check run when the prompt was submitted). If a queued message's screening is considered stale, the queue now stops accumulating further messages at that point, rather than always draining the entire run of same-mode messages as before.

Why

This avoids batching a prompt whose classifier screening is out of date together with other queued prompts, which could otherwise let a stale screening result apply to messages it wasn't actually checked against.

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
Subagents

Resumed observer agents get a scoped tool surface via agentToolScope#

Resumed observer-mode agents now get an explicit, scoped set of tools instead of inheriting the parent's

Details 0 0 Feedback
What

When an agent is resumed in observer mode, Claude Code now passes an explicit agentToolScope pointing at that agent's own resolved definition, rather than following the path where it would inherit its parent's tool set.

Why

This gives resumed observer-mode agents a tool surface tied to their own definition, distinct from whatever tools their parent session had available.

Improved
You'll notice
Useful1 Signal1
Artifacts

New helper renders type_file read results with an 'unread' state#

A new helper formats describe_type results for files that are unread or unreadable

Details 0 0 Feedback
What

A new function handles the case where a describe_type result includes a type file. It now distinguishes between a file that is unread or unreadable, showing a reason for that, and a file with normal readable content, before falling back to the previous formatting behavior for other cases.

Why

This gives a clearer, explained result when a type file can't be read, instead of presenting it the same way as normally readable content.

Improved
You'll notice
Useful1 Signal1
Sessions

Conversation forking now preserves 'memory-mode' records#

Forking a conversation now carries over its 'memory-mode' records too

Details 0 0 Feedback
What

When a conversation is forked (branched into a new session), Claude Code now also copies over any 'memory-mode' records from the original session into the new forked transcript, tagged with the new session's ID. This happens in both ways a fork can be created. It's in addition to the content and working-directory carryover that already happened during a fork.

Why

This means forking a conversation now preserves memory-mode state along with the rest of the conversation, so a forked session doesn't lose that context.

Improved
You'll notice
Useful1 Signal0
UI

Spinner tip publication now held until the current turn finishes#

The rotating spinner tip no longer changes mid-turn, only after the current turn ends

Details 0 0 Feedback
What

The small tip shown next to the loading spinner used to be able to change while Claude was still working on a turn. Now, if a turn is in progress, a new tip is held back and only shown once that turn finishes.

Why

This keeps the tip text from changing distractingly while you're waiting for a response.

37 entries

Bug Fixesopen

Fixed
You'll notice
Useful2 Signal1
Group of 3 Artifacts

Artifact network and boot errors gain a transient flag and richer diagnostics#

Artifact tool network and boot failures now carry a transient flag plus more diagnostic detail like status, timing, and port requirements

Details 0 0 Feedback

What

Error handling for the Artifact tool's network and boot requests was made more informative:

  • When an artifact content fetch fails with a plain network error, the message now explicitly states that outbound HTTPS on port 443 is required for the Artifact tool, instead of a generic "network error".
  • A new transient flag is now attached to some of these failures, marking them as potentially temporary.
  • Artifact publish/boot-error telemetry now includes the original request, HTTP status, and sync/agent/relay context flags when the error is a boot request or failure.
  • Boot-request network failures are now also tagged with wall-clock timing (wall_elapsed_ms) and a relay flag, alongside the existing error code.

Why

These changes make it easier to diagnose why an artifact failed to load or publish, and let callers distinguish transient (likely retryable) network problems from persistent ones.

Fixed
You'll notice
Useful2 Signal1
Group of 2 Plugins

Adding a plugin marketplace no longer silently overwrites an existing one#

Adding a plugin marketplace by URL now refuses to silently replace an existing marketplace registered under the same name

Details 0 0 Feedback

What

When you add a plugin marketplace from a url source, Claude Code now hardlinks the downloaded catalog into the cache instead of always renaming it, and:

  • If a marketplace with that name is already registered from a different source, the add is refused with an error instructing you to run /plugin marketplace remove first.
  • If finalizing the cache fails for another reason, a more explicit error is shown, explaining that adding a marketplace will never silently replace an existing one with the same name, and how to recover.

Why

This prevents one marketplace from quietly clobbering another that happens to share a name, which could otherwise replace plugins you already trust without warning.

Fixed
You'll notice
Useful2 Signal1
Group of 2 Elsewhere

New retry path drops the message-threads header on unrecognised HTTP 400 errors#

An unrecognised HTTP 400 on a message-threads request now triggers a stateless retry without that header, tracked by a new telemetry event

Details 0 0 Feedback

What When a request carrying the message-threads header gets back an HTTP 400 error that is not one of the known thread-related error codes, Claude Code now resends the turn statelessly, without the message-threads header, and marks that thread type as dropped for the rest of the session. This path is tracked by a new telemetry event, tengu_tether_unrecognised_400, added alongside the existing tengu_tether_decision, tengu_tether_live_outcome, and tengu_tether_echo_audit events.

Why This lets a conversation keep going after an unexpected 400 error tied to the message-threads feature, instead of failing outright, while still recording that the fallback happened.

Fixed
You'll notice
Useful2 Signal1
Group of 3 Elsewhere

Pending questions and permission prompts are now force-rejected during session shutdown#

Claude Code no longer hangs on a pending question or permission prompt when a session is shutting down

Details 0 0 Feedback

What

  • When a session is being torn down, any pending human-facing request, such as an AskUserQuestion prompt or a permission prompt, is now forcibly rejected with the error "the session is being torn down", instead of hanging indefinitely or being silently dropped.
  • New internal state (leftStanding, leaveQuestionsStanding(), questionsFrozen(), questionsLeftStanding()) tracks this, and new dialog requests are cancelled immediately once a process is shutting down.
  • Replies meant for a process that is shutting down are now counted separately (repliesLeftStanding) from replies meant for the process taking over (repliesLeftForNextProcess).

Why

This prevents a session from getting stuck waiting on a user response that will never arrive once shutdown has started, replacing an indefinite hang with a clear error.

Fixed
You'll notice
Useful2 Signal1
Permissions

AskUserQuestion permission fallback message now distinguishes 'server not requested' in headless mode#

The AskUserQuestion tool's error message now distinguishes when a server permission check simply wasn't requested

Details 0 0 Feedback
What

When the AskUserQuestion tool can't show its usual permission prompt because it's running in a headless, asynchronous context, the denial message it returns now has two forms: one specific message for when the server side of the permission check was never requested, and the previous, more general fallback message for other cases.

Why

This gives clearer, more accurate feedback about why a question couldn't be asked when Claude Code is running unattended, instead of always showing the same generic explanation.

Fixed
You'll notice
Useful2 Signal1
Tools

Disabled-but-listed tools now get a clearer error message#

The error for a missing tool now says clearly whether it's switched off or its source was removed

Details 0 0 Feedback
What

When a tool that's part of the current conversation isn't actually available to use, the error message now distinguishes two different cases: the tool being switched off in the current session, versus the tool's source (such as a connected server) having been removed or disconnected. Each case now gets its own distinct message.

Why

This makes it clearer why a tool isn't working, so a user or model can tell whether to just turn it back on or whether it needs to be reconnected entirely.

Fixed
You'll notice
Useful2 Signal1
Elsewhere

FileHistory backup-copy fallback now uses atomic staged write with integrity check and retry#

File-history backup copying now writes atomically with an integrity check and retries on failure

Details 0 0 Feedback
What

When Claude Code's file-history feature can't create a backup of a session's files by hard-linking (a fast way to duplicate a file without copying its data) and falls back to copying instead, it now writes to a temporary file first, checks that the copied file's size matches the original, and only then renames it into place. If the rename fails, it retries for about 1.5 seconds before giving up, logging a specific message if it's ultimately refused.

Why

This avoids leaving corrupted or incomplete backup files in place if a copy is interrupted or a rename briefly fails, which matters since file history is what lets changes to files be tracked and reviewed.

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

Chrome/browser tool: batch URL checks now pre-screen for unvettable/denied domains across the whole batch#

Batched browser URL checks now screen every URL in the batch, not just the first, before allowing the call

Details 0 0 Feedback
What

For browser_batch tool calls, which bundle multiple browser actions into one call, Claude Code now checks every URL in the batch up front rather than just the primary one. If any URL in the batch is a non-web or unparseable address (like a browser-internal page), the whole call is denied with a message telling the user to navigate to a web page first. If any URL matches a denied-domain rule, the call is denied and the specific offending URL is named.

Why

This closes a gap where a batched call could slip past domain restrictions or hit an internal browser page as long as only a secondary URL in the batch was the problem, instead of the first one being checked.

Fixed
You'll notice
Useful2 Signal1
Tool Results

Tool result / binary content / hook output persistence now falls back to an in-transcript truncation preview when disk save is unavailable#

Large tool outputs that can't be saved to disk now show a truncated preview instead of being silently cut or dropped

Details 0 0 Feedback
What

Large tool results, hook outputs (output from custom scripts that run at certain points), and binary content are normally saved to disk when they're too big to keep in the conversation directly. When disk storage isn't available to save them, Claude Code now builds a truncated preview shown inline in the conversation, marked with an explicit <truncated-output> label and a message explaining that the output was too large, couldn't be saved, and only the first part is shown.

Why

This makes it clear when output has been cut short because it couldn't be saved, rather than leaving the loss silent or unexplained.

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
Artifacts

Artifact read permission checks hardened against a check-time race, and support multi-file save messaging#

Artifact file reads now detect a permission check that changed mid-flight, and report multi-file saves

Details 0 0 Feedback
What

When Claude Code checks permission for reading a file from an artifact (via read_file/read_asset), it now detects if a file-edit safety check or an "ask" permission rule for one of the destination files changed while the permission check was in progress. If that happens, the read is denied with a message explaining that nothing was read and to retry, rather than proceeding based on stale information.

  • The permission-request wording also now distinguishes saving multiple files at once ("save N files ... to ...") from the existing single-file wording.
Why

This closes a race condition where a permission decision could be based on outdated information about a file's safety status, and makes the messaging clearer when several files are being saved from an artifact in one request.

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

New artifact watch error: 'watch target changed' when action/url no longer matches the approved watch#

New error tells the user to retry when an artifact watch's action or URL no longer matches

Details 0 0 Feedback
watch_target_changed
What

The artifact watch tool (which monitors an artifact for changes) now returns a distinct error, watch_target_changed, when the action or url involved no longer matches the specific watch that was previously approved. The message tells the caller that nothing was carried out and to retry so the watch is checked again.

Why

This prevents Claude Code from silently acting on a stale or mismatched watch approval, instead surfacing a clear signal that the request needs to be re-checked before proceeding.

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
Permissions

Permission dialog answered away from the session is now rejected as a denial#

Answering a permission prompt from outside the session now counts as a denial

Details 0 0 Feedback
What

When a tool permission decision is set to "ask" and the check finds that it was localDisplayOnly — meaning the permission card was answered somewhere other than the active session — the tool call is now denied outright, with the message "a permission card answered away from the session," instead of continuing through the normal ask-or-hook approval flow.

Why

This closes a gap where a permission prompt answered in the wrong place could otherwise be treated as a valid approval, ensuring such cases are safely rejected.

Fixed
You'll notice
Useful2 Signal1
Sessions

Remote session no longer wipes all streaming tool-use indicators on any message#

Remote sessions no longer clear all in-progress tool indicators when any message arrives

Details 0 0 Feedback
What

In a remote session, Claude Code shows a small indicator while a tool call is still running. Previously, receiving any new message from the assistant would clear every one of these in-progress indicators, even for tools that were still running. Now, only the indicators for tool calls that actually finished (matching the completed tool-use blocks in that message) are cleared; indicators for tools still in flight are left alone.

Why

This fixes a case where a remote session's UI could show a tool as no longer running even though it was still executing, because an unrelated message happened to arrive and wiped its indicator.

Fixed
You'll notice
Useful2 Signal1
Elsewhere

New dedicated errors for oversized/failed ripgrep output collection#

Grep searches now report distinct errors when ripgrep output is too large or fails to collect

Details 0 0 Feedback
What

When Claude Code's grep tool runs a search internally using ripgrep, collecting the output can now fail in two clearly distinct ways:

  • a general RipgrepOutputError, which includes a suggestion to narrow the search
  • a RipgrepOutputTooLargeError, which fires when the search output exceeds a size cap before even a single complete line was produced, with separate messages depending on whether it was standard output or error output that overflowed
Why

This gives clearer, more specific error messages when a search produces too much output, and points toward the fix (narrowing the search) instead of a generic failure.

Fixed
You'll notice
Useful2 Signal1
Cloud Sessions

Headless cloud client permission/dialog forwarding bug fix#

Fixed a bug where headless cloud sessions forwarded the wrong argument for permission and dialog requests

Details 0 0 Feedback
What

In the headless cloud client, two functions that forward permission requests and user dialog requests (passPermissionRequest and passUserDialogRequest) were mistakenly passing the same argument twice instead of forwarding the actual request object along with its second argument. This has been fixed so both arguments are now passed correctly and distinctly.

Why

This fixes a bug that likely caused permission and dialog requests in headless cloud sessions to be handled with incorrect or missing data, since the real request object wasn't being forwarded properly.

Fixed
You'll notice
Useful1 Signal1
Group of 3 Artifacts

Artifact comment replies can now retry safely without duplicating#

Posting a reply comment on an Artifact now retries once on failure using a client-generated id, and reports if a retry was actually a replay

Details 0 0 Feedback

What

When Claude Code posts a reply to a comment on an Artifact, the request handling is now more resilient:

  • The reply tool now generates a client id for each reply and sends it with the request.
  • On a server error (5xx) or a 499 status, the request waits a short randomized delay (roughly 800-1500ms) and retries once using that same client id.
  • If the retried request comes back with a 409 "id_in_use" conflict, it's now treated as a successful resend rather than a failure, and the tool result can include replayed: true to show this happened.
  • The underlying request function also now distinguishes relay errors from generic network errors so callers can opt into this retry behavior.

Why

This prevents duplicate or lost comment replies when a network hiccup or transient server error occurs, since the retry reuses the same id instead of risking a duplicate post.

Fixed
Under the hood
Useful1 Signal1
Artifacts

Design system publish can now bypass file-permission checks for font files#

Publishing the design system now lets font files through even if permission rules would otherwise block them

Details 0 0 Feedback
What

When Claude Code saves 'the design system' to disk, it now checks whether a file is a font file. If it is, the file is allowed to be written even when the usual permission-rule filtering would otherwise have blocked it, and the write is tagged internally with the reason 'font file'.

Why

Font files are needed for a design system to render correctly, so blocking them on permission grounds could leave the design system broken. This exception avoids that failure mode for fonts specifically.

Fixed
You'll notice
Useful1 Signal1
MCP unclear

MCP binary content that can't be saved to disk now falls back to an inline size summary in some mode#

MCP binary results that fail to save to disk now show a friendlier message instead of a raw disk error

Unclear What the new condition checks and when it is set isn't stated, so it's unclear which failures get the friendlier message versus the raw error.

Details 0 0 Feedback
What

When Claude Code tries to save binary or blob content returned by an MCP tool (an external tool connected via the Model Context Protocol) to disk and that save fails, it now checks a new condition. If that condition is set, the result shown is a plain message saying the content was not kept because it could not be saved, instead of the raw disk-error text. This applies across tool results, resources, and images.

Why

This replaces a technical, possibly confusing disk-error message with something a user can actually understand when MCP binary content can't be persisted.

Fixed
Under the hood
Useful1 Signal1
MCP

poll_event now validates the kind format, not just reserved names#

MCP poll_event now rejects malformed kind values, not just reserved names

Details 0 0 Feedback
What

The MCP (Model Context Protocol, the standard Claude Code uses to talk to external tools) poll_event control request now validates the format of the kind value it's given before checking whether that name is reserved. A valid kind must start with a lowercase letter and contain only lowercase letters, digits, and hyphens after that, up to 64 characters. The wording used when a kind is rejected as reserved has also changed.

Why

This catches malformed event kinds earlier and more clearly, rather than only rejecting names that happen to collide with reserved ones.

Fixed
You'll notice
Useful1 Signal1
Artifacts

Artifact stale-guard reads now retry once on transient failure#

Artifact stale-guard reads now retry once automatically after a transient failure

Details 0 0 Feedback
What

The "stale guard" read that checks whether a hand-off artifact is out of date now recognizes transient, retryable failures, distinct from permanent errors, "gone" errors, other-organization errors, or never-published/public-unasked cases, based on either a retryable HTTP status or a transient-failure flag. When such a failure occurs, the read is now retried once after a fixed delay, and the retry is recorded in its telemetry.

Why

This makes the stale-guard check for hand-off artifacts more reliable by recovering automatically from temporary failures instead of giving up immediately.

Fixed
You'll notice
Useful1 Signal1
Artifacts

Artifact copy_from not_found error drops the 'another organization' case#

Artifact copy_from error message no longer mentions 'another organization' as a possible cause

Details 0 0 Feedback
What

When copying content between Artifacts with copy_from fails because the source can't be found or opened, the error message shown no longer lists "is in another organization" as one of the indistinguishable possible reasons.

Why

The error is now slightly less specific about why a copy might fail, though the underlying permission checks for copy_from still apply.

Fixed
You'll notice
Useful1 Signal1
Policy Limits

Policy-limits cache write now refuses to stamp when the existing stamp can't be read#

Policy-limits cache no longer overwrites its stamp when the existing one can't be read

Details 0 0 Feedback
What

When Claude Code saves updated policy-limits data to its local cache, it now first checks whether it could actually read the existing on-disk "stamp" (a marker used to track the cache state). If that read failed, the save is aborted entirely for that cycle and nothing is written, with a log noting the cache stamp could not be read. Previously it would proceed to overwrite regardless.

A companion testing-only method, _settleCyclesForTesting, was also added to let tests wait for all in-progress fetch cycles to finish.

Why

This avoids silently clobbering the policy-limits cache when its current state can't be verified, reducing the chance of corrupting or losing track of cached policy data.

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
Git

Git fetch debug-trace no longer inherits the parent environment#

Git fetch debug tracing now runs with only GIT_TRACE_PACKET set, not the full environment

Details 0 0 Feedback
What

When Claude Code retries a git fetch with packet-level tracing turned on (a debug mode that logs the raw network exchange for troubleshooting), the process it spawns for that retry used to inherit the full parent environment plus the GIT_TRACE_PACKET variable. It now runs with only GIT_TRACE_PACKET: "1" set, and nothing else from the surrounding environment.

Why

This narrows what the traced git process has access to during the retry, which mainly affects debugging output rather than normal git operation.

Fixed
You'll notice
Useful1 Signal1
Tool Results

Large tool-result files: fallback savedHint when the save itself failed#

Tool results now get a clear hint when saving oversized output to a temp file itself fails

Details 0 0 Feedback
What

When a large tool result (from an MCP task, a way of running external tools) is too big and Claude Code tries to save the overflow to a temporary file, that save can itself fail. Previously, if this happened, the truncated text was returned with no explanation. Now, when the save fails, a fixed message is attached explaining that the full output could not be saved.

Why

This stops the model from silently receiving cut-off tool output with no indication that something went wrong, making it clearer that the missing portion isn't just intentionally omitted but genuinely lost.

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
Git

Git-tracked-status check now accounts for a worktree override#

Git tracked/untracked file checks now account for an active worktree override

Details 0 0 Feedback
What

When Claude Code checks whether a file is tracked or untracked by git, it now first checks for a worktree path override before falling back to the normal check based on the current working directory. It checks both the override path and the equivalent path relative to the parent repository.

Why

This makes git status checks behave correctly when Claude Code is operating against a worktree (an alternate checkout of a git repository) rather than the main working directory, so tracked/untracked status is reported accurately in that case.

Fixed
You'll notice
Useful1 Signal1
Permissions unclear

Timed-out parked permissions now always retire#

A parked permission request that times out now always ends the interrupted turn

Unclear The finding doesn't say what happened for timeouts outside that condition before this change, only that it was inconsistent.

Details 0 0 Feedback
What

When Claude Code is waiting on a permission decision (approving or denying a tool call) that gets parked and then times out, the interrupted turn is now always retired as unanswered.

Why

Previously this only happened under a specific internal condition, so a timed-out permission request could behave inconsistently depending on which part of the code path handled it. Now the behavior is consistent: a timeout always ends the turn rather than leaving it in an unclear state.

Fixed
You'll notice
Useful1 Signal1
Sandbox

AWS credential pair sandboxing dedupe fix#

Fixed a bug in sandbox handling of AWS credential pairs that compared the wrong entries

Details 0 0 Feedback
What

The logic that handles AWS access-key and secret-key pairs inside the sandbox (an isolated environment Claude Code can run commands in) was reworked. The sorting and deduplication of credential pairs, and the way conflicting slots get suffixed, were restructured, fixing a bug where the wrong loop variable was being compared when deciding which AWS credential pairs were functional versus not.

Why

The previous bug could cause the sandbox to mismatch or misrank AWS credential pairs, potentially treating a working pair as broken or vice versa. The fix makes that comparison correct.

Fixed
You'll notice
Useful1 Signal1
Elsewhere unclear

Path-normalizing helpers no longer require a leading slash#

Two path-normalizing helpers now accept relative paths, not just absolute ones

Unclear The finding does not say which callers rely on these helpers or what effect processing relative paths has downstream.

Details 0 0 Feedback
What

Two internal path-handling helper functions previously rejected any input that didn't start with a leading slash (/), returning null for relative paths. That restriction has been removed, so both functions now also process relative paths.

Why

This broadens where these helpers can be used, since they no longer fail outright on relative paths.

Fixed
You'll notice
Useful1 Signal1
Subagents

Forked (inline) subagents no longer inherit their parent's tool-call replay log#

Forked inline subagents now start with an empty tool-call replay log instead of inheriting the parent's

Details 0 0 Feedback
What

When launching a forked (inline) subagent, Claude Code previously built its tool-call replay log either by reusing an existing one from tool state or reconstructing it from resume messages. It now always starts the forked subagent with an empty log.

Why

This means a forked subagent no longer carries over its parent's history of prior tool calls into its own replay log, giving it a clean slate rather than inherited context from the parent session.

Fixed
You'll notice
Useful1 Signal1
Plugins

npm marketplace/plugin source schema gains registry URL validation and richer docs#

npm-based plugin marketplaces now validate registry URLs and support scoped allow/block policies

Details 0 0 Feedback
What

When installing a plugin or defining an npm-based marketplace source, the registry field is now checked to make sure it's a valid http or https URL, and Claude Code now rejects it otherwise with the message "Registry must be an http(s) URL".

The npm marketplace source definition also gains new version and registry fields, and the documentation now explains that policies like strictKnownMarketplaces and blockedMarketplaces can control npm-based marketplace plugins by:

  • an exact package name
  • a scope wildcard, such as @acme/*
  • the registry value, which acts as an allowed prefix for the plugin's download URL
Why

This lets administrators lock down which npm-based plugin marketplaces are allowed, by name, by organization scope, or by trusted registry, and stops obviously malformed registry URLs from being accepted.

Fixed
You'll notice
Useful1 Signal1
Plugins

Marketplace clone-target self-check now bidirectional#

Marketplace directory collision check now runs in both directions

Details 0 0 Feedback
What

When fetching a plugin marketplace, Claude Code already checked whether the target directory was already registered as a different marketplace. It now also runs the reverse check, to see if the new marketplace's directory collides with an existing one the other way around.

Why

This closes a gap where a directory-name collision could previously be caught in one direction but not the other, giving a more reliable "cannot fetch this marketplace" error when clone directories conflict.

Fixed
You'll notice
Useful1 Signal1
MCP unclear

New unhandled-response fallback for saved-output hint#

Saving MCP task output now returns a saved-output hint even when the save itself fails

Unclear What the savedHint value actually conveys to the user is not stated.

Details 0 0 Feedback
What

When Claude Code tries to save the result of an MCP task to a file and that save fails, it now checks an additional condition and, when it applies, still includes a savedHint field alongside the truncated text in the response, instead of returning only the truncated text as before.

Why

This gives a hint about the saved output even in a failure case that previously returned nothing extra, though the finding doesn't specify what that hint tells the user.

Fixed
Under the hood
Useful1 Signal0
Sandbox

Sandbox proxy trap now preserves the shell's exit code#

Sandbox proxy script now preserves the shell's real exit code instead of masking it on exit

Details 0 0 Feedback
What

The launcher for the socat-based sandbox proxy has a shutdown trap that runs when the process exits. Previously it just killed background processes and exited plainly; now it first captures the actual exit code ($?), kills the background processes, and then re-exits with that captured code.

Why

This means a sandboxed shell's real exit status is now correctly reported when it finishes, instead of being overwritten by the cleanup logic, so scripts or tools checking the exit code get an accurate result.

Fixed
You'll notice
Useful1 Signal0
UI

Loading-verb wordlist gets American-spelling cleanup and duplicate removal#

Claude Code's loading-status word list gets American spellings and a duplicate removed

Details 0 0 Feedback
What

The list of randomly-chosen status words shown while Claude Code is working (like "Perambulating" or "Percolating") had two entries changed to American spelling: "Philosophising" became "Philosophizing" and "Unravelling" became "Unraveling". A duplicate "Channelling" entry was also removed, since "Channeling" was already in the list.

Why

This is a small cosmetic cleanup of the status-word list with no functional effect.

32 entries

In Developmentopen

In dev
Nothing to try yet
Useful3 Signal3
Group of 3 MCP no docs found

Queued notifications gated by a new flag#

Claude Code can now advertise and re-arm queued 'unread notifications' nudges under a new tengu_saffron_kite gate, on by default

Details 0 0 Feedback
queued_notifications

What

Claude Code now supports a "queued notifications" capability for sessions:

  • The session context can advertise a queued_notifications capability when the session is remote (via CLAUDE_CODE_REMOTE) or a new flag called tengu_saffron_kite is on, along with an active notifications budget and a matching tool.
  • A new gate, tengu_saffron_kite, controls this behavior and is enabled by default.
  • The logic that re-arms or pushes the "unread notifications" nudge now has a simpler, earlier path it can take when this new gate check fails, skipping the usual threshold and suppression checks.

Why

This lays groundwork for surfacing queued notifications (like unread messages) to users during remote or live sessions, with the feature already enabled by default via the new gate rather than requiring opt-in.

Related

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

In dev
Nothing to try yet
Useful3 Signal3
Group of 2 REPL no docs found unclear

Compaction summaries now report kept REPL bindings#

Compaction summaries now say when your REPL/notebook variable state was kept, replacing the old cleared-state flag

Unclear The finding describes this as currently dark; whether or how it is enabled for any accounts is not stated.

Details 0 0 Feedback
replBindingsKept

What

Compaction summaries (the notes shown when Claude Code condenses conversation history) can now include a note that your REPL (read-eval-print loop, i.e. notebook/code execution) variable bindings were preserved across compaction, saying "Your REPL VM state was kept across this compaction." This is powered by a new replBindingsKept field, computed from tool state, which replaces the previous replStateCleared boolean. This behavior is currently gated and not yet generally visible.

Why

This gives a clearer, positive signal about what was retained after compaction rather than only reporting that state was cleared, though it isn't yet enabled for all users.

In dev
Nothing to try yet
Useful3 Signal3
Group of 2 Subagents

Stalled background subagents can now be 'parked' instead of aborted#

A stalled async subagent can now be parked with a partial result instead of always being aborted

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

Details 0 0 Feedback

What

  • When an async (background) subagent's stall watchdog fires, and the subagent has produced at least one assistant message, the run can now be marked "parked" instead of always being hard-aborted with a "stall watchdog fired" error.
  • Parking synthesizes a completion from the transcript produced so far, injects a message, clears any in-flight tool-use IDs, and finalizes the run with a summary and usage info.
  • This behavior is gated behind an internal flag (tengu_zinc_harbor) and emits a subagent_park telemetry event.

Why Previously a stalled background subagent always failed outright, discarding any partial progress. Parking preserves whatever work the subagent already did instead of throwing it away.

In dev
Nothing to try yet
Useful2 Signal3
Group of 3 Promotions no docs found

New promotional credit offer added to the usage-limit menu#

Hitting usage limits can now show a 'limit wall' promo offering claimable credit, gated by org policy

Details 0 0 Feedback
claim-credit

What

When you hit usage limits, the options menu that appears (alongside choices like upgrade, extra usage, cancel, auto-resume, and others) can now include a new limit-wall-promo option.

  • Its label and body text come from a remote-configured object (limitWall: notice line, label, body, and claim-page line).
  • Selecting it shows "Opening the claim page…", fires telemetry, and a new CLI action claim-credit is available; a matching general notice variant is also wired in.
  • The feature tracks a capped startup-seen counter (shown at most 3 times) and caches eligibility/claim status so it isn't re-checked unnecessarily.
  • Whether this promo appears at all is controlled by an org-compliance policy (allow_promo_offers) that is allowed by default but denied under HIPAA mode.

Why

This gives users who hit a usage limit a way to claim a promotional credit offer directly from the limit-reached menu, while letting organizations with compliance requirements like HIPAA opt out of showing it.

Related

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

In dev
Nothing to try yet
Useful2 Signal3
Group of 5 Sessions unclear

Session 'context collapse' tracking replaced with 'memory mode' stamps#

Claude Code replaced its old context-collapse (marble-origami) session tracking with a new memory-mode event system

Unclear What triggers a memory-mode stamp once the writer is called, and what the feature is for, is not stated.

Details 0 0 Feedback

What

  • A new memory-mode session-log entry type records when memory mode turns on or off, along with a reason (paused, session_shape, or server_off) and the account involved; these entries are appended to a per-session ledger and merged with an "accumulate" policy.
  • The old marble-origami-commit/snapshot/reset tracking, and its contextCollapseCommits/contextCollapseSnapshot fields, have been removed entirely from session state, sync broadcasts, and serialization, replaced by these memory-mode entries and a new memoryModeStamps array threaded through session loading, resuming, and merging.
  • Forking a conversation now carries these memoryModeStamps over into the new forked session's metadata.

Why

This replaces an older mechanism for tracking memory/context state with a clearer one that records why memory mode changed, and preserves that history when a session is forked.

In dev
Nothing to try yet
Useful3 Signal3
Background Tasks

Background-agent "park on Escape" path gated behind tengu_zinc_harbor, off by default#

Escape can now 'park' running background agents instead of just ignoring them, gated behind tengu_zinc_harbor

Feature flag
tengu_zinc_harbor 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.275: 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.275. 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 function interrupts and 'parks' running background agents or tasks when you press Escape mid-turn. It posts a transcript notice saying background agents were interrupted by the user and parked, along with a status-bar hint telling you to send a message to resume them. Without this new behavior, the old fallback (which does nothing) still runs.

Why

This gives a clearer signal when Escape interrupts background work, showing what happened to those agents and how to pick them back up, instead of leaving their state unclear.

In dev
Nothing to try yet
Useful2 Signal3
Promotions unclear

Hidden 'claim-credit' local tool tied to a startup promo#

A hidden new tool lets Claude open the page for a startup promotional offer

Unclear Nothing has been read about the tengu_swift_lynx gate, so it's unclear whether or how this promo is currently shown to any accounts.

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

Details 0 0 Feedback
What

Claude Code now has a hidden internal tool called claim-credit that opens the page for whatever promotional offer was shown at startup. It only becomes available when a startup promo configuration is present, which is controlled by a setting called tengu_swift_lynx.

Why

This lets Claude act on a startup promotion (for example claiming an offer) shown to the user, rather than the user having to navigate to it manually.

Related

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

In dev
Nothing to try yet
Useful2 Signal2
Group of 2 MCP no docs found unclear

New internal repl_mcp_needs_auth event kind added, but unused#

A new repl_mcp_needs_auth message kind exists internally but currently renders no content and nothing creates it

Unclear placeholder

Details 0 0 Feedback
repl_mcp_needs_auth

What

A new event/message kind called repl_mcp_needs_auth was added internally alongside existing kinds like max_turns_reached and poll_events. It appears in the enumerations/state-key lists used for these message kinds, and in the renderer map that turns message kinds into visible content, repl_mcp_needs_auth is wired to a handler that always returns an empty array, meaning it produces no visible content.

Why

Nothing in the current code actually constructs a message of this kind, so this has no visible effect yet. It looks like groundwork for a future feature (likely related to an MCP server, a way of connecting external tools, needing authentication) that has not been wired up to actually fire.

Related

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

In dev
Nothing to try yet
Useful2 Signal2
Group of 3 Permissions unclear

Permission mode now tracked at the time of the original request#

Claude Code now records the permission mode a tool request was made under (permissionModeAtRequest) to resolve 'auto' mode and keep decisions consistent

Unclear The gate tengu_radiant_teapot controlling this has no recorded reading, so whether it is active for any account is unknown.

Feature flag
tengu_radiant_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.275: 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.275. 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 permissionModeAtRequest field is now threaded through tool-use handling, capturing the concrete permission mode (default, acceptEdits, dontAsk, or bubble) that an "auto" mode resolves to at the moment a tool request is made; plan and bypassPermissions both resolve to default. This replaces an earlier, simpler mode field.
  • When replying to a tool_use request, Claude Code now restores the permission mode that request was originally made under, but only when the effective mode is "arbiter" and a gate check passes.
  • A new telemetry event, tengu_auto_mode_decided_as_requested_mode, fires when auto-mode's eventual decision matches the mode that was originally requested, recording the tool name, whether it's an MCP tool, and the requested mode.

Why

This keeps permission decisions consistent with the mode that was actually in effect when a tool request was made, and provides telemetry to measure how often auto-mode's decision simply confirms the original request.

In dev
Nothing to try yet
Useful2 Signal2
Group of 2 Promotions no docs found unclear

New hidden command for a startup promotional announcement#

New state fields track startup promo announcements and back a hidden command to reopen the offer page, gated behind tengu_swift_lynx

Unclear Nothing has been read about the tengu_swift_lynx gate, so whether or how it is switched on for any account is unknown.

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

Details 0 0 Feedback
tengu_swift_lynx

What

New per-session/global state fields, promoStartupConfig, promoStartupConfigParse, promoStartupLoginsSeen, and promoStartupLoginEnded, along with an announcementSlotReleased flag, track a startup promotional announcement and end it once a tracked number of logins has occurred. These fields back a new hidden local command that opens the page for the offer shown at startup. The command only activates when a remote-config value under the tengu_swift_lynx gate is non-null.

Why

This lets Claude Code show a startup promotional offer for a limited number of logins and gives users a way to revisit that offer's page, while keeping the feature off unless explicitly configured remotely.

In dev
Nothing to try yet
Useful3 Signal2
Memory unclear

Retrieved-memory citations can now be tagged inline with <cc-memory>#

Memory citations can now be tagged inline with markup

Unclear This is controlled by the tengu_salt_marsh gate; no reading of this release's default has been taken yet, and the earlier reading (off for this site's account and for the anonymous baseline) predates this release.

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

Details 0 0 Feedback
What

When enabled, memory retrieval (pulling relevant saved memories into a conversation) now instructs the model to wrap any sentence that cites a retrieved memory in ... tags. New parsing logic detects and truncates these tagged sentences, recognizing several tag spellings (cc-memory, cc_memory, ccmemory) regardless of case.

Why

Tagging which sentences cite a memory makes it possible to surface memory citations distinctly in the interface, for example showing which files a claim was drawn from.

Gate state note

In dev
Nothing to try yet
Useful2 Signal2
Background Tasks

Orphaned backgrounded tasks get auto-aborted and quietly parked#

Background tasks left running after their owning agent disappears are now automatically stopped

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

Details 0 0 Feedback
What

When a task running in the background loses its owning agent (the agent that started it no longer exists), Claude Code now detects this and automatically stops it, rather than letting it keep running indefinitely. This only happens for tasks that are actually running in the background, have a way to be cancelled, and have already produced at least one successful (non-error) response. Once stopped this way, the task is marked as notified and "quietly parked."

A related change also adjusts how the app decides whether a completed background task still needs to stay alive, based on whether it's backgrounded and not already in another state.

Why

This prevents orphaned background tasks from consuming resources or running forever after the thing that started them is gone, while still preserving whatever useful output they had already produced.

In dev
Nothing to try yet
Useful2 Signal2
Artifacts

Artifact publish can now copy files across organizations (server-gated)#

Publishing an artifact can now copy files across organizations, when the server supports it

Details 0 0 Feedback
What

When publishing an artifact involves copying files from another artifact, Claude Code can now pass a cross_org_ok flag to the upload service to allow that copy to cross organization boundaries. A new telemetry reason, copy_predates_cross_org, distinguishes servers that don't yet support cross-organization copying from other kinds of copy failures, and there's a dedicated refusal message shown when a server doesn't support it.

Why

This is a server-gated capability, so whether it actually works depends on the server the artifact is published to; the distinct error reason helps tell an unsupported server apart from a genuine copy failure.

In dev
Nothing to try yet
Useful2 Signal2
Memory unclear

Memory extraction gains an optional 'laptop extract runner' hook#

Memory extraction can now run an optional extra 'laptop extract runner' hook at the end of each turn

Unclear What the 'laptop extract runner' does and when it is available is not stated.

Details 0 0 Feedback
What

The memory-extraction process that runs at the end of a turn now also instantiates and runs an optional "laptop extract runner" component, if one is available, alongside its existing extraction logic.

Why

The finding doesn't say what this runner does, so its practical effect on memory extraction isn't clear.

Related

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

In dev
Nothing to try yet
Useful2 Signal2
Plugins unclear

Plugin source loading gains a preview option#

Plugin source loading gains a preview option, off by default

Unclear What the preview option actually changes about plugin installation is not stated.

Details 0 0 Feedback
What

The internal function used by marketplace and plugin add flows to install plugins from a source now accepts a preview option, which defaults to off.

Why

This is a groundwork change enabling some kind of preview behavior when installing plugins, though the finding doesn't describe what that preview does.

Related

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

In dev
Nothing to try yet
Useful2 Signal2
Compliance

HIPAA/ZDR policy gains two new gated capabilities#

HIPAA/ZDR policy now also governs saving large tool results and promotional offers

Details 0 0 Feedback
What

The policy table that controls what's blocked under HIPAA and zero data retention (ZDR) modes gained two new entries: whether large tool results can be saved in the tool container, and whether promotional offers can be shown.

Why

This extends HIPAA/ZDR compliance controls to cover two behaviors that weren't previously governed by that policy, keeping tool-result storage and promotional messaging consistent with an account's compliance requirements.

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
Group of 4 Auth no docs found

Credential handling adds 'profile' and 'federation' as recognized auth kinds#

Claude Code now recognizes 'profile' and 'federation' credential kinds throughout auth telemetry, caching, and scoping logic

Details 0 0 Feedback
federationIdentity

What

Claude Code's authentication system now understands two new kinds of credentials, profile and federation, alongside the existing token and api_key kinds.

  • Credential-scope matching, cache-key derivation, and on-disk cache file naming now handle profile and federation, each with their own file-name prefix and auth-description text.
  • The function that maps a credential kind to an org-scoping bucket now treats profile and federation the same as token/api_key, resolving them to "orgless".
  • Telemetry (including model_catalog_published and related events) now includes an auth_kind field classifying the session as one of: third_party, host_token, claudeai_login, auth_token_env, api_key_env, api_key_login, api_key_helper, profile_user_oauth, profile_federation, or none.
  • Two identity-tracking classes gained a federationIdentity field (cleared on reset), though nothing in this release actually sets it to a filled value yet.

Why

This is groundwork for supporting profile-based and federated authentication methods, giving telemetry and internal logic a way to recognize and scope these credential types even before they're fully wired up.

Related

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

In dev
Nothing to try yet
Useful2 Signal2
Promotions no docs found

New 'promo-startup' announcement slot added to the status/announcement rotation#

A new 'promo-startup' announcement can now appear in Claude Code's status/announcement rotation

Details 0 0 Feedback
promo-startup
What

A new promotional announcement slot, promo-startup, has been added to the rotation of announcements Claude Code can show. It comes with its own impression cap, a campaign priority, and a set of conditions that must all be true for it to actually be shown, including checks for whether the release slot applies, whether the account is held out of the promo, and whether it has been suppressed.

Why

This lets Claude Code surface a new promotional message to eligible users without affecting other existing announcements, since it's gated independently.

Related

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

In dev
Nothing to try yet
Useful2 Signal2
Background Tasks

Alternate background-agent-stop path behind tengu_zinc_harbor flag#

A new alternate way to stop background agents on cancel exists behind an unreleased flag

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

Details 0 0 Feedback
What

When you cancel (Ctrl-C) while background tasks are running, Claude Code can now take one of two paths to stop those background agents, depending on a feature flag called tengu_zinc_harbor.

Why

This is internal groundwork for changing how background agents get stopped on cancel; it isn't yet active for general users.

In dev
Nothing to try yet
Useful2 Signal2
Subagents

Auto-naming for unnamed background subagents behind tengu_zinc_harbor#

Unnamed background subagents can now get an automatic display name

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

Details 0 0 Feedback
What

When you launch a subagent (a helper agent Claude Code spawns to work on a task) to run in the background without giving it an explicit name, Claude Code can now generate and assign a display name for it automatically, instead of leaving it unnamed. Subagent types that are purely observers, such as Explore or Plan, are skipped.

Why

Automatic names make it easier to tell background subagents apart when several are running at once.

In dev
Nothing to try yet
Useful1 Signal2
Group of 5 Compliance unclear

New HIPAA-evidence tracking now gates web-fetch and design-sync policy checks#

Claude Code now tracks HIPAA-related evidence per account and can block web-fetch or design-sync access based on it

Unclear placeholder

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

Details 0 0 Feedback

What

  • Session and organization-policy state now track HIPAA-related evidence: whether HIPAA-relevant information has been seen (hipaa_seen), seen but incomplete (hipaa_seen_incomplete), or ruled out (hipaa_ruled_out). This replaces a simpler flat list of "seen identities" with a richer evidence structure that also tracks confirm/refuse timestamps (diskConfirmedAtMs, diskRefusedAtMs) and distinguishes IO failures from content-based unusability.
  • This evidence is now checked before allowing the allow_web_fetch and allow_design_sync actions; if the check fails, the policy verdict returns org_denied, a new failure path that did not exist before.
  • A separate feature gate (tengu_tranquil_crescent) can also force this same check to fail immediately, hard-blocking allow_web_fetch/allow_design_sync regardless of the evidence gathered.

Why

This adds a compliance check so web-fetch and design-sync features can be denied for organizations subject to HIPAA rules until their status is properly established, closing a gap where those actions could otherwise run without that check.

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
Tools

New gate for surfacing tools disabled by remote config as "available if turned on"#

New gates let Claude Code report tools that exist but are switched off as "available if turned on"

Feature flag
tengu_gleaming_cupcake 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.275: 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_joyful_anchor Not enough to say

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

This account: no value returned · anonymous baseline: no value returned · compiled default in v2.1.275: 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.275. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
What

When Claude Code can't find a requested tool, it now has a new check for whether the tool actually exists but is currently disabled by remote configuration. If a gate called tengu_gleaming_cupcake is on and the session isn't running under HIPAA restrictions, such disabled tools are counted separately in the tool-resolution results. A second, separate gate called tengu_joyful_anchor supplies an allow-list of tool names used for a related decision elsewhere.

Why

This is groundwork for telling a user or model that a missing tool isn't unavailable outright, but rather switched off and could be turned on, rather than treating it as simply nonexistent.

In dev
Nothing to try yet
Useful1 Signal2
Elsewhere

Worktree copy now tries an atomic rename before falling back to exclusive create, behind a gate#

Worktree file copying can now try a fast atomic rename before falling back to the old method, behind a gate

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

Details 0 0 Feedback
What

When Claude Code copies files for a git worktree, it now has a new path that stages the copy and then attempts an atomic rename directly onto the destination (with a retry for a Windows-specific file-exists error). Only if that rename fails does it fall back to the previous method of exclusively creating the destination file. This new rename-first behavior is controlled by a gate called tengu_squishy_spring.

Why

An atomic rename is typically faster and safer than the older copy method, so when enabled this should make worktree setup quicker without changing the end result.

In dev
Nothing to try yet
Useful1 Signal2
REPL unclear

Async REPL request now hardcoded off#

The internal 'async REPL request' check now always returns false

Unclear It's unclear what user-facing feature relied on the async REPL request check, so the practical effect of disabling it is not known.

Details 0 0 Feedback
What

An internal function that used to compute whether an "async REPL request" (a background code-execution request) should happen now always returns false, regardless of the tool-permission mode passed into it.

Why

This effectively turns off whatever behavior depended on this check, though the finding does not say what that behavior was.

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

Artifact creation reply can now tag URLs as agent-scoped, gated by a statsig flag#

Artifact creation replies can now mark a URL as agent-scoped, controlled by a gated flag

Unclear What agent-scoped actually changes about the URL or its access is not stated, and the gate tengu_cobalt_plinth_medlar is unread.

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

Details 0 0 Feedback
What

When Claude Code creates a new Artifact (a saved piece of generated content like a document or app), the message reporting success can now include "agent_scoped" when formatting the artifact's URL, depending on a check that is currently gated.

Why

This lays groundwork for treating some artifact URLs as scoped to the agent that created them, rather than general-purpose links, though the gate controlling it has not been read for this account.

In dev
Nothing to try yet
Useful1 Signal2
Elsewhere

In-process teammate polling gets an idle timeout, behind tengu_zinc_harbor#

In-process teammate polling can time out after a period of inactivity, gated off for now

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

Details 0 0 Feedback
What

The loop that polls an in-process teammate (a subagent running in the same process) for updates can now give up and report an idle_timeout result if nothing happens for a set number of milliseconds, in two places within that polling logic. This behavior is controlled by a setting called tengu_zinc_harbor.

Why

This would let Claude Code stop waiting on a teammate that has gone silent instead of polling indefinitely, but the setting controlling it is currently off for this site's account and for the general population, so it is not active yet.

In dev
Nothing to try yet
Useful1 Signal2
Gates

New codenamed gates amber_astrolabe, bison_cairn, larch_cistern#

New internal flags added, including bashActFirstEnabled and three codename gates amber_astrolabe, bison_cairn, larch_cistern

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

Details 0 0 Feedback
What

Claude Code adds several new internal flags:

  • bashActFirstEnabled, controlled by the experiment tengu_gorse_plover (or the CLAUDE_CODE_GORSE_PLOVER environment variable)
  • three codename-style flags, amber_astrolabe, bison_cairn, and larch_cistern, each backed by its own experiment and a matching CLAUDE_CODE_* environment variable override

Several places in the code that used to read the bison_cairn, larch_cistern, and amber_astrolabe flags directly were rewritten to instead read fields off local event objects, such as pollEmptyDispatch and ideSelection.

Why

These are internal flags for gradually rolling out unreleased behavior, so nothing changes for most users yet. The shift away from reading the flags directly at some call sites suggests those particular checks are being replaced by more targeted logic.

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

New tengu gates: tengu_typed_koala, tengu_zinc_harbor, tengu_tranquil_crescent#

Claude Code adds three new internal feature gates: typed_koala, zinc_harbor, tranquil_crescent

Unclear The specific capabilities gated by tengu_zinc_harbor and tengu_tranquil_crescent are not named in the evidence, and no reading of any of the three gates has been taken under this release yet.

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

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

This account: on · anonymous baseline: on · compiled default in v2.1.275: 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_zinc_harbor 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.275: off

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

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

Details 0 0 Feedback
What

Three new internal feature gates were added:

Why

These are internal rollout controls; the finding does not say what user-facing behavior any of them enables.

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
Bash Tool no docs found unclear

coordinatorReadOnlyBashEnabled cache field declared with no other reference#

A new coordinatorReadOnlyBashEnabled cache field was added but nothing yet reads or writes it

Unclear The finding does not say what a read-only bash mode for a coordinator would do, since nothing yet references the field.

Details 0 0 Feedback
coordinatorReadOnlyBashEnabled
What

A new field called coordinatorReadOnlyBashEnabled was added to the internal cache that stores feature-flag values, sitting alongside similar existing cached flags. Nothing else in the code reads or writes this field yet.

Why

This appears to be groundwork for a feature that is not wired up yet, so it has no effect for anyone using Claude Code right now.

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 Signal1
Message Queue

Command-queue clear can now optionally preserve certain entries, but the switch is hardcoded off#

Command queue clearing gained a way to keep certain entries, but it's not turned on anywhere yet

Details 0 0 Feedback
What

When the queue of pending commands is cleared (for example, on a cancel), the underlying function now supports a keep option that would let commands matching a certain check survive the clear instead of being wiped. However, this option is not currently used anywhere, so the wipe still clears everything as before.

Why

This is groundwork for a future change; it doesn't currently change what you see when you cancel and your queue is cleared.

Related

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

125 entries

Internal Changesopen

·Internal
Under the hood
Useful2 Signal3
Plugin API no docs found

Policy manifest gains session.root, prompt.read, ui.panes surface entries#

Plugin API policy list adds session.root, prompt.read, and ui.panes as permitted actions

Details 0 0 Feedback
session.rootprompt.readui.panes
What

The internal manifest of known/permitted actions that plugins can request through Claude Code's API grew three new entries: session.root, prompt.read, and ui.panes. These join existing entries like session.cwd, flag.value, and the ui.blit family.

Why

This expands what plugins are allowed to access or do through the API, likely enabling plugin features that need the session's root directory, read access to prompts, or control over UI panes.

Related

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

·Internal
Under the hood
Useful2 Signal2
Group of 6 Tool Results unclear

Tool results and denials can now carry a structured 'remedy'#

Failed or denied tool calls now include a structured remedy code so hosts can offer a fix without parsing error text

Unclear What a 'remedy' represents or when it is populated is not stated.

Details 0 0 Feedback

What

  • A new internal remedy field can be attached to a tool result's metadata (tool_result_meta), giving a structured reason for a failure instead of free text. Its possible values include mcp_needs_auth, mcp_disabled, mcp_required_missing, auth_expired, auth_overridden, auth_missing_scope, design_needs_authorization, sandbox_violation, outside_reads_blocked, memory_paused, feature_disabled, policy_denied, spawn_arg_limit, and staged_for_review.
  • This remedy is now threaded through as toolResultRemedy when building the tool-result message shown to Claude, and included in the transcript summary for denied or blocked tool calls alongside the existing non_execution_kind.
  • Errors produced after a failed tool call now include toolResultRemedy next to the existing toolDenialKind, both produced by new classifier functions that turn internal permission-deny and connection/auth failures into these structured kinds.

Why

This lets tools and host applications programmatically detect why a call failed, for example missing MCP authorization versus a sandbox violation, and suggest the right fix instead of relying on parsing human-readable error text.

Related

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

·Internal
Under the hood
Useful3 Signal2
Images unclear

New local image store for stored image content#

A new local image store was added for saving stored image content to disk

Unclear The finding does not say which features use this store or when images are written to it.

Details 0 0 Feedback
What

Claude Code has a new image-storage subsystem with functions to find the image store's directory, list the ids of stored images, and atomically write base64-encoded image content to disk, detecting the correct file extension from the image data itself. It logs a message when an image is stored successfully, or a warning if the image store is unavailable.

Why

This provides infrastructure for saving image content locally, which other features (such as poll events carrying media) can build on.

Related

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

·Internal
Under the hood
Useful3 Signal2
File Writes

Atomic file writes support a 'beforePublish' refusal hook#

Atomic file writes can now be aborted mid-write by a new beforePublish check that throws PublishRefusedError

Details 0 0 Feedback
What

The internal helper Claude Code uses to write files and other artifacts safely (writing to a temporary location and then swapping it in, so a crash never leaves a half-written file) now supports a beforePublish check that runs just before the write completes. If that check returns false, the write is aborted, a new PublishRefusedError is thrown, and nothing is published, including cleaning up any empty placeholder file that may have been created along the way.

Why

This gives internal callers a way to cancel a write at the last moment based on some condition, without risking a partially-written or stray file being left behind.

Related

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

·Internal
Under the hood
Useful2 Signal2
Elsewhere

Skill/command/agent trust checks now consider multiple project config roots#

Trust checks for skills, commands, and agents now look across multiple project config roots, not just one

Details 0 0 Feedback
What

When Claude Code decides whether to trust custom commands, agents, and skills defined in .claude/commands, .claude/agents, and .claude/skills, it previously checked a single hardcoded directory. That logic now iterates over a list of locations that includes the working directory and, if configured, a separate project-config-root path.

Why

Projects that keep their .claude configuration in a separate root from the working directory get correct trust checks instead of being evaluated against only the working directory.

·Internal
Under the hood
Useful2 Signal2
Artifacts

Multi-root scratchpad/base-directory resolution#

Artifact base-path resolution can now match against multiple repository roots, not just one

Details 0 0 Feedback
What

The logic that redirects artifact base paths (used for scratchpad files) and the headless setup summary previously worked against a single current-working-directory or scratchpad path. Both now accept a list of additional repository roots and check redirected paths against any of them.

Why

This lets artifact and scratchpad path handling work correctly in setups spanning multiple repository roots rather than assuming just one.

·Internal
Under the hood
Useful2 Signal2
Policy Limits

Policy-limits fetch telemetry gains auth-denial and injected-token-recovery fields#

Policy-limits telemetry now records server auth denials and injected-token recovery outcomes

Details 0 0 Feedback
What

When Claude Code fetches an account's policy limits, it now performs an upfront check of the managed-configuration policy gate, and its telemetry and credential-state tracking gain new fields covering server-side authentication denials and the outcome of attempts to recover using an injected token.

Why

This gives more visibility into why a policy-limits fetch might fail due to authentication, and how token recovery attempts resolve, which helps diagnose account and credential issues.

Related

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

·Internal
Under the hood
Useful2 Signal2
Team Memory

Team-memory multistore sync gains a new basis-materialization step and richer telemetry#

Team-memory multi-store sync gains a new materialization step and more detailed sync telemetry

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

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

This account: on · anonymous baseline: on · compiled default in v2.1.275: 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.275. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
What

The routine that syncs team memory across multiple stores now runs an additional step after it materializes the manifest (the record of what should be synced), when a certain internal setting is on. The telemetry event that summarizes each sync also gains three new fields: off_retries, off_store_count, and off_pull_failure, describing stores whose baseline data couldn't be used.

Why

This gives more visibility into cases where a memory store's underlying data is unusable, and adds a step to handle rebuilding a usable basis for that store, which should make multi-store team-memory syncing more resilient to inconsistent stores.

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

Multi-store-sync writes gain a 'publish fence' that can drop writes and now return an explicit publish outcome#

Storage sync writes gain a 'publish fence' that can drop a write and now report whether it published

Details 0 0 Feedback
What

When Claude Code syncs data across multiple storage backends, the write function now checks an optional publishFence on the backend, both before starting and again right before the final write. If the fence's file no longer exists, or its mayPublish() check returns false, the write is dropped and the old content is re-fetched instead of being overwritten.

The function also now returns an explicit "published" or "dropped" result instead of returning nothing.

Why

This prevents a storage sync write from overwriting data when another process has moved on or the write is no longer valid, and lets callers tell whether their write actually took effect.

·Internal
Under the hood
Useful2 Signal2
Remote Control unclear

Remote control requests now carry attestation data#

Remote control tool/permission requests now carry attestation data

Unclear What attestation mechanism produces these values or how they are validated is not stated in the finding.

Details 0 0 Feedback
What

When a remote session forwards a tool or permission request to a callback (the code that decides how to handle it), it now also includes attestationStatus and attestationRaw fields alongside the existing timing information.

Why

This gives remote-control handlers more information to verify the authenticity of an incoming request before acting on it.

Related

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

·Internal
Under the hood
Useful2 Signal2
Plugins

npm-marketplace plugin lane flag added to install/publish context#

Plugin install/publish now handles npm-based marketplace plugins via a dedicated resolution path

Details 0 0 Feedback
What

When installing or publishing a plugin whose id matches an npm-marketplace naming pattern, Claude Code now marks the operation with an isNpmMarketplaceLane flag and resolves its version through npm resolution, rather than through the normal git/archive-based resolution used for other plugins.

Why

This lets Claude Code properly support plugins distributed via npm marketplaces, using version resolution appropriate to npm packages instead of the git-based flow.

·Internal
Under the hood
Useful2 Signal2
SDK

SDK model switching gains hook-gated flow with gateway/plan-mode side effects#

SDK-driven model switches now go through hook approval and can affect auto/plan permission modes

Details 0 0 Feedback
What

When the SDK (the programmatic interface used to drive Claude Code) triggers a model switch, the handler for it now validates the target model, can short-circuit early via a bridge-print check, and routes the change through a hook-approval step, unless the session has no hooks pending, before applying it. Hooks are user-configured scripts that can approve, block, or modify actions. After the switch, the handler adjusts tool-permission context for sessions in 'auto' or 'plan' permission mode: it can deny the switch (recorded as auto_gate_denied) or update plan-mode context as appropriate.

Why

This means a model switch requested via the SDK can now be intercepted by hooks and can be denied or adjusted based on the session's current permission mode, rather than always applying immediately.

·Internal
Under the hood
Useful2 Signal2
Auth

Auth-liveness check gains explicit injected-token recovery states#

Login-credential health checks now recognize two ways an injected token can recover after failing

Details 0 0 Feedback
What

When Claude Code gets a 401 (an authentication failure) response and checks whether the login credential behind it is still working, it now looks at a new signal called injectedTokenRecovery, used specifically for credentials that were injected rather than logged in normally. This signal can be:

  • none, meaning the credential is treated as dead (no longer usable)
  • sdk_host_refresh, meaning the credential is still treated as live
  • runner_rotation, meaning the credential is still treated as live
Why

Previously a 401 may have simply meant a credential was assumed dead. This change lets Claude Code recognize cases where an injected token can recover on its own, avoiding unnecessary treatment of a still-usable credential as broken.

·Internal
Under the hood
Useful2 Signal2
Sandbox no docs found

Sandbox-aware write-permission check via CLAUDE_CODE_SANDBOXED#

Write-permission checks now branch based on whether Claude Code is running sandboxed

Details 0 0 Feedback
CLAUDE_CODE_SANDBOXED
What

Claude Code now uses a different check to decide whether a file can be written to depending on whether the CLAUDE_CODE_SANDBOXED environment variable is set. Inside a sandbox, one internal check is used; outside of it, a different one applies. A related addition drains any pending write queues before this decision is finalized.

Why

This lets Claude Code apply the correct write-permission logic depending on whether it's running inside a sandbox (a restricted environment that limits what a process can access), rather than using one check for both situations.

·Internal
Under the hood
Useful2 Signal2
Git unclear

New git/session repo-identity tracking state added to session lifecycle#

Sessions now track much more detail about the git repo they launched in

Unclear What user-facing behavior this new tracking state enables is not stated in the finding.

Details 0 0 Feedback
What

The internal object that tracks a session's git status has grown a large set of new fields recording repository identity at launch time, including pendingCommits, sessionRepoRoot, sessionCanonicalRoot, launchGitDir, launchCommonDir, launchModuleDirs, launchInodeIdentity, launchPinHandles, launchHeldDirs, vouchedRepos, launchStateTaken, launchRepoRoot, nonGitLaunch, commitGateLatched, launchHookRepo, pendingVouches, attachedDirs, and registration.

Why

The finding doesn't say what feature consumes these fields, but tracking this much detail about the launch-time repo location suggests Claude Code is building toward more careful checks around which git repository a session belongs to.

·Internal
Under the hood
Useful2 Signal2
System Prompt

System-prompt tool_removal blocks added alongside tool_addition#

System prompt can now list tools that were removed, not just added

Details 0 0 Feedback
What

The internal function that builds the system prompt's tool-context section can now describe tool removals as well as additions. It emits tool_removal entries (referencing the tool by name) ahead of any tool_addition entries, and callers now pass a list of removed tools alongside the list of added ones.

Why

This lets Claude's system prompt explicitly note when a tool has been taken away during a session, not just when one is added, which should help Claude stay accurate about which tools are currently available.

Related

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

·Internal
Under the hood
Useful2 Signal2
Elsewhere no docs found

System-prompt "folded attachment" shape now tracked for cache-break diagnosis#

Cache-break diagnostics now track the system prompt's folded attachment shape too

Details 0 0 Feedback
tengu_prompt_cache_break
What

Claude Code already tracks the shape of messages sent to the model to help diagnose when the prompt cache breaks (a cache break means the model has to reprocess parts of the prompt it would otherwise reuse, which costs time and money). A new function now also computes a fingerprint of the system prompt's "folded attachment" spans, recording the type, length, and hash of each part. When a cache break happens, a diff of this shape (parts added, removed, reordered, or changed, plus length differences) is now included in the tengu_prompt_cache_break telemetry event.

Why

This gives Claude Code more detailed internal diagnostics for figuring out what specifically changed in the system prompt when a cache break occurs, building on the message-shape tracking already used for the same purpose.

·Internal
Under the hood
Useful2 Signal2
Hooks unclear

Hook execution now tracks a per-call 'reading budget' and records timing for hooks that never call next()#

Hook execution now tracks a reading budget and logs timing when a hook never calls next()

Unclear What the 'reading budget' controls or limits is not stated in the finding.

Details 0 0 Feedback
What

Hooks (custom scripts that can run at points in Claude Code's workflow) are invoked with a new budget accessor available to their execution context, both in normal runs and in .catch error handlers. Separately, Claude Code now detects when a hook produced no downstream calls at all (and wasn't an error handler or a 'hop' handler) and records timing information for that case.

Why

This is internal bookkeeping that gives Claude Code more visibility into hook behavior, particularly hooks that run but never pass control onward, without changing what a hook author needs to do.

·Internal
Under the hood
Useful2 Signal1
Group of 2 Telemetry

Cache-related telemetry now records time since the last assistant message#

Prompt-cache telemetry now notes whether it has been over 5 minutes or over 1 hour since the last assistant message

Details 0 0 Feedback

What Both the cache-read-token diagnostic event and the prompt-cache break/invalidation diagnosis call now include lastAssistantMsgOver5minAgo and lastAssistantMsgOver1hAgo boolean fields, computed from how long ago the last assistant message was sent. The cache-read event also gains an is1hCacheTTL field, and both gain a querySource field.

Why Knowing how long it has been since the last assistant message helps explain why a prompt cache was or was not reused (caches can expire after a period of inactivity), making cache-behavior diagnostics easier to interpret.

·Internal
Under the hood
Useful2 Signal1
UI unclear

Turn/command preview component reworked to support multiple processed commands per turn#

The internal component that previews turns/commands was reworked to show multiple processed commands per turn

Unclear The finding doesn't say what user-visible difference this produces, only that the internal rendering logic now supports multiple commands per turn.

Details 0 0 Feedback
What

The internal component responsible for rendering a checkpoint or turn preview now works with a full turn object and can list all of a turn's processed commands, rather than only ever matching a single command out of a flat list of messages. Related spacing logic between preview rows was also adjusted.

Why

This is an internal rendering change; it doesn't introduce a new command or setting, but it lays the groundwork for turn previews to correctly display cases where a single turn produced more than one processed command.

·Internal
Under the hood
Useful2 Signal1
UI

Plugin-recommendation confirmation dialog generalized into a reusable component#

The plugin-recommendation confirmation dialog was rebuilt as a reusable shared component

Details 0 0 Feedback
What

The confirmation dialog that used to be specific to plugin recommendations was rewritten to use a new shared component that takes generic title, intro, question, options, and unansweredResponse inputs, plus an optional extraIdentityRow slot for extra identity information.

Why

This is an internal restructuring that makes it easier to reuse the same confirmation-dialog layout for other prompts (such as the new marketplace-add confirmation), rather than a change to what the plugin-recommendation dialog itself shows.

·Internal
Under the hood
Useful2 Signal1
Auth

Server error classification: new OAuth/credential denial reason codes#

Server auth errors are now classified into specific denial reasons like token_revoked or org_access_revoked

Details 0 0 Feedback
What

A new classifier reads a server error message and sorts it into one of several specific reasons: org_access_revoked, workspace_revoked, token_revoked, token_expired, token_invalid, application_deactivated, credential_invalid, or other. This populates a new serverAuthDenial telemetry field whenever a server authentication or permission error occurs without an explicit error code already attached.

Why

This gives more specific information about why a server rejected a request for authentication or permission reasons, instead of lumping all such failures together.

·Internal
Under the hood
Useful2 Signal1
Sessions

Session-fork sanitization clears bridge and artifact-monitor state#

Forking or resuming a session now clears bridge and artifact-monitor state

Details 0 0 Feedback
What

When session state is carried forward into a fork or resume, a new helper now strips it of certain state so it doesn't leak into the new session. It clears artifactCommentMonitor and artifactAutoReactLedger unconditionally, along with a full set of bridge-related fields: bridgeSessionId, bridgeLastSeq, bridgeDialogKinds, bridgeSessionGroupingId, bridgeNoHistoryBackfill, bridgeOwnerAccountUuid, and bridgeOwnerOrganizationUuid. It can also optionally strip worktreeSession and relocatedCwd.

Why

This prevents a forked or resumed session from inheriting artifact-monitoring or bridge-connection identifiers that belonged to the original session, avoiding cross-session state confusion.

·Internal
Under the hood
Useful2 Signal1
MCP unclear

Deferred-loading behaviour for MCP tools tightened#

Tools from MCP servers are now deferred from loading by default, with one new exception condition

Unclear The new condition that skips deferral (Xzt()) isn't identified, so it's unclear what circumstance it represents.

Details 0 0 Feedback
What

Tools that come from MCP servers (Model Context Protocol, a way to connect external tools to Claude Code) are now deferred (not loaded immediately) unconditionally, whereas before this was gated behind a feature check. The only exception is when a new internal condition is true, in which case deferral is skipped entirely.

Why

This tightens when MCP tools get loaded up front, likely to reduce unnecessary upfront loading, though the specific new exception condition isn't named in a way that says what it represents.

·Internal
Under the hood
Useful2 Signal1
REPL

New REPL poll-event idle delivery guard class#

Claude Code now detects and recovers queued REPL events that a turn failed to deliver

Details 0 0 Feedback
What

Claude Code now tracks whether queued interactive-session (REPL) events were actually delivered during the turn that was supposed to handle them. If a turn finishes without delivering those queued events, an error is logged internally and an empty placeholder prompt command is re-queued so the events get flushed on the next turn instead of being silently dropped.

Why

This prevents queued input from getting stuck and never reaching a turn, ensuring it's eventually processed on a following prompt.

Related

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

·Internal
Under the hood
Useful2 Signal1
Memory Sync

Memory sync adds an 'off' backoff-with-jitter retry state#

Memory sync adds a backoff-with-jitter retry mode for when memory storage is unusable

Details 0 0 Feedback
What

The background process that keeps memory in sync now detects when a memory store's underlying basis is unusable. When that happens, it increments a retry counter and computes a randomized backoff delay (jitter), and pushes the sync with the reason off_retry instead of the usual periodic reason. The interval between resyncs is now computed by a dedicated helper.

Why

This prevents the memory sync process from retrying too aggressively or too predictably when its storage basis isn't usable, spacing out retries instead of hammering it on a fixed schedule.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Sandbox

Java proxy trust store: reuse system store, configurable type#

Claude Code's Java tool proxy now reuses the system JDK trust store when possible and lets you configure the trust store type instead of assuming PKCS12

Details 0 0 Feedback

What

  • Before building a new Java trust store for the agent proxy's certificate authority (CA, used to intercept and inspect traffic for tool safety), Claude Code now checks whether the machine's own Java trust store already trusts that CA. If it does, that existing store is reused directly instead of building a merged one.
  • A new javaTrustStoreType setting is now required alongside javaTrustStorePath when constructing JAVA_TOOL_OPTIONS. Previously the trust store type was always assumed to be PKCS12; now it can be set explicitly.

Why

This avoids unnecessary rebuilding of the trust store when the system already trusts the proxy's CA, and makes the setup work with Java trust stores that aren't in PKCS12 format.

Related

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

·Internal
Under the hood
Useful1 Signal1
Group of 4 Elsewhere no docs found unclear

New disableQuery flag and filterCommands hook wired through the session engine#

A new disableQuery flag can short-circuit turns and resume behavior, alongside a new filterCommands hook for the command list

Unclear The finding does not say what sets disableQuery or why a turn would need to be skipped.

Details 0 0 Feedback
disableQuery

What

A new disableQuery flag and a new filterCommands hook were added and threaded through several parts of the session engine:

  • The main query-run loop now checks disableQuery right after session-start hooks; if set (alongside a new-turn or queued-input condition), it returns early without running the turn.
  • Session resume/adopt logic now checks disableQuery before auto-resuming orphaned agents or workflows, and before prompting about a stale resume, skipping both when it's set.
  • The command-registry gained a filterCommands option and a memoized helper to filter the command list by a predicate, for plugins or other consumers to narrow which commands are shown.
  • The main session component now accepts and passes through both disableQuery and filterCommands into the session engine, command-registry service, and turn controller.

Why

Together these let something embedding or driving a session suppress normal query/turn execution and restrict which commands are available, useful for building restricted or specialized session modes.

Related

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

·Internal
Under the hood
Useful1 Signal1
Group of 2 UI

MCP tool display UI now loads lazily#

The UI code for displaying MCP tool results now loads only when actually needed, instead of being bundled eagerly

Details 0 0 Feedback

What

The registry of per-tool result renderers was restructured so that several plugin-specific tool UI entries are replaced by a single module that's lazily imported. Specifically, the mcp-display-only tool kind now has a getter-backed entry that only imports its display module (displayOnlyMcpToolUi) when that tool type actually needs to be rendered, rather than bundling it eagerly with everything else.

Why

This reduces the amount of code loaded upfront, since MCP display-only tool UI code is now fetched only when a session actually uses that tool type.

Related

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

·Internal
Under the hood
Useful1 Signal1
Group of 2 Elsewhere unclear

Headless background-task wind-down gains an eval-settle hold#

Claude Code's headless/print mode now tracks whether it should hold dispatch for eval settling and whether a background-wait ceiling was hit

Unclear The finding does not say what holdsEvalSettles() is meant to represent or when it might return true.

Details 0 0 Feedback

What

  • A new holdsEvalSettles() check was added to the drain/session-loop wait condition, as part of a rewrite that collapsed several separate booleans into one inline check.
  • In headless/print mode, the background-task dispatch loop now accepts a holdsEvalSettles callback; when it returns true, task dispatch (takeHead()) is held rather than proceeding.
  • A new bgWaitCeilingExceeded field records whether the CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS wait ceiling was reached.

Why

This gives headless/print-mode runs finer control over when background task dispatch should pause to let evaluation settle, and visibility into whether the configured wait ceiling was hit.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Elsewhere

Auto-mode classifier telemetry now records the root tool surface#

Auto-mode permission-decision telemetry now includes which root tool surface was in use

Details 0 0 Feedback

What The tengu_auto_mode_decision telemetry event, covering both the direct tool-call classifier and the sub-agent handoff classifier, now also records a rootToolSurface field. This is threaded through explicitly in function signatures instead of being bundled only inside the tool-permission context, and it is also passed when a workflow-spawned agent finishes in "auto" permission mode.

Why This gives clearer visibility into which tool surface was active when an auto-mode permission decision was made, useful for understanding and debugging auto-mode behavior across both direct and workflow/sub-agent invocations.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Query-string redaction helper for logged URLs#

URLs shown in logs now have most query-string values redacted

Details 0 0 Feedback
What

A new helper redacts the query string of any URL before it's logged or displayed: it keeps the path, but replaces the value of each query parameter with ***, unless the parameter's name is on an allowed list (ref, branch, tag, path, file, file_path, version, format) and its value looks like a safe, path-like string.

Why

This reduces the chance that sensitive data passed in a URL's query string (like tokens or identifiers) ends up exposed in logs, while still keeping harmless, useful values like a git ref or file path visible for debugging.

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
Poll Events

Poll event 'kind' now format-validated and per-kind size-capped, wording of reserved-kind error changed#

Poll events now validate their 'kind' field format, cap size per kind, and can carry media

Details 0 0 Feedback
What

Internal poll events (used for delivering updates) now have stricter validation on their kind field:

  • kind must match a pattern of a lowercase letter followed by lowercase letters, digits, or hyphens, up to 64 characters, and events that don't match are rejected with a new error message
  • the maximum envelope size is now looked up per kind instead of using one fixed limit for all events
  • the error message shown when a reserved kind is used has changed wording, now referring to a "trusted in-process producer" instead of a "server-authored producer"
  • poll events can now optionally carry a media field
Why

The stricter format check and per-kind size limits make poll event handling more precise and harder to misuse, and the new media field lays groundwork for events to carry attachments.

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
Project Config unclear

Subprocess auth/telemetry helpers now run from the project config directory when one is set#

Auth and telemetry helper commands now run from the project config directory when one is configured

Unclear placeholder

Details 0 0 Feedback

**What

Related

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

·Internal
Under the hood
Useful1 Signal1
Models unclear

Effort-level helper reworked to pull model from a new source function#

Internal helper for attaching effort_level to telemetry now pulls the model from a different internal source

Unclear the finding is a low-level rename of an internal helper's data source with no stated effect on behavior; unclear what this changes for a reader beyond that the internal wiring differs

Details 0 0 Feedback

**What

·Internal
Under the hood
Useful1 Signal1
UI

Rate-limit options dialog rewritten from React-compiler memoized form to a plain component#

Rate-limit options dialog's code was rewritten from compiler-generated memoization to plain hooks

Details 0 0 Feedback
What

The component behind the rate-limit options dialog was rewritten from an auto-generated, memoization-heavy form (produced by a React compiler) into ordinary hooks-based code. This accompanies the new limit-wall-promo option added to the same dialog.

Why

This is an internal code change with no described effect on behavior; it doesn't change what the dialog looks like or does.

·Internal
Under the hood
Useful1 Signal1
Plugins

Plugin loading splits out npm-sourced plugins from marketplace catalog flow#

Plugins installed from npm are now resolved through a separate code path from marketplace plugins

Details 0 0 Feedback
What

When Claude Code figures out which plugins are enabled, plugins whose source is the special "npm" pseudo-marketplace are no longer processed through the normal marketplace-catalog lookup. Instead they are resolved through a dedicated path built specifically for npm-sourced plugins.

Why

This separates the handling of plugins installed via npm from plugins installed via a marketplace catalog, which should make npm-based plugin installs more reliable since they no longer have to go through machinery meant for marketplace catalogs.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

Stream-json input class's internal limit constant raised 50 → 512#

A limit used in stream-json/headless input handling was raised from 50 to 512

Unclear What exactly this constant limits (e.g. queue size, buffered messages, line count) is not established by the evidence.

Details 0 0 Feedback
What

An internal constant used somewhere in the handling of stream-json input (used in headless, non-interactive modes) was raised from 50 to 512, a tenfold increase.

Why

The finding does not say what this limit governs, so it isn't possible to say concretely what changes for users, but a limit raised by 10x suggests headless stream-json input can now handle substantially more of whatever this constant was capping.

·Internal
Under the hood
Useful1 Signal1
Sessions

Fallback model config now seeded to remote sessions#

Fallback model setting is now passed to remote sessions when running under CLAUDE_CODE_REMOTE

Details 0 0 Feedback
CLAUDE_CODE_REMOTE
What

When Claude Code is running under the CLAUDE_CODE_REMOTE environment variable, the resolved fallback-model setting (the backup model used when the primary model is unavailable) is now passed into the remote-control path as well.

Why

This keeps a remotely-run session's fallback model configuration in sync with the rest of its setup, rather than leaving it unset in that path.

·Internal
Under the hood
Useful1 Signal1
Tools

Tool pool cache now also keys on WaitForMcpServers declaration and a REPL primitive grant#

Internal tool-pool cache now also depends on WaitForMcpServers usage and a REPL primitive grant

Details 0 0 Feedback
What

Claude Code's internal cache of which tools are available (the "tool pool") now also takes into account two more factors when deciding whether to reuse a cached result: whether the host has declared it uses the WaitForMcpServers tool, and a "REPL primitive grant" derived from the main agent. Previously the cache only tracked the set of tools and allowed subagent types.

Why

This is an internal correctness fix: without tracking these inputs, the tool pool could theoretically serve a stale cached result when either of these factors changed. It shouldn't be noticeable to users beyond more accurate tool availability.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

CLI startup: conditional auto-launch of a background helper#

Claude Code startup can now auto-launch a background helper process under certain conditions

Unclear The finding does not say what the launched background helper (lp()) actually does.

Details 0 0 Feedback
What

On startup, if the session wasn't opened via a deep link, no MDM (mobile device management) policy-helper configuration is present, and the worktree flag wasn't used, Claude Code now fires off a call to launch a background helper process, catching and ignoring any failure.

Why

This adds an automatic background process launch during ordinary startup in the conditions described, though the finding doesn't specify what the helper does.

·Internal
Under the hood
Useful1 Signal1
MCP unclear

Attachment builder drops a tool-availability gate around pending MCP names#

Pending MCP server names are now always included when building tool-availability updates

Unclear The finding does not say what visible difference this makes to the tools Claude sees during a session.

Details 0 0 Feedback
What

The code that builds the list of tool changes sent to Claude (the "deferred tools delta") used to only include the names of pending MCP clients (external tool servers still connecting) when a certain tool-availability check was false. That check has been removed, so pending MCP client names are now always included. A related keepMcp flag used when stripping tools is also now hard-coded to true.

Why

This means information about MCP servers that are still connecting is passed through more consistently, though the finding doesn't specify the downstream effect of always including it.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

Pasted/attached image dimension lookup now defers to an async image store when available#

Pasted image size lookup can now go through an async image store, gated by a flag

Unclear The tengu_pasted_image_resize_attempt gate is unread, so it's unclear whether this path is active.

Details 0 0 Feedback
What

When Claude Code processes pasted or attached images while building a request, it now checks whether an image store is available and, if so, computes image dimensions in a batch through that store asynchronously instead of the previous method. This path also emits an input_image_block telemetry event counting how many images were successfully stored versus not.

Why

This is a groundwork change for handling image dimensions more efficiently when pasting or attaching images, though whether it is active depends on a gate that has not been read for this account.

·Internal
Under the hood
Useful1 Signal1
Team Memory unclear

Team memory bulk inflate telemetry now scoped to non-account memory#

Team memory bulk-inflate telemetry now only fires for non-account memory, plus a new bail-out

Unclear The tengu_memory_bulk_inflate gate is unread, so nothing can be said about whether it is active.

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

Details 0 0 Feedback
What

The team-memory bulk-inflate process (which loads memory data in bulk) now exits early when rejoinWalkUntrusted is set and its basis data is unusable. Its failure and incomplete-run telemetry event, team_memory_multistore_bulk_inflate, now only fires when the memory scope is not account.

Why

This narrows telemetry to the cases it's meant to cover and avoids continuing a bulk-inflate operation on data that can't be trusted.

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

New session-state flag tracks restored memory pause#

Session state now tracks a restored memory pause flag in resume telemetry

Details 0 0 Feedback
restoredMemoryPause
What

Session state now includes a restoredMemoryPause field, with matching getter and setter methods, alongside the existing memoryToggledOff field. This new field is now included in the telemetry sent when a session is restored or resumed.

Why

This lets Claude Code track and report whether a memory pause was carried over when a session is restored, giving more visibility into memory state across session resumes.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

Served model catalog gains an always-false early bail-out#

A new internal check can now skip fetching the served model catalog entirely

Unclear What Ug() actually checks, and thus when the served model catalog fetch is skipped, is not known from the evidence.

Details 0 0 Feedback
What

The internal logic that fetches the catalog of models served to the account added a second condition, Ug(), that can cause the fetch to be skipped entirely, in addition to the existing check for whether the current context is "primary".

Why

The finding doesn't say what Ug() checks or when it returns true, so it's unclear what effect this has for a reader in practice.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

Turn-end event now carries a force flag#

The turn_end lifecycle event now carries a force flag

Unclear What the force flag causes listeners of turn_end to do differently is not stated in the finding.

Details 0 0 Feedback
What

The internal turn_end event, which fires when a conversational turn finishes, now includes a force: true flag when it's emitted, where previously it was sent with no extra options.

Why

The finding doesn't say what consuming this flag changes, so its practical effect isn't clear from the evidence.

Related

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

·Internal
Under the hood
Useful1 Signal1
Telemetry no docs found

New telemetry event for dropped thinking blocks#

New telemetry event tengu_thinking_drop logs when thinking blocks get stripped from a request

Details 0 0 Feedback
tengu_thinking_drop
What

Claude Code now sends a telemetry event called tengu_thinking_drop whenever "thinking" blocks (the model's intermediate reasoning content) are removed from a request before it's sent, for example when there's a mismatch between the prefix of prior turns and the model currently bound to the session. The event records how many blocks and turns were affected, why they were dropped, which message positions were involved, and details of the client-side change that triggered the request.

Why

This gives visibility into a case where reasoning content silently gets stripped out, which should help diagnose situations where thinking output unexpectedly disappears from a conversation.

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
Session State unclear

New SessionState fields: repl poll delivery, project config root#

Session state gains new internal fields for REPL poll delivery tracking and a project config root

Unclear What 'repl poll delivery' and 'project config root' are used for is not stated.

Details 0 0 Feedback
What

Claude Code's per-session state now tracks two new pieces of internal data: a flag called "repl poll delivery requested" that can only be set to true, and a getter/setter pair for a "project config root" value.

Why

The finding doesn't say what these fields are used for, so their practical effect isn't clear from this change alone.

Related

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

·Internal
Under the hood
Useful1 Signal1
Terminal Rendering

Stream-event upload buffer gains a 'parked rows' path tied to a served_policy hold rule#

The terminal display now pauses rendering new frames when output is backed up

Details 0 0 Feedback
What

Claude Code's terminal interface (built on a renderer called Ink) now checks how much output is still queued to be written to the terminal. If that backlog is too large, it holds off scheduling the next frame update and retries after a short delay, rather than always updating on a fixed timer regardless of whether the terminal has caught up.

Why

This prevents the display from getting further and further behind when the terminal can't keep up with output, keeping the interface more responsive instead of piling up unrendered frames.

Related

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

·Internal
Under the hood
Useful1 Signal1
Skills unclear

Skills 'run' library gained a new allow-tool script#

The bundled browser-automation skill added a new internal script file for allowing tools

Unclear The finding shows only that the file was added, not what logic it contains or how it changes the skill's behavior.

Details 0 0 Feedback
What

The built-in "run" skill, which handles browser automation, added a new file called allow-tool.mjs to its internal library folder, alongside the existing files that handle configuration, discovery, guarding, hosts, and tools.

Why

This is an internal addition to how the skill manages which tools are allowed to run; the finding doesn't specify what behavior it changes for users.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact asset upload retries are now flagged as resent#

Retried artifact file uploads are now explicitly marked as resent in the results

Details 0 0 Feedback
What

When Claude Code retries uploading a file (an asset) attached to an artifact, both the success and error outcomes of that retry now carry a resent marker. This marker is also recorded consistently in the background usage tracking (telemetry) even when the upload fails early.

Why

This makes it possible to tell, from the result of an upload, whether it happened on a first try or a retry, which helps in diagnosing upload issues and understanding retry behavior.

·Internal
Under the hood
Useful1 Signal1
Poll Events

Poll tool events can now carry structured child tags, not just text content#

Internal poll events can now include structured tagged sub-elements instead of only plain text

Details 0 0 Feedback

**What

Related

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

·Internal
Under the hood
Useful1 Signal1
Telemetry

Telemetry gains desktopAppVersion field#

Telemetry requests now include a desktopAppVersion field when running in the desktop app

Details 0 0 Feedback
What

The shared metadata that Claude Code attaches to its background usage tracking (telemetry) requests now includes a desktopAppVersion field, alongside the existing agentSdkVersion field. It's only included when it has a value.

Why

This lets Claude Code's telemetry distinguish which version of the desktop app a request came from, which is useful for diagnosing issues that are specific to a particular desktop app release.

·Internal
Under the hood
Useful1 Signal1
Sandbox unclear

Env-var snapshot tracker gains explicit snapshotSettled state#

Sandbox environment-variable snapshot tracking now separates 'settled' from 'available'

Unclear The finding does not say what practical behavior depends on distinguishing these two states.

Details 0 0 Feedback
What

The internal component that tracks whether a snapshot of a sandbox or session's environment variables is ready now keeps track of two separate states: snapshotSettled, which becomes true once the snapshot process has finished running, and snapshotAvailable, which is a separate existing state. Resetting the tracker now clears both.

Why

This distinguishes "the snapshot process has finished" from "the snapshot succeeded and is usable," which is internal plumbing that helps Claude Code reason more precisely about the state of environment-variable snapshots.

·Internal
Under the hood
Useful1 Signal1
Team Memory

Team-memory multistore-conflict telemetry no longer fires for account-scope stores#

Team-memory conflict warnings no longer fire for account-scoped memory stores

Details 0 0 Feedback
What

Claude Code's team-memory feature logs a team_memory_multistore_conflict event when it detects certain conflicts, such as a manifest changing mid-pull, a manifest appearing foreign at write time, an unlisted non-empty directory, or a foreign partition directory. These checks now skip firing when the memory store in question is scoped to the account rather than to a team.

Why

This avoids raising multistore-conflict warnings for memory stores that are personal to an account, where that kind of conflict isn't meaningful, reserving the warning for cases where it actually indicates a problem.

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

Memory/precompact payload gains a laptopMemoryDroppedCount#

Pre-compaction memory feedback now also reports a laptopMemoryDroppedCount

Details 0 0 Feedback
What

The feedback data sent before a conversation is compacted (compaction shortens a long conversation to keep it within context limits) now includes a laptopMemoryDroppedCount value, in addition to the existing thirdPartyDroppedCount. This is reported when the payload is too large or otherwise trimmed.

Why

This lets the system track how much memory content specifically from the "laptop" context gets dropped during compaction, separate from third-party content.

·Internal
Under the hood
Useful1 Signal1
System Prompt unclear

Autonomous-operation system guidance now also triggered by a new condition function#

Autonomous-operation guidance now checked with a second condition that takes message state as input

Unclear The finding does not say what the new condition function actually evaluates or when it newly triggers versus the old one.

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

Details 0 0 Feedback
What

The system message that tells Claude "You are operating autonomously. The user is not watching in real time... asking will block the work" is now shown when either of two conditions is true. The second condition now receives the message/state argument, whereas before it was checked with no arguments at all.

Why

By giving the second check access to the current state, the decision of whether to show this autonomous-operation guidance can now depend on details of the ongoing session rather than being a fixed, context-free check.

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
Message Queue unclear

Priority queue insertion can now jump to the front of the queue#

Command admission queue can now place a command at the front instead of the back

Unclear The finding does not say which commands or situations actually use the new ahead option.

Details 0 0 Feedback
What

The internal function that admits a command into the processing queue gained a new ahead option. When set, the command is placed at the front of the queue instead of being added to the back as before.

Why

This allows certain commands to jump ahead of others already waiting, rather than always being processed in strict arrival order.

Related

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

·Internal
Under the hood
Useful1 Signal1
Telemetry unclear

New worker attestation telemetry events (ccr_worker_*)#

New telemetry events track worker attestation in the CCR relay pipeline

Unclear What CCR stands for and what user-facing feature this pipeline supports is not stated in the finding.

Details 0 0 Feedback
What

Four new telemetry event names have been added covering the CCR worker attestation pipeline: attestation policy receipt, control-request attestation, event attestation, and stray-event attestation.

Why

These events give visibility into the attestation (identity verification) steps a relay worker goes through, which should help diagnose issues in that pipeline.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

New warning when a transcript drain is still running at shutdown#

Claude Code now warns if saving the session transcript is still running when the process shuts down

Details 0 0 Feedback
What

A new helper logs a warning if the process is finishing up but the promise responsible for draining (writing out) the session transcript hasn't finished within a timeout. The warning explicitly notes that the result is returned without waiting for the drain to complete.

Why

This surfaces a case where the transcript might not be fully saved before the process exits, making it easier to notice and diagnose incomplete transcripts instead of it failing silently.

·Internal
Under the hood
Useful1 Signal1
REPL

REPL-mode entrypoint now classified into terminal/host/evals for telemetry#

REPL-mode startup is now classified as terminal, host, or evals for telemetry purposes

Details 0 0 Feedback
What

A new function determines whether the current run counts as a 'terminal', 'host', or 'evals' entrypoint for the async REPL (the interactive prompt loop), based on the entrypoint type, whether input is streamed, the sdkUrl, and asyncReplRequested. This classification feeds a couple of new telemetry emitters.

Why

This lets Claude Code distinguish and report which kind of environment is starting an async REPL session, which can help with understanding usage across terminal, host, and evaluation contexts.

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
Advisor

Advisor-model API errors get dedicated recognition, including org-entitlement case#

Advisor-model API errors are now specifically recognized, including when unavailable for an organization

Details 0 0 Feedback
What

New helper functions now recognize specific 400 errors related to the advisor model: messages saying 'the advisor tool is not available', 'cannot be used as an advisor', or a tools.N.model validation error. A further check identifies the specific case where the advisor is unavailable for the caller's organization.

Why

This lets Claude Code identify and presumably handle or report advisor-related errors more precisely, including distinguishing an organization-level entitlement problem from other advisor errors.

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

Kept-reminder/idle probe renamed to threads probe with its own failure counter#

The idle/kept-reminder probe is now a 'threads probe' with its own failure counter separate from the existing one

Details 0 0 Feedback
What

An internal background probe, previously tied to kept-reminder/idle checks, is now referred to as a threads probe and tracks its own consecutive-failure count via a new threadsProbeFailures counter, giving up after 2 failures. This is separate from the existing clearAtProbeFailures counter used elsewhere.

Why

Separating the failure tracking lets this probe fail and back off independently without affecting the other probe's failure count.

·Internal
Under the hood
Useful1 Signal1
Sandbox unclear

Sandbox status schema bumped to version 3#

Sandbox status data format bumped from version 2 to version 3

Unclear What specifically changed in the status payload between version 2 and 3 isn't stated.

Details 0 0 Feedback
What

The internal payload describing a sandbox's status (the isolated environment Claude Code can run commands in) now reports statusVersion: 3 instead of 2.

Why

This signals a change in the shape or contents of the sandbox status data; the version bump itself doesn't change visible 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 Signal1
Artifacts

New artifact/comment 'outside org' marker on human accounts#

Human accounts outside the organization are now marked with an 'outside' flag in serialized account data

Details 0 0 Feedback
What

When a human account is flagged internally as being outside the organization, that fact is now included in the serialized account object as outside: true. The corresponding data schema gained a matching optional outside field alongside the existing access field.

Why

This lets other parts of the system (such as artifact or comment handling) know when an account belongs to someone outside the org, which was not previously exposed.

·Internal
Under the hood
Useful1 Signal1
Session State unclear

Internal tool-use tracking state reworked#

Internal per-session tool-tracking state replaced caching fields with tool-lifecycle and nested-agent bookkeeping

Unclear The finding doesn't state what user-facing behavior, if any, this internal rework affects.

Details 0 0 Feedback
What

A piece of internal per-session state that used to cache markdownTokens, highlightedCode, and structuredDiff data has been reworked. It now instead tracks retracted, inProgressToolUses, evictedToolUses, and nestedUuidAliases.

Why

This appears to shift the bookkeeping from rendering-related caches toward tracking the lifecycle of tool calls (in progress, evicted) and aliasing identifiers for nested agents, though the visible effect of this internal change isn't specified.

Related

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

·Internal
Under the hood
Useful1 Signal1
Auth

Workspace ID now captured from account info#

Account info parsing now also captures a workspaceId field

Details 0 0 Feedback
What

When Claude Code parses account information, it now also extracts a workspace_id value into a workspaceId field, alongside the existing organizationUuid and workspaceName fields it already captured.

Why

This makes the workspace identifier available internally wherever account info is used, though the finding doesn't say what new feature consumes it yet.

·Internal
Under the hood
Useful1 Signal1
Bash Tool

Bash-tool retry helper with exponential backoff added#

The Bash tool gained a retry helper that backs off 100ms, 200ms, 400ms, then 800ms on specific errors

Details 0 0 Feedback
What

A new internal retry wrapper for the Bash tool retries an operation when it fails with specific error codes, waiting progressively longer between attempts: 100ms, then 200ms, then 400ms, then 800ms. It gives up either when the error isn't on an allowed list of retryable errors or when it runs out of retry attempts.

Why

This should make Bash tool operations more resilient to transient, retryable failures instead of failing immediately on the first error.

Related

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

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

New subscribable signal for host tool-declaration state#

Claude Code adds an internal signal tracking whether a connected host has declared its tools

Unclear What functionality depends on this declared/undeclared signal is not shown by the evidence.

Details 0 0 Feedback
What

Claude Code now tracks, per connected host, whether that host has 'declared' its tools, using a new reactive flag with helpers to mark a host as declared, mark it as undeclared, and subscribe to changes in that state. This is wired in so that clearing a session marks the host as undeclared again.

Why

This is internal plumbing for tracking tool-declaration state per host; the finding does not describe a user-facing effect.

·Internal
Under the hood
Useful1 Signal1
Artifacts unclear

Artifact 'copy' access checks now special-case type-locked artifacts#

Copying a type-locked artifact now goes through a dedicated access check instead of the generic one

Unclear The finding doesn't say what the dedicated check does differently from the generic one, or what a type-locked artifact is.

Details 0 0 Feedback
What

The function that checks whether a user can access an artifact now takes a mode parameter, defaulting to "copy". When that mode is used on an artifact that is locked to a specific type, the check is now routed through a dedicated function instead of the general ownership/read check that other access requests use.

Why

This lets copy permission for type-locked artifacts be evaluated with its own dedicated logic, separate from ordinary read access.

·Internal
Under the hood
Useful1 Signal1
Telemetry

OTEL metrics exporter headers now vary by protocol#

OTEL metrics exporter now builds its request headers based on which protocol is in use

Details 0 0 Feedback
What

The function that builds headers for the OpenTelemetry (OTEL) metrics exporter now also receives the resolved protocol string as an input, so the headers it produces can vary depending on which protocol is being used to send metrics.

Why

This allows the metrics exporter to send protocol-appropriate headers instead of a single fixed set, which matters for anyone configuring OTEL metrics export with different transport protocols.

·Internal
Under the hood
Useful1 Signal1
Artifacts unclear

Artifact comment auto-react/forecast now checks whether the thread is 'headless' in parallel#

Artifact comment auto-react and forecast checks now also detect whether the thread is 'headless' in parallel

Unclear The finding does not say what effect knowing the thread is headless has on behavior, only that the check is now performed.

Details 0 0 Feedback
What

When Claude Code automatically reacts to an artifact comment or generates a summon forecast, it now runs an extra check alongside the usual permission check. This check looks up the artifact's comment capability and determines whether the thread is 'headless' (running without a visible interface), and it runs at the same time as the permission check rather than after it.

Why

Running the two checks in parallel means the headless status is available without adding extra wait time to the auto-react or forecast flow.

·Internal
Under the hood
Useful1 Signal1
Plugin API unclear

Plugin op dispatch (ie) gains a post-processing/scan hook#

Plugin operation dispatch now runs every result through a new post-processing/scan step before returning it

Unclear What the new scan/post-processing step actually does to the op result is not stated in the finding.

Details 0 0 Feedback
What

The internal dispatcher that routes plugin operations now passes a scan argument through, and every operation's result is run through a new post-processing step before it is returned to the caller, instead of being returned as-is.

Why

The finding does not say what the post-processing step checks or changes, only that plugin operation results now pass through it before reaching whatever called them.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

New content-stream case 'thinking_drop' renders to nothing#

New message content type thinking_drop renders as nothing in the chat display

Unclear The finding doesn't say what distinguishes a 'dropped' thinking block from a 'stripped' one.

Details 0 0 Feedback
What

The part of Claude Code that renders message content added a new content type, thinking_drop, which renders to nothing (an empty result), similar to the existing thinking_stripped type used when a model's extended thinking (its visible reasoning steps) is removed from the conversation.

Why

This gives Claude Code a way to mark thinking content as dropped from the display without showing anything in its place, alongside the existing mechanism for stripped thinking blocks.

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

Scheduled task lock acquisition skipped in certain remote/So() sessions#

A scheduled-task lock is now skipped entirely in certain remote sessions instead of being acquired

Unclear It is unclear exactly what session/context check this guards against or what practical effect skipping the lock has for the reader.

Details 0 0 Feedback
What

The internal function that acquires a lock before running a scheduled task now returns immediately, without ever touching the lock file, when no explicit lock directory is given and the session is running in a certain remote context. In that situation the lock is simply never acquired.

Why

Skipping the lock check avoids unnecessary file operations in remote sessions where the lock wasn't being used meaningfully, though it means scheduled-task locking behaves differently there than in a normal local session.

·Internal
Under the hood
Useful1 Signal1
Promotions unclear

Existing status-banner promo gains an extra suppression condition#

An existing status-banner promo now checks an extra condition before it can show

Unclear The exact purpose of the added audience check isn't stated beyond it being another suppression condition.

Details 0 0 Feedback
What

An existing promotional banner's visibility check gained an additional condition. It already suppressed the banner based on two checks (one of them since renamed); now it also checks a viewer/campaign-audience condition before deciding whether to show.

Why

Adding this check narrows down further who sees the banner, likely to avoid showing it to accounts it isn't meant for.

Related

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

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

prompt.submit context building now goes through async storage-aware helper#

Building the context attached to a submitted prompt is now an async, storage-aware step

Unclear The finding does not say what practical difference this makes beyond enabling async/storage-backed resolution of context items.

Details 0 0 Feedback
What

When you submit a prompt, Claude Code attaches any context items (like referenced files) to the message. That attachment step now runs through a new async helper that has access to the session's storage layer (storageV5), instead of reading the context synchronously.

Why

This suggests context items can now be fetched or hydrated from storage before being attached to a prompt, rather than only using whatever was already loaded in memory. For users this should be invisible beyond potentially more complete or up-to-date context being included with a submitted prompt.

·Internal
Under the hood
Useful1 Signal1
System Prompt

Custom system prompt strings can now be split at a boundary marker for caching#

Custom system prompts can now be split into multiple cache segments

Details 0 0 Feedback
What

When Claude Code builds the system prompt used for analyzing context usage, a custom system prompt string is now passed through a new splitSystemPromptAtBoundary() helper instead of being included as one single block.

Why

Splitting the prompt at a boundary allows it to be broken into multiple segments for prompt caching (where Anthropic's API can reuse unchanged parts of a prompt across requests instead of reprocessing them), which can make repeated requests with a custom system prompt more efficient.

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
REPL

REPL progress-message deduplication in the transcript reducer#

Claude Code now cleans up stale REPL progress messages instead of letting them pile up in the transcript

Details 0 0 Feedback
What

The internal system that tracks and updates progress messages in the conversation transcript now matches progress updates more precisely for REPL (interactive code execution) tool calls, using the specific tool call ID rather than a looser match. It also automatically discards older completed or errored REPL progress entries once more than a small number have built up recently.

Why

This keeps the transcript from accumulating stale, no-longer-useful REPL progress records, which should make transcripts cleaner and progress updates more accurate when running interactive code.

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

Cache-key comparators for tool/hook/skill descriptions gain explicit size measurement#

Internal caching for tool/hook/skill descriptions now explicitly measures text size

Unclear The finding does not say what the added size measurement is used for or what behavior it changes.

Details 0 0 Feedback
What

Internal comparators that decide when a cache should be invalidated for tool descriptions, hook text, prompt sections, and skill text now also explicitly measure the size of that text, in addition to the equality checks they already did.

Why

This is an internal caching refinement with no directly described effect on user-facing behavior.

·Internal
Under the hood
Useful1 Signal1
Plugins

npm-sourced plugins skip the "local plugin can't be updated remotely" check#

Plugins installed from npm are now treated like local plugins for update eligibility

Details 0 0 Feedback
What

When Claude Code checks whether a plugin can be updated remotely, plugins sourced from the npm marketplace are now special-cased: the check that normally blocks remote updates for local plugins returns immediately (no block) for npm-sourced plugins, and the plugin-info logic treats npm the same way it treats local plugins.

Why

This avoids incorrectly treating npm-installed plugins the same as ordinary local plugins for the purposes of the "can't update a local plugin remotely" restriction.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Attachment downloads now report timing/size telemetry#

Attachment downloads now report timing and size telemetry

Details 0 0 Feedback
What

When Claude Code downloads file attachments (used when resolving bridge attachments via OAuth), it now tracks the slowest download time and the total number of bytes downloaded in a batch, and reports these numbers in a new telemetry event.

Why

This gives visibility into attachment download performance, which can help identify slow or oversized downloads.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP client connections now record first-party bearer tokens#

MCP connections now store first-party bearer tokens separately in memory

Details 0 0 Feedback
What

When Claude Code successfully connects to an MCP (Model Context Protocol, a way for Claude to talk to external tools and data sources) server, it now also stores the first-party bearer authentication token for that connection in a new internal lookup table, alongside the existing table of auth providers.

Why

This lets Claude Code track and reuse first-party bearer credentials per connection separately from general auth provider state, which is bookkeeping that supports more reliable authenticated MCP connections.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact comments now flag participants outside the organization#

Artifact comments now mark which participants are outside your organization

Details 0 0 Feedback
What

When Claude Code processes comment threads on an artifact, it now identifies which participants are human, verified, and marked as being outside the organization. Comments from those participants now include an outside: true field in their output, and related filtering logic uses this to distinguish outside-org comments.

Why

This lets Claude Code and related features tell apart feedback from people inside versus outside your organization when working with shared artifacts.

·Internal
Under the hood
Useful1 Signal1
UI unclear

New global suggestions/dialog store for a UI overlay#

A new shared store manages suggestion data and dialog state for a UI overlay

Unclear What the suggestions/dialog overlay actually displays or is used for is not stated.

Details 0 0 Feedback
What

A new internal store holds two pieces of state, suggestion data and dialog state, along with a context provider and a set of hooks for components to read and write these values.

Why

This is internal plumbing for a UI overlay feature. The finding doesn't describe what the suggestions or dialog actually show to the user.

·Internal
Under the hood
Useful1 Signal1
Memory Sync

Git diff helpers gain worktree/gitDir awareness#

Memory sync gains a slower 'off' retry mode with random delay when its data store is unusable

Details 0 0 Feedback
What

The background process that keeps memory in sync now checks whether any of its data stores has become unusable. When that happens, it switches into a new 'off' retry state: it counts the number of retries, computes a randomized delay before trying again (to avoid retries all happening at once), and records the reason as off_retry instead of the usual periodic sync reason. The interval between resync attempts is now computed by a new helper function.

Why

This prevents memory sync from hammering a broken data store on a fixed schedule; instead it backs off with increasing, randomized delays until the store becomes usable again.

·Internal
Under the hood
Useful1 Signal1
Plugins

New helper classifies plugin load source for telemetry/errors#

A new helper classifies where a plugin was loaded from, for telemetry and error messages

Details 0 0 Feedback
What

A new internal function classifies how a plugin was loaded into one of three categories: marketplace_not_available (for plugins from reserved registries such as pip, uv, cargo, github, or gh), builtin, or directory_loaded.

Why

This gives Claude Code a consistent way to label a plugin's load source in telemetry and error reporting, which can help diagnose plugin-loading issues.

·Internal
Under the hood
Useful1 Signal1
Auth unclear

New short-lived timestamp-prefixed token validity check#

A new internal check rejects timestamp-prefixed tokens older than 10 minutes

Unclear What token or value this expiry check is applied to, and what happens when it is rejected, is not stated.

Details 0 0 Feedback
What

Claude Code now has a helper that reads a leading number from the start of a string (assumed to be a unix timestamp in seconds) and only accepts the string as still valid if that timestamp is within 10 minutes of the current time; otherwise it treats the value as expired.

Why

The finding doesn't say what kind of string or token this check applies to, so it's not clear what user-facing feature depends on it.

·Internal
Under the hood
Useful1 Signal1
Hooks unclear

tool.call hook-event schema gains a measure combinator#

The tool.call hook event gained a 'measure' step that combines context across related events

Unclear What practical difference the new 'measure' combinator makes to hook authors versus the previous 'carry' function is not stated.

Details 0 0 Feedback
tool.call
What

The internal descriptor for the tool.call hook event, used alongside PreToolUse (a hook point that runs before a tool call executes and can block it), now includes a measure function. This function combines the context of one event with the contexts of a list of related events, replacing what was previously a simpler carry function.

Why

This is internal plumbing for how hook event context is assembled; the finding doesn't indicate a directly user-visible 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
Plugins no docs found

Plugin marketplace name resolution short-circuits for names already qualified with the npm marketplace suffix#

Plugin marketplace resolution skips names already qualified with the npm marketplace suffix

Details 0 0 Feedback
@npm
What

When installing a plugin or accepting a marketplace review, Claude Code now checks first whether the plugin's identifier already ends with the @npm marketplace suffix. If it does, both flows stop immediately instead of trying to resolve or accept a marketplace entry for it.

Why

This avoids redundant or incorrect marketplace lookups for plugin names that are already fully qualified with their npm marketplace suffix.

·Internal
Under the hood
Useful1 Signal1
Gates no docs found unclear

New gate tengu_typed_koala, defaults on, gates a string-comparison helper#

A new internal check flags any non-empty string value other than 'empty_store'

Unclear No reading of tengu_typed_koala has been taken under this release, and the finding does not say what feature this check supports.

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

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

This account: on · anonymous baseline: on · compiled default in v2.1.275: 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.275. It isn't a statement about your account. What a flag value here can and cannot tell you

Details 0 0 Feedback
tengu_typed_koala
What

A new internal helper function checks a value and returns true only when that value is a piece of text (a string) and is not the specific placeholder text empty_store. This check is controlled by a new gate (an internal on/off switch called a feature flag) named tengu_typed_koala.

Why

This is an internal plumbing change with no described effect on what you can do in Claude Code; it's used somewhere to distinguish real stored values from an empty placeholder.

·Internal
Under the hood
Useful1 Signal1
Gates no docs found unclear

tengu_repl_mcp_error_throw gate appears renamed to tengu_tranquil_fern#

The gate behind MCP error-throwing now reads under the name tengu_tranquil_fern instead of tengu_repl_mcp_error_throw

Unclear Nothing has been read about either tengu_tranquil_fern or tengu_repl_mcp_error_throw under this release, so their current state for this site's account is unknown.

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

Details 0 0 Feedback
tengu_tranquil_fern
What

The internal helper that used to check a gate (an internal on/off switch) named tengu_repl_mcp_error_throw now instead checks a gate named tengu_tranquil_fern, with the same default of enabled.

Why

This looks like a rename rather than a behavior change, continuing this gate's history: it was previously documented as one of a small set of flags whose value gets pinned for the life of a session so a remote configuration change mid-session can't flip it, and was compiled on at that time.

Related

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

·Internal
Under the hood
Useful1 Signal1
Plugin API

Plugin op host-refusal messages consolidated behind new gate helper#

Plugin hook-refusal error messages now come from one shared helper function

Details 0 0 Feedback
What

When a plugin operation is refused because no matching hooks module is loaded, or because a loaded hooks module doesn't call that particular hook, both refusal messages now come from a single new shared helper function instead of being handled separately. The code path that runs the operation also now passes along the relevant scan information to the function that picks the runtime handler.

Why

This is an internal cleanup that consolidates duplicate refusal logic; it should not change what message you see when a plugin operation is refused, just how that message gets produced internally.

·Internal
Under the hood
Useful1 Signal1
Sessions

Compact/session-clear now resets a 'host declared tools' flag explicitly#

Clearing or compacting a session now explicitly resets a per-host 'declared tools' flag

Details 0 0 Feedback
What

When a session is cleared or compacted (compaction summarizes and trims history to save space), Claude Code now explicitly resets a piece of state that tracks whether a host has 'declared' its tools, using a new per-host state store. This store can be subscribed to for change notifications, and at least one place in the code uses that subscription to trigger a refresh shortly afterward.

Why

This makes sure that after a session is cleared or compacted, Claude Code doesn't hold onto a stale record of which tools a host previously declared, so that state gets recomputed cleanly.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact type descriptions can now resolve from a type_file reference#

Artifact type descriptions can now be resolved from a separate type_file reference instead of inline content

Details 0 0 Feedback
What

A new function handles describing an Artifact's type when that type's data lives in a separate type_file reference rather than being written inline. It can show either a placeholder for content that hasn't been read yet, or a preview of the actual content. The calling code also now checks a new read_of_type_link flag to decide whether to prefix the type's title before showing its description.

Why

This lets Artifact type information be stored in and pulled from a separate file rather than always being embedded directly, with appropriate handling for cases where that file hasn't been read yet.

·Internal
Under the hood
Useful1 Signal1
UI

UI-message coalescer (DDn) rebuilt with injectable run/schedule/warn hooks#

The UI message batching function was rebuilt to accept swappable run, schedule, and warn functions

Details 0 0 Feedback
What

The internal function that batches and dispatches queued ui.message chains was rewritten so its run, schedule, and warn behaviors can be swapped out, instead of being fixed. By default it still uses the same real implementations as before (a function called yft for running, a setTimeout-based scheduler for scheduling, and the standard warning logger).

Why

This is an internal refactor that makes the message-batching logic easier to test or override, without changing its default behavior for everyday use.

·Internal
Under the hood
Useful1 Signal0
SDK

SDK bridge onSetModel/model-switch code path: internal renaming only#

SDK bridge's model-switching code was re-minified with renamed internals only

Details 0 0 Feedback
What

The bridge code handling model switching and related MCP handlers (onSetModel, onSetMaxThinkingTokens, onMcp*) was re-minified with renamed internal variable names, but the logic, telemetry events, and error messages appear unchanged.

Why

This is a cosmetic/internal packaging change with no described effect on behavior.

·Internal
Under the hood
Useful1 Signal0
Remote Control

Rewind/fork_conversation remote-request handling: internal renaming only#

Internal code cleanup for remote rewind and fork_conversation request handlers, no behavior change

Details 0 0 Feedback
What

The internal handlers for several remote-control request types, including rewind, fork_conversation, read_file, get_workspace_diff, get_plan, stage_file, add_directory, file_suggestions, and seed_read_state, were rewritten with renamed internal variables.

Why

This is housekeeping in the code that handles remote-control requests. There is no indication that behavior changed, so users should not notice any difference.

·Internal
Under the hood
Useful1 Signal0
Auth unclear

New timing constants added near context-source-checkout / OAuth refresh code#

New 10-second and 60-second timing constants added near context-source-checkout and OAuth token refresh code

Unclear What these timers actually govern (timeout, retry delay, or refresh schedule) is not established by the evidence.

Details 0 0 Feedback
What

A few new numeric timing values, two set to 10,000 milliseconds (10 seconds) and one to 60,000 milliseconds (60 seconds), were added into existing code near the error handling for context-source checkout and the scheduling logic for refreshing OAuth (login) tokens.

Why

The finding does not say what these timers control, such as a timeout, a retry delay, or a refresh interval, so it is not possible to say what effect this has for users.

·Internal
Under the hood
Useful1 Signal0
Elsewhere unclear

Startup permission/config plumbing reordered around a new call#

CLI startup swaps one internal setup call for another just before model-restriction wiring

Unclear What functionality these renamed/replaced calls perform, and whether startup behavior actually changes, is not established by the evidence.

Details 0 0 Feedback
What

During CLI startup, a call referred to internally as Fsr(iKn(O)) was removed and replaced with a new call, Ekt(cie(C)), positioned right before the existing code that wires up model restrictions.

Why

The finding doesn't specify what these calls actually do, so it isn't possible to say what practical effect this has on startup behavior.

·Internal
Under the hood
Useful1 Signal0
Chat UI

Chat-history virtualization / speaker-label list rendering internally reworked#

Internal rework of how chat history renders speaker labels and message rows

Details 0 0 Feedback
What

The internal code that computes speaker-label continuation state (whether consecutive messages from the same speaker are grouped together), reply boundaries, and message row rendering in the chat history view was restructured, including a new memoized rendering call. No new user-facing capability was identified.

Why

This appears to be an internal refactor of chat history rendering with no described change in what users see or can do.

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

Screen-reader render pipeline internally reworked (helper renames only)#

Screen-reader output code was internally rewritten with no behavior change

Details 0 0 Feedback
What

The code that produces Claude Code's screen-reader accessibility output was substantially rewritten internally, with functions and local variables renamed. The actual behavior, such as how it detects a paused state, compares against previously shown lines, and delays before pausing, appears unchanged.

Why

This is a code-cleanliness change with no expected effect on what screen-reader users see or hear.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

reply-on-resume flow: internal rename only#

Reply-on-resume code was internally renamed with no behavior change

Details 0 0 Feedback
What

The internal code that handles resuming a prompt and replying after it (covering prefill boundary mismatches, continuing after interrupted output, and clearing context) was heavily renamed internally. The actual behavior appears unchanged.

Why

This is an internal cleanup with no expected effect on how resuming or replying to a prompt 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
MCP

Bridge meta-MCP mount: internal rename only#

Internal rename of the dynamic-MCP bridge server code, no behavior change

Details 0 0 Feedback
What

The module that manages the "meta-MCP" bridge (the internal server config used to mount dynamically connected MCP servers, a way of plugging in external tool servers) had its internal variables and helper functions renamed throughout, including its permission set/get wrapper, allow/deny rule helpers, and mount connect/detach logic.

Why

This is a code-clarity change only; nothing about how the bridge behaves appears to have changed.

·Internal
Under the hood
Useful1 Signal0
Chat UI

Transcript list rendering: memoization slot renumbering only#

Transcript list rendering code was internally renumbered, no visible change

Details 0 0 Feedback
What

A large block of generated memoization code (used to cache parts of message-list rendering and search-text extraction in the conversation transcript view) was renumbered and reshuffled internally.

Why

This appears to be a build/compiler artifact with no visible 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
Artifacts

Artifact publish deploy-response parsing: internal rename only#

Internal rename of artifact publish deploy-response parsing code, no behavior change

Details 0 0 Feedback
What

The code that parses the deploy response when publishing an Artifact — including schema validation, staging file uploads, and handling conflicts or errors — had its internal variable names extensively rewritten.

Why

This is a code-clarity change only; the underlying logic does not appear to have changed.

·Internal
Under the hood
Useful1 Signal0
Message Queue

Message re-queue after aborted session-start hooks now preserves order via enqueueReportingAdmission#

Re-queued messages after an aborted session-start hook now keep their original order

Details 0 0 Feedback
What

When session-start hooks abort a batch of queued messages, the non-prompt and "resurrected" messages in that batch are now collected and re-added in reverse order using a new enqueueReportingAdmission call with an {ahead: true} option, instead of being pushed back one at a time with the plain enqueue call used before.

Why

This preserves the original ordering of messages that get put back on the queue after a session-start hook aborts, avoiding messages ending up out of sequence.

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

LSP plugin recommendation dialog refactored onto a shared generic component#

LSP plugin install prompt rebuilt on a shared dialog component

Unclear Whether this shared component is used by other plugin-recommendation dialogs is not confirmed, only suggested by the finding.

Details 0 0 Feedback
What

The dialog that recommends installing an LSP (language server protocol, used for code intelligence features) plugin has been rewritten to use a shared dialog component instead of its own custom layout, passing in its title, introductory text, plugin name, marketplace name, and options.

Why

This is an internal restructuring that likely lets this dialog share behavior and appearance with other plugin-recommendation prompts, without changing what it recommends.

·Internal
Under the hood
Useful1 Signal0
MCP

MCP task-result saving now records cwd used for the auth-helper subprocess#

MCP auth-helper subprocess now runs with an explicit working directory when one is set

Details 0 0 Feedback
What

When Claude Code saves the results of an MCP (Model Context Protocol, a way of connecting external tools) task, it runs an internal proxyAuthHelper subprocess to handle authentication. That subprocess now runs with an explicit working directory (cwd) when one is available, instead of always using the default.

Why

Setting the working directory explicitly makes the auth-helper subprocess behave consistently regardless of what directory it happens to be launched from, which matters when Claude Code needs it to resolve paths correctly.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

Assistant transcript entries now carry request_id and structured error/uuid/timestamp fields directly#

Assistant transcript entries now explicitly store a request_id alongside error, uuid, and timestamp

Details 0 0 Feedback
What

The internal code that builds each assistant message entry in a conversation transcript was rewritten to explicitly set its fields: type, message, uuid, timestamp, error, and, when available, request_id. Previously this was built by copying the whole input object and only removing one field; now each field is set directly.

Why

This makes transcript entries carry a clear, explicit request_id when one exists, which is useful for tracing a given assistant message back to the specific request that produced it, rather than relying on whatever happened to be present in the original object.

·Internal
Under the hood
Useful1 Signal0
Elsewhere unclear

Trust-workspace default variable renamed in help text template#

Help text for --trust-workspace now references a renamed internal default variable

Unclear It is unclear whether the displayed default value or wording actually changed, or only the internal variable name.

Details 0 0 Feedback
What

The help text shown for the --trust-workspace flag now pulls its default value from a differently-named internal variable than before.

Why

The finding does not indicate any visible behavior change, only an internal renaming of the variable that feeds the flag's help text.

·Internal
Under the hood
Useful1 Signal0
Auth

apiKeyHelper case removed from dead switch in Op#

A dead code path's switch statement dropped an unused apiKeyHelper case

Details 0 0 Feedback
What

Inside a function that is already unreachable (guarded by a condition that is always false), the case "apiKeyHelper" branch was removed from a switch statement that also handles "none", "ANTHROPIC_API_KEY", and /login managed key.

Why

Since this code path never runs, this is a cleanup of dead code rather than a behavior change. It does not affect the apiKeyHelper setting itself, which is used elsewhere to generate API credentials.

·Internal
Under the hood
Useful1 Signal0
Elsewhere unclear

File-read content tracking gained readNotes#

File-read display now carries additional read notes alongside the file's text content

Unclear The finding doesn't say what readNotes contains or how it changes what's shown to the user.

Details 0 0 Feedback
What

When Claude Code renders the result of reading a text file, it now passes along an additional readNotes value together with the file's raw content, rather than passing just the content string on its own.

Why

This allows the file-read display to carry extra contextual notes about the read alongside the content itself, though the finding doesn't specify what those notes contain.

·Internal
Under the hood
Useful1 Signal0
Remote Control unclear

Some abort/tracking object (HN) removed from remote-session hook wiring#

An abort-tracking object is no longer created in remote session hook setup

Unclear What the removed object tracked and what effect its removal has isn't stated in the evidence.

Details 0 0 Feedback
What

In the code that wires up remote/thin-client sessions, an object that used to be conditionally created (when a certain internal flag was true) is now never instantiated at all, in both of the relevant session-hook code paths.

Why

Whatever tracking or abort-handling this object provided is no longer active in these remote session paths; the practical effect for users isn't specified.

·Internal
Under the hood
Useful1 Signal0
MCP unclear

New helper checks whether an MCP client already has a registered auth provider#

A new internal check tells whether an MCP client already has a registered auth provider

Unclear The finding states this is 'likely' used to skip redundant OAuth steps, but doesn't confirm where or how it's actually used.

Details 0 0 Feedback
What

A new helper function checks whether a given MCP (Model Context Protocol) client already has an authentication provider registered, by looking it up in an internal map of client auth providers.

Why

This check likely lets Claude Code skip redundant OAuth registration or step-up authentication steps for a client that's already been set up, though the finding doesn't confirm exactly where it's used.

·Internal
Under the hood
Useful1 Signal0
MCP

MCP call/auth error-handling block heavily refactored (no behavior change found)#

MCP call and auth error-handling code was rewritten internally with no behavior change found

Details 0 0 Feedback
What

The internal code handling MCP (Model Context Protocol, used to connect Claude Code to external tools and data) calls, authentication, clearing auth, and applying flag settings was restructured with new variable names throughout. The error messages it produces and the logic for when they occur appear unchanged.

Why

This looks like internal cleanup rather than a change a user would notice.

Related

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

·Internal
Under the hood
Useful1 Signal0
Elsewhere

Input-box React component internals re-memoized (no evident feature change)#

Chat input box internals were re-memoized with no visible feature change

Details 0 0 Feedback
What

The internal caching logic for the chat input box's React component was regenerated with new internal names and cache slot positions. The visible behavior it supports—history navigation, pasting, opening an external editor, pasting images, and toggling the workflow keyword—looks the same as before.

Why

This appears to be internal refactoring rather than a change that affects how typing or pasting in the input box works.

·Internal
Under the hood
Useful1 Signal0
Sessions

runner session cleanup: appears to be pure identifier churn, no behavioral diff found#

Runner session cleanup code was renamed internally with no behavioral change found

Details 0 0 Feedback
What

The block of code that handles cleanup when a session fails to spawn or is released—unmounting, running the post-session hook, flushing debug logs, and removing worktree and session state—is structurally the same as before. The only differences found were internal variable renames from the build process.

Why

This appears to be incidental renaming rather than a change to how session cleanup behaves.

·Internal
Under the hood
Useful1 Signal0
Slash Commands unclear

No-op fallback for non-prompt name labeling#

A source-scope labeling helper now returns nothing for anything that isn't a prompt

Unclear The finding does not say which non-prompt item types are affected or what previously happened for them.

Details 0 0 Feedback
What

A helper function that labels slash-command-like items by where they come from (project, plugin, org, or claude.ai) now falls through to a function that always returns undefined for any item that isn't a prompt type.

Why

This means non-prompt items no longer get a source-scope label from this helper, avoiding incorrect labeling for item types the helper wasn't meant to handle.

Related

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

4 entries

Removedopen

Removed
You'll notice
Useful2 Signal2
Memory

Account-scope memory store removed / disabled in this build#

Account-level memory storage no longer works in this build and errors instead

Details 0 0 Feedback
What

Claude Code supports storing memory (persisted notes/context) at different scopes. The 'account' scope, which would store memory tied to your account rather than a specific project or machine, now always fails: looking up its storage key throws an error, and the function that used to locate the account-scope storage directory now just returns the literal string "escape" instead of doing a real lookup.

Why

Anyone relying on account-scoped memory will find it no longer works in this build; attempts to read or write it will fail outright rather than silently doing nothing.

Removed
You'll notice
Useful2 Signal1
Env Vars

CLAUDE_REPL_VERBOSE env var and its virtual-message filtering removed#

The CLAUDE_REPL_VERBOSE environment variable and its message-filtering behavior have been removed

Details 0 0 Feedback
What

Claude Code previously supported a CLAUDE_REPL_VERBOSE environment variable. When set, it changed how the message-history compaction and resume logic worked: it would skip certain internal (virtual) assistant and user messages that weren't "thinking" messages. In this build, that variable is gone entirely, and the underlying setting it controlled is now hardcoded to off, so the skip behavior no longer happens.

Why

If you were relying on CLAUDE_REPL_VERBOSE for any workflow, it no longer has any effect, since the code path that read it has been removed.

Removed
You'll notice
Useful2 Signal1
Telemetry

"Context collapse" feature and its telemetry removed#

The 'context collapse' feature and its telemetry have been removed

Details 0 0 Feedback
What

All context_collapse_* telemetry events (apply, ctx_agent_spawn, recover_413, restore) were removed from the list of allowed telemetry events, and related fields such as claimedCollapse and the skipCollapseStatus logic in the memory/context summary builder were stripped out as well.

Why

This removes an existing feature, referred to internally as context collapse, along with its tracking, from Claude Code.

Removed
Under the hood
Useful1 Signal1
Env Vars unclear

CLAUDE_CONTEXT_COLLAPSE_MODEL env var removed entirely#

The CLAUDE_CONTEXT_COLLAPSE_MODEL environment variable has been removed

Unclear The finding does not say what CLAUDE_CONTEXT_COLLAPSE_MODEL did or why it was removed.

Details 0 0 Feedback
What

The CLAUDE_CONTEXT_COLLAPSE_MODEL environment variable, which was previously recognized and passed through by Claude Code in two places, no longer appears anywhere in the codebase.

Why

Anyone who set this environment variable should know it no longer has any effect.

Verbatim
Official · Anthropic

Anthropic’s official release notes

Published verbatim by Anthropic for v2.1.275. 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 95 bullets, 11 name something an entry on this page also names, 27 name something no entry here does, and 57 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 the signed-in account to Claude apps gateway sign-in: when the gateway names it, you confirm it before the credential is saved, and /status shows it Probably new-telemetry-gate-for-opentelemetry-header-helper-failures
  • Added a send-now key (ctrl+enter, or ctrl+x ctrl+s) that interrupts the current turn and sends all queued messages at once; sent and queued messages show in gray until the model receives them Nothing to match on
  • Added a startup warning when a configured otelHeadersHelper fails, so sessions that silently export no telemetry are noticed Probably otelheadershelper-failures-are-now-typed-and-telemetered, new-telemetry-gate-for-opentelemetry-header-helper-failures
  • Added syncing of the skills and plugins enabled on your claude.ai account to terminal sessions signed in with it; opt out with syncClaudeAiSkills: false or syncClaudeAiPlugins: false No entry names this
  • Added /plugin install <plugin> --marketplace <source>, which offers to add the marketplace before installing the plugin Probably adding-a-marketplace-by-link-now-needs-an-explicit-confirm-s, deep-link-plugin-install-commands-can-be-turned-off-by-a-new, marketplace-add-now-refuses-to-overwrite-an-existing-marketp, npm-marketplaceplugin-source-schema-gains-registry-url-vali, npm-hosted-plugin-marketplaces-behind-a-new-gate, new-plugin-install-marketplace-flag-to-install-and-add-a, plugin-install-gains-explicit-marketplace-disambiguatio, new-plugin-install-from-source-and-npm-aware-marketplace-fl
  • Fixed a restored memory file's age note changing between requests after a compaction or resume, which caused prompt cache misses Nothing to match on
  • Fixed --forward-subagent-text stream-json and SDK output dropping the messages of subagents spawned by a context: fork skill, and of forked skills invoked by a subagent or another forked skill No entry names this
  • Fixed @-mention file suggestions being buried below MCP resources when using a custom fileSuggestion command or typing @./@./ No entry names this
  • Fixed fullscreen mode placing background-task completion notices beneath a long turn's collapsed tool row instead of where they arrived; each notice now closes the open row Nothing to match on
  • Fixed claude plugin marketplace update deleting a GitHub marketplace's local copy when the fetch failed and the marketplace was named after its repository No entry names this
  • Fixed plugin and marketplace messages, logs and claude plugin marketplace list showing a password or token stored in a git, ssh or marketplace URL No entry names this
  • Fixed a resumed cloud session leaving an unanswered question open in the transcript after a queued message superseded it Nothing to match on
  • Fixed vim mode placing the cursor one character right after a dot-repeated "!" or a fast-typed "i!" switched a non-empty prompt into shell mode No entry names this
  • Fixed fullscreen mode freezing or blanking for several seconds when scrolling up past a large file diff Nothing to match on
  • Fixed a stray </ccmemory>-style closing tag occasionally appearing in responses No entry names this
  • Fixed plugin messages, logs and the VS Code plugin dialog showing the wrong server for some git addresses Nothing to match on
  • Fixed a terminal API Error: 400 on every turn for users behind a network gateway that rewrites API error responses when a beta request header is rejected No entry names this
  • Fixed sandboxed Bash commands on Linux reporting exit code 0 for failed commands when the shell is zsh Nothing to match on
  • Fixed the Read tool hanging instead of reporting an error when part of a large file could not be decoded under memory pressure Nothing to match on
  • Fixed --resume, the resume picker preview, resumed background agents and the transcript view failing on a session whose saved history contains a malformed task-reminder or @-file attachment entry Probably cloud-sessions-by-default-plain-claude-invocations-can-be, new-env-var-claude-code-parked-permission-wait-ms-with-2000m
  • Fixed a crash when resuming a conversation whose transcript contains a malformed message entry, and a fullscreen crash when such a conversation received new messages while scrolled up Nothing to match on
  • Fixed sessions failing to resume or start when their saved transcript contains a malformed message content block Nothing to match on
  • Fixed Grep, Glob and @-file suggestions hanging or running out of memory on searches over the 20MB output cap, and system ripgrep reporting "no matches" instead of an error after a flood of warnings No entry names this
  • Fixed /rewind in a forked or background session restoring a zero-filled or truncated file when the session's file-history backups could not be fully copied No entry names this
  • Fixed fullscreen sessions sometimes exiting with "Claude Code exited after an unrecoverable interface error" when typing fast or holding a key with the slash-command dropdown open No entry names this
  • Fixed background sessions crashing and restarting their worker when a command fed through stdin ran on a machine that had run out of file descriptors Nothing to match on
  • Fixed a crash at launch when ~/.claude.json holds a malformed mcpNeedsAuthNoticed value No entry names this
  • Fixed --resume and --continue dropping a conversation's earlier thinking when a built-in tool it started with has since been switched off by a server-side flag Probably cloud-sessions-by-default-plain-claude-invocations-can-be, new-env-var-claude-code-parked-permission-wait-ms-with-2000m
  • Fixed text selected with the mouse in the fullscreen claude --resume session picker never reaching the clipboard Probably cloud-sessions-by-default-plain-claude-invocations-can-be, new-env-var-claude-code-parked-permission-wait-ms-with-2000m
  • Fixed plugin reload previews replacing a running session's extracted plugin files when the plugin was loaded from a --plugin-dir or --plugin-url archive No entry names this
  • Fixed self-hosted runners with --drain-wait-sec losing the final result of a turn that finished during a SIGTERM drain; the runner now waits briefly for the turn to be reported No entry names this
  • Fixed SubagentStop hooks with a specific matcher firing for every stopping subagent whose agent type was empty Probably subagentstop-hook-event
  • Fixed sandboxed Bash commands being unable to write to project directories named hooks/ or config/ No entry names this
  • Fixed Artifact updates failing with "File not found" after a session resumes on another machine or its scratchpad is cleared: the page's last published version is restored No entry names this
  • Fixed /update-config writing Write(path) permission rules, which file permission checks don't match, instead of Edit(path) rules No entry names this
  • Fixed four dead documentation URLs (Pricing, Computer Use, Skills, CLI) in the bundled claude-api skill's live-sources table Nothing to match on
  • Improved prompt caching for a --system-prompt that contains a __SYSTEM_PROMPT_DYNAMIC_BOUNDARY__ line: the text above it is now cached globally, as the SDK's array form already is No entry names this
  • Improved the /desktop error when Claude Desktop does not open: it now says why and what to do next Probably improved-desktop-failure-messages
  • Improved the Artifact tool's publish and read results: they now say who can open the page and what the owner's Share menu offers Nothing to match on
  • Improved artifact publish results: they name the tab icon sent, warn when the page contains a NUL byte, and retry a flaky fetch of the newer page to merge after a stale publish Nothing to match on
  • Improved pasted and attached images: they are now saved where Claude can open them as files without a permission prompt, including in Desktop and VS Code Nothing to match on
  • Improved the Artifact tool's guidance so Claude updates a shared artifact in place when you were given edit access to it, instead of publishing a separate copy Nothing to match on
  • Improved plan-usage reads: editor windows and non-interactive sessions on one machine now share a read made in the last minute instead of each calling the usage endpoint Nothing to match on
  • Improved the ListPlugins tool description so Claude knows it lists plugins enabled on your claude.ai account, not plugins installed locally with /plugin Probably adding-a-marketplace-by-link-now-needs-an-explicit-confirm-s, deep-link-plugin-install-commands-can-be-turned-off-by-a-new, marketplace-add-now-refuses-to-overwrite-an-existing-marketp, npm-marketplaceplugin-source-schema-gains-registry-url-vali, npm-hosted-plugin-marketplaces-behind-a-new-gate, new-plugin-install-marketplace-flag-to-install-and-add-a, plugin-install-gains-explicit-marketplace-disambiguatio, new-plugin-install-from-source-and-npm-aware-marketplace-fl
  • Improved responsiveness when the terminal is slow or paused: output no longer falls further behind while the terminal catches up Nothing to match on
  • Improved Write and Edit results for files in the synced account-skills folder: they now say the change is not saved to your account and how to save it Nothing to match on
  • Updated /logout for Claude apps gateway sign-ins to also end the session on gateways that advertise token revocation No entry names this
  • Changed hosted sessions to keep an unanswered permission prompt up after a container restart, instead of asking again Nothing to match on
  • Changed the Artifact tool to ask for a one-word tab icon on a first publish instead of an emoji favicon Nothing to match on
  • Changed Claude in Chrome in auto mode to skip the extension's per-site check for classifier-approved calls, as bypass mode does, fixing browser_batch "Permission denied" after a redirect Probably chromebrowser-tool-batch-url-checks-now-pre-screen-for-unv
  • Changed plugins installed from an npm source to be fetched with npm pack --ignore-scripts and integrity-verified, so a package's install scripts no longer run No entry names this
  • Changed scheduled and Run now routine runs to save data to, and republish the page of, an artifact you can edit without asking; public artifacts, first publishes and deletes still ask Nothing to match on
  • Removed the startup notice that told you a one-off scheduled routine had run since your last session Nothing to match on
  • [VSCode] Added viewing, editing and deleting a saved memory inside the Memory dialog Nothing to match on
  • [VSCode] Added sending an attached image without typing any text Nothing to match on
  • [VSCode] Added a Retry link to the MCP servers dialog when the server list fails to load Nothing to match on
  • [VSCode] Added accept and reject buttons under each change in the proposed-change diff tab, so an edit can be reviewed change by change Nothing to match on
  • [VSCode] Fixed the transcript creeping toward the bottom in small steps while a permission card waits and content keeps arriving Nothing to match on
  • [VSCode] Fixed rewound and forked conversations not keeping the permission mode you had picked for the original conversation Nothing to match on
  • [VSCode] Fixed an empty CLAUDE_CONFIG_DIR entry in the environmentVariables setting making Claude Code keep its files in the workspace No entry names this
  • [VSCode] Fixed plugin install links opening the Manage plugins dialog for plugin names and marketplace addresses that can't be used in a link Nothing to match on
  • [VSCode] Fixed Remote Control staying shown as connected after a turn-off that Claude Code reported as failed; it now shows as off Nothing to match on
  • [VSCode] Fixed the scroll to the bottom on send stopping short of the reply when the reply starts arriving during the scroll Nothing to match on
  • [VSCode] Fixed the agent map showing agents a crash left unfinished as stopped instead of failed once the session is reopened Nothing to match on
  • [VSCode] Fixed the "Continuing the step" notice not appearing, and the continue limit resetting, after a reload that follows a crash with background tasks still running No entry names this
  • [VSCode] Fixed the session list showing when a session was last reopened, such as after a window reload, instead of when its last message was sent Nothing to match on
  • [VSCode] Fixed "Fork conversation from here" failing on the message right after one sent while Claude was working No entry names this
  • [VSCode] Fixed the prompt cache clock showing too few minutes after reopening a session with a message sent while Claude was working Nothing to match on
  • [VSCode] Fixed a background agent that finished while Claude was running a tool losing its completion notice, and its result on the agent map, after a window reload Nothing to match on
  • [VSCode] Fixed a rare case where text selected in a git-ignored file could be sent to Claude after the extension was unresponsive for several seconds Nothing to match on
  • [VSCode] Fixed renaming a running session reverting to the generated name (regression in 2.1.269) Nothing to match on
  • [VSCode] Fixed slash commands typed while Claude is responding being sent to the model as text instead of running once the response finishes Nothing to match on
  • [VSCode] Fixed unreadable code in the plan preview and the Hooks and Permission rules dialogs with the High Contrast Light theme Nothing to match on
  • [VSCode] Fixed /remote-control being ignored while Remote Control is still connecting: running it again now turns Remote Control off immediately No entry names this
  • [VSCode] Fixed the conversation pulling you back to the bottom while a reply streams after you scroll up, and added a claudeCode.scrollToBottomOnSend setting to turn off the jump on send No entry names this
  • [VSCode] Fixed the Manage plugins dialog showing a password or token that was typed into a marketplace URL Nothing to match on
  • [VSCode] Improved the agent map: the pill counts running agents and turns red after a failure, the main agent stays in view while the map scrolls, and agents sort by state then end time Nothing to match on
  • [VSCode] Changed New session in a Claude editor tab to open in the sidebar when Preferred Location is set to Sidebar, instead of always opening another tab Nothing to match on
  • [VSCode] Changed a message sent while Claude is working to wait at the bottom of the conversation until Claude starts on it Nothing to match on
  • [Claude Code on the web] Added a "New routine" button to the page shown when a routine link no longer resolves, next to the link back to your routines list No entry names this
  • [Claude Code on the web] Fixed routine "paused" and "on hold" notifications being cut off mid-sentence; the paused-subscription notice now says to turn the routine back on yourself No entry names this
  • [Claude Code on the web] Fixed cloud environments with a very long allowed-domains list saving fine and then failing every session start; saving now fails up front and says how much to trim Nothing to match on
  • [Claude Code on the web] Fixed Claude's guidance when a cloud session on a personal account is denied GitHub access: it now links to claude.ai/connect-github instead of an admin settings page Nothing to match on
  • [Claude Code on the web] Improved what Claude tells you when asked to edit, delete or run a routine it didn't create: it now links to the routine's page so you can do it yourself Nothing to match on
  • [Claude Tag] Added attach conditions for access bundles in Claude Tag settings: an Owner can let a bundle also apply in channels with guests or Slack Connect channels, not just member-only Nothing to match on
  • [Claude Tag] Added Amazon CloudWatch, CloudWatch Logs, Amazon SNS, Google Cloud Monitoring and Cloud Logging presets to an access bundle's Credentials tab in Claude Tag admin settings Nothing to match on
  • [Claude Tag] Added Datadog presets for the US3, AP1, AP2 and US1-FED sites; new Datadog connections are now limited to Datadog's read and query API routes Nothing to match on
  • [Claude Tag] Fixed S3 uploads from recent AWS CLI and SDK versions failing with a 502 error when sent through an AWS connection Nothing to match on
  • [Claude Tag] Fixed Claude treating a channel as inactive, and skipping untagged messages there, while it was still posting in that channel from a routine or a thread Nothing to match on
  • [Claude Tag] Fixed a thread's "Claude [task]" display name reverting to plain "Claude" after the session behind that thread was refreshed or restarted Probably new-project-config-root-cli-flag-reroutes-project-scope-ac
  • [Claude Tag] Fixed the model you switched to in a Slack thread silently reverting to the channel's default after that thread's session was restarted or refreshed Nothing to match on
  • [Claude Tag] Fixed Claude sometimes replying twice when another app or bot @mentioned it in a top-level channel message Nothing to match on
  • [Claude Tag] Improved Claude's notices in Enterprise Grid channels shared across workspaces: they now say when no workspace is set up yet, or why only organization defaults apply Nothing to match on
  • [Code Review] Fixed reviews occasionally dropping part of their analysis when one of the reviewing agents returned its findings in an unexpected format Nothing to match on
  • [Code Review] Fixed pull requests with more than 100 Claude reviews getting a full re-review on every clean merge from the base branch instead of the lighter merge-focused review Nothing to match on
System prompt

The appended system-reminder blocks moved: 1 line added, 1 line removed.

Claude Code, interactive mode

Documentation

What the docs did around this release

197 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 83 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

Environment variables

Settings and names in the code