Claude Code v2.1.265

511 entries read v2.1.263 → v2.1.265 Markdown Unofficial

This build carries 50 gated additions with nothing switched on, the largest a new "tether" request-threading protocol that would let the API thread requests together server-side instead of resending full context each turn. A rewritten Artifact permission system with five-way ask classification sits behind CLAUDE_CODE_ARTIFACT_FIVE_CLASS_ASKS, alongside a separate targeted str_replace edit operation for the artifact database that appears in at least three of the dormant entries. A new mechanism lets Claude Code signal when an internal "advisor tool" becomes available, and the SDK/host initialize call gains a workspaceTrust option for programmatically granting directory trust. Plugins also get a windowed ui.open/ui.close surface capped at 8 panes each, and SDK-registered in-process MCP servers can now skip a round-trip handshake at session start, though these too are not yet user-facing.

Plugins pick up a real command API this release: they can register, run, list, and describe their own slash commands via a new $.command namespace, and that same execution path can now be intercepted and rewritten by command.run/command.describe hooks. The Projects tool gains a "Project memory" section backed by new project_memory_list and project_memory_read tool methods, letting Claude read (not write) a project's remembered files. Hook event names now support wildcard and negation patterns plus a classic. namespace for internal plugin hooks, and organization-managed policyHelper settings scripts get a retryable execution engine with backoff, now also honored from remote managed settings. /design and /slides are new commands that generate artifacts from a brief, and /import can now bring in configuration from Cursor IDE in addition to Codex and Gemini CLI.

MCP servers using newer HTTP connections now automatically retry with a legacy HTTP+SSE method if the initial handshake fails, and this fallback was later rewritten behind its own dedicated gate. The /plan share subcommand that published a plan as a claude.ai artifact has been removed, and a related plan-artifact command appears removed as well, with the standalone /design local command possibly gone too. A fix restored the claude auto-mode defaults, reset, config, and critique subcommands, which had stopped working because they were attaching to the wrong command object. Path safety checks now fall back to a shared-ancestor path when the OS blocks realpath resolution with EPERM or EACCES, and creating a worktree no longer throws when no WorktreeCreate hook is configured at all.

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

In dev
Nothing to try yet
Useful5 Signal5
Group of 3 API Protocol Notable unclear

New 'tether' protocol threads API requests across turns (off by default)#

An off-by-default 'tether' subsystem lets assistant turns continue a previous server-side thread instead of starting fresh, with telemetry and echo auditing

Unclear Nothing has been read about whether tengu_curious_tower or tengu_curious_tower_stateless_models is on or off for any account, so it's unclear whether this is active anywhere yet.

Feature flag
tengu_curious_tower 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.265: off

tengu_curious_tower_stateless_models 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.265: not a boolean we can read

Read once, for one account on one subscription tier, against v2.1.265. 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 subsystem decides, per assistant turn, whether an API request should continue a previous server-side "thread" (previous_message_id) or start a new one. It tracks per-agent thread state, retries on thread-related errors (thread_not_found, thread_fingerprint_mismatch, thread_already_continued), and falls back to stateless mode when the server rejects thread continuation. This feature is gated and off by default.
  • Three new telemetry events were added for it: one fired when deciding to create/continue a thread, one on the final outcome of the live request, and one ("echo audit") auditing divergence between sent and echoed conversation turns.
  • The echo-audit piece compares the message content sent versus what the server echoed back, classifying differences such as reordered, turn_split, turn_dropped, added/dropped tool_use, tool_name_changed, or caller_dropped, and reports them via tengu_tether_echo_audit.

Why Threading requests server-side can reduce redundant context sent per turn, but only works if server and client stay in sync; the echo-audit and outcome telemetry let this be verified and the retry/fallback logic keeps conversations working even when the server rejects or loses a thread.

Related

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

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

New "advisor tool" feature, off by default#

A new advisor tool mechanism can announce its availability to the model, gated off by default behind a feature flag

Unclear The gate tengu_reflective_wolf was read off for this site's account and the anonymous baseline before this release; no reading has been taken under this release, so what it does for a user and whether it's active here is unknown.

Feature flag
tengu_reflective_wolf Not enough to say

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

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

Read once, for one account on one subscription tier, against v2.1.265. 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 "advisor tool" mechanism has been added. It can send the model an attachment (attachment.type === "advisor_tool") telling it whether an advisor tool is or isn't currently available, with messages like "The advisor tool is no longer available" or "is available". A new "advisor_tool" category token was also added to several of the internal lists used for telemetry and context-injection categorization, alongside existing tokens like remote_session_change.

Why

The feature is controlled by a feature gate and is off by default, so it doesn't affect current sessions, but lays groundwork for Claude to be told when an advisor tool becomes available to 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
Useful4 Signal4
Group of 6 Artifacts Notable

Artifact database gains in-place edits, version checks, and access simulation#

Artifact database writes can now edit a field in place, check document versions, and simulate lower access levels

Feature flag
tengu_umber_stile 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.265: off

tengu_umber_lattice Not enough to say

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

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

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

Details 0 0 Feedback
str_replace

What

  • The artifact database's write tool gained a str_replace operation for editing a string field in place by exact old-text/new-text match, instead of resending the whole document. It supports replace_all to replace every match, and reports clear errors when the match can't be made: edit_no_match, edit_ambiguous, edit_field_missing, edit_field_not_string.
  • Writes can now use optimistic concurrency: passing if_version (ifVersion) rejects the write with a version_mismatch error if the document changed since it was last read, and write results can report the document's new version number.
  • A new as_level parameter on read_db/write_db lets the caller simulate reading or writing as a lower access level (interact or admin), to check what a less-privileged user would be allowed to do, without actually lowering the caller's own access.
  • str_replace is threaded through both the single-write and batch (write_db/batch) code paths, and is currently gated off by default behind a feature flag (requiring both the artifact database and a dedicated str-replace flag to be enabled).

Why

These changes let Claude make small, precise edits to artifact database records instead of rewriting entire documents, avoid clobbering concurrent changes via version checks, and preview permission outcomes for other access levels before acting.

Related

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

In dev
Nothing to try yet
Useful4 Signal4
Group of 4 Projects

New 'Projects' thread recap classification, gated off#

A new background classifier can summarize a Projects task's status into a richer recap card, currently disabled by default

Feature flag
tengu_projects_thread_recap 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.265: off

tengu_projects_thread_recap_prompt 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.265: not a boolean we can read

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

Details 0 0 Feedback

What

  • The background turn-state classifier gained a projectsRecap mode: when invoked with projectsRecap: true, it skips the normal preclassify/heuristic path, uses a distinct (server-overridable) system prompt, and asks the model to produce a recap "card" with a state of needs_reply, needs_approval, done, failed, or working, plus a "happened" summary. It retries once if the response JSON is invalid.
  • The mid-turn/end-of-turn background-agent status classifier now passes a projectsRecap flag into the classification call that produces a task's working/idle/blocked detail text.
  • A project's task/thread status can now use this richer "recap" object (headline, needs, needsYou, happened, reply) instead of the old flat detail/needs/output.result fields.
  • Results and failures are logged via a projects_thread_recap telemetry event, with reasons like heuristic_engine, line_truncated, parse_failed, and side_query_failed.
  • The whole feature is behind the tengu_projects_thread_recap flag and currently off.

Why This lays the groundwork for showing a more useful, model-written summary of what happened in a Projects background task, rather than a flat status line, though it isn't enabled yet.

Related

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

In dev
Nothing to try yet
Useful4 Signal4
Group of 4 SDK Notable no docs found

SDK/host can now programmatically grant workspace trust via a new workspaceTrust option#

A host like Claude Desktop can tell the CLI a directory's trust dialog was already shown, via a new workspaceTrust field on initialize

Details 0 0 Feedback
workspaceTrust

What

  • The SDK/CLI initialize request now accepts an optional workspaceTrust object ({accepted, directory}) so a host application (for example, Claude Desktop's Code tab over SSH/WSL) can attest that it already showed its own trust dialog for the working directory, instead of the CLI needing to show its own.
  • A new handler validates that the directory is an absolute path, resolves to the same trust key as the session's working directory, and isn't a screened/untrusted network path, then records the directory as trusted the same way the interactive terminal dialog does, and re-applies project settings afterward. The outcome is reported via telemetry.
  • The initialize response gains a workspace_trust_recorded boolean (marked internal) reporting whether the attestation was actually persisted as trust — it can be false for reasons like an obfuscated/untrusted path, a wrong key, a write failure, or a home-directory session-only trust.
  • The same workspace_trust_recorded field is included in the system-init/hello JSON payload sent out, alongside existing fields like current_permission_mode and hooks_applied.

Why This lets a host that already handles its own trust UI (like Claude Desktop) skip showing a redundant trust prompt inside the CLI, while still letting the CLI confirm and record whether that trust was actually saved.

+New
Use it now
Useful5 Signal3
Group of 8 Plugins Notable no docs found

Plugins gain slash-command and UI-pane APIs#

Plugins can now register/run/list slash commands and open persistent UI panes via new host APIs

Details 0 0 Feedback
command.listcommand.registercommand.runui.openui.close

What

  • Plugins can now register, run, list, and describe custom slash commands using new host operations command.register, command.run, command.list, and command.describe.
    • command.register adds a new slash command (name, description, argument hint, immediate flag), rejecting name collisions with other plugins, built-in commands, or MCP commands, and capping how many commands one plugin can register.
    • command.run lets a plugin queue a command invocation for the current session.
    • command.list lists available commands together with where each comes from (built-in, plugin, user, or MCP).
    • command.describe lets a hook dynamically override a command's description, argument hint, or hidden state.
    • A plugin command with no matching command.run hook now replies with an explanatory stub message instead of failing silently.
  • Plugins can also open and close a new UI surface called a "pane": a persistent, titled window, using new ui.open/ui.close operations (with id, title, and focus options). Each plugin can have at most 8 panes open at once.
  • Internally, the hooks event dispatch table was expanded to recognize ui.open, ui.close, command.run, and command.describe as valid events (and the old PreToolUse event was renamed classic.PreToolUse without changing its behavior).

Why

This gives plugins much deeper integration with Claude Code: they can add slash commands that behave like built-in ones, and they can show their own persistent UI panels instead of being limited to existing surfaces.

+New
Use it now
Useful4 Signal3
Group of 7 Managed Settings Notable

policyHelpers gets retries, remote sourcing, and clearer validation#

Organization-managed policyHelpers now retry on failure, can come from remote managed settings, and warn on misconfiguration

Details 0 0 Feedback
policyHelper

What

  • A full retry-and-backoff engine for organization-managed policyHelpers (per-OS helper scripts or static settings payloads) was added, covering arming, execution, retrying, and telemetry, including remote (managed-settings-dialog) arming/consent flows and mid-session re-arming. Helper failures are classified as transient (non-zero exit, timeout, missing file, interpreter unavailable) and retried with bounded exponential backoff, or permanent (bad path, oversized, parse failure, invalid envelope, schema rejected) and not retried.
  • policyHelpers can now be honored from remote managed settings, not just admin-controlled policy sources, for plain policy payloads; a helper or any payload touching something the managed-settings approval dialog lists still requires the settings to be verified and approved first that session. The singular policyHelper key itself is still never honored from remote.
  • New validation messages explain that onFailure and retries are ignored when set on the singular policyHelper key, and are honored only on the per-OS policyHelpers.<os> entries; a missing helper combined with onFailure: refuse and no static fallback is now startup-fatal when delivered from an OS-admin policy source.
  • A new warning fires when more than one managed-settings source defines helper configuration and managedSourcesBehavior is "merge", since only the highest-priority source's helper configuration actually takes effect.
  • A warning (status-only, or startup-fatal via MDM/managed settings) now flags cases where onFailure: "require" has no usable default fallback, since a failing helper with no defaultSettings would otherwise silently produce nothing.
  • When no per-OS entry matches and Claude Code falls back to a static default settings payload, it no longer logs an info message or fires a telemetry event about the fallback; this now happens silently.

Why

Together these changes make organization-managed policy helpers more robust and predictable: failures retry sensibly, misconfigurations are caught early instead of silently doing nothing, and administrators get clearer signals about which settings actually take effect when multiple sources conflict.

Related

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

+New
Use it now
Useful4 Signal3
Group of 2 Project Memory Notable no docs found

New project_memory_list and project_memory_read tool methods#

Projects now support listing and reading project memory files through new project_memory_list and project_memory_read methods

Details 0 0 Feedback
project_memory_listproject_memory_read

What

Two new methods are added alongside the existing project_info/project_read/project_search:

  • project_memory_list lists a project's memory files (path, size in bytes, last-updated time, and whether the list was truncated), capped at a fixed number of entries with a truncation notice when there are more.
  • project_memory_read reads a single memory file by path, returning its content (with a truncation notice if the server had to cut the file short).

Both methods have matching UI action descriptions ("List project memory", "Read project memory file") and are backed by a real tool that reads documents from the memory store.

Why

This gives Claude Code a way to browse and read a project's stored memory files directly, rather than only being able to access general project info, files, or search.

Related

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

+New
Use it now
Useful4 Signal3
Group of 2 Project Memory Notable no docs found

Projects gain a "project memory" section#

Projects can now show remembered files across chats via a new project memory section, fetched through project_memory_read/list

Details 0 0 Feedback
project_memory_readproject_memory_list

What

The Projects tool's context now includes a '## Project memory' block, listing files that have been remembered for the project across different chats, alongside its existing docs, files, and synced sources. Malformed memory entries are validated and dropped.

Memory contents are surfaced with a note to read them via project_memory_read/project_memory_list, and a new backend route fetches this data (a project's melange_memory) to feed project_memory_list. That route explicitly refuses to work when accessed through a certain bridge mode.

Why

This lets a project's Claude carry memory of things noted in previous chats forward into new ones, while treating memory content as data rather than as instructions to follow, the same way it already treats docs.

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 Signal3
Group of 2 Cloud Sync

Directory sync can be remotely paused with an 'emergency switch'#

Cloud session directory/file sync can now be remotely muted, pausing uploads and pulls with a warning shown to the user

Details 0 0 Feedback

What

The engine that syncs your files and directories for cloud sessions now supports being remotely muted via an "emergency switch." It checks this switch both when sync starts and periodically afterward (via a recheck). When muted:

  • Sync pauses uploads and pulls instead of continuing as normal.
  • The user sees a warning message explaining that sync has been paused.
  • The sync engine's status reporting now distinguishes "muted" as its own state, separate from being shut down or blocked by another writer.

Why

This gives an operator a way to pause file syncing for a session remotely (for example, in an emergency), while clearly communicating to the user why sync has stopped rather than leaving them wondering.

In dev
Nothing to try yet
Useful4 Signal3
Group of 3 Auto Mode Notable no docs found

Classifier-only tools can now be flagged instead of blocked in auto mode#

Auto mode's classifier-only tools can now be allowed-with-warning instead of blocked, and are always routed through the classifier

Details 0 0 Feedback
classifierOnly

What

  • Tools that declare classifierOnly() are now always evaluated by the auto mode classifier — saved always-allow rules and hook-based allows are ignored, and outside auto mode such tools are denied with a message naming the tool.
  • These tools can now set onBlock: 'flag'. When the classifier would otherwise block the action, refuse to review it, or return no verdict, the action is now delivered (allowed) instead of denied, but annotated with a decisionReason noting it was "Flagged by the classifier, delivered with its warning: ...".
  • A new guard denies the action with an explicit bug message if a classifier-only tool serializes to an empty classifier input, since the classifier would have nothing to judge.
  • The core auto-mode permission pipeline now checks each tool's classifier-only config: if onBlock === "refuse" and a hook asked for a prompt (or the host re-asks on every allow), it denies with an explanation; if onBlock === "flag", it forces the new allow-with-flag outcome.

Why This lets certain sensitive tools stay strictly gated by the auto-mode classifier (never allowed by saved rules or hooks) while giving them a softer failure mode: instead of silently blocking an action the classifier is unsure about, Claude Code can deliver it with a visible warning explaining why it was flagged.

+New
Use it now
Useful5 Signal2
Group of 6 Internals Notable

Cursor IDE configuration can now be imported#

claude import and /import now support importing settings from Cursor IDE, alongside Codex and Gemini

Details 0 0 Feedback
/import

What

  • claude import (and its /import slash command) now accepts cursor as a source, alongside the existing codex and gemini sources, across the command's argument list, usage text, argument hints, CLI validators, and config-review messaging.
  • A new importer reads Cursor IDE configuration from ~/.cursor and .cursor/ (and .agents/skills) — including mcp.json, rules/*.mdc, skills/, commands/, hooks.json, and .cursorrules — and converts it into Claude Code MCP servers, skills, CLAUDE.md instructions, and slash commands. It includes safety checks (refusing symlinks, flagging values that look like credentials, refusing workspace-folder scoping, size caps, deduplication) and explicitly does not import Cursor hooks, .cursorignore, Cursor Memories, Custom Modes, or Team Rules.
  • The CLAUDE.md import-fallback marker now recognizes cursor as a third source id alongside codex/gemini when merging or reconciling previously imported instructions.
  • .cursor directories are now treated the same as .windsurfrules/.clinerules for worktree/context purposes (while .cursorrules was removed from that particular list), and a cursor boolean was added to import-related telemetry.

Why

This lets people who have been using Cursor bring their existing MCP servers, rules, skills, and commands into Claude Code with a single import command, instead of recreating them by hand.

Related

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

+New
Use it now
Useful5 Signal2
Group of 2 Slash Commands Notable

/design reworked into routed modes, plus a new /slides command#

/design now routes to types/canvas/hub/consent modes, and /slides joins it to create artifacts from published types

Details 0 0 Feedback
/design/slides

What

  • The /design slash command's dispatch logic was rewritten to resolve a mode via a new router into one of consent, types, canvas, or hub, each with its own description, menu text, argument hint, and file-loading behavior (canvas mode loads design canvas files). The command also gained subcommandsBareOnly and survivesBundledKillSwitch flags, and its policy gate is now skipped for the types and canvas modes.
  • A new /slides command is added alongside /design, letting you create a Slides deck artifact from a brief the same way /design creates a Design artifact. Both commands instruct the model to look up the matching published Artifact type and create a new artifact from it.

Why

Routing /design into distinct modes lets it handle browsing types, working with canvas files, and consent separately instead of one undifferentiated command, and /slides extends the same brief-to-artifact workflow to slide decks.

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

Artifact permission-ask classifier reworked into five named classes with a rollout gate#

Artifact permission prompts now sort into five distinct classes instead of one generic ask

Unclear Whether the tengu_artifact_five_class_asks gate is enabled for this site's account is unread, so no reading can be reported.

Details 0 0 Feedback
What

Artifacts (Claude Code's generated files/apps) that need to ask permission before taking some action are now classified into one of five named categories: delete, access_change, standing_job, public_change, or foreign_read. Each class carries its own metadata about whether and how the answer can be remembered. A new consent cache keyed by account and conversation also remembers past answers within that scope.

Why

Sorting asks into specific classes instead of one generic permission check lets Claude Code apply different remembering rules to different kinds of risk, for example treating a delete differently from a one-time read.

In dev
Nothing to try yet
Useful4 Signal4
Artifacts unclear

New artifact 'ask class' consent/remember system#

A new unified consent system governs sensitive artifact actions like delete and access changes

Unclear Whether unattended foreign reads are actually allowed to proceed depends on the tengu_artifact_foreign_read_unasked gate, which has not been read for this release.

Details 0 0 Feedback
What

A new consent system now governs a set of sensitive artifact operations: deleting an artifact, changing whether it's public, changing who can access it, standing (recurring) jobs, and reading an artifact someone else owns. Approving one of these actions can now cover its related files for the rest of the conversation, so the same consent isn't asked for repeatedly. A new telemetry event also records when a foreign (someone else's) artifact is read without being asked about first.

Why

This reduces repeated approval prompts for related artifact actions within a single conversation, while still tracking cases where a foreign read happens without an explicit ask.

In dev
Nothing to try yet
Useful4 Signal4
MCP Notable no docs found

SDK MCP servers can now skip the control-channel handshake via manifests#

SDK-registered in-process MCP servers can now skip a round-trip handshake at session start

Feature flag
tengu_sdk_mcp_manifests 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.265: on

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

Details 0 0 Feedback
sdkMcpServerManifests
What

A new sdkMcpServerManifests field on set_servers lets the host application pre-run an MCP server's own initialize and tools/list calls in-process and hand the results directly to the CLI. The CLI then uses those results to answer its own MCP client's handshake locally, instead of exchanging mcp_message control messages back and forth before the first turn.

Why

Registering multiple in-process MCP servers this way costs no control-channel round trips before the first turn, which should make sessions with several SDK-provided MCP servers start faster.

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

New --attach-serve flag for headless cloud session helpers#

A new hidden --attach-serve <session_id> flag attaches a headless, serve-only client to an existing cloud session

Details 0 0 Feedback

What

A new hidden CLI flag, --attach-serve <session_id>, attaches a serve-only helper to an existing, bound cloud session (identified by an id like cse_...) instead of creating a new one. It's meant for sessions spawned by the desktop app and is not for interactive use.

The flag is rejected if combined with --cloud/--remote, and it requires the non-interactive stream-json serve mode.

Why

This lets the desktop app attach a lightweight headless client to a cloud session it already created, rather than spinning up a new session each time.

+New
Use it now
Useful4 Signal2
Group of 3 Slash Commands Notable no docs found

Slash commands and skills gain menuDescription, policyGate, and custom argument autocompletion#

Commands and skills can now define a shorter menu description, a policy-based visibility gate, and custom argument autocomplete

Details 0 0 Feedback
getArgumentCompletions

What

  • Commands and skills can now define a getArgumentCompletions callback; the prompt input calls this while typing to generate custom suggestions for a command's arguments.
  • Command/skill definitions gained a menuDescription field: a shorter description shown in menu/listing UI, separate from the full description.
  • Command/skill definitions gained a policyGate field: a policy object with a .policy check that can hide or disable a command.
  • Internally, policyGate is now set up as a lazy getter during registration (rather than a plain assigned property), and getArgumentCompletions is passed through registration alongside it.

Why These fields give command and skill authors more control over how their commands appear and behave in menus: a concise label for tight UI space, a way to restrict visibility based on policy, and live, tailored argument suggestions instead of generic ones.

Related

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

Improved
Use it now
Useful4 Signal2
Group of 2 Workflows Notable no docs found

Workflow tool can resume a run from resumeFromRunId alone#

The Workflow tool can now recover and restart a script using just a stored run id, without needing the script path

Details 0 0 Feedback
resumeFromRunId

What

  • Workflow's validateInput/checkPermissions now handle a resumeFromRunId input: when the script path can't be resolved, they look up the stored run's journal via the run id, and reconstruct the script to run from it.
  • If the resume lookup fails, the tool can now return a "refused" outcome instead of erroring out unclearly.
  • The background-workflow notification text was updated to say to relaunch with Workflow({scriptPath, resumeFromRunId}) using the run id from the summary, instead of showing a literal resumeFromRunId value.

Why This lets you resume an in-progress or interrupted workflow run using just the run id reported earlier, without needing to track down or retype the original script path.

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

Command execution can now be intercepted by command.run/command.describe hooks#

Slash-command execution can now be intercepted and rewritten by command.run/command.describe hooks

Details 0 0 Feedback
command.runcommand.describe
What

Slash commands now pass through a new hook chain when they run, keyed on two hook events named command.run and command.describe. A hook (a custom script that reacts to Claude Code's behavior) can observe or rewrite the text a command prints before it's shown, using a next() pattern to pass control along the chain. Claude Code also now shows a clearer error message when a queued command never actually ran, explaining that it did not go through command.run.

Why

This gives hooks a formal way to intercept and modify slash-command output, and gives users a clearer explanation when a command was queued but never executed.

Related

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

Improved
Use it now
Useful4 Signal3
Hooks Notable

Hook event names gain a wildcard/negation pattern grammar and a 'classic.' namespace#

Hook event names now support wildcard and negation patterns, and internal plugin hooks are namespaced as classic.<EventName>

Details 0 0 Feedback
What

Hooks (scripts that run automatically at points like PreToolUse, before a tool call executes) can now be registered against event name patterns, not just exact names. A pattern can be * (matches everything), <prefix>.* (matches everything under a prefix), or either form prefixed with ! to negate it. Separately, internally-defined plugin hook events are now namespaced with a classic. prefix, so PreToolUse becomes classic.PreToolUse internally.

Why

Wildcard and negation patterns let a single hook registration cover a group of related events instead of listing each one individually. The classic. namespace distinguishes built-in plugin hook events from other event sources as the hook system grows more general.

In dev
Nothing to try yet
Useful4 Signal3
Artifacts

New attested-Artifact-type marking/revocation system#

Artifacts can now carry trust badges marking them as pinned, templated, or first-party types

Details 0 0 Feedback
What

Claude Code now tracks "attested" marks on Artifacts (generated documents or files shown in a side panel), such as being an organization-pinned instance, a pipeline instance, a template instance, or a first-party type, each with an issue and revoke timestamp. When applicable, Artifact tool output can show a trust badge like "attested: a published first-party Artifact type" or a note that an organization's admins pinned it for its type.

Why

This gives you a way to tell, directly in the Artifact output, whether a given Artifact type is officially sanctioned, such as being published by Anthropic or pinned by your organization's admins, rather than an arbitrary or unverified type.

In dev
Nothing to try yet
Useful4 Signal3
UI Panels no docs found

New pane-management system for plugin UI panels#

Plugins can now open UI panels, capped per plugin, with a hook that can veto closing one

Details 0 0 Feedback
ui.close
What

Claude Code has a new system for managing UI panels ('panes') that plugins can open, each tracked by an id, title, owning plugin, and focus state. A single plugin can only have a limited number of panes open at once; opening another beyond that limit requires closing one first. Closing a pane now runs an asynchronous ui.close hook chain first, so a hook can intervene and keep the pane open instead of letting it close.

Why

This gives plugins a structured way to present multiple panels while preventing any one plugin from opening an unlimited number of them, and lets hooks control cleanup behavior when a pane is about to close.

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

/model now gives clear reasons when a 1M-context alias can't be used#

Switching /model to a 1M-context alias now explains exactly why it's blocked instead of failing generically

Details 0 0 Feedback
/modelCLAUDE_CODE_DISABLE_1M_CONTEXT

What

When switching to a model alias with a 1M-token context window (a [1m]-suffixed alias), Claude Code now checks for three specific problems before switching, each with its own clear error message telling you what to do instead:

  • 1M context has been turned off via the CLAUDE_CODE_DISABLE_1M_CONTEXT environment variable.
  • The target model doesn't support a 1M-token context window.
  • The alias has no 1M variant for the current mode.

These checks run before the older Opus-1M-specific check that previously handled this.

Why

Previously these failures likely surfaced as a generic error; now each case is distinguished with its own message and telemetry reason, making it clear why a 1M-context switch didn't happen and what to try instead.

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

Artifact db_read/db_write gain an as_level run-as parameter with server-confirmed enforcement#

Artifact database calls can now request a different access level, and results say whether the server actually enforced it

Details 0 0 Feedback
asLevelas_level_confirmed

What

  • db_read and db_write calls can now include an asLevel parameter (returned as as_level), letting a call ask to run as if at a different access level.
  • Results now include as_level_confirmed (from the server's levelConfirmed field), reporting whether the server actually enforced the requested level; when unconfirmed, a caveat message is added.
  • The batch-write fallback path also tracks this confirmation across a sequence of writes, and appends a warning to error messages when a requested level wasn't confirmed, noting the writes may have run at the caller's own level instead.
  • The db_write validation schema was updated to accept the new as_level (max 16 characters) and as_level_confirmed fields.

Why This makes it clear when an artifact database operation requesting an elevated or different access level actually got that treatment from the server, instead of silently succeeding or failing under the wrong permissions.

+New
Use it now
Useful3 Signal2
Group of 2 UI Components

Code blocks can now render as unified diffs#

A new diff format for code blocks parses and validates unified-diff/patch text before displaying it

Details 0 0 Feedback
diff

What

A new self-contained unified-diff parser reads Index:/diff/---/+++/@@ headers and hunks into structured objects, validating that the added/removed line counts match what the hunk header claims.

The Code component gained a new format value, "diff", alongside the existing "source" format. When set, the text is validated and parsed through this new parser, and anything with a malformed @@ -a,b +c,d @@ header (missing, non-numeric, or out-of-bound numbers) is rejected with a specific error such as "no @@ hunk header found" or "header is not @@ -a,b +c,d @@ within N lines". A companion wrap prop accepts "wrap" or "truncate-end" to control how long diff lines are displayed.

Why

This lets diff/patch text be rendered as a properly parsed, validated diff view instead of plain text, catching malformed diffs before they're displayed.

Related

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

+New
Use it now
Useful3 Signal2
Group of 2 Terminal UI Notable

New "Pane" keybinding context for scrolling#

A new Pane keybinding context lets you scroll, page, and jump within a pane using tab, arrows, and page/home/end keys

Details 0 0 Feedback
Pane

What

A new "Pane" keybinding context has been added. It maps:

  • Tab/Shift+Tab to move to the next/previous pane (abovePrompt:next/previous)
  • Enter/Escape to press/leave a pane
  • Arrow, page, home, and end keys to six new pane-scrolling actions: pane:scrollUp, pane:scrollDown, pane:pageUp, pane:pageDown, pane:top, and pane:bottom, shown in the UI as "scroll", "page up", "page down", "top", and "bottom"

Why

This gives keyboard users a consistent way to navigate and scroll within panes, and these keys can now be customized like other Claude Code keybindings.

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 5 Sessions Notable

Unsent messages to remote sessions can now be taken back#

Escape (or an empty-prompt cancel) now reclaims messages queued for a remote session that haven't been sent yet

Details 0 0 Feedback
Esc

What

  • Remote/cloud sessions now track when a queued message is "held" (queued but not yet sent to the cloud session) and could still be withdrawn. RemoteSessionManager calls a new tellWithholdableHeld() method on release, gate resolution, withdrawal, and settlement, and fires an onWithholdableHeldChanged callback when that status changes; the UI tracks this as a cloudMessageHeld state.
  • Users can now press Escape while idle to reclaim messages that were queued but not yet sent, via a new cancelHeldMessages capability, instead of triggering a full interrupt. This shows a notice and logs telemetry.
  • Cancelling with an empty prompt while in remote mode now also cancels held remote messages, via the same cancelHeldMessages path.
  • Taking back the very first prompt (the one given on the command line, which starts out withheld) now shows a distinct notice: "You took back your first message (the one given on the command line) — it wasn't sent to the cloud session."

Why

Previously a message queued for a remote/cloud session but not yet sent couldn't easily be pulled back. Now pressing Escape, or cancelling with an empty prompt, retracts it before it reaches the cloud session, with clear feedback about what happened.

In dev
Nothing to try yet
Useful3 Signal3
System Prompt Notable no docs found

Static system prompt mode (tengu_carved_slate) strips dynamic content from agent prompts when on#

A new staticSystemPromptEnabled flag can strip dynamic content from agent system prompts

Feature flag
tengu_carved_slate Not enough to say

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

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

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

Details 0 0 Feedback
staticSystemPromptEnabled
What

A new setting, staticSystemPromptEnabled, when turned on, changes how the system prompt (the instructions given to an agent before a conversation starts) is built for both the general-purpose agent and the main session. When enabled, the prompt builders skip generating dynamic sections, such as the call that gathers environment information and the block that reports the platform version, producing a more static, fixed prompt instead.

Why

Skipping dynamic content makes the system prompt more predictable and reusable, which can help in cases where a fixed prompt is preferred over one that changes based on environment details. As of this release the setting has not been read as on for this site's account or the anonymous baseline.

+New
Use it now
Useful4 Signal2
Plugins Notable

New $.fs.* filesystem API for plugins with read/write size limits#

Plugins get a new file system API for reading, writing, and listing files, capped at 4MB

Details 0 0 Feedback
What

Plugins now have a filesystem API with readFile, writeFile, exists, stat, and listDir operations, all scoped to a resolved working directory. Both reads and writes are capped at 4,194,304 bytes (4MB); exceeding the limit returns an explicit refusal saying the file is over the byte limit.

Why

This lets plugins interact directly with files on disk in a controlled way, with a size limit that prevents a plugin from reading or writing unexpectedly huge files.

Improved
You'll notice
Useful2 Signal2
Group of 4 Tool Results Notable no docs found

Persisted tool results are now truncated to a byte cap, with truncation reported#

Large tool outputs saved to disk are now capped in size, and the CLI reports when truncation happened

Details 0 0 Feedback
truncatedAtBytes

What

  • When Claude saves a large tool result to disk, the content is now capped to a byte budget (1GiB by default) using an encoding-aware truncator.
  • The saved result records a new truncatedAtBytes field when truncation happened, plus a derived truncatedAtCap boolean alongside estimatedOriginalTokens/estimatedPersistedTokens.
  • The message shown to you after a tool result is saved now distinguishes a full save from a truncated one, telling you only the first N bytes were saved when the cap kicked in.

Why Without a cap, an unusually large tool result could produce an oversized file on disk; the new byte cap keeps saved files bounded, and the accompanying message and tracking fields let you (and Claude) know when a saved copy is incomplete rather than assuming it's the full result.

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

--system-prompt-snapshot now defaults on universally, not just for the built-in prompt#

--system-prompt-snapshot's documented default is now described as always-on, not just for the built-in prompt

Details 0 0 Feedback
What

The help text for --system-prompt-snapshot now describes the setting as on by default in all cases, rather than only by default for the built-in system prompt (previously, using --system-prompt or --append-system-prompt turned snapshotting off automatically). With the default on, the system prompt - including any text passed via --system-prompt or --append-system-prompt - is rendered once on the conversation's first request, and every later request or resume reuses that exact recorded version, even if a later launch passes different prompt text, until the conversation compacts (summarizes and trims its history).

Relatedly, when snapshotting is on, a set_model system-prompt override now takes effect at the next compaction rather than at the next turn.

Why

This means custom system prompts set via --system-prompt or --append-system-prompt are now also locked in from the first request by default, so changing that text on a later launch of the same conversation won't retroactively change what's already been recorded - only a fresh conversation or a compaction will pick up new text.

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

Artifact-database writes gain as_level and version pinning#

Artifact database reads/writes can now use a reduced access level and pin to a document version

Details 0 0 Feedback
as_levelif_version
What

Artifact database write_db and read_db calls can now pass an as_level parameter set to interact or admin, letting Claude act with a reduced access level to test what a less-privileged viewer would be able to do. Writes can also pin themselves to a specific document version using if_version, which fails with a version_mismatch error if the document was changed in the meantime.

Why

as_level lets you check how an artifact behaves for users with limited permissions, and if_version protects against accidentally overwriting a document that changed since it was last read.

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
Hooks

Hook registration: duplicate once-only event registration now throws, and pattern-based event names supported#

Hook registration now rejects registering the same once-only event twice and validates names as patterns

Details 0 0 Feedback
What

When a hook (custom code that runs on a specific event) is registered with on(event, ...), event names are now validated as patterns rather than plain names. Registering the same once-only event more than once now throws an error reading "registered twice." Error messages for hook registration also now refer to a 'pattern' instead of an 'event' in their wording.

Why

This catches a mistake, accidentally registering the same one-time hook event twice, that previously could pass silently, and the wording change reflects that event names are now matched as patterns rather than exact strings.

Improved
Use it now
Useful3 Signal2
MCP Notable

MCP channel flags require plugin:/server: tagging#

--channels and its development-channels flag now require explicit plugin: or server: tags

Details 0 0 Feedback
What

Values passed to the --channels flag and to --dangerously-load-development-channels must now be tagged, in the form plugin:<name>@<marketplace> or server:<name>. An entry without one of these tags is now rejected with an explicit error explaining the required formats.

Why

Requiring the tag removes ambiguity about whether a channel entry refers to a plugin or an MCP server, catching malformed flag values immediately instead of letting them silently fail or resolve incorrectly.

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

New 'command.run' hook pipeline for slash-command dispatch#

Slash commands can now be intercepted and their output overridden by a new 'command.run' hook

Details 0 0 Feedback
command.run
What

Running a slash command (like /compact) can now be routed through a new command.run hook chain before it executes. Hooks are user- or project-defined scripts that run at specific points in Claude Code's workflow. With this change:

  • A hook can intercept a slash command before it runs
  • A hook's own output text can "retell" (override) the text the command would otherwise have produced
Why

This lets hook authors customize or replace what happens when a slash command runs, rather than only reacting to it afterward.

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

New "allow_plugin_directory_search" HIPAA/ZDR policy control#

New allow_plugin_directory_search policy setting controls plugin directory search under compliance modes like HIPAA

Details 0 0 Feedback
allow_plugin_directory_search
What

A new policy permission key, allow_plugin_directory_search, has been added alongside the existing allow_plugin_skill_search setting. It's available both under HIPAA compliance mode and in the general list of enterprise policy keys, and it governs whether plugin directory search is allowed under restrictive compliance settings.

Why

This gives organizations using strict compliance modes (such as HIPAA or zero data retention) a separate, explicit control over plugin directory search, rather than only being able to control plugin skill search.

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

Telemetry relay can forward individual signal types instead of always OTLP for all three#

Telemetry export can now send metrics, logs, and traces to different destinations instead of forcing all three to OTLP

Details 0 0 Feedback
OTEL_METRICS_EXPORTEROTEL_LOGS_EXPORTEROTEL_TRACES_EXPORTERtelemetry.forward_to
What

The OTEL_METRICS_EXPORTER, OTEL_LOGS_EXPORTER, and OTEL_TRACES_EXPORTER environment variables are now each computed individually based on the telemetry.forward_to configuration setting, rather than always being fixed to "otlp" (a standard telemetry export protocol).

Why

This lets you route metrics, logs, and traces to different backends per signal type instead of being forced to send all three the same way, giving more flexible control over where telemetry data ends up.

Related

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

Improved
You'll notice
Useful3 Signal2
Permissions Notable

Classifier can now auto-answer approval prompts in plan mode, not just auto mode#

Claude Code's classifier can now auto-approve some tool prompts in plan mode, not just auto mode

Details 0 0 Feedback
What

Claude Code has a built-in classifier that can automatically answer a tool's permission request without showing a prompt to the person using it. Previously this only worked when the session's permission mode was exactly auto. Now it also works in plan mode, subject to an additional helper check.

As a safeguard, the classifier now also checks that the permission mode hasn't changed between when the approval request was first raised and when it's actually answered, so a mode switch mid-flight can't cause an approval meant for one mode to be applied under another.

Why

This lets more tool approvals in plan mode be handled automatically instead of always interrupting the user, while the added mode-consistency check prevents a stale approval decision from slipping through if the permission mode changes partway through.

Improved
Use it now
Useful3 Signal1
Group of 2 Command Line Notable

Command-line autocomplete works mid-command, not just at the start#

Slash-command-style autocomplete suggestions can now trigger and be accepted partway through a command you're already typing

Details 0 0 Feedback
Tab

What

The command input's autocomplete now supports a new "mid-command" suggestion type. Previously, autocomplete suggestions only appeared when you were at the very start of typing a command; now they can also appear and be completed partway through a command line you've already started typing.

Pressing Tab now checks for a mid-command completion first, before falling back to its other existing behavior.

Why

This lets you get autocomplete help while editing or extending a command you've already begun, instead of only when starting fresh.

Related

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

+New
Use it now
Useful3 Signal1
Group of 2 Plugins Notable

Plugin marketplace gets a dedicated directory/search view#

The /plugin menu now has a separate 'directory' search screen distinct from the regular marketplace browse view

Details 0 0 Feedback
/plugin directory/plugin search

What

The plugin marketplace UI now has a new "directory-search" view, distinct from the existing browse view ("discover-plugins"), the installed-plugins view, and others. Running /plugin directory or /plugin search now routes to this dedicated directory/search screen, which has its own title shown in the UI ("directory").

Why

This gives users a focused way to search for plugins directly, instead of only being able to browse the general marketplace listing.

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

Official plugin categories expanded with enterprise connectors#

The official plugin/skill category list now recognizes 19 enterprise integrations like Jira, Salesforce, and Snowflake

Details 0 0 Feedback
AsanaBigQueryConfluenceJiraSalesforce

What

The set of recognized official, first-party plugin/skill categories has grown to include many enterprise SaaS connector names: Asana, BigQuery, Confluence, Datadog, Google Drive, Grafana, HubSpot, Jira, Linear, Notion, PagerDuty, Redshift, Salesforce, Sentry, and Snowflake, plus three internal tags (claude-tag-data-viz, claude-tag-oncall, claude-tag-troubleshoot).

This list feeds the checks used to recognize official categories across trust and gating logic.

Why

Plugins and skills tagged with these categories can now be recognized as legitimate, first-party integrations, which matters for how they're trusted, surfaced, and gated in the marketplace.

Improved
You'll notice
Useful3 Signal1
Group of 2 Telemetry Notable

OTEL telemetry now includes a user.groups resource attribute#

OpenTelemetry output can now include a user.groups attribute listing the user's groups, when safe to encode

Details 0 0 Feedback
user.groups

What

The OTLP (OpenTelemetry protocol) resource-attribute builder used for telemetry now adds a user.groups attribute, a comma-joined list of the session's group names, alongside the existing enduser.id and user.email attributes.

The attribute is only added if none of the group names contain a comma or an equals sign, and if the URL-encoded joined string is 255 characters or less; otherwise it's left out.

Why

This lets telemetry and observability tooling see which groups a user belongs to, while avoiding malformed or oversized attribute values.

Related

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

Improved
Use it now
Useful2 Signal2
Elsewhere Notable unclear

--fallback-model no longer claims to require --print#

The --fallback-model CLI help no longer says it only works with --print

Unclear The help text change implies broader applicability but does not confirm the flag's actual behavior changed in interactive mode.

Details 0 0 Feedback
--fallback-model
What

The help text for the --fallback-model flag used to say '(only works with --print)', meaning it only applied when running Claude Code in headless mode via --print. That qualifier has been removed from the help output, suggesting the flag now also applies in normal interactive mode.

Why

If --fallback-model now works outside --print, it means an automatic backup model (used when the primary model is overloaded or unavailable) can kick in during regular interactive sessions too, not just scripted/headless runs.

Related

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

Improved
Use it now
Useful2 Signal2
Plugins no docs found

/plugin stats help line gated behind tengu_lantern_prism#

The /plugin stats help line's visibility is confirmed tied to the tengu_lantern_prism gate

Feature flag
tengu_lantern_prism Not enough to say

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

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

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

Details 0 0 Feedback
/plugin statstengu_lantern_prism
What

The help line "/plugin stats - Show skill usage and context costs", shown in /plugin help, continues to be shown or hidden conditionally, and this behavior is now confirmed to be controlled by the tengu_lantern_prism setting (with an environment variable override available).

Why

This confirms the mechanism gating whether the /plugin stats help text appears, which matters if that line seems to be missing.

Related

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

·Internal
Under the hood
Useful2 Signal2
Sessions Notable

New allowlist forwards Bun/mimalloc GC tuning env vars only for remote sessions#

Remote sessions now pass through Bun and mimalloc garbage-collection tuning environment variables to spawned processes

Details 0 0 Feedback
What

A new allowlist of environment variables related to memory management tuning is now forwarded to spawned processes, but only when CLAUDE_CODE_REMOTE is set to true. The variables are BUN_GC_TIMER_INTERVAL, BUN_GC_TIMER_DISABLE, BUN_GC_RUNS_UNTIL_SKIP_RELEASE_ACCESS, BUN_IDLE_GC_SECONDS, and MIMALLOC_PURGE_HOLES_MIN_INTERVAL. These control garbage collection (automatic memory cleanup) timing in Bun, the JavaScript runtime Claude Code uses, and in mimalloc, a memory allocator library.

Why

This lets remote sessions be tuned for memory behavior via environment variables without affecting local sessions, which don't get these variables passed through.

Improved
Use it now
Useful3 Signal1
Plugins Notable

--plugin-dir now accepts a folder containing multiple plugins#

--plugin-dir can now point at a folder holding several plugins at once

Details 0 0 Feedback
--plugin-dir
What

The --plugin-dir flag, previously used to load a single plugin from a directory, can now also be pointed at a directory that itself contains multiple plugin folders. Claude Code detects this case, loads each child folder that has a valid plugin manifest as its own plugin, and logs which children were loaded and which were skipped for lacking a manifest.

Why

This makes it easier to load a whole collection of local plugins for a session in one go, without repeating the --plugin-dir flag for each one individually.

Improved
Use it now
Useful3 Signal1
UI Panels Notable no docs found

AbovePrompt panes gain focus/click and digit-jump navigation#

Panes above the prompt can now be focused by clicking or by pressing their number key

Details 0 0 Feedback
AbovePrompt
What

The panes shown above the input prompt (the "AbovePrompt" area) can now be focused directly:

  • Clicking a pane focuses it
  • Pressing a digit key jumps focus to the correspondingly numbered pane
  • Focus automatically resets if the underlying pane data changes out from under you
Why

This makes it faster to navigate between multiple panes shown above the prompt without needing to cycle through them one at a time.

Related

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

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

No-op 'enable' tools added for already-connected device tools#

New no-op enable tools tell Claude to just use already-connected device/browser tools directly

Details 0 0 Feedback
enable__mcp__claude-in-chrome

What

  • New "enable" tools were added for device/browser tool families that are already connected: enable__mcp__remote-devices__computer, enable__mcp__claude-in-chrome, and enable__mcp__remote-devices__Claude_Browser.
  • These tools do nothing by design — their descriptions and results tell Claude that the underlying mcp__ tools (such as mcp__remote-devices__computer_*) are already available and should be called directly, instead of trying to "enable" them first. They also include guidance on what to tell the user if the remote computer's Claude app isn't responding.
  • They are only registered as available tools when a remote/device session is actually active (a session config resolves).

Why

Without these no-op stand-ins, Claude could try to call a nonexistent "enable" step before using already-connected device or browser tools; now it's told directly to just use the real tools.

Related

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

Improved
You'll notice
Useful2 Signal1
Group of 3 Artifacts Notable

Artifact publish can now source files from the scratchpad#

Artifact publish's files/root parameter can now point at the session scratchpad, not just the working directory

Details 0 0 Feedback
scratchpad

What

  • Sources for the artifact publish tool's files parameter (and the root it's relative to) can now live in the session's scratchpad directory, not only the current working directory — the tool's parameter descriptions were updated to say so explicitly.
  • The underlying trust check for the root parameter was reworked: instead of a manual string-prefix comparison against the working directory, it now calls a new helper pair to validate the path, and file-processing calls (both the general file-copy path and thumbnail generation) pass an extra options object from a new helper function.

Why

This lets Claude publish artifacts built from files it created in its scratchpad, not just files in the project's working directory, while keeping the same path-trust safety checks, now reworked to also cover the scratchpad case.

Related

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

Improved
Use it now
Useful2 Signal1
UI Components

"Code" added as a recognized UI block component alongside Button/Input/Select/Svg#

Interactive dialogs can now render a "Code" block component alongside Button, Input, Select and Svg

Details 0 0 Feedback
Code
What

The restricted list of components that interactive dialogs (in both the terminal and desktop app) are allowed to render now includes a Code element, treated as a block-level component the same way Button, Input, Select, and Svg already are.

Why

This lets interactive dialogs display formatted code blocks directly, rather than being limited to the previous set of form-style elements.

Related

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

Improved
Use it now
Useful2 Signal1
Internals

.cursorrules recognized as a project instructions/memory file#

Claude Code now reads .cursorrules files as project instructions

Details 0 0 Feedback
.cursorrules
What

Claude Code now scans for a .cursorrules file (the rules file used by the Cursor editor) as one of the files it reads for project instructions and memory, alongside files like agents.md, agents.override.md, and gemini.md.

Why

Projects that already have Cursor rules set up will have those instructions picked up automatically, without needing to duplicate them into a Claude-specific file.

Improved
Use it now
Useful2 Signal1
Artifacts no docs found

Artifact 'list' capability output gains instructions fields#

Artifact list results now report instructions text length and whether it was clipped or unavailable

Details 0 0 Feedback
instructions_charsinstructions_clipped
What

The result of listing artifacts can now include instructions, instructions_chars, instructions_clipped, and instructions_unavailable fields, alongside the existing instructions_file field.

Why

This gives more detail about an artifact's instructions text directly in the list result, including its length and whether it was cut short or couldn't be retrieved, rather than only pointing to a separate instructions file.

Improved
Use it now
Useful2 Signal1
Plugins

Button hotkeys can now be lowercase letters, not just digits#

Plugin button hotkeys can now be a lowercase letter, not just a digit

Details 0 0 Feedback
hotkey
What

The hotkey property on the plugin-facing Button component now accepts a single lowercase letter from a to z, in addition to the digits 0 through 9 it already accepted.

Why

This gives plugin authors more available hotkey options for buttons, since digits alone limited them to ten possible shortcuts.

Related

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

Improved
Use it now
Useful2 Signal1
Marketplace

Marketplace manifest schema now recognizes marketplace_name and is_official fields#

Marketplace listings can now include a marketplace name and an official-status flag

Details 0 0 Feedback
marketplace_nameis_official
What

The schema for marketplace entries, used for listing skills and plugins, now recognizes two additional fields: marketplace_name and is_official. These are parsed and made available on entries as marketplaceName and isOfficial.

Why

This lets a marketplace listing identify itself by name and mark whether it's an official source, which could help distinguish official plugin/skill sources from third-party ones.

Related

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

+New
Use it now
Useful2 Signal1
Terminal UI

New 'Pane' keyboard-focus context for plugins#

A new 'Pane' keyboard-focus context covers when a plugin's own pane is focused

Details 0 0 Feedback
Pane
What

Claude Code's keybinding system has a new focus context called Pane, active when a plugin's pane has keyboard focus. This joins existing contexts like Chat and AbovePrompt, which determine which keyboard shortcuts apply depending on where focus currently is.

Why

This lets keybindings be scoped specifically to plugin panes, so shortcuts can behave differently when a plugin's own interface is focused versus the main chat.

Related

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

Improved
Use it now
Useful2 Signal1
Managed Settings

policyHelpers entries gain a retries setting for helper execution failures#

Per-OS policyHelpers entries can now set retries to control retry attempts after a failed run

Details 0 0 Feedback
retries
What

A new retries setting on per-OS policyHelpers.<os> entries controls how many additional times a failing policy helper (a script that computes managed settings at startup) is retried before it's counted as a failure. A run counts as failed if the helper couldn't launch, exited with a non-zero code, or timed out. Retries use randomized backoff starting at 250ms and doubling up to 4 seconds between attempts.

Why

This gives administrators a way to tolerate transient failures, like a flaky network call inside the helper script, without immediately treating the whole policy helper as failed.

Related

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

Improved
Use it now
Useful2 Signal1
Plugins no docs found

ui.invalidate now supports invalidating command.describe#

The ui.invalidate plugin operation can now also invalidate command.describe

Details 0 0 Feedback
ui.invalidatecommand.describe
What

The ui.invalidate host operation, which plugins use to signal that something needs to be recomputed, now accepts "command.describe" as a valid target, in addition to the existing ui.render, prompt.section, prompt.context, and tool.describe.

Why

This lets a plugin force Claude Code to refresh how a command describes itself, rather than only being able to invalidate rendering, prompt content, or tool descriptions.

Related

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

Improved
Use it now
Useful1 Signal0
Plugins

--plugin-dir help text now documents loading a folder of plugins#

--plugin-dir help text now documents that a folder of plugins can be passed

Details 0 0 Feedback
--plugin-dir
What

The command-line help text for the --plugin-dir flag now explains that it can also load a directory containing multiple plugins, with each one loaded as a separate child plugin.

Why

This makes it clear that --plugin-dir A --plugin-dir B.zip can be used to load a folder of plugins at once, not just a single plugin directory or archive, requiring Claude Code v2.1.265 or later.

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

Everything else

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

1 entry

New Featuresopen

+New
You'll notice
Useful3 Signal2
Group of 2 Claude Code Desktop

New tip points to Claude Code Desktop's iOS Simulator pane#

A new contextual tip tells iOS developers that Claude Code Desktop gives each session its own iOS Simulator pane

Feature flag
tengu_magical_pixel Not enough to say

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

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

Read once, for one account on one subscription tier, against v2.1.265. 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 contextual tip ("desktop-ios-simulator") can appear when Claude Code detects you're working on iOS app development. It tells you that Claude Code Desktop (the desktop app) gives each session its own iOS Simulator pane, where Claude can test, fix, and recheck the app itself.

The tip only shows up under specific conditions: you're on macOS, the plugin/desktop feature is enabled, the account isn't under HIPAA restrictions, and Claude has classified the session's intent as iOS app development. On top of that, it's currently behind a feature flag (tengu_magical_pixel) that defaults to off, so most users won't see it yet.

Why

This surfaces a useful desktop-only capability to the people most likely to benefit from it, without showing it to everyone or on platforms where it doesn't apply.

Related

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

96 entries

Improvementsopen

Improved
You'll notice
Useful3 Signal2
Group of 3 SDK

New 'dev_intent' detection flags iOS/Swift app development in a conversation#

Claude Code now detects when a conversation involves iOS/Swift development and emits a one-time dev_intent system message

Details 0 0 Feedback

What

  • A new internal system message subtype, dev_intent, is sent at most once per kind per conversation when Claude has written, read, or run something iPhone-specific in Swift, so hosts like Desktop can react to it (for example, showing an iOS Simulator tip).
  • Detection is heuristic: a new detector watches for Edit/Write-style tool calls touching .swift files or Bash commands matching simctl/xcodebuild-like patterns, plus tool results mentioning iOS SDK strings, and fires the dev_intent message with kind ios_app the first time both a Swift file edit and iOS evidence appear in the transcript. A dev_intent_detect telemetry event is also emitted.
  • Headless and SDK sessions were previously excluded from this detection (they only carried a plain readFileCache reference); the turn loop for those sessions now creates a per-host dev-intent tracker and feeds it every message as the conversation progresses, so headless/SDK sessions participate too.

Why This lets hosts surface context-appropriate help, like an iOS Simulator tip, the first time a conversation shows real signs of iOS app development, without requiring the user to ask for it, and now works consistently across interactive, headless, and SDK sessions.

Improved
You'll notice
Useful3 Signal2
Group of 2 Artifacts

Artifacts now flag when they're shared from another organization#

Claude Code now marks and explains artifacts that were shared with you from outside your own organization

Feature flag
tengu_cobalt_plinth_larch Not enough to say

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

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

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

Details 0 0 Feedback

What

  • Artifact reads now track whether an artifact is external, meaning it was shared from a different organization than your own, and show distinct messaging for that case ("shared with you from another organization" / noting the author is outside your organization), separate from the existing public/owner/writer distinctions.
  • When artifact data comes back marked with mode external, an explicit external: true flag is now passed along through both the artifact-read and comments-list code paths, rather than being dropped.
  • A new typePage parameter (defaulting to "none") controls whether the artifact's "type contract" text (a description of the artifact's structure) is fetched and included when reading it, so that text isn't refetched on every single read.

Why

This makes it clearer to users and to Claude when an artifact originated outside their own organization, and avoids unnecessary repeated fetching of type-contract text on every artifact read.

Improved
You'll notice
Useful3 Signal2
Group of 2 Artifacts

Reading a first-party artifact's own files can now skip approval#

Reading files from a first-party artifact's own file cache no longer always requires approval, and its progress text now says 'read' instead of 'save'

Details 0 0 Feedback

What

Reading files or assets from the user's own artifact can now be exempted from the usual approval prompt when the artifact was made from a published first-party Artifact type, with a new decision-reason message explaining why. There's also a shortcut for resources that were already read or approved earlier under a display name.

The user-facing progress text for these actions was also updated: the read_file action now shows "read " instead of "save file ", and read_asset now shows "read asset " instead of "save asset ". A destination arrow in the progress text is now suppressed when the resolved destination is a default directory.

Why

These file-cache operations are reads, not writes, so treating them as reads both reduces unnecessary approval prompts for trusted first-party artifacts and makes the displayed action text accurately describe what's happening.

Improved
You'll notice
Useful3 Signal2
Group of 3 MCP

MCP manifest validation now flags unknown tool names, with fuzzy-match suggestions and dedicated telemetry#

Artifact MCP manifests listing tool names a connector doesn't expose now get a specific unknown_tools error and their own telemetry count

Details 0 0 Feedback

What

  • Publishing an artifact page whose manifest declares a connector but lists tool names that connector doesn't actually expose now produces a specific unknown_tools rejection, explaining that tools must be the connector's own top-level tool names (with a hint about MCP-gateway-style connectors).
  • The manifest-capability validator cross-checks each connector's declared tools against its real top-level tool names, auto-corrects near-matches (case/underscore variants), and for anything still unmatched emits the new unknown_tools malformed-entry kind or a warning listing the connector, the unknown names, and the tools that do exist.
  • The artifact_publish telemetry event's malformed_count is now net of a new unknown_tools_count bucket, tracked alongside opaque_id_count and host_unavailable_count.

Why Previously a manifest with a misspelled or nonexistent tool name would likely fail in a less specific or less helpful way. Now the error names the actual problem, suggests likely fixes for near-misses, and is tracked separately in telemetry so this failure mode is easier to diagnose.

Improved
You'll notice
Useful3 Signal2
Group of 2 Multi-Host Sessions unclear

Edit and Write tools detect remote file changes by host#

Edit/Write now catch files changed on a different machine since Claude last read them remotely, and say which machine

Unclear Whether the tengu_edit_tool_stale_read, tengu_edit_tool_not_read_hypothetical, and tengu_write_tool_not_read_hypothetical gates are enabled for any user is unknown; nothing has been read about them.

Details 0 0 Feedback

What

When a file was read through a remote call (for example during a remote session), the Write and Edit tools now record a readBaseline — a size-and-hash snapshot of the file taken at read time — along with servedOn, the hostname the file was actually read from.

Before writing, the tools re-read a bounded portion of the file and compare it against that baseline. If it no longer matches, Claude Code now throws a specific error naming the host: "File has been modified on {host} since this session read it. Read it again there..." instead of the old generic staleness message.

Why

This prevents Claude from overwriting changes that happened on a different machine than the one it's currently checking, and tells you exactly where to go re-read the file instead of leaving you with a vague warning.

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 Cloud Sync unclear

Directory sync engine reworked for mid-turn shipping and generation tracking#

Directory sync now ships changes mid-turn and tracks whether an uploaded generation has been acknowledged

Unclear The exact trigger conditions for mid-turn shipping and what consumes the streaming change feed are not stated.

Details 0 0 Feedback

What

The directory-sync engine, which keeps a cloud/remote session's checkout in step with changes on the user's machine, was substantially restructured:

  • A new handler tracks whether a generation is "owed" (uploaded but not yet acknowledged or refused by the sync service), and notifies the user distinctly for a "refused" case versus a "not taken" case.
  • Progress past a "not_published" state now only proceeds at defined turn boundaries (turn_end/turn).
  • Snapshotting and shipping changes is now parameterized by a "point" in the turn, including turn_end and before_command, tracked via a new midTurnShip concept, so changes can ship partway through a turn rather than only at the end.
  • The worker's returned interface now exposes a streaming field wired to a change feed, started as part of the worker setup.

Why

This makes directory sync more responsive, shipping changes at more points during a turn instead of waiting until the end, while giving the user clearer feedback when an upload is refused versus simply not yet taken.

Improved
You'll notice
Useful2 Signal2
Group of 2 Sandbox

Sandbox path-escape check now rejects backslash paths and verifies file identity by inode#

The sandbox boundary check now blocks backslash paths and uses a new statBigint helper to catch files swapped after path resolution

Details 0 0 Feedback

What

  • The filesystem abstraction gained a statBigint method alongside the existing lstatBigint, for stat calls that follow symlinks with bigint precision.
  • The directory-boundary escape check used for sandboxing now explicitly rejects any path containing a backslash, since backslashes make path resolution unreliable.
  • After realpath succeeds, the check now also compares the dev/ino (device/inode) values, via the new statBigint, between the original path and its resolved target before declaring it "inside" the sandbox boundary — catching the case where the file was swapped out between resolution and access.

Why This closes a gap where a maliciously crafted or swapped path could appear to resolve inside the sandbox boundary but actually point somewhere else by the time it's accessed; checking file identity by inode, not just by resolved path string, makes the boundary check harder to trick.

Improved
You'll notice
Useful3 Signal2
Plugins

New plugin-directory hot-reload watcher with debounce and circuit breaker#

Claude Code now watches plugin folders and reports live when plugins load, unload, or need a reload/restart

Details 0 0 Feedback
What

Claude Code now watches the folders where plugins live and reacts automatically when something changes there. When a plugin's files change, Claude Code reloads it and tells you what happened:

  • the plugin loaded or unloaded
  • the plugin didn't load, with a pointer to run /plugin for details
  • the change is held pending until you run /reload-plugins
  • the change requires a full restart to take effect
Why

This means editing or updating a plugin can take effect without manually reloading or restarting Claude Code in many cases, while still telling you clearly when a manual step like /reload-plugins or a restart is actually required.

Improved
You'll notice
Useful3 Signal2
Artifacts no docs found

New artifact document versioning guidance text#

New guidance text explains how to safely update artifact documents using version numbers

Details 0 0 Feedback
if_version
What

Claude Code has new built-in guidance explaining how to edit "artifact" documents safely when multiple edits might happen. Every time a document is read or written, the response includes a version number. To update the document with update or str_replace, that version must be passed back as if_version. If the document has changed since that version was read, the write is refused and nothing is applied.

Why

This prevents one edit from silently overwriting changes made in between, since a write only succeeds if it's based on the document's current version.

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

Watch tool refuses to (re)start a watch after an unapproved comment-reply ask in the same session#

Claude Code won't retry starting an artifact watch after you already declined a related reply request in the same session

Details 0 0 Feedback
What

The watch action on artifacts (which lets Claude monitor an artifact, for example to reply to comments on it) now checks whether an earlier request in the same session to let Claude reply to that artifact's comments was declined. If it was declined and hasn't since been separately approved, Claude Code now refuses to start or restart the watch outright, telling the model that only your own next message can trigger asking again - it won't automatically re-ask on its own.

Why

This stops Claude from repeatedly re-requesting a permission you already turned down within a session, closing a path where a declined request could otherwise resurface through a different tool.

Improved
You'll notice
Useful2 Signal2
Cloud Sync

directory_sync init/delta schema gains a 'muted' flag for the emergency kill switch#

Directory sync's status messages now include a 'muted' flag for when Anthropic's remote kill switch has disabled it

Details 0 0 Feedback
muted
What

Directory sync (cloud_session.directory_sync), which uploads and installs files to keep a cloud session's directory in step, now reports a muted boolean in its status messages. It is true whenever Anthropic's remote emergency switch has disabled directory sync on that machine, meaning nothing is being uploaded or installed.

Why

This gives a clear, visible signal in the sync status output for when directory sync has been centrally disabled, rather than leaving it unclear why uploads and installs have stopped.

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

New approval-record checks for pinned/edit database writes#

Certain database writes now require a matching prior approval, tracked per session, before they're allowed

Details 0 0 Feedback
What

Some database writes that first read back the stored document — such as string-replace style edits, or writes pinned to a specific version using if_version — now must match a prior approval recorded earlier in the same session. This is tracked in a new map called dbWriteOpSights. If no matching approval record exists, or the recorded operation or version doesn't match what's being written, the write is refused with a new error.

Why

This closes a gap where a write could otherwise happen without the approval that was supposed to govern it, ensuring a write only proceeds when it matches what was actually approved.

Improved
You'll notice
Useful2 Signal2
MCP

MCP OAuth: registration deferred when discovery already offered it#

MCP OAuth login now delays client registration when the server's discovery info already offers it

Details 0 0 Feedback
What

When Claude Code connects to an MCP (Model Context Protocol) server that uses OAuth login, it now checks the server's discovery metadata for a registration_endpoint or support for client_id_metadata_document_supported. If either is present, a new registrationOfferedByDiscovery flag is set, and if there's no access or refresh token yet, Claude Code defers registering itself as a client until the actual authentication step instead of trying to register right away.

Why

Previously, missing client info could fail immediately; now, if the server's discovery data already offers a way to register, Claude Code waits and lets registration happen at authentication time instead of failing early.

Improved
You'll notice
Useful2 Signal2
Telemetry

OTEL exporter distinguishes rejected payloads from destination failures#

OTEL exporter now separates rejected payloads from real connection failures, and stops counting rejections against the circuit breaker

Details 0 0 Feedback
What

When Claude Code sends telemetry (OTEL) data to an external destination and gets back an HTTP 400, 413, 415, 422, or 431 response, it's now treated as the destination rejecting the payload itself, rather than a connection or service failure. This is logged, but only roughly once every 100 occurrences, and it no longer counts toward the circuit breaker (the mechanism that temporarily stops sending to a failing destination). Other kinds of failures still count and can still trip the breaker, taking the destination offline for 30 seconds.

Why

This stops a destination that's rejecting malformed or unexpected payloads from being mistakenly treated as unreachable and temporarily cut off, while still protecting against destinations that are genuinely failing.

Improved
You'll notice
Useful2 Signal2
Subagents

Subagent prompt now documents automatic CLAUDE.md injection#

Claude Code now tells the orchestrating model that subagents already receive CLAUDE.md automatically

Details 0 0 Feedback
CLAUDE.md
What

When the main Claude Code assistant spins up a subagent (a separate Claude instance handling a sub-task, launched via the Task/agent tool), the instructions given to the orchestrating model now explain that the subagent already receives the same CLAUDE.md project instruction files that were loaded at the start of the session. This applies to all subagents except the built-in Explore and Plan agent types, which don't get these files injected.

Why

Previously the orchestrating model might have re-read CLAUDE.md itself or pasted its rules into the subagent's prompt, wasting effort on something the subagent already had. Documenting this should make orchestration a bit more efficient and avoid redundant instructions being stuffed into subagent prompts.

Improved
You'll notice
Useful2 Signal2
Design Command

/design command splits preview-and-hub features from local-agent sessions#

/design now disables preview/hub features (import, export, status, canvas skill) in local-agent sessions

Details 0 0 Feedback
/designpreviewAndHub
What

The /design command now depends on a previewAndHub setting to decide which subcommands are reachable. Local-agent entrypoints explicitly run it with previewAndHub turned off, while the normal interactive path keeps it turned on. With it off, the import, export, and status subcommands, free-form design prompts, and the design canvas skill become unreachable, while consent and revoke (and types, if enabled) remain available.

Why

This limits the fuller Claude Design experience — the canvas, hub, and related import/export/status features — to normal interactive sessions, keeping local-agent sessions restricted to the more basic consent-related functionality.

Related

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

Improved
Under the hood
Useful2 Signal2
Telemetry

OTLP exporter can now route through a Cloud-gateway-issued collector URL#

Telemetry export can now route through a collector URL issued by a Cloud gateway session, and stops if that session ends

Details 0 0 Feedback
What

Claude Code's OTLP telemetry exporter (the component that sends usage and performance data out via the OpenTelemetry protocol) can now resolve its destination address through a Cloud gateway session. When it does, it refreshes the connection headers on every call, and if the gateway session that originally provided the collector's address has since ended, it deliberately fails and drops that batch of telemetry rather than sending it somewhere stale.

Why

This keeps telemetry from being sent to a collector address that's no longer valid once the underlying Cloud session is gone, at the cost of losing whatever data was in flight at that moment.

Improved
You'll notice
Useful2 Signal2
Artifacts no docs found

Artifact publish: new "mcp" store-write capability kind and "durable_declined" live-subscription state#

Artifacts add an "mcp" write capability and a new "declined" state for live comment replies

Details 0 0 Feedback
durable_declined
What

When Claude publishes an artifact (a generated document, app, or file shown alongside the conversation) that writes to a store, it now recognizes a new "mcp" store-write kind alongside the existing "data" and "write_db" kinds, with its own instruction text for the model.

Separately, for artifacts that can respond live to comments, there's now a "durable_declined" result: this covers the case where a request to let Claude reply to comments was asked for but not approved, distinct from the existing "durable_refused" case where the server itself rejected it.

Why

The added "mcp" kind lets artifacts write through MCP (Model Context Protocol, a way for Claude to connect to external tools and services) connections, and the new "durable_declined" state gives a clearer, more specific message when a live-reply request simply wasn't approved rather than being rejected by the server.

Improved
You'll notice
Useful3 Signal1
Plugins

Plugin directory detection now recurses to find nested plugin marker files#

Plugin detection now looks inside subfolders instead of only checking the top-level directory

Details 0 0 Feedback
What

When Claude Code scans a directory to see if it contains a plugin, it now recurses into subdirectories (skipping ones starting with a dot) instead of only checking the top level. If a directory itself looks like a plugin, it's reported as one; otherwise, it's reported as a collection, with separate lists of valid child entries and entries that were skipped.

Why

This lets Claude Code find plugins that are nested inside folders rather than requiring plugin marker files to sit directly at the top level, and lets it report which nested items were recognized versus skipped.

Improved
You'll notice
Useful2 Signal1
Group of 2 Artifacts

Artifact file_read results can now inline the file's full content#

Reading a file through the Artifact tool can now show the file's content inline instead of requiring a separate read

Details 0 0 Feedback

What

  • When the Artifact tool's file_read result is rendered, if the read includes a content string it's now appended in full below the summary line, so the caller no longer necessarily needs to separately read the saved file.
  • A note is shown when the content is a "reading copy" with reserved tag names neutralized.
  • The underlying schema for served files gained content (capped in length) and content_scrubbed fields; elsewhere, content/content_scrubbed are stripped from file_read payloads before being logged.

Why Inlining the file content saves an extra round trip: Claude can see what it just read without issuing a follow-up read call, while the scrubbing step keeps sensitive content out of logs.

Improved
You'll notice
Useful2 Signal1
Group of 3 Artifacts

Artifact relay subscribe/unsubscribe now distinguish 'relay unavailable' from other refusals#

Wake subscriptions and live artifact frames now report distinctly when the relay itself is down or unsupported, versus other refusals

Details 0 0 Feedback

What

  • Subscribing to artifact updates now returns early with {outcome: 'skipped', reason: 'relay_not_served'} when the session's relay isn't served at all.
  • Two new refusal reasons cover why a wake subscription couldn't register: relay_not_served (the cloud session can't register wake subscriptions at all) and relay_unavailable (the session's gateway refused to carry the subscription, commonly because the organization doesn't have it enabled).
  • Unsubscribing from a live artifact frame now also reports a relay-unavailable/relay-not-served refusal distinctly (capturing the HTTP status or a "relay down" flag), tracked via a new unwatch_relay_unavailable telemetry event instead of being lumped into the generic unwatch_client_policy event.

Why Previously these relay-down situations were reported the same as an ordinary access refusal (subscribe_forbidden/unwatch_client_policy), making it hard to tell "you're not allowed" apart from "the relay infrastructure isn't available." Separating the reasons should make it clearer when a problem is on the user/org side versus an infrastructure limitation.

Improved
You'll notice
Useful2 Signal1
Group of 3 Plugins

Plugin browse/install listings are enriched with each plugin's real metadata#

Plugin browse and install lists now resolve dev-override locations and fill in missing metadata from each plugin's own plugin.json

Details 0 0 Feedback

What

  • Building the plugin suggestion/browse list now resolves each plugin's entry through a new async enrichment step (Lce) per marketplace, instead of iterating the raw marketplace plugin list directly. This resolves each plugin's install location against local dev overrides and rewrites the displayed entry accordingly; the same step runs after a single-plugin install/refresh.
  • The claude plugin list available-plugins path now uses this same batched lookup helper and filters out plugins that fail an install-eligibility check, rather than iterating the marketplace's plugin list entry by entry.
  • When a marketplace entry omits fields like displayName, description, author, homepage, repository, license, or keywords, Claude Code now fetches the plugin's source and reads its .claude-plugin/plugin.json to fill those fields in for display.

Why Plugin listings previously showed whatever sparse metadata a marketplace entry happened to include, and could point at the wrong install location for locally-overridden dev plugins. This makes browsing and installing plugins show more complete, accurate information without each marketplace having to duplicate every field.

Improved
You'll notice
Useful2 Signal1
Group of 3 Hooks

Hook messages during session start/resume can now be deferred and released later#

SessionStart hook transcript messages can now be held back and inserted into the transcript only when explicitly released

Details 0 0 Feedback

What

  • The main session controller gained deferHookMessages/releasePendingHookMessages methods, wired into the REPL as deferHookMessages/releaseDeferredHookMessages props, letting a pending hook set's transcript messages be held back instead of inserted immediately, until explicitly released.
  • Before running a new turn (when starting fresh rather than resuming a concurrent query), the agent now awaits any pending/deferred hook set via awaitPendingHooks(), so the turn doesn't start until hooks have resolved (the wait is skipped only if the abort signal actually fires).
  • On session resume, the mechanism for landing SessionStart-type hook messages into the transcript was reworked: instead of a single pending-promise plus a "landed" flag, there is now a _pendingHookSet object with deferHookMessages, awaitStartupHooks, releasePendingHookMessages, and abort support, tied to session id checks so stale hook results for a since-replaced session get discarded.

Why This makes hook-driven transcript messages around session start and resume more reliable: turns wait for pending hooks instead of racing them, hook messages can be staged and released at the right moment, and results from a stale, already-replaced session no longer leak into the current one.

Related

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

Improved
You'll notice
Useful2 Signal1
Group of 2 Plugins

Better diagnostics for plugin file-access failures#

Plugin loading now surfaces underlying filesystem errors instead of silently treating failures as missing files

Details 0 0 Feedback

What

  • Plugin loading now produces clearer diagnostics when something goes wrong reading a plugin's component folders: checking each default folder (commands/agents/skills/output-styles/themes/workflows) now logs an error and records a diagnostic entry when the failure is something other than "not found", instead of silently treating the folder as absent.
  • When a plugin or marketplace manifest path can't be found and there's an associated system error number (errno), the error message now includes that errno and suggests likely causes, such as a self-referential symlink, a broken network mount, or a permissions problem, and tells the user to run /reload-plugins.

Why

These changes make it much easier to diagnose why a plugin failed to load, by surfacing the actual underlying filesystem error instead of just treating any failure as a missing 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
Useful2 Signal1
Group of 4 Sessions

Resuming a session can reuse a precomputed compaction summary instead of recompacting#

Session resume can now skip recomputing a conversation summary by reusing one precomputed ahead of time (feature-gated)

Details 0 0 Feedback

What

  • A new path lets the agent loop reuse a previously precomputed compaction summary, built ahead of time and cached by session id, model, and boundary, instead of running compaction fresh.
  • The cached summary is validated before use: its age, model match, and token growth are checked, with rejection reasons including session_mismatch, model_mismatch, bad_timestamp, too_old, grew_too_much, shrank_too_much, and preserve_uuid_missing. A successful reuse emits tengu_precomputed_compact_rehydrated.
  • The session-resume warning dialog now shows a "Resume from summary (instant, recommended)" label instead of the usual "Resume from summary (recommended)" when a precomputed summary is available (hasPrecomputedSummary).
  • The resume flow, gated by tengu_gleaming_fair_reuse (extending tengu_gleaming_fair), can skip recomputation entirely, or detect that a precomputed summary has gone stale.

Why Recomputing a full conversation summary on every resume is slow; reusing a precomputed one when it's still valid should make resuming a session noticeably faster. The feature is currently gated off.

Improved
You'll notice
Useful2 Signal1
Group of 2 Models

/model default-save now waits for and confirms the write#

Saving a model as your default via /model now waits for the settings write to finish and reports if it failed or couldn't be confirmed

Details 0 0 Feedback
/model

What

Switching models and saving the choice as your default (via the model picker or /model ... default) now waits for the settings write to actually complete, with a timeout, instead of assuming it succeeded right away. The confirmation message now reflects one of three real outcomes:

  • saved - the write completed and is confirmed.
  • unconfirmed - the write couldn't be confirmed within the timeout because settings.json was still being written.
  • failed - the write failed, with the underlying error shown.

Why

Previously the UI could report a model as "saved as your default" before the write to disk was verified. Now the message only claims success once the save is actually confirmed, and tells you when it failed or is still in progress instead of silently assuming it worked.

Improved
You'll notice
Useful2 Signal1
Group of 2 Hooks no docs found

Clearer warning for classic hooks that risk deadlocking on a turn#

Claude Code now explains and prevents a deadlock when a classic hook other than SessionStart, Setup, or SessionEnd tries to wait on the turn it's holding

Details 0 0 Feedback
turn.complete

What

Hooks are scripts that run at certain points in a session (for example, when a session starts or ends). Claude Code has "classic" hooks (classic.*) for these events, plus other hook-like calls such as command.run and tool.call.

A new check now catches the case where a call from a classic.* hook — other than SessionStart, Setup, or SessionEnd — would block waiting on the very turn that hook is currently holding. Previously this could silently deadlock. Now it produces a specific, clear error explaining the problem and suggesting the call be made from turn.complete instead. This check is wired in as the fallback case alongside the same checks already used for command.run, tool.call, and similar calls.

Why

This turns a confusing hang into an understandable error message, and tells you exactly how to fix it (move the call to turn.complete), so hook authors aren't left guessing why their hook froze.

Related

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

Improved
Under the hood
Useful2 Signal1
Group of 2 Agent Proxy

Agent-proxy CA install now skips redundant work#

Claude Code no longer reinstalls a certificate authority into the JVM or system trust store when it's already there

Details 0 0 Feedback

What

When Claude Code's agent-proxy sets up a certificate authority (CA) so network tools can trust its traffic, it now checks first whether the work is already done:

  • For the JVM truststore (Java's certificate store), it checks a small tracking file to see if the current CA is already recorded and the truststore file still exists. If so, it skips rebuilding the truststore and logs "reusing JVM truststore at...".
  • For the system trust store, it checks whether the CA is already recorded as installed for the current system CA. If so, it skips rerunning the operating-system-specific install step and logs "CA already in the system trust store; install skipped".

Both cases now record reused: true in their telemetry.

Why

This avoids unnecessary, repeated CA installation work every time the checks run, which previously happened even when nothing had changed.

Related

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

Improved
You'll notice
Useful2 Signal1
Group of 3 Tool Search

Clearer handling and messaging when tool search is unavailable#

Claude Code now has one consolidated 'tool search absent' mode with matching reason codes, telemetry, and message wording

Details 0 0 Feedback

What

  • A new "tool search absent" mode was added for when tool search isn't available for a given model or session.
    • The reasons tool search can be unavailable (model_unsupported, vertex_model_unsupported, foundry_deployment_unsupported, no_tools_in_request, not_registered, mcp_search_unavailable) were consolidated into a single function that returns a reason code, used both by the existing gating logic and a new helper that specifically checks for the mcp_search_unavailable case.
    • The messaging shown for deferred/blocked tools now changes wording when tool search is absent: it says "tool" instead of "deferred tool", says "Do not call them" instead of "Do not search for them", and describes MCP servers still connecting as tools that "will be announced here" rather than tools to search for.
    • The deferred-tools-pool telemetry event (tengu_deferred_tools_pool_change) gained new fields resurfacedCount and toolSearchAbsent, and in this mode resurfaced tools are counted separately.

Why

When tool search can't be used, Claude now gets consistent messaging and reasoning, driven by one shared reason-code function, that matches its actual situation instead of instructions referencing a tool-search feature it can't use.

Related

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

Improved
You'll notice
Useful2 Signal1
Group of 3 Workflows

Workflow agent detail card is now expandable with tool-call and sub-task activity#

Agent status cards in workflow monitoring can now expand to show tool calls and sub-tasks

Details 0 0 Feedback

What

The agent status/detail card shown for workflow agents gained a larger, expandable view:

  • A collapsible "Activity" section lists tool calls, with a truncated summary showing a count like "N of M tool calls" when there are more than fit.
  • Sub-tasks are now rendered as a nested list alongside the tool calls.
  • An " expand" hint is appended to the Activity header, and the keybinding for expanding/collapsing the card was reworked to use a dedicated detailExpandable setting instead of a simple scroll adjustment.
  • The first time a card's detail view is expanded, a telemetry event (workflow_agent_card_detail) is fired before the expanded state toggles.

Why

This makes it easier to see what a workflow agent is doing, including its sub-tasks, without leaving the summary view, and gives visibility into how often the detail view gets used.

Related

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

Improved
You'll notice
Useful2 Signal1
Group of 3 Sessions

Resumed sessions handle unresolved and interrupted tool calls via answeredToolUseIds#

Session resume now tracks and fabricates results for tool calls left hanging by an interruption, via a new answeredToolUseIds field

Details 0 0 Feedback

What

  • A new function synthesizes fabricated tool_result blocks (marked with toolDenialKind: "interrupted") for tool_use calls that were left unresolved when a session was interrupted, tracked via a new outTrailingUnresolvedToolUseIds set. These are surfaced through a new answeredToolUseIds field returned from the resume-message-building pipeline and threaded through to the headless runner.
  • Session state serialization now carries this answeredToolUseIds field alongside the existing supersededToolUseIds/supersededToolNames fields in several places.
  • When resuming after an interrupted turn, every id in answeredToolUseIds is now also added to the set of tool-use ids treated as already-answered, so they won't be re-prompted (previously only ids from the resumed-turn tool list and a currently-parked permission were included).

Why Without this, resuming a session after an interruption could leave tool calls dangling with no result, or could re-prompt for permissions that were already effectively resolved. Tracking answeredToolUseIds end to end keeps resumed conversations consistent with what actually happened before the interruption.

Improved
You'll notice
Useful2 Signal1
Multi-Host Sessions

File-modified-since-read errors now name the host when multi-host sessions are involved#

The 'file changed since you read it' error now names which host to re-read the file on, in multi-host sessions

Details 0 0 Feedback
What

When Claude Code detects that a file was modified after it was last read, and the session spans multiple hosts (machines), the error message now tells the model exactly which host to re-read the file on, using an explicit _host parameter in the Read tool call. Previously the message was generic and didn't specify a host.

Why

In multi-host sessions, a file with the same path can exist independently on different machines. Naming the host removes ambiguity about where the file actually changed, so the model re-reads the correct copy before retrying the write.

Related

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

Improved
You'll notice
Useful2 Signal1
Managed Settings

Managed settings sources: helper config from lower-priority sources is now ignored with a warning when merged#

When merging managed settings from multiple sources, policy-helper configuration from lower-priority sources is now ignored with a warning

Details 0 0 Feedback
managedSourcesBehavior
What

When managedSourcesBehavior is set to "merge" (composing every managed settings source, such as MDM or a managed settings file, instead of only using the highest-priority one), policy-helper configuration keys found in a non-highest-priority source are now explicitly ignored, and Claude Code surfaces a warning about it. Previously this configuration would silently merge in.

Why

Policy helper configuration is now read only from the highest-priority managed settings source. The warning makes this explicit instead of letting an admin believe a lower-priority source's helper settings were taking effect when they weren't.

Related

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

Improved
You'll notice
Useful2 Signal1
Hooks

SessionStart hook execution now honors an abort signal#

SessionStart hooks can now be aborted mid-run instead of always running to completion

Details 0 0 Feedback
SessionStart
What

The SessionStart hook pipeline, which runs when a session begins or resumes, now accepts an abort signal. If that signal fires before the hooks finish, Claude Code returns whatever hook messages were already collected instead of continuing on to steps like reloading skills or checking watched paths.

Why

This allows session startup to be cut short cleanly if needed, without waiting for every SessionStart hook step to finish first.

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
Images

Non-standard image formats are normalized to PNG before resize/compress#

Uncommon image formats like TIFF, AVIF, and BMP are now converted to PNG before resizing or compressing

Details 0 0 Feedback
What

When Claude Code resizes or compresses an image, it now checks the decoded format against an allowed list (png, jpeg, gif, webp). Anything outside that list, such as TIFF, AVIF, or BMP, is now converted to PNG before any size or dimension calculations happen. Previously, only jpg was specially handled by treating it as jpeg.

Why

This lets Claude Code handle a wider range of image formats reliably during resize and compression, instead of only correctly handling a small fixed set.

Related

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

Improved
You'll notice
Useful2 Signal1
Plugins

In-terminal plugin form widgets (text input, dropdown) gain mouse click focus support#

Plugin text inputs and dropdowns in the terminal UI can now be focused with a mouse click

Details 0 0 Feedback
What

Claude Code's in-terminal UI for plugins (add-ons that extend Claude Code) includes form widgets like text inputs and dropdowns. These were rewritten around a shared helper that tracks keyboard focus state, and both widget types now respond to mouse clicks on their container, gaining focus when clicked. A new click handler filters out clicks caused by window activation or drag-and-drop, so only genuine clicks trigger focus.

Why

Previously these widgets could likely only be focused via keyboard navigation; now clicking them with a mouse in a terminal that supports mouse input works too.

Improved
You'll notice
Useful2 Signal1
Artifacts no docs found

Comment threads can show 'presence' info when list-size budget allows#

Artifact comment threads can now show who's currently viewing or typing, space permitting

Details 0 0 Feedback
presenceTextpresenceShown
What

When listing comments on an artifact, Claude Code can now compute and display extra "presence" information for each comment, such as who is currently viewing or typing. This is only added when it fits within the response's overall size limit, and is tracked with new presenceText and presenceShown fields.

Why

This gives more collaborative context on comment threads when there's room to show it, without pushing a response over its size limit when there isn't.

Related

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

Improved
You'll notice
Useful2 Signal1
Elsewhere

Untrusted-content wrapping added to web-fetch-style summarization prompts#

Fetched web page content is now wrapped as untrusted data before being summarized, with a warning to ignore embedded instructions

Details 0 0 Feedback
What

When Claude Code builds a prompt to summarize content fetched from a web page, it now wraps that content in an explicit "untrusted content" fence, with text before and after warning the model to treat it as data, not as instructions. Any text embedded in the page that tries to direct an AI assistant (for example, telling it to ignore its instructions, leak data, or hide something) is now flagged as a finding to report rather than something to act on.

Why

This guards against prompt injection: a malicious or compromised web page could otherwise embed hidden instructions that a summarization step might follow. Wrapping fetched content as untrusted data keeps those instructions from being treated as commands.

Improved
You'll notice
Useful2 Signal1
Elsewhere

WebFetch's claude.ai artifact exception widened to cover shorter artifact URLs#

WebFetch's exception for claude.ai artifact links now also matches the shorter claude.ai/artifact/{id} URL form

Details 0 0 Feedback
What

The WebFetch tool has a special carve-out allowing it to fetch claude.ai artifact links using your logged-in claude.ai session. That carve-out now also matches the shorter URL form claude.ai/artifact/{id}, in addition to the longer claude.ai/code/artifact/{uuid} form it already covered.

Why

This means fetching a claude.ai artifact link via its shorter URL now benefits from the same authenticated access as the longer form, rather than being treated as an ordinary, unauthenticated fetch.

Improved
You'll notice
Useful2 Signal1
Project Memory no docs found

Large project memory files are now offloaded to a local_file pointer instead of inlined#

Large project memory files are now offloaded to a downloadable file instead of being pasted in full

Details 0 0 Feedback
local_file
What

When reading project memory files, content that stays under a certain size is still returned inline as before. Content that exceeds that size threshold is now written to a local file, and a pointer to that file (a local_file reference) is returned instead of embedding the full text directly.

Why

This keeps large remembered files from bloating the conversation context, since only a reference is included by default rather than the entire file's contents, following the same offload-to-file approach already used for other project uploads.

Related

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

Improved
You'll notice
Useful2 Signal1
Background Agents

Recovered background tasks now explicitly state they were marked failed/stopped#

Recovered background task messages now confirm they were marked failed or stopped

Details 0 0 Feedback
What

When Claude Code restarts after a crash and recovers background tasks that were running before, the messages shown for them now add an explicit line stating the new status: 'They have been marked failed.' for tasks that didn't finish, and 'They have been marked stopped.' for tasks that may have been stopped mid-run.

Why

This removes ambiguity about what happened to a task that was interrupted by a crash, so it's clear the task's status has already been resolved rather than left hanging.

Improved
You'll notice
Useful2 Signal1
Background Agents

Background agent completion notification split into headline + detail#

Background agent recovery notifications now show a short headline plus a longer detail message

Details 0 0 Feedback
What

Notifications about background agents (tasks that keep running separately from the main conversation) recovered across sessions are now built from two parts, a short headline and a longer detail, instead of one combined sentence. This applies to three cases:

  • A background agent that finished before the previous session ended but whose result was never reported.
  • A background agent from a previous session that couldn't be automatically restarted.
  • A background agent that was automatically restarted from its saved transcript after a crash.
Why

Splitting the message into a headline and detail makes it easier to scan what happened to a background agent at a glance, while still keeping the fuller explanation available for anyone who wants it.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact 'shared database' description now names the actual MCP servers built for the session#

Artifact database help text now names the actual MCP servers built for the session instead of a generic description

Details 0 0 Feedback
What

The "Separate tools" explanation shown for artifact database access now checks whether the data and endpoints MCP servers were actually built for the current session, and if so, names them individually instead of describing one generic artifact database tool. This includes a new description for server-run endpoints covering get_endpoints, call_endpoint, and run_script.

Why

This makes the help text more accurate for a given session, telling the reader specifically which tools are available rather than a one-size-fits-all description that might not match what's actually set up.

Improved
You'll notice
Useful2 Signal1
Artifacts no docs found

Artifact result text can be returned inline instead of requiring a Read, when multi-file mode is on#

Small text files saved by Artifact tools can now return their contents inline, skipping a separate Read

Details 0 0 Feedback
multiFileOn
What

When an Artifact tool saves output to a local file, its description now notes that for a small published text file, the file's contents come back directly in the tool's result data. This happens when multiFileOn is set, meaning a separate Read call to fetch the contents is no longer necessary. The same applies when reading a file's published path inside an artifact: the result now includes the small text file's contents directly rather than only its saved location.

Why

This saves an extra step: instead of saving a file and then reading it back, small text output is available immediately in the same result.

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
Marketplace

Plugin manifests can now be filled in from marketplace-entry metadata#

Plugin manifests can now be auto-filled from marketplace listing metadata

Details 0 0 Feedback
What

When Claude Code merges a plugin's manifest with its entry in a marketplace listing, any of the following fields that are missing from the manifest are now filled in from the marketplace entry, if available: displayName, description, author, homepage, repository, license, and keywords.

Why

This means plugin authors don't need to duplicate metadata in both the manifest and the marketplace listing; missing details in the manifest can be backfilled automatically.

Related

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

Improved
You'll notice
Useful2 Signal1
MCP

MCP server delete confirmation can note a version-scoped condition#

MCP server delete confirmation can now note it applies only to a specific version

Details 0 0 Feedback
What

When confirming deletion of an MCP server (a connected external tool server), the confirmation screen can now show an extra note like "(only if still at version X)" when a specific version applies, in addition to the existing warning and detail text.

Why

This helps avoid accidentally deleting the wrong version of a server configuration by making the version condition visible at the point of confirmation.

Improved
You'll notice
Useful2 Signal1
Artifacts

Artifact command display now shows the artifact's title where available#

Artifact command output now shows the artifact's title instead of just its raw URL

Details 0 0 Feedback
What

A new helper resolves and formats an artifact's title for display, and is now used across several artifact-tool actions — listing, reading, pinning, unpinning, and deleting assets. Command summaries for these actions now show a quoted title, like of "My Design", instead of just the raw artifact URL.

Why

This makes it much easier to tell which artifact a command acted on at a glance, rather than having to recognize it by URL alone.

Improved
You'll notice
Useful2 Signal1
Background Agents

Background agent stop/fail notifications now separate a short summary from a longer note#

Notifications for stopped or failed background agents now split a short summary from a longer explanation

Details 0 0 Feedback
What

When a background agent (a task running outside your direct view), a background shell command, or a web-fetch launch stops or fails, the notification you get now carries two parts: a short summary line and a longer note (also called body) with the details. Individual agent notifications now start with a fixed line like Background agent "X", with the fuller explanation moved into the note.

Why

Separating a quick summary from the longer explanation makes it easier to scan notifications at a glance while still having the full detail available when you need it.

Improved
You'll notice
Useful2 Signal1
Tool Results

Oversized-output error message now warns about byte-limited saved files#

Error messages for oversized tool output now warn when the saved file itself was truncated

Details 0 0 Feedback
What

When a tool's output is too large to show directly and Claude Code saves it to a file instead, that saved file can itself be cut off at a byte limit. Now, when this happens, the error message shown to Claude explicitly notes that the saved file only contains the first N bytes or characters of the original output, that it may end in the middle of a structure, and that trying to parse it as JSON can therefore fail.

Why

This extra warning helps Claude (and anyone reading the error) understand why a saved file might fail to parse, instead of appearing to be a mysterious JSON 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
Worktrees no docs found

Worktree checkout now parallelized via git's checkout.workers, capped at 16#

Git worktree checkouts now run in parallel using git's checkout.workers, capped at 16

Details 0 0 Feedback
checkout.workers
What

When Claude Code checks out a git worktree (a separate working copy of a repository), it now speeds this up by using git's checkout.workers setting, which lets git parallelize the checkout across multiple workers. If the repository doesn't already have checkout.workers configured, Claude Code sets it for the operation itself, choosing a value between 1 and 16. This applies both when quickly resuming an existing worktree and when creating a new one.

Why

Parallelizing the checkout can make worktree setup noticeably faster, especially for larger repositories, without requiring any configuration from you.

Improved
You'll notice
Useful2 Signal1
Auth

Auth status message adapts to Cloud gateway sessions#

claude auth status now shows a Cloud-gateway-specific sign-in hint instead of the generic one

Details 0 0 Feedback
claude auth status/login
What

When Claude Code is running through a Cloud gateway and you're not logged in, claude auth status (and its JSON output) now tells you to start claude and sign in with /login, instead of showing the generic "run claude auth login" message. The reported authentication method for these sessions also now shows as none rather than third_party.

Why

The old generic instructions didn't apply to sessions running through a Cloud gateway, so this makes the sign-in guidance actually match how you're running Claude Code.

Related

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

Improved
You'll notice
Useful2 Signal1
Elsewhere

Settings permission-editing prompt distinguishes user-level vs project-level .claude folder#

The prompt asking to let Claude edit settings now says whether it's your user-level or this project's .claude folder

Details 0 0 Feedback
What

When Claude Code asks for permission to edit its own settings files, the confirmation prompt now shows different wording depending on where those files live: your personal, user-level ~/.claude folder, or this project's own .claude folder.

Why

Previously the prompt didn't distinguish the two, which could make it unclear whether you were granting access to settings that apply everywhere you use Claude Code or just to the current project. The clearer wording makes it easier to decide whether to allow the edit.

Improved
You'll notice
Useful2 Signal1
Auth

Clearer managed-settings gateway sign-in error message#

Gateway sign-in error now explains itself in plain language instead of naming the internal forceLoginMethod setting

Details 0 0 Feedback
/login
What

When a machine's managed settings (an admin-controlled settings file) require signing in through a cloud gateway, Claude Code used to show the raw internal error "forceLoginMethod is 'gateway' in managed settings". It now shows a plain-language message instead: managed settings on this machine configure a cloud gateway sign-in, and the user should run /login from an interactive terminal to authenticate. This applies both to the CLI's login-validation path and to a separate stderr early-exit path.

Why

The old message exposed an internal setting name that meant nothing to most users. The new wording tells people what's actually happening and what to do about 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
Permissions

Bash command comparison for approval matching reworked#

The check that matches bash commands for permission approval was rewritten to handle more command-prefix forms

Details 0 0 Feedback
What

When Claude Code decides whether two bash commands should be treated as the same for permission or approval purposes, it previously did this by stripping a literal cd <directory> && prefix. That logic has been replaced with a more general comparison that also correctly handles the way Windows quotes a cd prefix.

Why

This makes permission matching for bash commands more reliable on Windows, reducing cases where a command that should be recognized as already-approved is instead treated as new and prompts for approval again.

Improved
You'll notice
Useful2 Signal1
Models

Opus 1M-context restriction extended to opusplan[1m]#

The 1M-context restriction that blocks certain Sonnet model switches now also blocks opusplan[1m]

Details 0 0 Feedback
What

Claude Code has a check that prevents switching to a 1-million-token context window for certain models, previously applied to sonnet[1m], sonnet-4-6[1m], and sonnet-5[1m]. That same restriction now also applies to the model string opusplan[1m].

Why

This closes a gap where opusplan[1m] could be selected without the same 1M-context restriction that already applied to the equivalent Sonnet variants.

Improved
You'll notice
Useful2 Signal1
Artifacts no docs found

New artifact database error kinds surfaced verbatim#

Artifact database now reports specific edit-conflict errors instead of a generic failure

Details 0 0 Feedback
edit_no_matchedit_ambiguousversion_mismatch
What

When Claude Code's artifact database rejects an edit, it now passes through several specific error reasons instead of collapsing them into a generic failure: edit_no_match, edit_ambiguous, edit_field_missing, edit_field_not_string, and version_mismatch.

Why

This makes it clearer why an edit to an artifact failed, for example because the text to replace couldn't be found, matched more than one place, or the artifact had been changed by someone else in the meantime, rather than just showing an unhelpful generic error.

Improved
You'll notice
Useful2 Signal1
Permissions

Bash permission matching now accounts for a leading "cd <cwd> &&" wrapper#

Bash permission rules now match commands even when prefixed with "cd <folder> &&"

Details 0 0 Feedback
cd
What

When Claude Code checks whether a Bash command is allowed by your permission rules, it now also recognizes commands written as cd <folder> && <command> as matching a rule written for the bare <command>, as long as the folder matches the current working directory.

Why

Before this, a permission rule written for a plain command could fail to match if Claude first changed directory and chained the command with &&, even though the actual working directory was the same one the rule expected. This closes that gap so such commands are recognized correctly.

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

str_replace edits to artifact live-file data are now checked as an 'update' permission rule#

Editing artifact live data with str_replace is now checked and can be denied as an 'update' permission rule

Details 0 0 Feedback
str_replace
What

When a str_replace operation is used to edit artifact files or live-document data, Claude Code now treats it the same as a database 'update' operation for the purposes of matching your permission rules. If a rule denies it, you'll see a message explaining that a str_replace counts as an update and that nothing was written.

Why

This closes a gap where editing artifact live data via str_replace might not have been checked against 'update' permission rules the same way other update operations are, so your existing rules for controlling updates now apply consistently to this kind of edit too.

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
Models

Model switch failures are now surfaced to the user#

Claude Code now tells you when switching models fails instead of failing silently

Details 0 0 Feedback
What

If you switch models (for example with a model-switch command) and the switch does not succeed, Claude Code now shows a 'Model switch failed' message. Previously this kind of failure was not surfaced at all.

Why

Before this change, a failed model switch could leave you unsure whether you were talking to the model you asked for. Now you get a clear signal when the switch didn't go through.

Improved
You'll notice
Useful2 Signal1
Remote Control

Remote-control bridge now waits for in-flight OAuth refresh before exiting/registering#

Remote Control now waits for an in-progress login token refresh before registering the device

Details 0 0 Feedback
claude remote-control
What

When you run claude remote-control to connect a device (so you can continue a local session from your phone or another computer), the setup process now waits for any in-progress OAuth token refresh (the background renewal of your login credentials) to finish before it registers the device or exits, up to a new capped wait time (OAUTH_REFRESH_EXIT_WAIT_CAP_MS).

Why

This avoids a race where Remote Control tries to register or exit while your login token is mid-refresh, which could otherwise leave the connection in a bad state.

Improved
You'll notice
Useful2 Signal1
Terminal UI

Chord-timeout keybinding now surfaces a user-visible notification#

A timed-out keybinding chord now shows an on-screen notification, not just a log entry

Details 0 0 Feedback
What

If you start a keybinding chord (a sequence like pressing a leader key followed by another key) and don't finish it in time, Claude Code now shows an immediate notification naming the chord that was cancelled. Before, this was only recorded in the log where you wouldn't see it.

Why

This makes it clear in the moment why your key sequence didn't do anything, instead of leaving you to wonder or dig through logs.

Improved
You'll notice
Useful2 Signal1
Slash Commands

Local slash-command results can now be patched into an already-queued message (deferred slash commands)#

Slash commands can now finish their output after being queued and patch it into your queued message

Details 0 0 Feedback
What

When a local slash command's output isn't ready yet but you've already queued a message containing it, Claude Code can now go back and patch the queued message once the result arrives, rather than requiring the result up front. This works by finding a queued message that starts with <local-command-stdout> or <local-command-stderr> and rewriting its contents in place, paired with new internal helpers that build the initial placeholder message and track it by a deferredSlashUuid.

Why

This lets a local slash command's result show up correctly even if it finishes after the message using it has already been queued for sending, instead of the message being stuck with stale or missing 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
Slash Commands

New fuzzy slash-command autocomplete matching helpers#

Slash-command autocomplete gets new fuzzy-matching helpers to avoid pointless popups

Details 0 0 Feedback
What

New internal matching functions let slash-command autocomplete match a partially-typed /command against the command's full name, its short alias (the part after a colon), or its display label. The matching only offers suggestions if at least one candidate is actually longer than what you've typed, so autocomplete won't pop up when what you typed already exactly matches a command.

Why

This avoids showing an autocomplete popup that offers nothing new once you've already typed a full, exact command name.

Related

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

Improved
Under the hood
Useful2 Signal1
Telemetry

PR/MR-creation detection extended to GitLab CLI and raw GitHub API calls#

Claude Code now recognizes PR/MR creation via GitLab CLI and raw GitHub API calls, not just gh pr create

Details 0 0 Feedback
What

Claude Code detects when you create a pull request or merge request so it can track this activity. That detection now covers more cases:

  • Composite shell commands that combine gh pr create or glab mr create with allowed extra calls (like gh/glab auth, config commands, or api /user) are recognized, via a new helper replacing the previous simpler check.
  • Creating a pull request through a raw gh api call that POSTs to /repos/OWNER/REPO/pulls is now also recognized as PR creation, through a separate new helper.

Both paths feed the same telemetry event and pull-request contribution tracking as before.

Why

Previously, using GitLab's CLI or hitting the GitHub API directly instead of the standard gh pr create command could mean Claude Code failed to notice you'd created a pull or merge request. This closes that gap so tracking stays accurate regardless of which tool or command shape you use.

Improved
You'll notice
Useful2 Signal1
Permissions

Bash permission check now lets a bare 'cd <safe-subdir>' (plus further safe commands) skip the outside-working-directory block#

A bare cd <safe-subdir> followed by other safe commands no longer triggers the outside-working-directory permission check

Details 0 0 Feedback
cd
What

When Claude Code checks whether a bash command needs extra permission because it runs outside your working directory, it now recognizes a specific safe pattern: a compound command (several commands chained together) that starts with cd, chdir, or pushd to a plain relative directory name. The directory can't contain wildcards, environment variables, .., or other shell special characters, and it must already be a directory you're allowed to read. Every command chained after it must also be safe and already permitted.

When all of that holds, Claude Code skips the extra "outside working directory" permission prompt entirely.

Why

This cuts down on unnecessary permission prompts for a common, harmless pattern: changing into a subdirectory you already have access to and then running further already-permitted commands there. It only applies on non-Windows systems.

Improved
You'll notice
Useful2 Signal1
Plan Mode

Plan-review 'view as artifact' step removed from ExitPlanMode UI#

Exiting plan mode no longer offers to show the plan as an artifact before running it

Details 0 0 Feedback
ExitPlanMode
What

Previously, when Claude finished writing a plan, it could ask "Claude has written up a plan. Would you like to review it as an artifact first?" before moving on. That step has been removed: exiting plan mode now goes straight to the confirmation prompt asking whether to execute the plan.

Why

This simplifies the plan-review flow to one fewer step, though it means the option to view the plan as a separate artifact document first is no longer offered here.

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
Workflows

New per-agent transcript polling hook for the workflow monitor TUI#

Workflow monitor's agent-detail view now polls each agent's transcript in the background and shows a loading state

Details 0 0 Feedback
What

The workflow monitor's terminal display (the TUI that shows agents running as part of a Workflow) now has a background hook that repeatedly polls for each agent's transcript, keyed by its run and agent ID. While a transcript is still being fetched, the detail card shows a "loading" state; once fetched, the result is cached and reused, and the poll reschedules itself automatically. The agent-detail card that renders this reads the transcript's tasks and tool calls once available.

Why

This keeps the workflow monitor's per-agent detail view responsive and up to date without blocking on a slow transcript fetch, showing a clear loading indicator instead of a stalled or empty pane.

Related

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

Improved
You'll notice
Useful1 Signal1
Group of 2 Sessions

Remote session stdin is now split by connection lane#

Remote sessions now only treat stdin as real input on bridge/BYOC connections, discarding and warning on it otherwise

Details 0 0 Feedback

What

Remote session IO setup no longer pumps all inbound stdin (standard input, the text stream a program reads from) through a single loop. It now dispatches to one of two lanes:

  • pumpStdinLane, used for bridge or byoc (bring-your-own-compute) host connections, where stdin is a real input source.
  • A new discardStdinLane, used otherwise, which drains and discards any data arriving on stdin and logs a warning the first time non-empty data appears, explaining that control input for other host types comes from the session stream instead.

Why

This prevents stray or unexpected stdin data from being silently treated as real input on connection types where it was never meant to be one, while still making it visible via a warning if it happens.

Improved
You'll notice
Useful1 Signal1
Group of 4 Auth

Gateway-forced login detection and validation simplified#

Gateway login logic was simplified: looser URL validation and a more direct check for when login is forced through the gateway

Details 0 0 Feedback
forceLoginGatewayUrl

What

  • The forceLoginGatewayUrl CLI option now accepts any non-empty string rather than requiring a syntactically valid URL.
  • The check for whether login is gateway-forced was simplified to: the login method is "gateway", or a gateway URL is set — replacing a more convoluted prior condition.
  • The forced-login-method resolution for the login flow now short-circuits to "gateway" whenever the session is already in gateway auth mode, rather than only special-casing an explicit managed-setting value.
  • The gateway auth backend's API key check now short-circuits to reporting the key as "missing" first when in gateway mode without the expected check passing, instead of falling through to the normal API-key-helper/environment-variable lookup.

Why These changes make gateway-forced login detection more consistent and predictable across the CLI, reducing edge cases where login mode or API key status could be determined by a stricter or more roundabout check than intended.

Related

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

Improved
You'll notice
Useful1 Signal1
Group of 2 Artifacts

Type-locked Artifact publishing gets customizable messaging and a typeLock field#

Publishing to a type-locked Artifact URL now shows a per-store customizable notice, backed by a new typeLock slug field

Details 0 0 Feedback

What

The notice shown when publishing data files to a type-locked Artifact URL can now be produced dynamically per-store, based on storeDeclared, release, and typeSlug, instead of always showing the same fixed message. A new helper reads a typeLock.slug value, falling back to the existing typeSlug field when it's not set.

Why

This points to a new typeLock field being introduced alongside typeSlug, and lets the message shown to users be tailored to the specific store and release involved rather than using generic wording.

Improved
You'll notice
Useful1 Signal1
Group of 2 Artifacts

New per-session "scratchpad" directory support#

Claude Code now resolves a per-session scratchpad directory and trusts it as a source root for publishing artifacts

Details 0 0 Feedback
scratchpad

What

New helper functions resolve and validate a per-session "scratchpad" directory: they check that it's a real directory (not a symlink), compute its canonical path, detect whether a given path lies inside the scratchpad or the working directory, and detect symlink-redirect situations when resolving a base path.

When verifying the source of a file being published as an Artifact, the list of trusted root locations now also includes this scratchpad directory, in addition to the working directory and any additional working directories.

Why

This gives Claude Code a dedicated, verified scratch location per session, and lets files published from it be treated as trustworthy the same way files from the working directory already are.

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

Pin/unpin denial wording softened from 'requires' to 'someone else's'#

The message shown when pinning is denied changed its wording

Details 0 0 Feedback
What

When Claude Code denies a request to pin an artifact because there's no live consent surface (no way to ask you in the moment), the reason text shown changed from "Pinning someone else's artifact requires a live consent surface" to a softer phrasing that just describes it as someone else's artifact.

Why

This is a wording change to an internal denial message; it doesn't change when pinning is allowed or denied.

Improved
You'll notice
Useful1 Signal1
Artifacts

Artifact live-file preservation message now reports non-tracked live files separately#

Artifact copy/reseed messages now separately report other live files that were kept or changed

Details 0 0 Feedback
What

When Claude Code copies or reseeds an artifact and reports which "live" files were kept as-is, the message now also reports on other live files that were kept or changed, appending a separate "; other live files kept or changed:" note when the file list is provided in a Map-like structure.

Why

This gives a fuller picture of what happened to all live files during a copy or reseed, not just the ones explicitly preserved unchanged.

Improved
You'll notice
Useful1 Signal1
Artifacts

Artifact asset read/list tool-use summaries drastically simplified#

Artifact tool's read/list-asset summaries were shortened to brief fixed text, dropping detailed approval-scope explanations

Details 0 0 Feedback
What

The short descriptions Claude Code shows for the artifacts tool's read_asset and list_assets actions (used when displaying what a tool call is about to do) were replaced with two brief, fixed sentences. The previous versions explained in more detail how approval scope worked, including the difference between reading your own artifacts versus others', and coverage of server-side copies.

Why

This simplifies what's shown to the reader when these actions run, though it means less detail is surfaced about exactly what access is being used.

Improved
You'll notice
Useful1 Signal1
Artifacts

Same simplification applied to artifact list_files/read_file summaries#

Artifact tool's list_files/read_file summaries were similarly shortened, dropping detailed co-write and approval explanations

Details 0 0 Feedback
What

The short descriptions shown for the artifacts tool's list_files and read_file actions were also cut down to two brief, fixed sentences, replacing more detailed text that had explained co-writing, type-publisher distinctions, and approval scope.

Why

This matches the same simplification made to the artifact read/list-asset summaries, trading detailed explanation for shorter, simpler text shown to the reader.

Improved
You'll notice
Useful1 Signal1
Artifacts

Artifact verify-diagnostics 'no row' message gains an extra explanation#

Artifact verify-diagnostics message now also explains older pages that don't report diagnostics at all

Details 0 0 Feedback
What

When Claude Code checks an artifact (a generated file or page shown to the user) for runtime diagnostics and finds none, it shows an explanatory message. That message now also covers the case where the artifact's page runtime simply doesn't report diagnostics at all, which happens with older artifact pages, in addition to the existing cases of a missing viewer or an owner-only artifact.

Why

This gives a clearer, more accurate explanation when no diagnostics show up for an older artifact page, instead of leaving it looking like an unexplained gap.

Improved
You'll notice
Useful1 Signal1
Cloud Sync

Directory sync: dedup logic and wording change for 'changedDuringRead'#

Directory sync avoids repeating the same 'still being written' warning and now says 'sync' instead of 'turn'

Details 0 0 Feedback
What

When Claude Code notices a file is still being written to during directory sync, it shows a warning that the file's contents haven't settled yet. This warning now avoids repeating itself: if the same set of files triggers it again, it won't be re-appended. The wording also changed slightly, now saying the file will go out "with the next sync that finds it at rest" instead of "the next turn that finds it at rest."

Why

This reduces redundant warning spam when the same files keep showing up as still being written, and the wording change more accurately describes that the check happens on sync, not just once per conversation turn.

Improved
You'll notice
Useful1 Signal1
Remote Control

Gateway session messaging simplified/unified for Remote Control#

Remote Control's gateway-blocked message is now a single generic explanation instead of two separate cases

Details 0 0 Feedback
What

When a Claude Code session can't use Remote Control because it's routed through an enterprise or cloud gateway, it now shows one generic message saying the session uses a gateway that doesn't support Remote Control. Previously this distinguished between a session signed in via /login to an enterprise cloud gateway and one set up via the CLAUDE_CODE_USE_GATEWAY environment variable.

Why

This simplifies the explanation shown to users, though the underlying limitation, that gateway-routed sessions can't use Remote Control, is unchanged.

Improved
You'll notice
Useful1 Signal1
Project Memory

New explicit messages for project memory being unreachable via the remote-session bridge#

Clearer error messages explain when project memory isn't reachable over a remote session or is turned off

Details 0 0 Feedback
What

Claude Code now shows explicit messages when project memory can't be used. One message explains that project memory tools throw an error when running through the remote-session bridge, because that bridge has no memory access. A separate message explains when memory access is simply turned off or the server doesn't yet support it, noting that this is re-checked the next time context is rebuilt or a new session starts.

Why

These messages make it clear why project memory isn't working in a given situation, distinguishing a structural limitation (remote-session bridge) from a temporary or configuration-based one (access off or not yet supported), and confirming it will be re-checked later rather than staying broken indefinitely.

Related

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

Improved
You'll notice
Useful1 Signal1
Cloud Sync

File sync pause/resume messaging now frames itself as an Anthropic-controlled emergency switch#

File sync pause/resume messages now describe an Anthropic-controlled 'emergency switch'

Details 0 0 Feedback
What

New user-facing messages explain that file syncing between a local machine and a cloud session can be paused or resumed by an 'emergency switch' controlled by Anthropic. These messages cover cases where a file upload was in progress when sync paused, and cases where two-way sync between local and cloud is affected.

Why

This gives a clearer explanation when file sync unexpectedly stops or resumes, making it clear the pause is a deliberate, centrally-controlled action rather than a bug or connection failure.

Improved
You'll notice
Useful1 Signal1
Artifacts no docs found

New 'durable_declined' live-subscription state gets its own message#

A new durable_declined live-subscription state now shows its own distinct message

Details 0 0 Feedback
durable_declined
What

When an artifact's live subscription (the mechanism that keeps a published artifact updating live) has the state durable_declined, Claude Code now shows a distinct message for it instead of falling back to a generic message used for other states.

Why

This gives users clearer, more specific feedback about why a live subscription isn't active in this particular case, building on the live-subscription support for artifacts published from a type.

Improved
You'll notice
Useful1 Signal1
Skills

Skill capability wording distinguishes core (callable) vs. declared skills#

Skill wording now says 'calling' a core capability versus 'declaring' others

Details 0 0 Feedback
What

When Claude Code needs to extract a skill's type definitions because its authoring guidance isn't otherwise available, the message it shows now distinguishes between skills: for core, built-in skills it says "calling this capability," while for other, declared skills it keeps saying "declaring this capability."

Why

This makes the guidance more accurate, since core skills are invoked directly ("called") while other skills are only declared for use, helping anyone reading the message understand the distinction correctly.

Improved
You'll notice
Useful1 Signal1
Artifacts

Diagnostics "no row" message now covers older-page case#

Diagnostics "no data" message now also explains an older page can't capture diagnostics

Details 0 0 Feedback
What

The verify-diagnostics screen's message for when no diagnostic row is found now adds another possible reason: the page you're on may be an older version that can't capture diagnostics at all. This is in addition to the existing reasons (older than 24 hours, or not readable).

Why

This gives a clearer explanation when diagnostics are missing, so you're not left guessing whether it's a timing issue, a permissions issue, or simply an outdated page.

Improved
You'll notice
Useful1 Signal1
Project Memory

Project memory read/list actions added#

Two new project memory actions get readable descriptions: listing and reading memory files

Details 0 0 Feedback
What

When Claude Code shows what a tool call is doing, two new project-memory actions now get readable descriptions:

  • project_memory_list shows as "List project memory"
  • project_memory_read shows as "Read memory {path}" or "Read project memory file"
Why

This makes it clearer to users what's happening when Claude Code lists or reads its stored project memory, instead of showing an unlabeled or raw action name.

Related

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

Improved
You'll notice
Useful1 Signal1
Permissions

New codepoint 94180 blocked as an invisible/steganographic character#

A new hidden character, U+16FE4, is now blocked as a potential steganography risk

Details 0 0 Feedback
What

Claude Code's checks for invisible or hidden characters now also flag codepoint 94180 (U+16FE4), alongside characters it already blocked such as the zero-width no-break space (65279) and the tag character range (917504-917999).

Why

This closes another way invisible characters could be smuggled into text, since such characters can be used to hide instructions or content that isn't visibly displayed.

Improved
You'll notice
Useful1 Signal1
Cloud Sync

Directory sync large-turn warnings can now suppress the local notify while still reporting#

Directory sync can now record an oversize-file warning without repeatedly notifying the user

Details 0 0 Feedback
What

When directory sync detects that a turn is too large to sync (hitting the overCap or oversizeLeftOut conditions), it now has the option to record that report internally without popping up the disruptive notification to the user every single time, for example to avoid renotifying about the same oversize file list repeatedly.

Why

This should reduce repetitive, distracting notifications when the same oversize condition keeps recurring, while the underlying report is still tracked.

Improved
You'll notice
Useful1 Signal1
Workflows

Background workflow resume guidance text reworked#

The message shown when a background workflow can't auto-resume now points to 'the run id from the summary' instead of showing a raw ID

Details 0 0 Feedback
What

When Claude Code can't find the completion record for a background workflow (a multi-agent task that ran without blocking your session), it shows a message explaining how to pick up where things left off. That message used to insert the literal run ID value directly into the example command. Now it instead tells you to use 'the run id from the summary', and the notification's internal structure was reorganized.

Why

This is a wording and formatting change to the recovery instructions shown in this edge case, making the guidance more generic rather than tied to a specific embedded value.

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

Slash-command autocomplete now shows a hidden-match count#

Slash-command autocomplete now shows a '+N' count when multiple commands match

Details 0 0 Feedback
What

The autocomplete helper for finishing a partially-typed slash command now only suggests a completion when it's actually longer than what you typed. When more than one full command matches, the suggested text now appends a count of the extra matches, shown as <suffix> +N.

Why

This tells you at a glance that there are more matching commands than the one shown, instead of only ever seeing a single guess.

Related

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

Improved
You'll notice
Useful1 Signal1
Models

Model-switch confirmation toast now distinguishes saved vs session-only, with a persistent toast for the latter#

Model-switch toast now says whether the new default was actually saved, and stays visible if it wasn't

Details 0 0 Feedback
What

After switching your model with the hotkey, Claude Code now checks whether the new default model was actually saved before showing the confirmation message. The toast now only says "and saved as your default for new sessions" when that check confirms it was saved.

  • If the switch was saved (or the save check failed), the toast disappears after 3 seconds, as before.
  • If the switch was session-only (not saved), the toast now stays visible until you dismiss it.
Why

Previously the confirmation toast could claim a model change was saved as your default even when it was only for the current session. This makes the message accurate and gives session-only changes a persistent toast so you're less likely to miss that it won't carry over to new sessions.

Improved
You'll notice
Useful1 Signal0
Elsewhere

New 'thought for Ns' formatter helper added#

New helper formats elapsed thinking time as 'thought for Ns'

Details 0 0 Feedback
What

A small new formatting function turns elapsed thinking time into a string like "thought for 3s", rounding to the nearest second with a minimum of 1 second shown.

Why

This is a small display helper for showing how long Claude spent thinking, ensuring the displayed time never rounds down to zero seconds.

Improved
You'll notice
Useful1 Signal0
Artifacts

Wording tweak: "another person's artifact" -> "someone else's artifact"#

Wording change: artifacts owned by others are now described as "someone else's artifact"

Details 0 0 Feedback
What

The message shown when a session can only read a summary of an artifact it doesn't own was reworded from "another person's artifact" to "someone else's artifact."

Why

This is a small tone tweak to the wording with no functional change.

Improved
You'll notice
Useful1 Signal0
Elsewhere

'sharp' removed from native-addon leak diagnostic message#

The native-addon memory-leak warning no longer mentions 'sharp' as an example, only node-pty

Details 0 0 Feedback
What

When Claude Code warns that native memory usage may indicate a leak in a native addon (a compiled module outside plain JavaScript), the message used to list sharp and node-pty as example addons that might be responsible. It now lists only node-pty.

Why

This narrows the example in the diagnostic message; it suggests sharp is no longer relevant to this warning, though the finding doesn't say why it was removed.

Improved
You'll notice
Useful1 Signal0
Elsewhere no docs found

New spinner/verb flavor text: "Kerfuffling" and "Transmogrifying"#

Two new whimsical status words, "Kerfuffling" and "Transmogrifying", added to Claude Code's working spinner

Details 0 0 Feedback
KerfufflingTransmogrifying
What

While Claude Code is working on a request, it shows a rotating status word next to the spinner. Two new ones have been added: "Kerfuffling" and "Transmogrifying".

Why

This is a cosmetic addition to the set of playful words shown while Claude is thinking or working; it doesn't change functionality.

Improved
You'll notice
Useful1 Signal0
Project Memory

Spill-to-tool-results error message now distinguishes project_read from project_memory_read#

Error when a large result fails to save now names whether it came from project_read or project_memory_read

Details 0 0 Feedback
What

When a tool result is too large and gets spilled into separate tool-results storage, and that save fails, the error message now says specifically which method triggered it: "project_read: spill to tool-results failed" or "project_memory_read: spill to tool-results failed", instead of one generic message.

Why

This makes it clearer, when something goes wrong saving a large result, exactly which operation caused it, which helps with diagnosing failures.

Related

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

Improved
You'll notice
Useful1 Signal0
Elsewhere

"thought for Ns" status line replaces per-kind thinking duration text for completed thoughts#

Completed thinking steps now show a plain "thought for Ns" status line

Details 0 0 Feedback
What

When Claude finishes a thinking step, the status line now shows a simple "thought for Ns" message, where N is the number of seconds elapsed (rounded, with a minimum of 1 second), replacing separate wording that varied by thinking type.

Why

This gives a consistent, simple way to see how long Claude spent thinking on a completed step.

32 entries

Bug Fixesopen

Fixed
You'll notice
Useful3 Signal2
Group of 3 MCP unclear

MCP connections fall back to legacy HTTP+SSE when Streamable-HTTP initialize fails#

MCP servers that reject the modern initialize request now get retried over legacy HTTP+SSE instead of failing, recorded in telemetry

Unclear Gate state for tengu_flag and tengu_mcp_legacy_sse_fallback is unread, so whether this fallback is active for any given account is unknown.

Feature flag
tengu_mcp_legacy_sse_fallback Not enough to say

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

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

Read once, for one account on one subscription tier, against v2.1.265. 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 Streamable-HTTP MCP server's initialize POST request fails (for example, a 405 Method Not Allowed or similar transport error), Claude Code now retries the connection using the legacy HTTP+SSE transport instead of failing immediately — closing the failed transport and re-dialing with mode: "legacy".
  • This fallback is gated behind tengu_mcp_legacy_sse_fallback, dials with an abort controller, and uses a capped retry budget.
  • The mcp_connect success telemetry event gained a new negotiatedLegacySse field recording whether a connection ended up using the legacy SSE transport.

Why Some MCP servers only support the older HTTP+SSE transport and reject the newer Streamable-HTTP handshake. This fallback lets Claude Code still connect to them automatically instead of the connection simply failing, and the telemetry field makes it possible to see how often the older transport is still needed.

Related

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

Fixed
You'll notice
Useful3 Signal1
Auto Mode

auto-mode CLI subcommands fixed to attach to the right command object#

Fixed a bug that stopped the claude auto-mode defaults, reset, config, and critique subcommands from working

Details 0 0 Feedback
claude auto-mode
What

The claude auto-mode subcommands defaults, reset, config, and critique were being attached to the wrong internal command object, meaning they weren't properly registered under auto-mode. This has been fixed so they now work as expected.

Why

Before this fix, these subcommands could fail to run properly because of a plumbing mistake rather than any issue with what they were meant to do; now claude auto-mode defaults, reset, config, and critique work correctly.

Related

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

Fixed
You'll notice
Useful2 Signal1
Group of 2 Plugins

Plugin official-marketplace attestation is now tracked and kept consistent#

Claude Code now tracks which installed plugins come from an attested official marketplace and drops that attestation if it conflicts

Details 0 0 Feedback

What

  • Plugin loading now looks up each installed plugin's officialAttestation (whether its source is a known, official marketplace) and records this for plugins loaded by path, including synced and skill plugins.
  • A new check scans installed plugin sources and, if a source's attestation conflicts with a value seen for it before, or the source isn't in the known set of official marketplaces, that source's attestation is removed so it's no longer treated as official.

Why

This keeps Claude Code from mistakenly treating a plugin as coming from an official marketplace when its source has changed or doesn't match what was previously recorded, which matters for any trust or safety decisions based on plugin origin.

Fixed
You'll notice
Useful2 Signal1
Group of 3 Worktrees

WorktreeCreate/WorktreeRemove hook gating and fallback behavior refined#

Worktree create/remove hook handling was refined: fewer spurious errors and clearer checks for whether a hook applies

Details 0 0 Feedback
WorktreeCreate

What

  • In the worktree-create flow, if no hook commands ran at all, the code used to always throw a "hook is configured but did not run" error. Now it first checks whether any WorktreeCreate hook is actually configured, and silently continues if none is, only throwing when a hook is genuinely configured but failed to run.
  • The decision of whether to use a WorktreeCreate hook (instead of falling back to the built-in git worktree flow) now goes through a renamed gate that checks either an existing predicate or the presence of a registered WorktreeCreate hook.
  • The existing WorktreeCreate/WorktreeRemove hook events are now also checked through a broader capability lookup (not just whether hooks are registered for them), used to decide whether the worktree create/remove UI is shown at all.

Why These changes reduce spurious "hook is configured but did not run" errors when no worktree hook is set up, and make the logic for whether worktree create/remove hooks and UI are active more consistent.

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
Auth

Process exit now waits for in-flight OAuth token refresh#

Claude Code now waits for an in-flight OAuth token refresh to finish before exiting

Details 0 0 Feedback
What

If Claude Code is in the middle of refreshing its OAuth login token (the credential used to authenticate with Anthropic) when the process tries to exit, it now waits for that refresh to finish first, up to a timeout, instead of exiting immediately. If the refresh doesn't finish in time, Claude Code logs a message and records a telemetry event, then exits anyway.

Why

This avoids exiting mid-refresh, which could otherwise leave the saved credentials in an inconsistent state.

Fixed
You'll notice
Useful2 Signal1
Skills

Plugin skills are now de-duplicated against user-level skills and other plugins by real path#

Plugin skills are now skipped if the same skill already exists at the user level or in another plugin

Details 0 0 Feedback
What

When Claude Code loads skills (packaged instructions for a particular kind of task) bundled inside a plugin, it now checks whether that same skill file, resolved to its real underlying file path, is already loaded either as a personal user-level skill or by another plugin. If so, the duplicate is skipped rather than loaded twice, and a log message names which duplicate was skipped and why.

Why

This avoids the same skill appearing more than once when it's reachable through multiple paths, such as a symlink, which previously could have caused confusing duplicate entries.

Fixed
You'll notice
Useful2 Signal1
Images

Image handling: specific decode-failure diagnostics for CMYK JPEGs and animated WebP#

Claude Code now gives specific error messages for CMYK JPEGs and animated WebP images it can't decode

Details 0 0 Feedback
What

When an image fails to decode, Claude Code now checks for two specific cases and reports a tailored reason instead of a generic failure message:

  • a CMYK JPEG (a JPEG using a four-color printing color model instead of the usual RGB), reported as "it is a CMYK JPEG, which Claude Code cannot decode"
  • an animated WebP file, reported as "it is an animated WebP whose first frame Claude Code cannot decode"
Why

This makes it clear why a particular image failed to load, so a user can tell the problem is a specific unsupported format rather than a generic error, and can convert the image accordingly.

Related

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

Fixed
You'll notice
Useful2 Signal1
File System unclear

realpath resolution now falls back to a 'launch ancestry' path when EPERM/EACCES occurs#

Path safety checks now fall back to a shared-ancestor path if the OS blocks realpath resolution

Unclear The finding marks this fallback path itself as 'unverified', so how reliable it is in practice is unclear.

Details 0 0 Feedback
What

Claude Code resolves file paths using a system call that also checks whether a path is actually a symlink pointing somewhere unexpected. When that system call fails with a permissions error (EPERM or EACCES), Claude Code now tries a fallback: it computes the common ancestor directory between the current working directory and the 'launch' path (the directory Claude Code was started from), and re-runs its symlink-safety checks using that ancestor path instead of giving up immediately.

Why

Previously a permissions error during this check would simply fail. The fallback lets Claude Code keep working in more restrictive environments instead of erroring out.

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
Git

Symlinked .git worktree detection: dotted-git-target check added#

Git repo root detection adds a check for a symlinked .git target before falling back

Details 0 0 Feedback
What

When Claude Code determines the root directory of a Git repository, it now performs an additional check: whether the path formed by joining a candidate directory with .git resolves back to that same directory. If so, that directory is returned as the repo root. This check runs before the existing fallback logic.

Why

This affects how Claude Code identifies the repository root in setups where .git is a symlink, such as certain worktree configurations, changing which directory gets treated as the root in those cases.

Fixed
You'll notice
Useful2 Signal1
Artifacts

Verify-diagnostics entry truncation no longer stops early#

Verify-diagnostics results no longer stop early when one entry is too big to fit

Details 0 0 Feedback
What

When Claude Code packs diagnostic entries into a tool result that has a size limit, it used to stop adding entries entirely as soon as one entry was too large to fit. Now it skips that oversized entry and keeps going, so smaller entries later in the list can still be included.

Why

This means a single large diagnostic entry no longer causes every entry after it to be dropped, so the result can include more of the useful, smaller diagnostics instead of truncating early.

Fixed
You'll notice
Useful2 Signal1
MCP

MCP client tool lists refresh after reconnect, with new timing telemetry#

MCP tool lists now refresh automatically after a server reconnects

Details 0 0 Feedback
What

When an MCP (Model Context Protocol) server reconnects, Claude Code now re-fetches that server's list of tools and merges them back into the available tools, tracked through a new pending-refresh set. The code also adds timing markers around the tool setup step to measure how long it takes.

Why

This keeps the available tool list accurate after a reconnect, so tools from a server that dropped and came back are properly refreshed instead of possibly going stale.

Fixed
You'll notice
Useful2 Signal1
Elsewhere

Publish file-map validation errors now name the actual base directory instead of a fixed phrase, and gained a 'pass a relative path' hint#

Publish validation errors now name the real base folder and suggest using a relative path

Details 0 0 Feedback
What

When publishing files (for example, to an artifact or site) fails because a file falls outside the allowed folder, the error message used to always say "the working directory" no matter what folder was actually being used. Now it names the actual base folder the publish was rooted at. These errors also gained a new hint suggesting the reader pass a relative path instead.

Why

The old wording could be misleading if the publish base wasn't literally the working directory, making it hard to understand why a file was rejected. Naming the real folder, plus the added hint, makes it clearer how to fix the path.

Fixed
You'll notice
Useful2 Signal1
Workflows

Workflow resume now validates the target run before compiling the script#

Resuming a workflow now checks the target run is actually finished before compiling its script

Details 0 0 Feedback
What

When resuming a workflow by its run ID, Claude Code now checks upfront whether that run is still active - either "running" or "paused" without having actually exited - and refuses to resume if so, with the message that resuming now would run two copies of its agents against the same journal. It also now waits for the run's journal to finish being written before proceeding. Previously, this check only happened after the workflow script had already been compiled.

Why

Checking earlier avoids wasted work compiling a script for a resume that's going to be rejected anyway, and prevents accidentally running two sets of agents against the same underlying run at once.

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

URLs with embedded credentials now rejected#

URLs containing a username or password, like user:pass@host, are now rejected during normalization

Details 0 0 Feedback
What

A URL-handling function that previously accepted any http or https URL now rejects URLs that embed a username or password, such as user:pass@host. Instead of processing the URL, it returns nothing.

Why

URLs with embedded credentials can leak sensitive information or be used to disguise the real destination of a link. Rejecting them closes off that risk.

Fixed
You'll notice
Useful2 Signal1
Elsewhere

Screenshot tool now returns correctly namespaced media type#

Fixed a bug where the screenshot tool returned an incomplete media type instead of a proper one like image/png

Details 0 0 Feedback
What

The built-in screenshot tool now correctly returns a full media type such as image/png, instead of just the raw suffix on its own. This also fixes related mix-ups where the tool's returned path and base64 image data were not being passed back correctly.

Why

A malformed media type could cause screenshots to be misinterpreted or rejected downstream, so this fix makes screenshots taken by Claude Code display and pass through correctly.

Fixed
You'll notice
Useful2 Signal1
MCP

Legacy HTTP+SSE MCP transport gets a guarded OAuth-avoidance dial path#

Older MCP servers using the legacy HTTP+SSE protocol no longer get wrongly prompted into an OAuth login flow

Details 0 0 Feedback
What

For MCP servers (external tools Claude Code connects to) that use the older HTTP+SSE connection method rather than newer transports, Claude Code now checks whether a 401 "unauthorized" response on the connection request really means the server wants OAuth login. If the server's earlier setup request didn't return a 405 "method not allowed" response, the 401 is treated as a genuine OAuth prompt. If it did return 405, Claude Code now refuses to start an OAuth flow at all.

Why

This avoids incorrectly launching an OAuth sign-in flow against MCP servers that don't actually require one, which previously could have interrupted the user with an unnecessary login prompt.

Fixed
You'll notice
Useful1 Signal1
Elsewhere

Early no-op success result now carries send-echo fields#

Early no-result success responses in headless turns now include the same send-echo timing fields as normal results

Details 0 0 Feedback
What

When a headless turn ends immediately without actually querying the model (an early success case with no real turns taken), the result it returns now includes the same send-echo fields that normal results carry. Previously this early-exit case only returned the plain result text with none of those extra fields.

Why

This makes the shortcut, zero-turn success response consistent with normal results, so anything reading these fields (such as timing data) gets them even in this early-exit case.

Fixed
You'll notice
Useful1 Signal1
Artifacts

Verify tool now refuses url-less calls for delegated-observation agents#

The verify tool now rejects url-less calls made on behalf of delegated observation agents

Details 0 0 Feedback
What

The verify tool, used to check a published artifact, now blocks calls that leave out the url parameter when the call comes from a delegated-observation agent context. Previously there was a fallback that would check the most recently published artifact if no url was given; that fallback is not available to this kind of agent, so the call is now refused with a message explaining that the artifact url must be passed explicitly.

Why

This prevents a confusing failure where a delegated-observation agent would rely on a fallback that doesn't actually work for it, and instead gives a clear, immediate error telling it to pass the url directly.

Fixed
You'll notice
Useful1 Signal1
Auth

OAuth refresh-lock telemetry no longer crashes the release path#

A telemetry failure can no longer block releasing the OAuth token refresh lock

Details 0 0 Feedback
What

When Claude Code releases its internal lock on refreshing an OAuth authentication token, it emits telemetry events for 'releasing' and, on error, 'release_error'. Both of these telemetry calls are now individually wrapped in their own error handling, so a failure in sending the telemetry itself can no longer prevent the lock from actually being released or the error from being logged.

Why

This is a reliability fix: previously, a telemetry hiccup during token refresh could interfere with releasing the lock or recording the error, which could affect authentication flows. Now the telemetry is best-effort and can't get in the way.

Fixed
Under the hood
Useful1 Signal1
MCP

New SSE POST error classifier to distinguish real failures from benign JSON-RPC responses#

Claude Code now tells apart real SSE connection failures from harmless error-looking responses

Details 0 0 Feedback
What

When posting to an MCP server's streaming endpoint (SSE, a way servers push data over an HTTP connection) fails with an HTTP 400, 404, or 405 status, Claude Code now looks inside the response body to check whether it's actually a harmless JSON-RPC response with a null ID, rather than a real connection failure.

Why

This avoids treating a technically error-coded but benign server response as a genuine connection problem, which should cut down on false failure reports for some MCP servers.

Fixed
You'll notice
Useful1 Signal1
Elsewhere

Windows-reserved-name protection extended to generic identifier sanitizer#

The general-purpose name sanitizer now avoids producing Windows-reserved names like CON or NUL

Details 0 0 Feedback
What

Claude Code's general-purpose function for cleaning up identifiers, such as those used for artifact or file names, now checks whether the cleaned-up result matches a name Windows reserves for devices (CON, PRN, AUX, NUL, COM1-COM9, LPT1-LPT9). If it does, an underscore is added to the front of the name.

Why

Windows treats these names specially and can fail to create a file or folder with one of them, so this prevents Claude Code from generating an identifier that would break on Windows.

Fixed
Under the hood
Useful1 Signal1
Permissions

Permission-negotiation ordering fix: abort now takes priority over the 'session committed' hang#

Fixed an ordering bug so cancelling a tool permission request no longer gets stuck behind a 'session committed' check

Details 0 0 Feedback
What

When Claude Code decides whether to run a tool, there's a shared internal check for whether the session has already been "committed" to an answer; if so, it used to return a promise that never resolves, effectively hanging that path. Previously, the abort (cancel) path used a differently named function for this, and the order of checks meant a cancellation could still get caught by the "already committed" hang. Now both the abort path and the normal path use the same function, and the check for an abort signal runs before the "already committed" check.

Why

This fixes a case where cancelling a tool permission request (like denying a tool from running) could hang instead of completing, by making sure an abort is always honored ahead of the session-committed state.

Fixed
Under the hood
Useful1 Signal0
Elsewhere unclear

Interrupt handling: variable fix in queued-interrupt path#

A queued-interrupt code path now stores the correct variable instead of a mismatched one

Unclear The finding doesn't state what the old, incorrect variable caused to go wrong in practice.

Details 0 0 Feedback
What

In the part of interrupt handling that runs when there's no live session, the value saved into pendingInterrupt was changed from one local variable to a different one.

Why

This looks like a correctness fix ensuring the right interrupt value is queued and later acted on when no live session is present.

Fixed
You'll notice
Useful1 Signal0
Worktrees

Bug fix: worktree cwd-access error used wrong exception variable#

Fixed a bug where a working-directory access error showed the wrong variable in its message

Details 0 0 Feedback
What

When Claude Code's CLI setup failed to access a git worktree's working directory, the error message it printed was mistakenly built from an unrelated outer variable instead of the actual error that was caught. This has been fixed so the message now correctly reflects the real error.

Why

The error message shown to users in this failure case will now actually describe the problem that occurred, instead of showing incorrect or misleading text.

Related

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

Fixed
You'll notice
Useful1 Signal0
Internals unclear

Import command dedupes 'Review these' warnings#

/import no longer repeats the same warning multiple times in its 'Review these:' list

Unclear The tengu_import_apply gate mentioned alongside this change is unread, so nothing can be said about whether it is switched on.

Details 0 0 Feedback
/import
What

When /import applies imported configuration and shows a 'Review these:' list of warnings, it now collects those warnings into a set that removes duplicates before displaying them, rather than a plain list that could show the same warning text more than once.

Why

If multiple imported items produced the same warning, you previously would have seen it repeated; now each distinct warning is shown only once, making the review list easier to read.

Related

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

Fixed
You'll notice
Useful1 Signal0
Models

Model names are now normalized (trimmed + lowercased) when resolving a session model#

Model names are now trimmed and lowercased when Claude Code resolves which model a session uses

Details 0 0 Feedback
What

When Claude Code figures out which model a session should use, any resolved model name that comes back as a string is now cleaned up: extra whitespace is trimmed and the name is converted to lowercase before being used.

Why

This avoids mismatches caused by stray spaces or inconsistent capitalization in model names, so a model reference is recognized correctly regardless of how it was typed or supplied.

Fixed
You'll notice
Useful1 Signal0
Sessions

Likely bug fix: postKeptResponse referenced the wrong variable#

Fixed a bug where a remote session's postKeptResponse used the wrong response data

Details 0 0 Feedback
What

In the code that manages remote sessions, a method called postKeptResponse was sending a control response built from a variable belonging to an outer, unrelated scope instead of its own parameter. It now correctly uses its own parameter's data when sending the response.

Why

This was a bug that could cause the wrong response data to be sent back for a kept response in a remote session; fixing it ensures the response actually sent matches the one that was meant to be kept.

Fixed
You'll notice
Useful1 Signal0
Elsewhere

Diff-hunk generation now skips non-regular files instead of marking them 'restricted'#

Diffing uncommitted changes now silently skips symlinks and other non-regular files

Details 0 0 Feedback
What

When Claude Code computes diff hunks to show context about uncommitted changes, files that aren't regular files (such as symlinks or device files) are now classified as not-regular-file and skipped silently. Previously, these files were grouped into a 'restricted' list, which meant they were surfaced to the user.

Why

This keeps diff output focused on actual file changes, quietly leaving out entries for symlinks and similar special files instead of flagging them as restricted.

Fixed
You'll notice
Useful1 Signal0
UI Components

Tabs component gains a stable-height mode, used to fix Settings/Gates panel jitter#

Settings and Gates panels no longer jitter thanks to a new stable-height mode for tabbed panels

Details 0 0 Feedback
What

The shared tabbed-panel component used across Claude Code's UI now supports a stableHeight mode with a contentHeight setting. When enabled, the content area uses a fixed height instead of a flexible maximum height. The Settings dialog now turns this on, with its height calculated to fit within the terminal window.

Why

This fixes visual jitter in the Settings and Gates panels, where the panel's size used to shift as you switched between tabs with differing amounts of content.

Fixed
You'll notice
Useful1 Signal0
Elsewhere

Theme picker now cancels its preview on unmount#

Closing the theme picker now always cancels its live preview, even if closed unexpectedly

Details 0 0 Feedback
What

The theme picker now cancels its in-progress theme preview whenever the component is removed from the screen, in addition to the existing cases where cancelling was already handled explicitly.

Why

This prevents a theme preview from being left active if the theme picker closes in a way that wasn't already covered by explicit cancel handling, avoiding a stuck or lingering preview state.

Fixed
You'll notice
Useful1 Signal0
Session Management

Bug fix: SessionsV2Client.postEvents read the wrong variable for sequence_num#

Fixed a bug where session event posting logged the wrong sequence number

Details 0 0 Feedback
What

The internal function that posts session events (SessionsV2Client.postEvents) was reading the sequence_num value from the wrong variable — one that wasn't the actual result returned by the request. It now correctly reads sequence_num from the parsed result.

Why

This fixes incorrect sequence numbers being recorded for session events, which could otherwise throw off anything that relies on events being tracked in the right order.

Related

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

Fixed
You'll notice
Useful1 Signal0
Telemetry

Remote headless client host-request logger bug fix: correct outcome value now logged#

Fixed a bug where the remote headless client's request logger recorded the wrong outcome value

Details 0 0 Feedback
What

An internal logging helper used by the headless (non-interactive) cloud client was recording telemetry with an outcome value taken from an unrelated outer-scope variable instead of the actual outcome parameter passed into the function. It now correctly logs the outcome that was actually passed in.

Why

This fixes inaccurate outcome data being recorded for host requests made by the remote headless client, which would have made related telemetry unreliable.

15 entries

In Developmentopen

In dev
Nothing to try yet
Useful3 Signal3
Group of 2 Artifacts unclear

Artifact tool actions consolidated into list/read with a scope#

Artifact tool messages now describe actions as unified "list"/"read" with a scope or path instead of separate per-type action names

Unclear The gate tengu_cobalt_plinth_damson behind this change last read off for this site's account and off for the anonymous baseline, with no reading yet under this release; the related tengu_artifact_toolset gate is unread, so nothing can be said about whether either is switched on.

Feature flag
tengu_cobalt_plinth_damson Not enough to say

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

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

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

Details 0 0 Feedback

What

When the consolidated "artifact toolset" is active, tool-result and instruction text for artifact tools is rewritten to use unified action names:

  • Old action names like action "list_assets", action "read_file", and action "list_files" (used by asset_upload, asset_list, asset_delete, file_list, and file_read) now appear as action "list" or action "read", with a scope (for example scope: "assets" or scope: "files") or a path argument instead.
  • Guidance that used to say action: "describe_type" now says action: "read" when this consolidated toolset is active.

Why

Collapsing several type-specific action names into a common list/read pair with a scope or path makes the artifact tool's interface simpler and more consistent for anything that reads or lists artifact content.

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 MCP

MCP config building gets a cache, off by default#

A new gated cache for building MCP server configs exists but is switched off by default

Feature flag
tengu_cobalt_plinth_loquat 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.265: off

Read once, for one account on one subscription tier, against v2.1.265. 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 can connect to MCP (Model Context Protocol) servers, which requires building their connection configs. A new mechanism now caches that config-building work instead of redoing it every time, feeding into the existing MCP connection-management step.

This is controlled by a feature flag called the "artifact MCP switch" (tengu_cobalt_plinth_loquat). New per-session state tracks things like whether the switch has been decided (latched), whether MCP servers/entries have already been built, and how many entry-skips have been logged. The gate decision is made once per session and reported via telemetry. When the switch is off, the cache is a no-op and config building happens as before.

Why

The switch defaults to off, so this doesn't change current behavior yet, but it lays the groundwork to avoid rebuilding MCP server configs unnecessarily once enabled.

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

SDK-backed MCP servers can skip the handshake with a pre-captured manifest#

MCP servers built with the SDK can now hand Claude Code a pre-captured manifest instead of doing a live handshake

Details 0 0 Feedback
sdkMcpServerManifests

What

The initialize control request now accepts sdkMcpServerManifests: a pre-captured "host manifest" (an initializeResult plus an optional toolsListResult) for SDK-backed MCP servers. When present, Claude Code validates it against the required MCP protocol version and replays it instead of performing the usual live control-channel handshake for that server.

If a manifest is malformed, uses a mismatched protocol version, or contains paginated tool results it can't replay, Claude Code logs and reports this via telemetry (mcp_sdk_manifest_invalid_initialize, _invalid_tools_list, _paginated_tools_list, _replay_failed) and falls back to the normal handshake instead of applying the bad manifest.

Why

Replaying a known-good manifest avoids the cost and round-trip of a live handshake for SDK MCP servers, while the validation and fallback keep things working correctly if the supplied manifest is bad or incomplete.

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 5 Projects unclear

Messages can now be stamped with Projects thread state#

Queued messages in Projects threads can now be stamped with thread state, showing recency and reply activity

Unclear Whether this is active for any accounts is unknown; the related gates (tengu_projects_thread_state_stamp, tengu_projects_thread_state) haven't been read.

Details 0 0 Feedback

What

  • Claude Code can now attach a "thread state" (how long since the last human message, and how many replies have happened since then) to queued messages in Projects threads, via a stampThreadState flag.
    • Cron-scheduled prompts that fire on a non-peer session now carry stampThreadState: true, and a thread_state attachment can be pushed onto the message list during prompt processing.
    • Incoming user messages in genuine (non-overview) Projects threads get the same stampThreadState flag added when building the queued prompt.
    • Replies composed to artifact comment threads (for example via MCP) can also be stamped with thread state, gated behind a dedicated flag.
    • "thread_state" was added as a recognized category/content-block type alongside existing ones like "prefix_delta", "deferred_tools_delta", and "diagnostics", with the stampThreadState flag threaded through the relevant message-construction and result-merging functions.

Why

Tagging messages with thread state lets Claude Code, and anything consuming its output such as automated replies, know how stale or active a conversation thread is, which is useful context for deciding how to respond in scheduled or automated flows.

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
UI Panels no docs found unclear

New PaneDock UI for docked side panes in the main transcript view#

A new PaneDock layout can now dock side panes in the main transcript view

Unclear The finding does not say what content this PaneDock actually displays.

Details 0 0 Feedback
PaneDock
What

The main transcript screen (where the conversation is shown) can now render a new PaneDock component alongside the existing content. Its width is calculated automatically, and it only appears when the terminal is in fullscreen mode, the main view is active, and no other dock is currently in use.

Why

This lays the groundwork for docking additional side panels into the main view, sitting alongside the existing IDE-selection panel infrastructure.

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

New 'artifact summon forecast' preview when Claude is busy#

Claude now previews whether it would be allowed to auto-reply to a new artifact comment while it's still busy

Unclear The gate tengu_madrone_spindle_newel controlling this is unread for this release, so whether it is enabled here is unknown.

Feature flag
tengu_madrone_spindle_newel Not enough to say

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

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

Read once, for one account on one subscription tier, against v2.1.265. 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 new comment or summon arrives on an artifact (a generated document or piece of content) while Claude is still busy handling something else, Claude Code now runs a quick permission-only check to forecast whether its eventual automatic reply would actually be allowed. It then posts an early status, either 'working' or a decline, instead of waiting until the busy work finishes to find out the reply was going to be blocked.

Why

This gives earlier, more accurate feedback about pending artifact replies instead of leaving the requester waiting only to learn later that permission would have been denied.

In dev
Nothing to try yet
Useful3 Signal3
Artifacts no docs found

New per-org DB verbs / run-script capability gates for artifacts (default off)#

New per-organization capability flags for database verbs and run-script support in Artifacts, off by default

Details 0 0 Feedback
dbVerbsOnrunScriptOn
What

A new gates system for Artifact tooling exposes two capability flags, dbVerbsOn and runScriptOn, controlling database-verb and run-script capabilities per organization. Both default to false until explicitly registered/enabled.

Why

This lays groundwork for organizations to selectively enable database-write verbs and script-running capabilities within Artifacts, but since both default off, no behavior changes until an organization is switched on.

Related

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

In dev
Nothing to try yet
Useful2 Signal3
Artifacts

Watch tool can now auto-allow a no-op watch that 'arms no replies'#

Watching an artifact that doesn't need reply permission is now auto-allowed without asking

Details 0 0 Feedback
What

Under the same artifact-consent experiment, starting a watch on an artifact that wouldn't require permission to reply to its comments (and has no existing ruling on it yet) is now automatically allowed, with the reason "Watching an artifact arms no replies", instead of going through the full ask/consent process.

Why

This cuts down on unnecessary permission prompts for watches that can't lead to Claude posting replies on your behalf, since there's nothing to approve in that case.

In dev
Nothing to try yet
Useful2 Signal3
Artifacts

Adaptive websocket keepalive interval for Artifact live connections, config-gated and off by default#

Artifact live-connection keepalive pings can now stretch out during idle periods

Details 0 0 Feedback
What

A new module can, when configured via a settings/remote-config key, stretch the ping interval used to keep Artifact websocket connections alive (both the presence-tracking socket and the live-subscribe socket) up to a longer 'idle keepalive' interval once a connection has been idle for a while, instead of always pinging at the normal fixed interval.

Why

Sending fewer keepalive pings during idle periods can reduce unnecessary network chatter for Artifact connections that aren't actively being used.

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

Headless cloud sessions gain a serve-only mode#

Headless cloud session create/attach now support a serveOnly option that reduces the active feature set

Unclear What surfaces this new attach/serveOnly session path to users, and what it's for, is not shown by the finding.

Details 0 0 Feedback
serveOnly

What

The headless cloud-session bootstrap path (used when running the CLI to create or attach to a session on Anthropic's cloud) now supports a serveOnly option:

  • The create path calls a renamed runHeadlessCloudCreate function and passes { serveOnly: C.serveOnly } into runHeadlessCloudAttach.
  • A new session-opener path with entry: "attach" accepts the serveOnly option, and when set, swaps in a reduced feature set instead of the normal full feature set.

Why

This gives a way to attach to or create a headless cloud session with a minimal, serve-only feature set rather than the full normal feature set.

In dev
Nothing to try yet
Useful1 Signal3
Message Threads no docs found unclear

New gate defined: message_threads#

A new feature gate named message_threads was added to the internal gate table

Unclear What message_threads actually enables is not described in this finding.

Details 0 0 Feedback
message_threads
What

A new feature gate, message_threads, was registered internally alongside other existing gates in Claude Code's feature-gate table.

Why

This just adds the gate's definition; the finding doesn't describe what feature it controls or whether it's active for any account.

Related

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

In dev
Nothing to try yet
Useful2 Signal2
Elsewhere

Bridge-initiated /clear can now auto-dismiss a pending local dialog, behind a kill-switch gate#

A remote bridge session's /clear command can now automatically dismiss a local dialog blocking it

Details 0 0 Feedback
/clear
What

When a command sent from a remote 'bridge' session is a /clear command, Claude Code now recognizes this and automatically dismisses any dialog currently open in the local session, rather than leaving that dialog in the way. It also records a telemetry event when this happens.

Why

Previously, a local dialog box could block a /clear request coming from a remote session, leaving things stuck. This change lets that clear command go through without requiring someone at the local machine to close the dialog first.

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

SDK MCP update gains a retry-skip condition tied to a new gate#

Claude Code now also skips waiting for an SDK MCP update to finish under an additional internal condition

Unclear The finding does not say what the new condition (Mp() && !Ji) represents in user-facing terms.

Details 0 0 Feedback
What

When Claude Code updates an SDK MCP server (a Model Context Protocol server run through the SDK), it decides whether to wait for that update to finish before continuing, or to let it run in the background. Previously that decision only checked whether a retry had failed. Now it also skips the wait when a second, newly added internal condition is true.

Why

This affects internal timing only; a reader would not see it directly beyond Claude Code potentially proceeding without waiting on an SDK MCP update in more cases than before.

In dev
Nothing to try yet
Useful2 Signal2
Transcript no docs found unclear

Live turn-state row gated behind an 'isTranscriptV2Enabled' check#

The classic in-turn status row now only shows when a newer transcript display mode isn't already handling it

Unclear Nothing here indicates whether the reader's own account will see the newer transcript display, since the gate that controls it is not addressed.

Details 0 0 Feedback
isTranscriptV2Enabled
What

Claude Code's display of what it's doing mid-turn (a spinner or status line while it's working) now has two possible sources. A new component checks whether a StateRowSourceContext is already supplying status information (such as remote-connection or reply-channel state); if not, it falls back to showing the classic status row. A separate, newer live-status row is now shown only when isTranscriptV2Enabled is on.

Why

This is internal plumbing to avoid showing two status indicators at once as Claude Code's transcript display evolves. It shouldn't change what you see day-to-day, but it's part of the groundwork for a newer transcript rendering path.

Related

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

163 entries

Internal Changesopen

·Internal
Under the hood
Useful3 Signal3
Hooks

Hook engine reworked into explicit core/managed layering with unified result merging#

Hook execution engine rebuilt with a clearer core/managed split and unified result merging

Details 0 0 Feedback
WorktreeCreate
What

The internal system that runs hooks has been reorganized. It now clearly separates "core" hook handling from "managed" hook handling, and adds a merge step that combines results from multiple hooks - things like permission decisions, extra context to inject, and file paths to watch - using a priority order where a deny always beats an ask, and an ask always beats an allow. Classic shell-based hooks and newer function-based hooks are now handled through the same unified path, including tracking blocked commands and results tied to WorktreeCreate events (which fire when a worktree, an isolated copy of a repository, is being created).

Why

This is an internal restructuring that makes hook behavior more consistent regardless of whether a hook is a shell script or a function, and ensures that when multiple hooks weigh in on the same action, the strictest decision wins.

Related

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

·Internal
Under the hood
Useful2 Signal2
Group of 2 Slack Integration

New 'Claude Tag connector writes' exception for Slack-delegated sessions, gated off#

A new remote-config flag lets Slack-delegated sessions write through specific connector tools without a visible user request, currently disabled

Details 0 0 Feedback

What

  • For sessions started from Slack (referred to as "Claude Tag"), a new system-prompt block lists the session's connector MCP tool name prefixes and tells the model that writes through those specific tools aren't blocked merely for lacking a visible user request in the transcript.
  • Hard blocks still apply: credential/secret exposure, destructive actions, permission changes, and messaging others are still enforced.
  • The block is controlled by a new remote-config flag, tagConnectorWrites, which currently defaults to off (false).

Why Slack-delegated sessions often act on a connector tool without an explicit chat request behind each individual write; this exception is meant to stop the security monitor from blocking those legitimate writes, while keeping the more serious hard blocks in place. It isn't turned on yet.

Related

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

·Internal
Under the hood
Useful2 Signal2
Group of 2 Plugins unclear

Plugin hot-reload watcher now covers plugin collections#

Claude Code's plugin file watcher can now watch entire folders of plugins, not just individual plugin directories

Unclear The finding does not say what practical behavior change, if any, this produces for someone using plugins, only that the internal watcher structure changed.

Details 0 0 Feedback

What

The plugin hot-reload watcher, which watches plugin files and reloads plugins when they change, gained a "watch collections" abstraction. It now accepts watchRoot/listChildren/reloadPlugins, and exposes watchCollections/watchedCollections alongside its existing per-plugin watch tracking.

The plugin-directory watcher now separately resolves individual plugin paths and plugin-collection (folder-of-plugins) paths, calling watchCollections in addition to the existing watchPlugins, and logs both the watched plugins and the watched collections.

Why

This lets Claude Code detect and hot-reload plugins that live inside a folder of multiple plugins, not just plugins installed individually.

·Internal
Under the hood
Useful2 Signal2
Group of 2 Elsewhere unclear

Remote tool calls now send a read baseline for host-side verification#

Remote tool calls now attach a read baseline snapshot so the remote host can verify a file hasn't changed before an edit runs

Unclear The finding describes the mechanism but not confirmed downstream behavior, such as what the host does if a file changed.

Details 0 0 Feedback

What

When Claude Code sends the first, unapproved request for a remote tool call to a host, it now includes a readBaseline field built from the session's record of files it has read. A new noteReadBaselineSent callback fires once the host confirms it received this baseline (read_baseline), and the tool-call dispatch logic now tracks a readBaselineSent flag on the call's outcome, tying into a project_sync read-baseline lookup.

Why

This lets a remote host check, before executing an edit-style tool call, that the file it's about to modify hasn't changed since Claude last read it there, reducing the risk of an edit overwriting changes it never saw.

·Internal
Under the hood
Useful2 Signal2
Group of 2 MCP no docs found unclear

MCP prewait can now target specific remote servers by name#

MCP prewait gains a waitRemoteServerNames option to block on named remote MCP servers, not just local ones

Unclear What waitRemoteServerNames actually does with the server names it's passed isn't stated.

Details 0 0 Feedback
waitRemoteServerNames

What

The MCP client prewait step, which waits for MCP clients before a turn is dispatched, now accepts a waitRemoteServerNames option alongside the existing localOnly and waitForDeferrable options. In headless mode, this lets the prewait gate also block on specific named non-local MCP servers, not just local-only ones.

New telemetry fields remoteByNamePendingBefore/remoteByNamePendingAfter are reported on the headless MCP prewait telemetry event.

Why

This lets Claude Code wait for particular remote MCP servers it actually depends on for a turn, rather than only being able to wait for local servers or none at all.

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

SDK stream-json schema gains historical and runner_exit fields, plus expanded meta-turn uuid stamping#

The SDK's streaming message schema adds historical/runner_exit fields and documents how meta-turns stamp folded-in user messages

Details 0 0 Feedback
user_message_uuid

What

  • Message schema gains an internal historical boolean field, stamped by the Remote Control bridge on messages it flushes to the session server, and by the server on deliveries it replays.
  • A new runner_exit field is set by the self-hosted runner when a session process fails to start or exits abnormally.
  • Documentation for user_message_uuid/user_message_uuids (across turn, error-result, and thinking_tokens frames) was expanded: a turn started by a synthetic/scheduled (meta) prompt can now stamp a later, non-ping stream event when a queued user message is folded into the turn mid-stream, in addition to the turn's first stream event. A turn started by a typed prompt still stamps only its first event.

Why These are schema and documentation additions for SDK consumers: historical and runner_exit give more visibility into replayed messages and runner failures, and the clarified uuid-stamping rules help SDK clients correctly match stream events to the user message that triggered them, including when a message is folded into an already-running turn.

Related

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

·Internal
Under the hood
Useful2 Signal2
Group of 4 Sessions no docs found

Sessions gain a control-only connection mode#

Sessions can now connect in a controlOnly mode that subscribes to control messages without the full event stream

Details 0 0 Feedback
control_only=1

What

  • Sessions and their control/event channel gained a controlOnly mode, threaded through from session-open callers down to the low-level session-open call (defaulting to unset/false).
  • SessionsV2Client appends control_only=1 to the session events stream URL when configured with controlOnly, letting a connection subscribe to control messages only, without the full event stream.
  • When a session is opened via attach, the emitted "opened" payload conditionally includes controlOnly: true.

Why

This lets a client connect to a session just to receive control messages, without also receiving the full event stream, which is more efficient when only control signaling is needed.

Related

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

·Internal
Under the hood
Useful2 Signal2
Group of 2 Artifacts no docs found

Artifact sync now reads sandbox network-egress state from relay responses#

Artifact sync now reads an x-ccr-sandbox-egress header from relay responses and caches per-artifact sandbox network-egress status

Details 0 0 Feedback
x-ccr-sandbox-egress

What

  • Artifact sync's status-reason handling gains a new relay_unavailable state (with a corresponding "latched" variant), alongside the existing no_originator/subscribe_forbidden states.
  • A new x-ccr-sandbox-egress response header is now read from relay routes, with recognized values disabled, restricted, or unrestricted. The value is recorded per artifact (by slug) with a 10-minute freshness window, and is read back to decide whether sandbox network access should be reported as disabled for that artifact.

Why

This lets Claude Code reflect the actual, current sandbox network-egress restrictions for an artifact based on what the relay reports, and gives a clearer signal (relay_unavailable) when the relay itself can't be reached.

·Internal
Under the hood
Useful2 Signal2
Telemetry no docs found unclear

New startup_timing telemetry field on system init message#

System init message can now carry cold-start timing data for hosted CCR sessions

Unclear What "CCR" stands for and what specifically consumes this telemetry isn't stated.

Details 0 0 Feedback
startup_timing
What

The system init message sent at the start of a session can now include a startup_timing field carrying cold-start telemetry: named startup phases and counters related to resuming and hydrating a session. This applies to hosted CCR sessions; it's absent elsewhere.

Why

This gives visibility into where time is spent during a hosted session's startup and resume process, which can help diagnose slow session starts.

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
Slack Integration

Coordinator/teammate session relay: verified Slack human-turn extraction#

Coordinator/teammate sessions now extract a verified human message from Slack or queued turns, with an explicit disclaimer for Slack-relayed context

Details 0 0 Feedback
What

When a coordinator or teammate session needs to figure out what the actual human wants, new logic pulls the most recent verified human message from either a Slack conversation timeline (rows authored by the workspace owner) or an XML-tagged <message from="human"> block inside a queued command or user turn. Context relayed from Slack is now tagged with an explicit disclaimer stating it "never establishes user intent or consent."

Why

This distinguishes genuine instructions from a real person from other tasking context that merely describes or relays information, so a coordinating session doesn't mistake relayed Slack content for something the user has actually approved or requested.

Related

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

·Internal
Under the hood
Useful2 Signal2
Elsewhere unclear

Remote bridge teardown now records whether the pre-teardown upload flush completed vs timed out#

Remote bridge session teardown now logs whether the pre-teardown data upload finished in time

Unclear Nothing has been read yet about the tengu_bridge_repl_teardown gate for this release, so no statement can be made about whether this reporting is active for any account.

Details 0 0 Feedback
What

When a remote bridge session (used for remote control of a session) is torn down, the tengu_bridge_repl_teardown telemetry event now records additional details: whether the flush that uploads pending data before teardown completed before its deadline (hold_preflush_landed), the computed budget allowed for archiving, and how long the archive upload call actually took.

Why

This gives more detail for diagnosing whether session data was fully saved before a remote session ended, and how long that process took, building on earlier changes that distinguished different kinds of skipped cleanup during teardown.

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
Background Agents no docs found unclear

Background/workflow agent spawns now pass description and workflow phase context#

Background workflow agent spawns now carry a description and workflow phase

Unclear The finding doesn't say where this description/phase or promptFramed value is surfaced to the user.

Details 0 0 Feedback
workflowPhase
What

When Claude Code spawns a background agent as part of a workflow, the spawn call now includes description (taken from the agent's label) and workflowPhase (taken from the agent's phase). The progress updates sent for workflow agents also now include a promptFramed value.

Why

This gives background workflow agents more context about which workflow and phase they belong to, which should make their progress and purpose easier to track.

Related

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

·Internal
Under the hood
Useful2 Signal2
Elsewhere

Cloud gateway sign-in check reworked with desktop-app-aware error and new required flag#

Cloud gateway sign-in check reworked with a clearer error and desktop-app-aware handling

Details 0 0 Feedback
What

Before using the Cloud gateway as its provider, Claude Code now checks three things instead of one: that the route is actually set to gateway, that there's no gateway authentication, and that no gateway server process is running. Previously it only checked a single administrator-policy condition.

The error message shown when not signed in now reads: "Not signed in to the Cloud gateway - run /login. (With CLAUDE_CODE_USE_GATEWAY, set ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN.)" — pointing to those environment variables as an escape hatch. It also now shows a distinct error when credentials are managed by the desktop app instead.

Why

This gives a more accurate check for whether the Cloud gateway is actually usable, and a clearer error message that tells users how to work around a sign-in problem using environment variables, or explains that their desktop app is managing credentials instead.

Related

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

·Internal
Under the hood
Useful2 Signal2
Cloud Sync unclear

Cloud sync snapshot builder gains a heldTree parameter and basis-aware 'lacking' handling#

Cloud sync snapshot builder adds a heldTree option for tracking which files are missing

Unclear The finding doesn't say what heldTree represents conceptually or what user-visible effect this has on sync behavior.

Details 0 0 Feedback
What

The internal function that builds a git snapshot (covering checkout, head, basis, and parent commits) for cloud and remote sync now accepts a new heldTree option, which is validated as a git object id. It uses this to work out which file paths are "lacking" relative to both the basis and the held tree, adding an extra asynchronous check before deciding what stays staged.

Why

This refines how the sync process figures out which files are missing or need attention when building a snapshot, by comparing against an additional reference point (the held tree) rather than just the basis.

·Internal
Under the hood
Useful2 Signal2
Hooks unclear

Non-PreToolUse hooks can be routed through a new 'classic' hook chain#

Non-PreToolUse hooks can now be routed through a separate 'classic' hook execution chain

Unclear What determines whether an event is gated as a 'classic' hook, and what practical difference this makes for hook authors, isn't specified.

Details 0 0 Feedback
What

Claude Code's main hook-execution logic now checks, for hook events other than PreToolUse (which runs before a tool call executes and can block it), whether the event is gated as a "classic" hook. If so, it delegates to a separate function that runs managed and plugin hook handlers on their own and merges the results back in, then re-enters the main hook logic marked as part of that classic chain.

Why

This adds a distinct execution path for certain hook events, letting managed and plugin hooks be processed separately before being merged with normal hook results.

·Internal
Under the hood
Useful2 Signal2
Elsewhere no docs found unclear

Task/agent orchestration state gains teamContext and ultraplanSessionUrl tracking#

Internal task-orchestration state now tracks team context and an ultraplan session URL

Unclear What teamContext and ultraplanSessionUrl represent, and what a user would see change because of this, are not shown by the evidence.

Details 0 0 Feedback
teamContextultraplanSessionUrl
What

Claude Code's internal state bridge for managing tasks and subagents (background work items and the specialized agents that handle them) now includes a setTaskKillState updater that specifically tracks changes to teamContext and ultraplanSessionUrl, alongside existing accessors for the current model, the task list, and a registry of named agents.

Why

This is internal bookkeeping. The evidence doesn't say what a reader would notice differently as a result.

Related

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

·Internal
Under the hood
Useful2 Signal2
Tooling Architecture unclear

Tool execution context exposes new capabilities: file history, dedup, isolation latch#

Tool execution context gains new internal capabilities for file history, read deduplication, and isolation

Unclear What most of these new fields (agentWorktree, isolationLatch, turnMcpClients, etc.) actually enable for tools is not shown by the evidence.

Details 0 0 Feedback
What

The internal context object passed to tool calls (the data each tool gets access to when it runs) gained a batch of new capabilities, including:

  • agentWorktree, readFileState, getFileHistoryState, and applyFileHistoryOp, for tracking and modifying file history
  • dynamicSkillDirTriggers and nestedMemoryAttachmentTriggers, related to skills and memory attachment
  • dedupUnchangedReads, setArtifactReadVersion, and getArtifactReadObservation, related to deduplicating unchanged file reads
  • turnMcpClients and isolationLatch
Why

This is internal plumbing that expands what tools can access during execution. The evidence doesn't describe a user-visible behavior change beyond what's already documented for dedupUnchangedReads (which lets an individual read opt out of the existing suppression of re-reads of unchanged files).

Related

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

·Internal
Under the hood
Useful2 Signal2
SDK no docs found

User message schema gains an internal file_attachments field#

User messages in the SDK now support an internal file_attachments field

Details 0 0 Feedback
file_attachments
What

The schema for user-role messages used by the Claude Code SDK now accepts an optional file_attachments array. Each entry can include file_uuid, file_name, is_image, sha256, and file_size, matching the shape already used by SDKUserMessageReplay.

Why

This appears intended for remote clients that need to attach files to a prompt, giving them a defined structure for describing attached files alongside a message.

Related

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

·Internal
Under the hood
Useful2 Signal2
Hooks no docs found unclear

Hook events: PreToolUse split into classic vs. new, and two new synchronous hook events added#

PreToolUse hooks are now split into a classic and new form, plus two new synchronous hook events

Unclear What distinguishes the new 'classic.PreToolUse' from a non-classic PreToolUse, and what command.run/command.describe hooks are used for, is not explained in the finding.

Details 0 0 Feedback
classic.PreToolUsecommand.runcommand.describe
What

The logic that warns when a hook blocks a turn now specifically matches classic.PreToolUse rather than a plain PreToolUse event, implying PreToolUse (a hook that runs before a tool call executes and can block it) now has both a classic and a newer variant. Two new events, command.run and command.describe, have also been added to the set of hook events where submitting mid-hook will wait on the current turn to finish.

Why

This affects how hooks interact with turn timing: hooks tied to command.run and command.describe now behave like other turn-blocking hook events, so anything relying on those events should account for that wait.

Related

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

·Internal
Under the hood
Useful2 Signal2
Hooks no docs found unclear

Hook registry gains command.describe as a core hook event#

Claude Code adds a new internal hook event called command.describe

Unclear What functionality actually uses the new command.describe hook is not established by this finding.

Details 0 0 Feedback
command.describe
What

Claude Code's internal hook system (the machinery that lets different parts of the app react to events) now includes a new core event named command.describe, alongside existing ones like agent.offer, tool.describe, session.start, and the turn.start/turn.step/turn.complete events.

Why

This is internal plumbing rather than something a reader interacts with directly. It suggests Claude Code now has a defined point for describing commands, similar to how it already describes tools, but the finding doesn't say what consumes this event yet.

Related

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

·Internal
Under the hood
Useful2 Signal2
Artifacts unclear

New Artifact editor state fields: frozenDbStrReplace, typeShipsInstructions, attestedTypeArtifacts, mcpServersBuilt, dbWriteOpSights, askClassPending/Taken/Consent#

Artifact runtime state gains several new internal tracking fields, including one for database write operations

Unclear What user-visible behavior, if any, these new state fields enable is not described in the finding.

Details 0 0 Feedback
What

Claude Code's internal state for the Artifact editor gained a batch of new tracking fields, including frozenDbStrReplace, typeShipsInstructions, attestedTypeArtifacts, mcpServersBuilt, dbWriteOpSights, and askClassPending/Taken/Consent. The dbWriteOpSights field specifically tracks database write operations by tool-use ID and by slug.

Why

These are internal bookkeeping additions rather than user-facing features on their own; they suggest Claude Code is tracking more detail about database writes and permission-asking state within artifacts, but the finding doesn't describe what visible behavior they drive.

·Internal
Under the hood
Useful2 Signal2
Workspace Trust no docs found unclear

Workspace trust plumbed into init config and SDK session request#

Workspace trust status is now passed into session setup and checked against trusted network directories

Unclear What happens as a result of this workspace-trust check (e.g. what gets blocked or warned) is not stated.

Details 0 0 Feedback
workspaceTrust
What

A workspaceTrust setting from init configuration is now passed through to session setup, where it's used to run a new workspace-trust check. That check considers the current working directory, a list of trusted network directories, and storage state, and runs during setup when the host owns the terminal's standard input.

Why

This threads workspace trust information deeper into session initialization, likely as part of deciding what a session is allowed to do in an untrusted workspace, though the finding doesn't specify the effect of the check's result.

·Internal
Under the hood
Useful2 Signal2
Hooks

Permission-check pipeline gained a pre-hook adjustment step (uot) before deny/ask evaluation#

Tool permission checks now let a hook adjust the decision before deny/ask logic runs

Details 0 0 Feedback
What

Before Claude Code decides whether to deny or ask about a tool call, both of its permission-decision code paths now run a new step that lets a hook (custom code that runs at a specific point in Claude Code's process) inspect and potentially adjust the in-progress permission decision before the deny or ask branches are evaluated.

Why

This opens a point where custom hook logic can influence permission outcomes earlier in the pipeline, ahead of the standard deny/ask evaluation.

·Internal
Under the hood
Useful2 Signal2
Terminal UI unclear

Onboarding flow adds a 'gateway' auth path condition alongside OAuth#

Onboarding now also treats a 'gateway' authentication setup as equivalent to OAuth for its flow

Unclear Nothing has been read yet about how the tengu_began_setup or tengu_onboarding_step gates affect this on any account.

Details 0 0 Feedback
What

During onboarding, Claude Code previously decided whether to show the OAuth (the standard login-and-authorize flow) step based on one condition. It now also checks a second condition: whether the account is set up with a "gateway" authentication path. If so, that also feeds the same oauthEnabled telemetry field and affects whether the OAuth step is shown. A related preflight-skip condition was also adjusted.

Why

This should make onboarding behave correctly for accounts using a gateway-based authentication setup, rather than only accounting for standard OAuth.

·Internal
Under the hood
Useful2 Signal2
MCP no docs found

Ambient-credential detection updated for a new /api/artifacts/mcp endpoint#

Ambient-credential detection for MCP now special-cases a new /api/artifacts/mcp endpoint

Details 0 0 Feedback
/api/artifacts/mcp
What

The internal helper that detects ambient credentials and OAuth needs for MCP server connections (replacing an older helper) now treats URLs under the /api/artifacts/mcp path differently from other MCP URLs. Related plumbing (artifactsMcpEntries, artifactsMcpEdgeEntries) and new OAuth scope constants for the artifacts MCP server were added, split into management, data, endpoints, and comments scopes.

Why

This lays groundwork for an artifacts-specific MCP server to be authenticated and scoped separately from other MCP connections, with finer-grained permission scopes.

·Internal
Under the hood
Useful2 Signal1
Group of 3 Elsewhere

Tool-use messages now record ingest context for input normalization#

Assistant messages now carry a wire_ingest_context field recording what process state was used to normalize tool inputs

Details 0 0 Feedback

What

Assistant message serialization now carries a new wireIngestContext/wire_ingest_context field alongside the existing wire_tool_inputs, filtered to only the keys present in a given tool's inputs. This records what client-side input normalization read from process state when producing a tool input, such as the current working directory a leading cd prefix was stripped against, or the timestamp stamped on a Slack send.

As part of this, the Bash tool's logic for stripping a cd <cwd> && prefix (previously two separate, ad-hoc find-and-replace calls, one for POSIX paths and one for Windows-normalized paths) was replaced with a shared helper that tries a list of candidate roots. The stripped cwd is now recorded per tool-use id in the new wireIngestContext map, which is persisted and migrated alongside wireToolInputs on saved transcripts.

Why

This lets a replayed conversation history verify each recorded tool input against the normalized input consistently, and lets the Bash prefix-stripping logic be reconstructed the same way across session resumes.

·Internal
Under the hood
Useful2 Signal1
Artifacts

Model switch mid-session now preserves/refreshes rendered client data for artifact frames#

Switching models mid-session now preserves rendered artifact-frame data across the switch

Details 0 0 Feedback
What

When the model used for the main conversation loop changes mid-session, Claude Code now optionally takes a snapshot of the rendered client-side thread-list data before switching. If that data changed, it's passed along as renderedClientData into the bootstrap-refresh step that runs after the switch.

Why

This stops the client's displayed state (such as artifact frames) from being lost or reset when you change models in the middle of a session.

·Internal
Under the hood
Useful2 Signal1
Sandbox

New per-artifact sandbox egress setting tracked with staleness#

Each artifact now tracks its own sandbox network-access setting, which goes stale after a time limit

Details 0 0 Feedback
What

Claude Code now records, per artifact, whether its sandbox (an isolated execution environment) has network egress (outbound network access) disabled or not. This setting is cached, but after a set age it's treated as unknown rather than trusted, so it must be re-checked.

Why

Caching the setting avoids repeatedly re-checking it, while the staleness cutoff makes sure Claude Code doesn't act on a network-access setting that may no longer be accurate.

·Internal
Under the hood
Useful2 Signal1
UI Components no docs found

React-compiler list/select component gains columnSizingOptions and keysDeferred props#

The selectable list component gains column-sizing options and a way to defer keyboard handling elsewhere

Details 0 0 Feedback
columnSizingOptionskeysDeferred
What

The internal selectable-list UI component now accepts a columnSizingOptions setting, used to compute column widths in compact vertical layouts, defaulting to the same list of options being shown. It also accepts a keysDeferred setting; when supplied and it signals true, the component's keyboard shortcuts are wrapped so key handling can be deferred to something else instead of being handled directly, and the component is kept active while this is in effect.

Why

This is internal UI plumbing that gives list-based menus more control over layout and keyboard handling; it doesn't describe a specific user-facing feature on its own.

·Internal
Under the hood
Useful2 Signal1
Sessions no docs found

Rewind failure reasons switched from free-text strings to stable machine codes#

Rewind failure reasons are now stable codes instead of free-text messages

Details 0 0 Feedback
commands_queuedtarget_not_foundstale_target
What

Rewind (the feature that lets you roll conversation history back to an earlier point) used to report failures as human-readable strings like "commands queued", "target not found", "stale target", or "poll tool_result target". These are now built through a shared helper and expressed as snake_case codes: commands_queued, target_not_found, stale_target, poll_tool_result_target.

Why

Stable codes are easier to match on programmatically (for logging, telemetry, or tooling) than free-text messages that could change wording. This doesn't change what rewind does, just how its failures are labeled internally.

·Internal
Under the hood
Useful2 Signal1
Sessions

New rewind-anchor failure taxonomy for prompt/session rewind#

Rewind now reports a specific reason when it can't jump back to a point in a session

Details 0 0 Feedback
What

'Rewind' (jumping a session or prompt back to an earlier point) now has a defined set of named outcomes for why a rewind couldn't happen: commands_queued, prompt_pending, turn_running, target_not_found, stale_target, unseen_later_turn, poll_tool_result_target, delivered_poll_events_in_range, persist_failed, and state_changed. Each maps to a human-readable explanation, and a helper always returns rewound: false along with the reason when a rewind fails.

Why

This gives clearer, more specific feedback about why a rewind attempt didn't succeed, instead of a generic failure, making it easier to understand what state the session was in that blocked it.

·Internal
Under the hood
Useful2 Signal1
Plugins

New hook-registration validators for plugin event handlers#

New validators catch plugin hooks registered for events or hook types that don't actually exist

Details 0 0 Feedback
What

Plugins can register handlers for events (using on("event")) and hooks. Two new validators now check this registration at load time: one confirms that a plugin's event patterns actually match a real, known event or method, and the other confirms that hooks the plugin declares were actually found when its hooks module was scanned. If either check fails, Claude Code now throws a descriptive error, such as one saying a pattern 'selects no event' or that a hook 'the scan of its hooks module did not see'.

Why

This gives plugin authors clearer, more specific errors when they misconfigure event or hook registrations, instead of the problem failing silently or surfacing as a confusing downstream error.

·Internal
Under the hood
Useful2 Signal1
Artifacts

Artifact-type-instructions prompt block gained size-scrubbing and page-content helpers#

Artifact type-instructions prompts gain new helpers for verifying and trimming embedded page content

Details 0 0 Feedback
What

New internal helpers build the guidance text that tells Claude how to write to an Artifact type's declared data store (via mcp, data, write_db, or run_script) instead of publishing files directly to it. Related helpers check whether a type's instructions file is verified as belonging to that type and release, and wrap or trim page content using <...page tag...> markers, dropping content that would exceed a set byte budget.

Why

This keeps Artifact type instructions accurate and within size limits, and steers writes toward the type's proper data store rather than direct file publishing.

·Internal
Under the hood
Useful2 Signal1
MCP

MCP tool checkPermissions now consults an SDK-level permission hook first#

MCP tool permission checks now first ask an SDK-level permission hook before falling back to normal consent logic

Details 0 0 Feedback
What

When Claude Code decides whether an MCP tool is allowed to run, it now first checks whether the SDK layer has already made a decision. If it has, that decision is used directly; otherwise Claude Code falls through to its usual suggestion and consent flow.

Why

This lets a higher-level permission decision (for example, one set by an SDK integration) take priority over Claude Code's default prompt-for-consent behavior for MCP tools.

·Internal
Under the hood
Useful2 Signal1
Elsewhere

Self-hosted runner session-exit result schema added#

New internal schema describes how a self-hosted runner's session ended, with phase, exit code, and signal

Details 0 0 Feedback
What

Claude Code now has an internal schema for describing how a self-hosted runner's session process ended. It records a phase, either setup (the process never started) or run (it exited), plus optional exit_code and signal values.

Why

This gives more structured information about how and why a self-hosted runner session terminated, which should help in diagnosing failures that happen before versus after the session actually starts running.

·Internal
Under the hood
Useful2 Signal1
Plugins no docs found unclear

New plugin settings field: payloadSlots#

Plugin settings gain a new payloadSlots field alongside shell settings and hooks

Unclear What a plugin "slot" contains or is used for is not stated.

Details 0 0 Feedback
payloadSlots
What

When Claude Code assembles settings contributed by plugins, it now includes a payloadSlots map, built from each plugin's slot entries, alongside the existing shellSettings, envVars, sandboxSettings, and hooks fields. A new helper checks whether any slots are non-empty to decide whether a plugin's settings count as meaningful ("non-trivial").

Why

The finding does not say what a plugin "slot" holds or what it is used for, only that plugins can now contribute this additional kind of data and that it factors into whether a plugin's settings are considered non-trivial.

·Internal
Under the hood
Useful2 Signal1
SDK

SDK query supports waiting for a held OAuth token refresh during shutdown#

SDK query can now wait for an in-progress OAuth token refresh before shutting down

Details 0 0 Feedback
What

The SDK's query process gains a waitForHeldOAuthRefresh step. When shutting down, it now checks whether an OAuth token refresh is currently pending; if so, it extends the shutdown safety timer and waits for the refresh to finish before letting shutdown proceed.

Why

This prevents the process from being killed in the middle of refreshing its authentication token, which could otherwise leave the session in a broken authentication state.

·Internal
Under the hood
Useful2 Signal1
Sessions no docs found

LocalFileJournal gains an explicit restore-in-progress protocol#

LocalFileJournal now tracks whether a restore was interrupted, partial, or complete

Details 0 0 Feedback
LocalFileJournal
What

LocalFileJournal, the mechanism Claude Code uses to persist session data to disk, now has a restoreState() check that reports whether a restore is "missing", "partial", or "complete", by looking for marker records at the start ({type:"restoring"}) and end ({type:"restored"}) of a restore. A companion writeRestored() function wraps a batch of records between these markers and writes them either as an atomic delete-and-append (on the newer v5 storage backend) or as a plain file write otherwise.

Why

This gives the journal a reliable way to tell whether a previous restore actually finished, which matters for recovering cleanly if Claude Code was interrupted partway through restoring session data.

Related

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

·Internal
Under the hood
Useful2 Signal1
Multi-Host Sessions

New read-baseline lookup for remote-synced project files#

Read and Edit tools now check a stored baseline for files synced from a remote host

Details 0 0 Feedback
What

New internal helper functions resolve a file path used by the Read or Edit tool against a remote host's project-sync setting (two_way or upload_only). If the file falls inside the synced project root or working directory, Claude Code now looks up a previously recorded baseline reading for that file instead of always treating it as never having been read.

Why

This avoids unnecessarily treating a synced file as unread when it was already read through the sync connection, which matters for tools like Edit that require a file to have been read first.

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

New model-selection helper for 'small fast model' vs projects model#

A new helper function chooses between the small fast model and a project's configured model

Unclear The finding doesn't say which call sites use this new helper or in what user-visible situations it's invoked.

Details 0 0 Feedback
useSmallFastModel
What

A new function picks which model to use in a given situation. When called with a truthy argument, it prefers a session's configured projectsModel (after checking it's valid), falling back to a general default-model resolver if not set. When called without that argument, it instead prefers the "small fast model" setting (useSmallFastModel) when enabled, otherwise falling back to the same default-model resolver.

Why

This centralizes model-selection logic that previously may have been scattered, letting different parts of Claude Code consistently choose between a project-specific model and the small fast model depending on context.

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
MCP

MCP tool permission checks now defer to an SDK-registered checker first#

MCP tool permission checks now consult an SDK-registered checker before the usual permission logic

Details 0 0 Feedback
What

When deciding whether an MCP tool (a tool provided by an external MCP server) is allowed to run, Claude Code now first asks a permission checker registered by the SDK (software development kit), if one is present. Only if that doesn't produce a decision does it fall back to the built-in permission-rule logic and design-consent checks it used before.

Why

This lets code built on the Claude Code SDK plug in its own custom permission logic for MCP tools, taking priority over the default rules.

·Internal
Under the hood
Useful2 Signal1
Telemetry no docs found

cgroup CPU accounting rewritten to read cpuacct.usage directly, adds shell CPU tracking#

CPU telemetry now reads cgroup usage from a fixed path and adds a new shell CPU time metric

Details 0 0 Feedback
cpuacct.usage
What

The telemetry that reports CPU usage broken down by session phase (tengu_tool_cpu_by_phase) now reads CPU accounting data from a fixed cgroup path, /sys/fs/cgroup/cpuacct, plus a per-tool cgroup's cpuacct.usage file. It also adds a new *_shell_cpu_ms metric, reported alongside the existing *_wall_ms, *_cli_cpu_ms, and *_tools_cpu_ms metrics when shell cgroup data is available.

Why

This gives more precise, directly-read CPU accounting and adds visibility specifically into CPU time spent in shell subprocesses, on top of the existing CLI-versus-tools breakdown.

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
MCP

MCP tool calls gain artifact-server arg/result hooks#

MCP tool calls to artifact servers now pass through argument-rewriting and result-observing hooks

Details 0 0 Feedback
What

When Claude Code calls a tool on an MCP server (a way for Claude Code to talk to external tools and data sources), it now runs the call's arguments through an argsForCall step before sending them, and runs the response through an observeResult step afterward. A specific handler for the 'artifact' class of MCP servers uses this to rewrite arguments on management calls, and, for list_artifacts calls, to record telemetry including a count of shared artifacts.

Why

This gives Claude Code a hook point to adjust artifact-related MCP calls and to gather usage data on artifact listings, without changing what the tool call looks like to the server itself.

·Internal
Under the hood
Useful2 Signal1
Elsewhere no docs found

New Claude Code state files: device-mcp-consent.json / device-mcp-snapshot.json#

Two new state files, device-mcp-consent.json and device-mcp-snapshot.json, are now tracked and copied alongside other Claude config

Details 0 0 Feedback
device-mcp-consent.jsondevice-mcp-snapshot.json
What

Two new per-user state files, .claude/state/device-mcp-consent.json and .claude/state/device-mcp-snapshot.json, have been added to the set of Claude-managed files that get special handling, alongside existing files like settings.json and unattended-serving-consent.json. They're also included in the list of paths that get scanned and copied across config directories.

Why

This suggests Claude Code is building out a consent and state-tracking system specifically for MCP servers tied to a device, similar to the existing consent mechanism for unattended tool serving, though what specifically populates these files isn't detailed here.

Related

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

·Internal
Under the hood
Useful2 Signal1
Elsewhere no docs found unclear

shellToolCommand: bash executions now default to inserting a 'cc-shell' background-task join marker#

Bash commands now default to a 'shell' execution class that inserts a background-task join marker

Unclear What the cc-shell join marker is used for downstream, and whether it's visible to users, isn't shown by the finding.

Details 0 0 Feedback
cc-shell
What

Bash command execution now defaults its internal cgroup class (a grouping used to manage resource limits) to "shell". Whenever that class is "shell", a new shellToolCommand setting kicks in and causes the command builder to prepend a small marker command, referred to as a cc-shell join marker, before running the actual command.

Why

This appears to be internal plumbing for tracking or synchronizing background shell tasks; the finding doesn't specify what user-visible behavior depends on this marker.

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 Plugins

Plugin telemetry now confirms marketplace listing asynchronously before logging#

Plugin install/uninstall/update/disable/enable telemetry now looks up the marketplace catalog asynchronously before logging

Details 0 0 Feedback

What

Telemetry events for installing, uninstalling, updating, disabling, and enabling a plugin (tengu_plugin_installed_cli, tengu_plugin_uninstalled_cli, tengu_plugin_updated_cli, tengu_plugin_disabled_cli, tengu_plugin_enabled_cli) now call a new async helper, hbe(), that tries to confirm the plugin actually exists in the marketplace catalog before logging. If that lookup fails, the event falls back to logging the plugin as third-party and redacts its name. This replaces the old synchronous lookup, and the enable-failure handler now also receives directory context as an extra argument.

Why

Confirming a plugin against the real marketplace catalog before logging telemetry gives more accurate install/usage data and avoids leaking or mislabeling names of plugins that aren't actually in the catalog.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Agent Proxy unclear

Agent-proxy relay now rate-limits repeated bad-event logging#

The agent-proxy relay tracks per-event-type budgets to stop spamming logs with repeated bad-connection events

Unclear What triggers or consumes a connection's bad-event budget, and what happens when it's exhausted, isn't specified.

Details 0 0 Feedback

What

The agent-proxy relay (the component that relays connections for agent sessions) now tracks a badEventBudgets map on its connection state, alongside existing counters like uploadPauses. A new helper uses a token bucket (a rate-limiting technique that allows bursts up to a limit and refills over time) per event type to suppress repeated identical logging of misbehaving-connection events.

When logging resumes after a period of suppression, it now reports a suppressed_since_last count so the number of dropped log entries isn't silently lost.

Why

This keeps a single misbehaving or noisy connection from flooding logs with repeated identical bad-event messages, while still surfacing how many events were suppressed.

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

SDK query() and remote sessions gain a separate stdin lane#

The SDK's query() and remote/bridge session IO now support a distinct stdin lane apart from the initial prompt

Unclear What stdinLane does and how it affects remote session behavior is not specified in the finding.

Details 0 0 Feedback
stdinLane

What

The class driving a remote (bridge/cloud) session's stream-json IO now accepts a new stdinLane constructor option, alongside the existing streamUrl, initialPrompt, sessionState, and similar options. The SDK's query() function, which builds either a local or remote-controlled query stream, now keeps the initial string prompt separate from a raw async-iterable/generator input, passing the latter through as this new stdinLane rather than always coercing all input into a single combined async generator.

Why

Separating the initial prompt from ongoing stdin input lets remote/bridge sessions handle streamed input more flexibly instead of forcing everything through one merged stream.

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 3 Telemetry

Agent spawn telemetry now records request shape, non-interactive flag, and workflow phase#

Subagent launches now report whether a request is foreground/background, non-interactive, and its workflow phase to telemetry

Details 0 0 Feedback

What

  • Agent/task spawn telemetry now includes optional workflowPhase, requestShape, and requestNonInteractive fields when present.
  • A new helper computes {requestShape, requestNonInteractive} for each subagent launch: requestShape is 'foreground' or 'background' depending on how the subagent was launched, and requestNonInteractive is a boolean. These are captured at subagent launch time, propagated through to teardown, and merged into telemetry-adjacent objects in several places, including worktree teardown and subagent tool launch options.
  • Relatedly, another new helper scans queued messages for a SubagentStart hook's additional context and for skill-loading metadata (isSkillLoadingMetadata), computing hookContextCarried and carriedPreloads so hook context and preloaded skill state carry across resumed, skill-loaded turns.

Why This gives more detail in telemetry about how and why subagents are launched (foreground vs. background, interactive vs. not, and at what point in a workflow), and ensures hook context and skill preloads aren't lost when a subagent's turn is resumed after loading a skill.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Internals no docs found

Feature-flag targeting now accounts for Slack-tag-connected accounts#

Feature flag evaluation now knows whether an account has a Slack tag connected, and skips syncing flags to disk for those sessions

Details 0 0 Feedback
slackTagConnected

What

  • The remote-eval (Growthbook) client context used for feature-flag experiments now includes a clientSlackTagConnected attribute, derived from slackTagConnected, and the evaluation cache key now includes slackTagConnected alongside id/organizationUUID.
  • Sessions where this attribute (also called "Claude Tag") is set now skip syncRemoteEvalToDisk() entirely, so remote eval feature flags aren't written to disk for those sessions.

Why

This lets feature-flag experiments be targeted and cached separately based on whether an account has a Slack tag connected, and avoids persisting feature-flag state to disk for those sessions.

·Internal
Under the hood
Useful1 Signal1
Group of 2 Startup unclear

New isUnwatchedRepl check for unattended sessions#

Claude Code can now detect "unwatched" REPL sessions and factor that into startup and launch-refusal decisions

Unclear What this check is used to change or gate is not stated in the finding.

Details 0 0 Feedback

What

A new isUnwatchedRepl check was added in two places:

  • The app's base-settings startup gate, where it combines a background-session check with a teammate-agent-id check
  • The launch-arming policy's refusal checks, where it's consulted alongside an existing armed-session check

Why

This lets Claude Code recognize when a REPL session is running unattended and factor that into decisions about whether the session should be ended as if a launch refusal had applied.

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

Local slash-command execution unified and simplified#

Local slash commands now run through one shared path and skip the dialog/panel host entirely

Details 0 0 Feedback

What

Running a local slash command and appending its result has been factored into one shared function, now used both for normal command invocation and for commands dispatched over a remote/bridge connection. Bridge-originated commands are tagged with dispatchedOverBridge: true so they can be distinguished.

Command dispatch now special-cases commands of type local to run directly through this shared path and log a tengu_immediate_command_executed telemetry event, without ever opening a panel or going through the dialog-host's JSX-building step. Only local-jsx commands (ones that render their own interactive UI) still go through the dialog-host path.

Why

This removes duplicated logic between direct and bridge-originated command execution and avoids unnecessary UI/panel overhead for plain local commands that don't need one.

Related

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

·Internal
Under the hood
Useful1 Signal1
Group of 3 Artifacts unclear

Plan-mode gate for artifact verify/upload consent is a hardcoded constant, not yet a real toggle#

A new always-on constant currently broadens when artifact verify/upload/comment actions require live confirmation during plan mode

Unclear the finding doesn't fully specify which plan-mode scenarios are newly covered, only that the gating was broadened

Details 0 0 Feedback

What

  • A new module-level constant (Cdn, currently hardcoded to true) is now combined with plan-mode checks to broaden when certain artifact actions — like verify and upload_asset — require per-action confirmation rather than being covered by a session-wide approval. This matters because plan mode can admit third-party text into the conversation.
  • The helper AA(e) that makes this decision resolves to Cdn && ue(e).mode === "plan", and is used together with another helper (Au()) throughout the new artifact consent code, including deciding whether comments or reads need a live confirmation prompt.
  • A sibling helper, vU, resolves to (e.ask && e.basis === "unattended") || (EDe && ue(t).mode === "plan"), where EDe is a second constant currently set to true, gating a related plan-mode branch.

Why Both gating constants are hardcoded on rather than driven by a real setting, so today this behavior is effectively always active in plan mode: artifact verify/upload/comment/read actions get an explicit confirmation prompt rather than relying on a broader session approval, since plan mode can bring in untrusted third-party text.

·Internal
Under the hood
Useful1 Signal1
MCP

MCP tool-allowlist subset checking (pc) rewritten around a safe array/object reader#

The internal check for MCP server tool-allowlist subsets was rewritten to safely handle hostile or malformed data

Details 0 0 Feedback
What

The internal logic that checks whether a server's allowed-tools set is a subset of another set (used to enforce MCP tool restrictions) was rewritten around new helper functions that canonicalize and safely read array and object values. The new helpers bound how large a list can be and catch errors from objects with throwing property getters, guarding against malformed or adversarial input.

Why

This hardens the tool-allowlist comparison against malformed or maliciously-crafted data, so a bad MCP server response can't crash or bypass the allowlist check.

·Internal
Under the hood
Useful1 Signal1
Managed Settings

policyHelper refresh now reports retry attempt counts on failure#

Telemetry for a failed background policyHelper refresh now includes how many attempts were made

Details 0 0 Feedback
What

When a background refresh of a policyHelper (a script that computes managed settings at startup) fails after its retries are exhausted, the settings_policy_helper refresh_failed telemetry event now includes an attempts field recording how many attempts were made.

Why

This gives more detail on failed policy helper refreshes, making it possible to tell whether a failure happened immediately or only after several retries.

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

Static defaultSettings fallback now tags whether it was armed by remote managed settings, and whether from cache#

The static settings fallback log now says whether it came from remote managed settings, and whether it's an unverified cached copy

Details 0 0 Feedback
What

When Claude Code falls back to applying a static defaultSettings payload, the log message now says whether that payload was armed by remote managed settings, and if so, whether it came from a session cache that hasn't yet been verified this session, versus one that has.

Why

This makes it easier to tell, from the logs, exactly which kind of fallback settings payload was applied and whether it's still awaiting verification, which matters when diagnosing unexpected settings 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 unclear

copy_from asset-copy tool: new auto-approval short-circuit path#

Copying assets between artifacts gains a new auto-approval path that can bypass the older consent check

Unclear The finding does not fully explain how this new branch interacts with the deny/ask permission-rule engine described previously, so the exact practical effect on when a copy is allowed versus prompted is unclear.

Details 0 0 Feedback
What

When copying an asset from one artifact to another using copy_from, the permission flow now has an additional path: outside of plan-mode consent tracking, it can check a write-permission ruling from the automatic classifier and allow or ask for approval based on that, without going through the older consent-tracking flow for source and destination.

Why

This is a further adjustment to how copy_from decides whether to allow, ask, or deny a copy, building on the permission-rule checks already added for this action; readers relying on that consent-based flow should be aware another path can now grant or request approval directly.

Related

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

·Internal
Under the hood
Useful1 Signal1
Transcript

Recently-read file reconstruction from transcript is now capped and marked#

Reconstructing recently-read files from chat history is now capped and marked as coming from history rather than disk

Details 0 0 Feedback
What

The logic that reconstructs which files were recently read, by scanning back through the conversation transcript, now walks the transcript from newest to oldest, stops after finding a fixed maximum number of distinct files, and tags each reconstructed file entry with contentFromTranscript so later code can tell it was rebuilt from the conversation history rather than freshly read from disk.

Why

This limits how much work and memory is spent reconstructing file history from a long conversation, and lets other parts of Claude Code distinguish transcript-derived file content from an up-to-date disk read, which matters if the file has changed since it was last read.

Related

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

·Internal
Under the hood
Useful1 Signal1
Telemetry

New start/stop instrumentation around REPL inner tool execution#

Claude Code now internally marks the start and end of each tool call for both local and remote execution

Details 0 0 Feedback
What

The internal code path that runs a tool call, whether it executes on the local machine or on a remote host, now records a marker just before and just after the actual call.

Why

This is internal instrumentation. It does not change what happens when a tool runs, but lays groundwork for measuring or tracking tool execution more precisely.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

DesignSync tool telemetry now validates dsMethod against a known method list#

DesignSync tool telemetry now checks the method name against a fixed list instead of logging it raw

Details 0 0 Feedback
What

When Claude Code records telemetry about which DesignSync tool method was used (things like list_projects, get_project, list_files, get_file, finalize_plan, write_files, delete_files, register_assets, unregister_assets), it now looks the reported method name up against a fixed list of known method names and records the match, instead of logging whatever string was passed in directly. This also applies to the error telemetry recorded when a DesignSync tool call fails.

Why

This keeps telemetry data consistent and prevents unexpected or malformed method names from being recorded as-is; it has no effect on what the DesignSync tool actually does.

·Internal
Under the hood
Useful1 Signal1
Background Agents unclear

New internal 'agent worker' event reader plumbing added alongside existing internal event readers#

New internal 'agent worker' event reader added alongside the existing internal event reader system

Unclear The finding is too fragmentary to describe a user-facing effect; it only shows new internal plumbing (a parallel event reader filtered by session_agent_id) without saying what feature it supports.

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

Turn-result wall-clock timing fields now gated to the matching user message#

Turn-timing fields in the result event now only appear when they match the current turn's user message

Details 0 0 Feedback
request_sent_wall_msfirst_stream_post_wall_ms
What

In the final result event that Claude Code emits at the end of a turn, two wall-clock timing fields, request_sent_wall_ms and first_stream_post_wall_ms, are now only included when they belong to the same user message that the current turn is actually reporting on. The other send-echo timing fields are still always included as before.

Why

Previously these two timing fields could be attached to a result even when they came from a different user message than the one the result was about, which could make timing data misleading. Restricting them to the matching message keeps the reported timings accurate.

·Internal
Under the hood
Useful1 Signal1
Telemetry

New generic identifier-list validator for telemetry sanitization#

A new validator lets comma/plus-separated identifier lists pass through telemetry unredacted

Details 0 0 Feedback
What

Claude Code sanitizes telemetry data before sending it, redacting anything that looks like it could contain sensitive information. A new validator has been added that recognizes a specific pattern: one or more alphanumeric identifiers (each starting with a letter, up to 64 characters, allowing underscores), separated by commas or plus signs. Values matching this pattern are now treated as safe and passed through as-is; anything else is redacted as "nonconforming".

Why

This lets telemetry preserve useful structured values, like lists of identifiers, without redacting them, while still catching and hiding anything that doesn't fit the expected shape.

·Internal
Under the hood
Useful1 Signal1
Cloud Sync

Directory-sync git worker internal rework (basis-memoized index/worktree checks, session-tagged 'kept' ref)#

Directory sync's internal git worker was reworked with memoized checks and session-tagged 'kept' refs

Details 0 0 Feedback
What

The background worker that handles git operations for directory sync had its internal logic reshuffled. It now uses two new memoized (cached) helper functions to check whether a git "basis" (a known starting point) matches a given commit, or matches a given index and working-tree state, and a new function tags a git ref by session ID as "kept" before falling back to discarding a temporary index.

Why

This is an internal restructuring of directory sync's git handling; the finding doesn't indicate a user-visible behavior change beyond how these checks are computed internally.

·Internal
Under the hood
Useful1 Signal1
Permissions unclear

Bash command permission checks thread through an extra context value#

Bash command permission checks now receive an extra piece of context when deciding whether to allow a command

Unclear What the added argument (k(o)) represents and how it changes permission outcomes is not specified.

Details 0 0 Feedback
What

The internal functions that match a bash (shell) command against permission rules now take an additional context value alongside the command, working directory, and other options they already received.

Why

The finding doesn't specify what the new value carries, so it's not clear what new information now factors into bash permission decisions.

·Internal
Under the hood
Useful1 Signal1
Permissions unclear

Auto-mode classifier call gains an extra parameter#

Auto-mode's classifier call now passes one additional argument alongside the existing transcript and host rules

Unclear What the new argument represents and its effect on auto-mode classification is not specified.

Details 0 0 Feedback
What

The function call that invokes the model used to classify auto-mode behavior now passes an extra argument (xfr(r)) in addition to the host rules and transcript data it already sent.

Why

The finding doesn't specify what this extra value contains or how it changes the classifier's behavior.

·Internal
Under the hood
Useful1 Signal1
Elsewhere no docs found

Spinner/glimmer animation gains a 'parked' state that skips the fast 50ms tick#

The status-line spinner can now be 'parked' to skip its faster animation speed

Details 0 0 Feedback
glimmerParked
What

The animated spinner (the little "glimmer" indicator shown while Claude Code is working) now supports a glimmerParked flag. Normally, the spinner ticks faster (every 50ms) while a request is in progress. With glimmerParked set, that faster speed no longer kicks in even while a request is active - the faster tick only applies when a request is in progress and the spinner is not parked.

Why

This gives Claude Code a way to keep the spinner in a slower, calmer animation state even during an active request, for situations where the faster animation isn't wanted.

·Internal
Under the hood
Useful1 Signal1
Slack Integration

Slack relay envelope/marker validation tightened#

Slack integration tightened its rules for spotting genuine start-of-turn messages vs. injected content

Details 0 0 Feedback
What

Claude Code's Slack integration includes text meant to stop malicious prompt injection, where someone tries to sneak fake instructions into a conversation so Claude treats them as legitimate. This defense text has been tightened in two ways:

  • File-attachment references must now come immediately before the special marker that opens a genuine user turn; previously, other unrelated '[SendFile: ...]' notes were allowed to sit in between.
  • A new rule states that only the harness (Claude Code's own controlling system) can place this opening marker or lead-in at the very first characters of a turn; if it appears after any other text, it is just ordinary content and not to be treated as authoritative.
Why

This closes a gap that could let someone disguise injected text as a legitimate system-issued marker by inserting distracting content before it, making the Slack integration harder to trick.

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

Publish/root path resolution reworked (async allowlist check)#

Publish tool now checks the workspace root against an allowlist asynchronously instead of a simple string match

Unclear The finding does not say what practical difference this makes for users, such as which paths are now accepted or rejected differently.

Details 0 0 Feedback
What

The publish tool's check for whether a given root directory falls inside the current workspace used to be a simple synchronous comparison of path strings. It now runs an asynchronous allowlist resolution process before deciding whether the root counts as inside the workspace.

Why

This changes the internal mechanics of a safety check used when publishing.

·Internal
Under the hood
Useful1 Signal1
MCP unclear

WaitForMcpServers tool refactored to a create()-based factory and drops its explicit auto-allow checkPermissions#

Internal tool that waits for MCP servers was rebuilt as a factory function and no longer auto-allows itself

Unclear The tengu_mcp_pending_call gate mentioned alongside this change is unread, so nothing can be said about whether it is switched on.

Details 0 0 Feedback
What

The internal tool that waits for MCP servers (external tool providers connected via the Model Context Protocol) to become available was restructured from a plain object into a factory function that produces the tool. It also dropped its own explicit permission check that always automatically allowed itself, and now looks up connected servers through a different internal method.

Why

This is an internal restructuring of how this tool is built and how it checks for available servers, rather than a change in what it does for users.

·Internal
Under the hood
Useful1 Signal1
Cloud Sync

Directory sync: 'notSent' can suppress the persistent report line#

Directory sync can now skip logging a failure to the persistent report while still updating the live status line

Details 0 0 Feedback
What

A function that records failed directory-sync notifications (notSent) now takes an option to skip adding the failure to the persistent report log, while still updating the live status line so the current state is visible. The related retry message also now mentions retrying at "the next sync point," in addition to the existing "after every turn" wording.

Why

This lets Claude Code show a sync problem in the moment without necessarily cluttering the persistent report with every occurrence, while still being clear about when a retry will happen.

·Internal
Under the hood
Useful1 Signal1
Hooks unclear

Hook dispatch events gain a 'raise' field#

Internal hook dispatch events gained a new 'raise' field, purpose unclear

Unclear What the raise field actually controls or affects is not shown by the evidence.

Details 0 0 Feedback
What

The internal machinery that dispatches hooks (scripts or commands that run automatically at certain points, such as before or after a tool runs) now passes an extra raise value alongside the existing id, event, payload, environments, and origin fields when invoking a hook module's dispatch function.

Why

This is an internal plumbing change. The evidence doesn't show what raise controls or what a hook author would observe differently.

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Model catalog builder now tracks snapshot timing and stats#

Model catalog cache-refresh logic now records how long the snapshot check took

Details 0 0 Feedback
What

When Claude Code checks whether its cached model catalog and settings are still current (by comparing against a git snapshot), the code now times that check and returns a snapshotMs duration and a stats object alongside the usual result of whether anything changed.

Why

This looks like internal instrumentation for diagnosing slow catalog refreshes rather than something a user would directly interact with.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

Model catalog resolution now takes an explicit provenance argument#

Model catalog resolution now passes a provenance value when rebuilding the catalog

Unclear What the provenance value is used for, or what changes for the user, is not shown by the evidence.

Details 0 0 Feedback
What

The internal function that reconciles the model picker's catalog state now calls the catalog builder with an object that includes a provenance field (tracking where the catalog data came from), instead of just passing the raw catalog value as before.

Why

This is an internal refactor to the model catalog machinery. The evidence doesn't show what using provenance changes for a user of the model picker.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact comment thread schema adds degraded-data and scope-filter fields#

Artifact comment threads can now report dropped threads and degraded data per thread

Details 0 0 Feedback
What

The data format for artifact comment threads (comment discussions attached to shared artifacts) gained several new optional fields:

  • threads_dropped and thread_filter, which indicate when threads were left out and how the results were filtered
  • scoped_dispatch and outside_org, related to scoping the request
  • per-thread flags resolved_degraded, activated_degraded, anchor_file_degraded, and comments_degraded, marking when specific parts of a thread's data couldn't be fully loaded
  • anchor_region and region_inside, describing the reference location a thread anchors to
Why

These fields let the client tell the difference between a thread that's simply empty and one where data was dropped, filtered out of scope, or only partially loaded, which should make it clearer when comment data shown is incomplete rather than genuinely absent.

·Internal
Under the hood
Useful1 Signal1
Sessions no docs found unclear

Tool-use IDs with a reserved prefix are now classified as underivable_excluded#

Tool calls with a special reserved ID prefix are now excluded from resume history reconstruction

Unclear What the reserved ID prefix specifically identifies is not shown by the evidence.

Details 0 0 Feedback
underivable_excluded
What

When Claude Code resumes a session and figures out which prior tool calls can be reconstructed, a tool call whose ID starts with a specific reserved prefix is now immediately classified as "underivable_excluded", before the normal checks for whether it was superseded or mismatched even run.

Why

This ensures tool calls carrying that reserved ID prefix are never mistakenly reconstructed during resume, treating them as excluded from the start rather than relying on the standard classification logic to catch them.

Related

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

·Internal
Under the hood
Useful1 Signal1
Telemetry

Wire tool input consistency-check telemetry now includes tool name and MCP flag#

Tool input consistency-check telemetry now records the tool's name and whether it's an MCP tool

Details 0 0 Feedback
What

When Claude Code detects an inconsistency in a tool's recorded input (via the tether_wire_tool_input telemetry event), the event now also includes the tool's name (toolName) and whether it came from an MCP server (isMcp), an external tool provider connected via the Model Context Protocol.

Why

This gives more context for diagnosing which specific tool, and whether an MCP-provided one, triggered an inconsistent recorded input, making it easier to track down the source of such issues.

·Internal
Under the hood
Useful1 Signal1
Artifacts

New MCP-manifest publish failure reasons: opaque_mcp_server_id and unknown_mcp_tool#

Artifact publish telemetry gains two new MCP failure reasons: opaque_mcp_server_id and unknown_mcp_tool

Details 0 0 Feedback
What

When artifact publishing checks an MCP (Model Context Protocol) server manifest and fails, it now records two additional, more specific failure reasons alongside the existing ones like host_server_unavailable and unresolved_mcp_server:

  • opaque_mcp_server_id
  • unknown_mcp_tool
Why

More specific failure reasons make it easier to tell exactly why an artifact's MCP manifest was rejected, building on earlier additions to this same validation chain such as the first-party server name collision 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
Telemetry no docs found

Command-line entrypoint telemetry routed through new normalizer#

Command-line entrypoint telemetry now goes through a normalizer instead of reading the raw environment variable

Details 0 0 Feedback
CLAUDE_CODE_ENTRYPOINT
What

The entrypoint field sent in telemetry now comes from a normalizing function applied to the entrypoint value, falling back to "other" if nothing is found. Previously it read the CLAUDE_CODE_ENTRYPOINT environment variable directly and fell back to "cli".

Why

Routing the value through a normalizer and changing the fallback from "cli" to "other" likely produces more consistent and accurate entrypoint labels in telemetry, though the finding doesn't specify what the normalizer changes about the value.

Related

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

·Internal
Under the hood
Useful1 Signal1
MCP

MCP tool calls now mark session as 'parked on user' while awaiting elicitation#

MCP tool calls now flag the session as waiting on the user while an elicitation prompt is pending

Details 0 0 Feedback
What

When an MCP (Model Context Protocol) tool other than the configured permission-prompt tool starts waiting for user input, Claude Code now marks the session as 'parked on user' by incrementing an internal counter used for idle detection, and releases it again once the wait ends.

Why

This should prevent a session from being wrongly treated as idle while it's actually waiting on the person to respond to an MCP tool's prompt, which matters for any idle-timeout or idle-detection behavior tied to that counter.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Plugin telemetry site map gains command.run and command.describe hooks#

Plugin hook telemetry adds command.run and command.describe event types

Details 0 0 Feedback
What

The internal dispatch table that instruments plugin hooks for telemetry adds two new event types, command.run and command.describe, alongside existing ones such as tool.call and prompt.submit.

Why

This extends telemetry coverage to plugin hooks tied to running and describing commands, building on the existing set of hookable events like tool.call and prompt.submit that plugins built from function hooks can already listen for.

·Internal
Under the hood
Useful1 Signal1
Elsewhere no docs found unclear

Remote tool-call protocol adds a read_baseline field#

Remote tool-call requests can now include a read_baseline field

Unclear What read_baseline is used for or how it affects tool-call approval is not stated in the finding.

Details 0 0 Feedback
read_baseline
What

The internal message format used for remote/cloud tool-call requests (part of the remote-control protocol) now accepts a readBaseline value, which gets sent out as read_baseline in the request, but only when no approval has been given yet.

Why

This is an internal protocol addition for how Claude Code communicates with remote or cloud-connected sessions; it does not change anything a user directly interacts with.

Related

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

·Internal
Under the hood
Useful1 Signal1
Git

Git config reads now report a specific failure cause instead of returning null#

Git config read failures now report a specific cause instead of silently returning nothing

Details 0 0 Feedback
What

The internal helper that reads a repository's .git/config file (used, for example, to figure out the remote repository's identifier) now returns a structured result with {ok, cause} when it fails, instead of just returning null. The possible causes are pointer_file, read_failed, unsafe_path, not_a_file, and oversize.

Why

This makes failures to read git configuration easier to diagnose, since the specific reason (such as an unsafe file path or a file that's too large) is now distinguishable instead of being an opaque failure.

·Internal
Under the hood
Useful1 Signal1
Cloud Sync

dir-sync git-worker turn-end telemetry gains an 'unchanged' outcome and a report toggle#

Directory-sync turn-end telemetry adds an 'unchanged' outcome and a way to skip reporting

Details 0 0 Feedback
What

The internal function that reports on the directory-sync git worker at the end of a turn now takes a third parameter (defaulting to true) that controls whether the ccr_dir_sync_git_worker_turn_end telemetry event fires at all. Its success branch, which previously matched 'shipped' or 'nothing_to_send', now also matches a new 'unchanged' outcome.

Why

This is internal telemetry refinement for the directory-sync system, distinguishing a turn where nothing changed from one where changes were sent, and allowing that reporting to be turned off when not needed.

·Internal
Under the hood
Useful1 Signal1
Cloud Sync no docs found

dir-sync between-tools publish telemetry now tracks how long the sync was held#

Directory-sync publish telemetry now tracks how long a sync was held before sending

Details 0 0 Feedback
held_ms
What

The directory-sync 'between tools' publish logic was rewritten to start a due-check and await a snapshot-taken signal, and now reports a new held_ms field, alongside the existing outcome and duration_ms, in the tengu_dir_sync_between_tools_publish telemetry event.

Why

held_ms shows how long a sync was held before being published, giving a clearer picture of sync timing in the directory-sync system beyond just how long the operation itself took.

·Internal
Under the hood
Useful1 Signal1
Tool Search

late-tool-additions rejection message now also mentions inline-tools fallback#

Rejected late-tool-addition warning now also mentions falling back to inline tools

Details 0 0 Feedback
What

When Claude Code rejects a late addition of a tool-related beta feature, the warning it logs now also notes that, if there's no ToolSearch feature available, the fallback is to inline tools instead. Previously the message only mentioned falling back to the ToolSearch announcement. The rejection still stays in effect ('sticky') until /clear or /compact is run.

Why

This makes the internal warning more accurate about what actually happens when a late tool addition is rejected, which is useful context for anyone diagnosing why tools behave differently until the conversation is cleared or compacted.

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 Management

Session keepalive heartbeat can now be 'parked on user' and skip sending#

Session keepalive heartbeat can now be skipped entirely while 'parked on user'

Details 0 0 Feedback
What

Claude Code's session keepalive mechanism (which periodically signals that a session is still active) now checks first whether the session is "parked on user" — a state waiting on the user. If so, it logs a debug event noting the reference count and parked state, and skips the normal heartbeat activity entirely.

Why

This avoids sending unnecessary keepalive signals while a session is simply waiting on the user, which should reduce needless background activity in that state.

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

TLS-to-relay warning for the agent proxy is now deduplicated via a gate check#

TLS-to-relay warning for the agent proxy is now gated to avoid repeated logging

Details 0 0 Feedback
What

When a client sends TLS traffic directly to the agent proxy's relay port (instead of going through the normal path), Claude Code used to log a warning every single time this happened and also increment a telemetry counter. Now, the warning is only logged when an internal gate check (agent_proxy_request_tls_to_relay) returns true, and the separate telemetry increment for this case has been removed.

Why

This reduces noisy, repeated logging for the same underlying condition, controlling whether and how often this particular warning appears.

Related

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

·Internal
Under the hood
Useful1 Signal1
Worktrees

Fast-resume worktree reset now logs why it was skipped, and picks filter-driver-aware git args#

Fast-resume worktree checks now log a specific reason when they bail out instead of failing silently

Details 0 0 Feedback
What

When Claude Code tries to quickly resume an existing git worktree, it first checks the repository's status. If that status check fails or shows uncommitted changes, it now logs a specific diagnostic message, such as status failed (code N) or tree read dirty under filter-driver-off pins, instead of just quietly giving up. The path also now accounts for filter-driver arguments (git settings that affect how file content is transformed on checkout) when deciding how to proceed.

Why

Having a specific logged reason makes it much easier to figure out why a worktree resume was skipped, rather than it just silently falling back to a slower path.

Related

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

·Internal
Under the hood
Useful1 Signal1
Session Management no docs found

session_activity_parked_leaked warning added for leaked parked-on-user activity#

Claude Code now logs a warning if session activity tracking leaks a 'parked on user' count

Details 0 0 Feedback
session_activity_parked_leaked
What

Claude Code tracks internally when a session's activity is "parked" waiting on the user. A new warning, session_activity_parked_leaked, is now logged if the internal counter that tracks reasons for activity drops to zero while there's still a nonzero count of activity parked on the user. The leaked count is included in the warning, and an internal generation counter is bumped before the stale count is cleared.

Why

This is an internal consistency check, not a user-facing feature. It helps catch a bookkeeping bug where the app thinks it's still waiting on you when it shouldn't be, which could otherwise cause confusing hangs or stuck states.

·Internal
Under the hood
Useful1 Signal1
Background Agents

Nested blocked agent chains now release a park callback on unblock#

Nested blocked agent chains now properly release their pending callback when unblocked

Details 0 0 Feedback
What

When a chain of blocked, nested agents (agents waiting on each other) gets unblocked, Claude Code now runs a stored callback for that chain via a new releaseNestedChainPark mechanism, then clears the stored callback (nestedChainUnparks) so it isn't run again.

Why

This is internal plumbing for how nested agent chains resume after being blocked. It reduces the chance of a leftover callback firing incorrectly or a chain failing to fully resume.

·Internal
Under the hood
Useful1 Signal1
Hooks

Permission-behavior helpers now require strict string/boolean typing#

Permission decisions from hooks now require exact string and boolean types instead of loose truthy checks

Details 0 0 Feedback
What

Hooks (custom scripts that can intercept and influence Claude Code's actions) can return values that tell Claude Code to allow, ask about, or deny an action. The code that builds these deny/ask/allow decisions now checks values more strictly: it requires typeof e === "string", typeof n === "string", and r === true explicitly, rather than accepting any value that happens to be truthy.

Why

This tightens how hook output is validated, so a hook returning an unexpected value type (like a number or an object) won't be silently treated as if it meant "allow" or "deny." It makes permission decisions driven by hooks more predictable.

·Internal
Under the hood
Useful1 Signal1
Telemetry

cli_teleport_relay_ended replaces generic upgrade_teleport_cache logging for device_tool_requested#

Teleport relay reverts caused by a requested device tool now log a dedicated event instead of a generic one

Details 0 0 Feedback
What

When a teleport relay (an internal connection-forwarding mechanism) reverts specifically because a device_tool_requested, Claude Code now logs a dedicated cli_teleport_relay_ended event at info level, instead of the previous generic upgrade_teleport_cache telemetry event.

Why

This makes it possible to distinguish this specific cause of a relay ending from other, unrelated cache-upgrade events in telemetry, which should make diagnosing relay behavior clearer.

·Internal
Under the hood
Useful1 Signal1
Slack Integration unclear

Slack entrypoint detection extended with a second check#

Detecting Claude Code running inside Slack now checks a second source in addition to the environment variable

Unclear What the second detection source checks (referred to only as an internal function) is not specified.

Details 0 0 Feedback
What

Claude Code already detected when it was running inside Slack by checking whether the CLAUDE_CODE_ENTRYPOINT environment variable was set to claude_in_slack or claude-in-slack. Now a second check has been added that looks at a different source for the same values.

Why

This makes the Slack detection more reliable by not depending on a single source, though the finding doesn't specify what the new source is or why the first check alone was insufficient.

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

Thread-state summary string for async/threaded conversations#

A new helper generates a 'Thread state' summary showing when the user last wrote and how many replies followed

Unclear Where this thread-state summary is shown to users or used internally is not stated.

Details 0 0 Feedback
What

A new helper builds a human-readable summary for asynchronous or threaded conversations, in the form: "Thread state: the user last wrote {relative time}. Claude has sent {N} replies since then."

Why

This gives a quick, plain-language snapshot of where a threaded conversation stands, likely for contexts where a conversation continues across multiple separate messages over 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
Elsewhere no docs found

'dev_intent' recognized as a routine system-message subtype#

The 'dev_intent' system message subtype is now filtered as routine, like other benign background messages

Details 0 0 Feedback
dev_intent
What

Internal message-filtering and deduplication logic now treats a system message subtype called dev_intent the same way it treats other routine, benign subtypes like files_persisted, mirror_error, and vcs_state_changed. This means it gets consistently skipped or filtered rather than being handled as an unrecognized message type.

Why

This keeps a new category of routine internal signaling from being surfaced or mishandled as if it were unexpected, consistent with how other background status messages are already treated.

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
Cloud Sync unclear

'muted' field added to sync/upload telemetry event#

A new 'muted' field is now included in sync/upload telemetry events

Unclear What the muted field represents or when it is set is not stated.

Details 0 0 Feedback
muted
What

A telemetry event related to syncing and uploading files now conditionally includes a muted field, alongside existing fields like first_upload, synced_files, and other_window.

Why

This is an internal telemetry addition; the finding doesn't specify what condition triggers it or what it's used to measure.

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

Shutdown failsafe timer now exposes its fire time#

Claude Code now records the exact time its shutdown safety timer is set to fire

Details 0 0 Feedback
failsafeFiresAtMs
What

Claude Code has a failsafe timer that forces a session to shut down if it doesn't close normally in time. When this timer is armed, Claude Code now also records the exact timestamp (failsafeFiresAtMs) at which it's set to fire, in addition to the timer itself.

Why

This is an internal bookkeeping change that makes it possible to know exactly when a pending forced shutdown will occur, which helps with diagnosing shutdown-related issues.

·Internal
Under the hood
Useful1 Signal1
Project Memory no docs found unclear

New project_memory_list / project_memory_read permission actions#

Two new permission actions, project_memory_list and project_memory_read, added to the project read-access whitelist

Unclear What project memory is and how these actions are triggered in practice is not stated in the evidence.

Details 0 0 Feedback
project_memory_listproject_memory_read
What

The list of project-scoped actions that are treated as read-only for permission purposes now includes project_memory_list and project_memory_read, alongside the existing project_info, project_read, and project_search.

Why

This lets project memory be listed and read under the same permission handling already used for other project read operations.

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 unclear

Presence field added to artifact comments/messages#

Artifact comments and messages now carry an optional presence field for human authors

Unclear What information the presence field carries or how it is shown to users is not stated.

Details 0 0 Feedback
presence
What

Comments and messages attached to artifacts (files Claude creates or edits that you can view and comment on) now include an optional presence field. It is only filled in when the comment or message comes from a human, not from Claude.

Why

The finding does not say what the field displays or how it is used, only that it exists and is populated for human-authored comments.

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

CRI/gateway loopback config validator gains an escape-hatch env var#

Gateway loopback check now also covers cri.issuer and cri.policy.webhook.url, not just cri.jwks_url

Details 0 0 Feedback
CLAUDE_GATEWAY_ALLOW_LOOPBACK
What

The deployment-time check that rejects loopback addresses (like localhost) in gateway configuration still requires the CLAUDE_GATEWAY_ALLOW_LOOPBACK environment variable to be set before it will allow one through. This check now also applies to cri.issuer and cri.policy.webhook.url, in addition to cri.jwks_url.

Why

This widens the same safety net that was already in place for cri.jwks_url to two more configuration fields, so pointing any of these three settings at a loopback address without the escape-hatch variable set will still be treated as a fatal misconfiguration.

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

"design" removed as a standalone CLI action while design-consent/revoke/login remain#

Plain "design" CLI action removed while design-consent, design-revoke and design-login remain

Unclear What the standalone "design" action did, and whether it was actually reachable as a command, is not stated.

Details 0 0 Feedback
What

The internal list of CLI command categories no longer includes a standalone design entry. The related design-consent, design-revoke, and design-login actions are still present and unaffected.

Why

The finding does not explain what the plain design action did or why it was dropped, only that it is no longer in the category map while its related subcommands remain.

·Internal
Under the hood
Useful1 Signal1
Artifacts no docs found

writerClass added to cowritten-artifact metadata#

Cowritten artifact metadata now includes a writerClass derived from the user's permission role

Details 0 0 Feedback
writerClass
What

Metadata attached to collaboratively-edited artifacts and documents, which already included cowritten, agentDirect, and typeLocked, now also carries a writerClass field. It is derived from whether the caller has an owner or writer permission role, and is used to decide whether a write applies to a single page or to the whole document.

Why

This lets the system scope collaborative edits differently depending on the editor's role, so an owner and a writer may not always have the same write scope on a shared artifact.

·Internal
Under the hood
Useful1 Signal1
Cloud Sync

git diff for cloud directory sync now treats dirty submodules differently#

Cloud directory sync's git diff now reports dirty submodules and short submodule summaries

Details 0 0 Feedback
What

When Claude Code syncs a cloud session's directory using git diff, it now passes --ignore-submodules=dirty instead of --ignore-submodules=all, and adds --submodule=short.

Why

Previously all submodule changes were ignored entirely during this sync. Now submodules that have been modified (dirty) will show up in the diff, with a short summary format, so uncommitted submodule changes are less likely to be silently missed during cloud sync.

Related

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

·Internal
Under the hood
Useful1 Signal1
Hooks unclear

InstructionsLoaded fallback check via sbe()#

Claude Code now checks a fallback source to detect if InstructionsLoaded hooks are configured

Unclear What sbe checks or where it sources its answer from is not stated in the finding.

Details 0 0 Feedback
InstructionsLoaded
What

The InstructionsLoaded hook fires when a CLAUDE.md file or a rules file is loaded into context, at session start or later when files are lazily loaded. Claude Code's internal check for whether any InstructionsLoaded hooks are registered now falls back to consulting sbe("InstructionsLoaded") instead of always assuming none are active when it can't find any.

Why

This makes detection of configured InstructionsLoaded hooks more reliable, reducing the chance that a hook that's actually set up gets incorrectly treated as absent.

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 unclear

Artifact/document type support extends recognized dialog schemas#

Task status data can now carry an optional description and reply field

Unclear What surface uses these new description and reply fields, and what they display, is not stated in the finding.

Details 0 0 Feedback
What

The schema used for task status now includes two new optional fields: description and reply.

Why

The finding doesn't say what feature uses these fields, but adding them to the task status schema suggests task-related dialogs or tools can now carry richer information, such as a written reply, alongside a task's status.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact auto-reply permission probe consolidated into shared helper#

Artifact auto-reply permission checks now go through one shared helper instead of inline logic

Details 0 0 Feedback
What

When Claude Code automatically reacts to comments on an Artifact (a generated document or file shown in a side panel), it has to check whether it's allowed to reply to or edit that thread. That permission check used to be inlined with ad-hoc try/catch logic; it's now handled by a single extracted helper function that returns a structured result covering whether the check threw an error, was skipped, what was decided, whether it was denied, and the reasoning behind the verdict.

Why

This is an internal cleanup that consolidates repeated logic into one place, making the permission outcome easier to reason about consistently; it isn't expected to change what you see when Claude auto-replies to Artifact comments.

·Internal
Under the hood
Useful1 Signal1
Permissions

Denial-before-call check wraps tool permission evaluation for headless/classifier flows#

New check catches tools denied right before they would have been called, for headless and classifier flows

Details 0 0 Feedback
What

A new wrapper runs the normal permission check and then, for flows like headless mode or the auto mode classifier, checks whether a tool looks like it was "denied before call" against a decision that hasn't already been settled. When that's triggered, Claude Code logs "<tool name> denied before call:" as a warning, discards the previously recorded decision for that tool, and converts it into the correct denial.

Why

This closes a gap where a tool could otherwise be called despite having effectively already been denied, making denial handling more consistent in headless and classifier-driven runs.

·Internal
Under the hood
Useful1 Signal1
Workflows

Workflow run IDs get a dedicated format and telemetry hashing path#

Workflow run IDs now use a dedicated ID format with their own telemetry hashing path

Details 0 0 Feedback
wf_
What

Workflow run IDs now follow a specific recognizable shape (a wf_ prefix followed by hex characters). Internally, IDs matching this shape are now hashed and redacted differently from other custom identifiers before being included in telemetry data.

Why

This is an internal bookkeeping change affecting how workflow run identifiers are anonymized before being sent in telemetry; it doesn't change what you see or do when using workflows.

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
Permissions

Abort handling reordered ahead of the 'process committed' guard#

Abort-signal checks in tool-permission requests now run before the 'never resolves' hang guard, not only inside it

Details 0 0 Feedback
What

In the code paths that send tool-permission requests and control requests, checking whether the operation has been aborted now happens unconditionally and first. Previously, the guard that intentionally hangs forever (by returning a promise that never resolves) when the process is already committed only ran inside a conditional block; now that hang guard runs after the abort check, rather than being nested inside it.

Why

Reordering these checks means an abort is more reliably noticed before the code can get stuck in the intentional 'hang forever' branch, which should reduce cases where a permission or control request appears to freeze instead of properly cancelling.

·Internal
Under the hood
Useful1 Signal1
Artifacts

Artifact comment threads get stronger prompt-injection framing#

Artifact comment threads now carry an explicit warning that comment text is untrusted and can't expand what Claude is allowed to do

Details 0 0 Feedback
What

The hidden header text wrapping artifact comment threads now spells out more clearly that:

  • comment text is untrusted, since it's written by artifact viewers
  • those viewers may be outside your organization
  • a request embedded in a comment cannot widen the current task or grant new permissions, such as running commands, following links, touching unrelated files or configuration, or sending data or credentials
Why

This strengthens protection against prompt injection: someone leaving a comment on an artifact can't use that comment to trick Claude into doing more than the task actually calls for, even if the comment is phrased as an instruction.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Scheduled-task telemetry now anonymizes task IDs#

Scheduled-task telemetry now hashes task IDs instead of sending them raw

Details 0 0 Feedback
What

When a scheduled (cron) task fires or is reported as missed, the telemetry event sent now runs the task's ID through a hashing step first, instead of including the raw task ID.

Why

This avoids sending a scheduled task's plain identifier in telemetry data, obfuscating it before it leaves your machine.

·Internal
Under the hood
Useful1 Signal1
Git

Git working-tree snapshot sync now records detailed timing stats#

Git status syncing now records how long the file listing and history read each took

Details 0 0 Feedback
What

When Claude Code takes a snapshot of your git working tree's state (used to keep track of file and commit changes), it now records timing details: listingMs (time spent listing the working tree), historyMs (time spent reading commit history), and listingEmpty (whether the listing came back empty).

Why

This is internal diagnostic data that helps identify whether slowness in git syncing comes from listing files or reading history, rather than a change you'll notice directly.

·Internal
Under the hood
Useful1 Signal1
Sessions no docs found

Cancel/escape handling gains an isCloudMessageHeld mode#

Cancelling with Escape now behaves differently while a cloud message is being held

Details 0 0 Feedback
isCloudMessageHeld
What

The logic that handles cancelling or interrupting Claude (via Escape or Ctrl-C) now accepts an isCloudMessageHeld flag. When this is set and the input box is empty, pressing Escape is treated similarly to cancelling while something is loading externally, and it affects whether the cancel actually goes through.

Why

This ties into the new handling for messages held back in remote sessions, making sure that cancelling behaves sensibly while a message you sent is still being withheld rather than sent.

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
Plan Mode unclear

Plan-mode 'ask before tool call' check now also considers a permission-mode condition#

Plan mode's check before refusing a tool call now also looks at the current permission mode

Unclear The finding does not describe what the specific permission-mode condition checks or how it changes outcomes in practice.

Details 0 0 Feedback
What

While in plan mode, Claude Code sometimes has to force a late refusal for a tool call that looks read-only but might not be. That check previously only looked at whether the call had been pre-approved. It now also factors in an additional permission-mode condition before deciding whether to refuse.

Why

This refines when plan mode blocks a tool call at the last moment, aiming to make the refusal decision line up more accurately with the actual permission mode in effect.

Related

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

·Internal
Under the hood
Useful1 Signal1
Permissions unclear

Bash path-validation helpers gained an extra passthrough parameter affecting relative-path-after-cd checks#

Bash safety checks gained a parameter that can skip the 'ask' prompt for reading a relative path after cd

Unclear The finding doesn't specify which call sites now pass the new parameter as true, so it's unclear which real commands actually skip the ask requirement.

Details 0 0 Feedback
What

Several internal functions that check whether a bash command is safe to run were given a new trailing parameter. When set to true, it skips the requirement to ask for permission before reading a relative path that follows a cd in a compound command (like cd some-dir && cat file.txt), even when a rule is configured to deny that kind of Read.

Why

This changes when Claude Code will pause to ask before reading a file reached via a directory change in the same command, in cases where a deny rule for Read is otherwise in place. The finding does not say which callers now pass true for this new parameter, so it's unclear which specific commands are affected in practice.

·Internal
Under the hood
Useful1 Signal1
Telemetry

Tip-shown telemetry categorization refactored into a shared helper#

Tip telemetry now labels plugin-marketplace tips by their actual marketplace instead of a generic bucket

Details 0 0 Feedback
What

When Claude Code logs that it showed a tip (a tengu_tip_shown telemetry event), it now categorizes the tip using a shared helper function instead of inline logic. The new logic adds a specific case for tips that come from a plugin marketplace: instead of a generic label, these are now tagged with the actual marketplace id, or with marketplace-plugin:org-marketplace as a fallback when the specific id isn't available. Other tips are still labeled org-tip or other as before.

Why

This makes internal telemetry about which tips get shown more precise for plugin-marketplace tips specifically, which previously would have been grouped less specifically. It's an internal analytics change and doesn't affect what tips you see.

·Internal
Under the hood
Useful1 Signal1
Session Management unclear

Session-signal absorption now also updates a per-host aggregate#

Session-signal tracking now also updates a per-host aggregate, alongside existing per-session tracking

Unclear The finding doesn't say what this per-host aggregate is used for or what visible effect it has.

Details 0 0 Feedback
What

Internal tracking of "session signals" (state like which bash tools or tools have been used) now also updates a shared aggregate tied to the session's host, in addition to the existing tracking that was scoped to just the bash tool, host, and used-tools set. This happens both when signals are absorbed and when they are reset.

Why

This is internal bookkeeping that lets related state be tracked at the host level rather than only per individual session, which the finding doesn't further explain the purpose of.

Related

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

·Internal
Under the hood
Useful1 Signal1
Elsewhere

Status/plan trigger function now also fires on turn start, not just user text#

The status/plan check now also runs at the start of a turn, not only when you type text

Details 0 0 Feedback
What

An internal function that checks whether to show a status or plan update used to only run when there was user text to react to. It now also runs when a turn is just starting, even without new user text. When it sets a new status detail, it also clears out any previous output value.

Why

This means status or plan information can now be refreshed at the start of a turn rather than only in response to something you typed, which should make that information more consistently up to date.

·Internal
Under the hood
Useful1 Signal1
Auth unclear

Device-authorization OAuth schema field added#

OAuth schema gains optional fields for device-authorization and token endpoints

Unclear The finding only shows the schema definition, not where or how it's consumed, so its practical effect is unclear.

Details 0 0 Feedback
What

A new internal schema was added defining two optional fields, device_authorization_endpoint and token_endpoint, for use in OAuth-related configuration.

Why

This lays groundwork for supporting an OAuth device-authorization flow, though the finding doesn't say where this schema is used yet or what feature it enables.

·Internal
Under the hood
Useful1 Signal1
MCP

Declared-tool tracking on transcript ingest now distinguishes name-only announcements from full entries#

Transcript ingest now separately tracks tool declarations that only announce a name versus full tool entries

Details 0 0 Feedback
What

When Claude Code reads in a transcript and processes declared MCP tools, it now keeps two separate records: nameOnlyAnnouncements, for declarations that only give a tool's name, and entries, for full tool declarations. Previously, only full entries were merged into the tracked state; name-only announcements weren't handled separately.

Why

This lets Claude Code distinguish a tool that's merely been announced by name from one that's been fully declared, which likely affects how it decides whether a tool is ready to use.

·Internal
Under the hood
Useful1 Signal1
Plugins unclear

Plugin sync now tracks per-plugin attestation alongside synced dirs#

Plugin sync now records an attestation value for each synced plugin directory

Unclear The finding does not say what the attestation value is used to verify or check.

Details 0 0 Feedback
What

When Claude Code syncs plugin directories, it now also computes an attestation value for each plugin directory and stores it alongside the list of synced directories, rather than storing just the directory list.

Why

This is internal bookkeeping for plugin sync; it gives Claude Code a way to verify or track the state of each synced plugin directory rather than just knowing it was synced.

·Internal
Under the hood
Useful1 Signal1
Permissions

Bash heredoc/pipe read-restriction check extended to always-deny host-credential rules#

Bash heredoc/pipe protections now also account for always-deny host-credential rules

Details 0 0 Feedback
What

Claude Code blocks bash commands that use heredocs (multi-line input blocks) or pipes to read files outside your working directories. That check now also looks at the command's "always deny" rules, checking whether any of them target the current session and whether none of the other deny rules (aside from a host-credential rule) apply, before deciding whether to block the read.

Why

This tightens the existing protection against commands that try to read sensitive files (like host credentials) from outside the working directory, making the block more consistent with how always-deny rules are otherwise enforced.

·Internal
Under the hood
Useful1 Signal1
Elsewhere unclear

New progress-tracking hook for transcripts/tasks (loadingStartTime, responseLength, totalPausedMs)#

New internal tracker records loading time, response length estimate, and paused time per conversation

Unclear What surfaces this tracked data to the user is not stated.

Details 0 0 Feedback
What

Claude Code now builds a small live tracking object for each conversation or task, recording when a turn or task started loading, an estimated response length (based on token count), and how much total time has been spent paused.

Why

The finding doesn't say what feature consumes this new state, but it's the kind of data that could feed a progress indicator or status display for ongoing turns and tasks.

·Internal
Under the hood
Useful1 Signal1
API Protocol no docs found

New 'prefix lock heal declined' error marker feeds into request-retry classification#

Retry logic now remembers when a 'prefix lock' auto-heal was declined, so it won't retry the same way again

Details 0 0 Feedback
prefixLockHealDeclined
What

Claude Code can hit a 400-style "prefix lock" error and attempt to automatically heal it. Now, if that auto-heal attempt is declined, the error gets marked with prefixLockHealDeclined, and the request-retry logic checks for that marker so it doesn't loop trying the same auto-heal again.

Why

This prevents Claude Code from repeatedly retrying an auto-heal that has already been declined, avoiding a wasted retry loop on this specific error condition.

·Internal
Under the hood
Useful1 Signal1
Workspace Trust no docs found

workspaceTrust added as a synced "preference"#

The workspaceTrust setting now syncs as a per-user preference instead of being dropped

Details 0 0 Feedback
workspaceTrust
What

In the table that governs how settings propagate (for example to subagents or forked sessions), workspaceTrust is now classified as a "preference" rather than being dropped. This means the setting is intended to carry over as a per-user preference during settings sync.

Why

Previously this setting may have been lost when settings synced elsewhere; classifying it as a preference means a user's workspace trust choice is now preserved rather than reset.

·Internal
Under the hood
Useful1 Signal0
Group of 3 Startup

Startup profiling for the cross-session messaging inbox#

Claude Code now times each phase of starting the local cross-session messaging inbox and logs when it's skipped

Details 0 0 Feedback

What

Session startup now records named timing marks around the setup of the cross-session inbox, a local Unix-domain-socket (a file-based connection used for communication between processes on the same machine) channel that lets separate Claude Code sessions message each other.

  • New timing marks bracket the dynamic import and startup call: setup_uds_start, setup_uds_imported/setup_uds_import, and setup_uds_end, corresponding to phases named setup_uds_messaging, setup_uds_dir, setup_uds_listen, and setup_uds_publish.
  • A new profileStartup option is passed into the inbox startup call, which gates three more marks inside it: uds_inbox_dir_ready, uds_inbox_listening, and uds_inbox_key_published.
  • If the feature is gated off, startup now logs an explicit message: "cross-session messaging gate off (will late-bind if a GrowthBook refresh enables it)".

Why

This gives clearer visibility into where time goes during cross-session messaging startup, and makes it obvious in logs when the feature is intentionally skipped versus failing.

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

Tool-search deferred-tools delta now has a fast latch path avoiding full recompute#

Checking for newly available tools mid-session now uses a faster cached check first

Details 0 0 Feedback
What

The internal logic that decides whether to compute and announce a deferred_tools_delta (a signal that new tools have become available partway through a session) now first tries a quick cached check using toolPoolRefreshes and aheadOfRequest. It only falls back to the previous, more expensive full set of eligibility checks if that quick check doesn't resolve the question.

Why

This is a performance change: it avoids redoing full eligibility computation on every check, which should make detecting newly available tools mid-session cheaper without changing what tools end up 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
Useful1 Signal0
Tooling Architecture

Many tool definitions converted to a create(context) factory pattern#

Several built-in tools were internally restructured to build their behavior from shared context instead of per-call

Details 0 0 Feedback
What

A batch of built-in tools, including task-killing tools, MCP resource listing and reading, MCP web search, and several self-hosted runner admin tools (pool status, pool sessions, pool secrets, runner list, session requeue), were rewritten internally. They now build their logic once from shared session context rather than receiving that context separately on every call.

Why

This is an internal code structure change with no described effect on behavior. It does not change what these tools do for the reader.

Related

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

·Internal
Under the hood
Useful1 Signal0
Artifacts

Publish/serve status now explicitly tagged when handling served vs published payloads#

Internal publish/serve status handling now explicitly tags payloads as 'served' or 'published'

Details 0 0 Feedback
What

Two internal code paths that process publish and serve status now explicitly pass a status label, either served or published, when handling that data, instead of relying on a generic shared function without that distinction.

Why

This is an internal correctness/clarity change to how Claude Code distinguishes served content from published content internally. The finding does not describe any visible change in behavior.

·Internal
Under the hood
Useful1 Signal0
MCP

MCP control-channel request handlers (mcp_call, mcp_toggle, mcp_authenticate, apply_flag_settings, etc.) — no functional change found#

No functional change found in MCP control-channel request handling, only internal variable renaming

Details 0 0 Feedback
What

A large section of code handling MCP control-channel requests (things like mcp_call, mcp_toggle, mcp_authenticate, apply_flag_settings, and related handlers) was reorganized, but the change appears to be limited to renaming internal variables.

Why

No behavior change is described here; this is bookkeeping in the code rather than something a user would notice.

·Internal
Under the hood
Useful1 Signal0
Remote Control

Remote-control bridge control-request handling: no functional change found#

No functional change found in remote-control bridge's control-request handling

Details 0 0 Feedback
What

The code that handles control requests over Claude Code's remote-control bridge, covering things like setting the model, setting max thinking tokens, setting permission mode, state changes, device hook registration, and announcing remote tools, was reviewed and found to consist almost entirely of variable renaming from minification.

Why

No new logic, message, or field was found compared to the previous build, so this doesn't change behavior for anyone using Claude Code.

·Internal
Under the hood
Useful1 Signal0
UI Components unclear

Search-list virtualization gains an onLayout callback#

Virtualized search list gains a layout-reporting callback

Unclear What consumes the reported layout information, or what visible effect it has, isn't stated.

Details 0 0 Feedback
What

The hook that powers Claude Code's virtualized message list (a list that only renders the visible portion for performance, used for search results) now also returns and uses an onLayout callback. A new invisible element is rendered alongside the list specifically to report layout information through this callback.

Why

This gives the list rendering logic a way to react to layout changes, though the finding doesn't specify what it's used for beyond that.

·Internal
Under the hood
Useful1 Signal0
Plugins

Plugin hook loading diff appears to be a rename-only refactor#

Plugin hook loading code was refactored with renamed variables but no behavior change

Details 0 0 Feedback
What

The internal logic that registers plugin hooks (including skipping duplicate hook registrations and tracking errors for managed plugins) was refactored with renamed internal variables. No new messages, error codes, or behavior branches were added beyond what already existed.

Why

This is a code cleanup with no expected effect on how plugin hooks behave.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

CLI option class renamed (q -> Y) and error class renamed (Ht -> It); no behavior change#

Internal CLI option and error classes were renamed with no change in behavior

Details 0 0 Feedback
What

Internally, the class used to build print-mode CLI flags such as --permission-prompt-tool, --system-prompt, and --plan-mode-instructions was renamed, and the class used for invalid-choice errors on those options was also renamed.

Why

This is a naming-only change with no effect on how these flags behave or appear to users.

·Internal
Under the hood
Useful1 Signal0
Tooling Architecture

Edit/Write/NotebookEdit-style tools refactored to a per-session create() factory#

Edit, Write, and Read/PDF tools were refactored internally to build themselves from a per-session factory function

Details 0 0 Feedback
What

The internal implementation of tools like Edit, Write, and the reader that handles files and PDFs was restructured. Previously each tool had flat methods for checking permissions, validating input, and running. Now each tool has a create() factory function that builds those methods bound to the specific session and context of the current invocation, giving uniform access to things like permissions, the tool list, remote-call handling, and the active model.

Why

This is an internal code reorganization with no described effect on what these tools do from a user's perspective; it standardizes how the tools are built internally.

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
Telemetry

Prompt cache diagnosis telemetry now allowlists diagnosisType values#

Prompt-cache diagnosis telemetry now only sends recognized diagnosis types, replacing others with 'other'

Details 0 0 Feedback
What

The telemetry event tengu_prompt_cache_diagnosis_received, which records diagnostic information about Claude Code's prompt cache, now checks the diagnosis type against a list of recognized values before recording it. If the type isn't on that list, the event now sends the literal value other instead of the raw, unrecognized string.

Why

This keeps the telemetry data clean and predictable by preventing arbitrary or unexpected diagnosis-type strings from being recorded verbatim.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

Diff panel visibility/toggle logic simplified via Iwt() presentation check#

The diff panel's fullscreen-vs-inline display logic was simplified into a single shared check

Details 0 0 Feedback
/diff
What

The /diff slash command's description and its immediate-display behavior now both rely on a single helper function that checks whether the current presentation mode is "fullscreen", replacing three separate condition checks that existed before. A related, unused code branch for rendering the diff panel in fullscreen mode was also removed from an unrelated part of the code.

Why

This is an internal cleanup that makes the fullscreen-versus-inline decision for the diff panel consistent in one place; it isn't expected to change what you see when running /diff.

Related

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

·Internal
Under the hood
Useful1 Signal0
Sandbox unclear

sandboxed Windows exec refusal error object changed shape#

Windows sandbox command refusals now throw a different internal error object

Unclear What practical difference the new error object shape makes, if any, is not stated.

Details 0 0 Feedback
What

When Claude Code's sandbox (a restricted execution environment) refuses to run a command on Windows because of policy, it now throws a cre error built from the command string, instead of the previous Vte error object.

Why

This is an internal implementation detail of how the refusal is represented in code. It doesn't change what happens visibly when a Windows sandbox policy blocks a command, but code that inspected the old error shape would need to account for the new one.

·Internal
Under the hood
Useful1 Signal0
Telemetry unclear

Marketplace plugin errors: workaround with FA=500 budget constant added#

New internal constants including a 500 budget value added near marketplace plugin/session-auth code

Unclear The purpose of these constants and the passthrough usage schema is not stated.

Details 0 0 Feedback
What

Several new internal constants (Oee=80, zee=128, Zee=5, FA=500) and a passthrough usage schema were added in code related to OTLP telemetry and session authentication.

Why

What these constants control is not clear from the change itself, so no practical effect can be described.

·Internal
Under the hood
Useful1 Signal0
Images no docs found

Image handling switched to Bun's native Image API#

Image handling now uses Bun's built-in Image type instead of a custom wrapper object

Details 0 0 Feedback
Bun.Image
What

A function that previously constructed a custom, frozen wrapper object to represent an image (holding call, signal, event, and origin data) now simply returns new Bun.Image(...), using the image type built into the Bun JavaScript runtime instead.

Why

This simplifies image handling by relying on the runtime's native support rather than a hand-built substitute, though the finding doesn't describe any visible behavior change.

Related

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

·Internal
Under the hood
Useful1 Signal0
MCP unclear

MCP resource metadata fetch de-duplication / discovery-state error type changed#

Internal renames in the MCP OAuth login flow's error handling, with no apparent change in behavior

Unclear Whether this is purely a rename or also changes how discovery-state errors are detected in some edge case is not established by the evidence.

Details 0 0 Feedback
What

Internal code in the MCP (Model Context Protocol) OAuth login flow was reworked: the check for a discovery-state error now looks for a differently-named error type, and several "persist failed" logging calls were renamed to use a different helper. This happened in both the regular and enterprise variants of the MCP OAuth client.

Why

These look like internal renames rather than a behavior change, so there's likely nothing for users to notice here.

·Internal
Under the hood
Useful1 Signal0
Session Management unclear

Session-list/'served' ordering now sorts by a filter predicate (Nxn) when kind is served#

In the served session list view, matching entries are now sorted to the end instead of just being listed as-is

Unclear What the filter specifically matches, and why those entries should sort last, is not stated in the evidence.

Details 0 0 Feedback
What

When Claude Code renders a list of sessions in the "served" view, it now sorts the list so that entries matching a particular filter appear last, rather than simply listing them in their original order.

Why

This changes the order sessions appear in within that specific list view, grouping matching entries toward the end.

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

"Full output saved to:" persistence marker regex narrowed#

The redaction pattern for "saved to:" file paths in truncated tool output now matches more phrasings

Details 0 0 Feedback
What

When Claude Code truncates long tool output and saves the full version to a file, it shows a note like "Full output saved to: " and redacts that path in certain places. The pattern used to find and redact that path now matches any phrasing ending in "saved to: ", not just the exact "Full output saved to:" text.

Why

This makes the redaction more reliable by catching variant wordings of the same message, reducing the chance a saved-output file path leaks through unredacted.

Related

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

·Internal
Under the hood
Useful1 Signal0
Permissions unclear

Bash command permission dry-run check simplified to a single flag#

A bash command permission check during streaming execution now relies on a single flag instead of two conditions

Unclear What behavior difference, if any, this produces for users is not stated in the finding.

Details 0 0 Feedback
What

A guard used while checking bash command permissions during streaming execution used to bail out only when both a local flag and a notRunning() check agreed; it now bails out based on the local flag alone.

Why

The finding doesn't explain the practical effect, but simplifying two conditions into one suggests the notRunning() check was found redundant for this particular guard.

·Internal
Under the hood
Useful1 Signal0
Images

Image tool: budget computation failures now suppressed unless truly unexpected#

Image sizing failures now fail silently unless the error is truly unexpected

Details 0 0 Feedback
What

When Claude Code works out how much of its image budget (the space limit for images sent to the model) a given image should use, that calculation can occasionally fail. Previously any such failure was always logged as an error. Now the code checks whether the failure is a recognized, expected kind; if so it quietly falls back to a default instead of logging, and only logs at error level when the failure is genuinely unexpected.

Why

This cuts down on noisy error logs for routine, already-understood failure cases while still surfacing genuinely surprising problems, making error logs more useful for diagnosing real issues.

Related

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

·Internal
Under the hood
Useful1 Signal0
Tooling Architecture unclear

Built-in tool classification gets a special-case exception for one built-in name#

One built-in tool now gets a special-case exception in the built-in vs MCP classification logic

Unclear The finding doesn't say which specific tool this exception applies to.

Details 0 0 Feedback
What

The internal logic that classifies a tool as MCP (Model Context Protocol), built-in, or undefined now takes an extra input and adds a special case: if a tool's name matches one particular built-in tool and none of the extra input matches a specific identifier, it's classified as "built-in" even in a situation where it would otherwise have failed the general built-in check.

Why

This fixes a case where that particular tool could be misclassified, ensuring it's consistently recognized as a built-in tool.

Related

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

·Internal
Under the hood
Useful1 Signal0
Git

Git status collection command extracted into a shared constant array#

Git status command used for context gathering now built from a shared constant, no behavior change

Details 0 0 Feedback
What

The git status --short command Claude Code runs internally to gather context now pulls its arguments from a shared named constant instead of an inline list, and an internal truncation-threshold variable (still 2000 characters) was renamed.

Why

This is an internal code cleanup with no effect on behavior.

·Internal
Under the hood
Useful1 Signal0
Elsewhere

Tool-result pairing debug messages now use structured/redacted formatting helpers#

Tool-result pairing debug logs now numbered and formatted with redaction helpers

Details 0 0 Feedback
What

When Claude Code detects a mismatch between tool-use and tool-result messages (a structural check called ensureToolResultPairing), the debug and error messages it logs are now built differently: each message is numbered with an index, and tool-use IDs are formatted through a redaction/formatting helper and joined with a dedicated helper function, instead of being concatenated directly into a plain string.

Why

This makes these internal diagnostic logs more structured and consistent, and applies proper redaction formatting to identifiers that appear in them.

·Internal
Under the hood
Useful1 Signal0
Workflows

Workflow agent detail scroll math generalized to arbitrary fold regions#

Workflow agent card's expand/collapse scrolling logic was generalized to handle multiple collapsible regions

Details 0 0 Feedback
What

The calculation Claude Code uses to keep your scroll position steady when expanding or collapsing a workflow agent card's detail view was rewritten. Previously it handled a single hardcoded case (the collapsed prompt). Now it works with a general list of 'fold regions', each with its own end point and growth amount, so multiple collapsible sections can be accounted for.

Why

This is an internal refactor that supports more kinds of collapsible content in the agent card without the scroll position jumping around; it's not expected to change what you see, only to make future card layouts easier to support correctly.

Related

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

·Internal
Under the hood
Useful1 Signal0
Tooling Architecture

propose_skills and DesignSync-style tools refactored to per-call factory pattern#

propose_skills and DesignSync tools refactored internally to a per-call factory pattern

Details 0 0 Feedback
What

The propose_skills tool, along with a nearby DesignSync-related tool, now build their input-validation, permission-check, and call logic inside a create(r) method that returns an object, instead of defining those functions directly on the tool's definition.

Why

This is an internal code restructuring with no described effect on behavior; it changes how the tool's implementation is organized rather than what the tool does.

Related

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

·Internal
Under the hood
Useful1 Signal0
UI Components no docs found

Composer sidebar gains a sidebarFill prop, defaulting to filled (same visual as before)#

The composer's side panel now has a toggle for whether its background fill shows

Details 0 0 Feedback
sidebarFill
What

The layout component behind Claude Code's composer (the box where you type messages) gained a sidebarFill setting for its side panel. By default it behaves exactly as before, keeping the panel's background color filled in. When turned off, the background is left transparent instead.

Why

This is an internal option, not a user-facing setting, and the default keeps today's appearance unchanged. It gives the interface the ability to show the sidebar without a solid background in places that need 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
Useful1 Signal0
Background Agents

Agents list screen instance now reused across re-renders#

The 'claude agents' list screen now reuses its render object instead of recreating it each frame

Details 0 0 Feedback
claude agents
What

The screen shown by the claude agents command now caches and reuses the same underlying screen/render object across re-renders, instead of implicitly building a new one every time the screen redraws.

Why

This is an internal efficiency change to how the agents list screen renders; it doesn't change what the screen shows.

·Internal
Under the hood
Useful1 Signal0
Tooling Architecture

NotebookEdit tool converted to per-call factory pattern, now requires the originating message#

NotebookEdit now requires knowing which message triggered it, matching other tools' internal structure

Details 0 0 Feedback
NotebookEdit
What

The NotebookEdit tool's permission-checking, input-validation, and execution logic have been moved into a per-call factory function, matching the pattern already used by other tools that are scoped to a specific agent or session. As part of this, NotebookEdit's execution step now throws an error if it can't find the message that originally issued the call.

Why

This is an internal restructuring that brings NotebookEdit in line with how other tools are built, and it tightens the tool so it fails loudly if it ever loses track of the message that triggered it, rather than proceeding with missing context.

·Internal
Under the hood
Useful1 Signal0
Hooks

Hook lookup API reworked from Map lookups to accessor methods#

Internal hook lookups switched from raw map access to dedicated accessor methods

Details 0 0 Feedback
What

Internally, code that checks whether a hook applies (for example, hooks that run when a UI component renders) used to look values up directly in maps using .has(...) and .get(...). It now goes through dedicated methods, r.hooks(...) and r.matcherFor(...), instead.

Why

This is an internal code cleanup with no expected effect on how hooks behave; it changes how the lookup is implemented, not what it returns.

·Internal
Under the hood
Useful1 Signal0
Auth

OAuth token refresh lock telemetry reordered / lock helper renamed#

OAuth token refresh lock now reports its "acquired" event later, closer to the actual read check

Details 0 0 Feedback
What

When Claude Code refreshes an OAuth (login) token, it briefly locks a file to coordinate with other processes. The tengu_oauth_token_refresh_lock_acquired telemetry event that marks this used to fire right after the lock file was acquired; it now fires later, immediately before the strict read-check that follows. The internal helper that acquires the lock was also swapped for a different one.

Why

This is an internal reordering of when a telemetry event fires relative to the lock's actual use, which affects how accurately the event reflects the state of the lock at the time it's recorded.

·Internal
You'll notice
Useful1 Signal0
Elsewhere

Embedded release-notes text updated for 2.1.265#

Built-in release notes text updated for this version

Details 0 0 Feedback
/release-notes
What

The changelog text bundled inside Claude Code itself, the text shown by /release-notes or on startup when announcing what's new, has been refreshed for this release.

Why

This keeps the in-app changelog in sync with the current version so /release-notes shows up-to-date information.

Related

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

·Internal
Under the hood
Useful1 Signal0
Artifacts unclear

Artifact tool capability-cache lookup (Io) with no obvious external caller beyond internal artifact plumbing#

Artifacts gain internal caching of server-declared capabilities, tracking whether they're known-empty or unknown

Unclear What user-facing feature or check this capability cache feeds into is not shown by the finding.

Details 0 0 Feedback
What

A new internal function caches an artifact's server-declared capabilities, keyed to the specific tool call that fetched them, and reports whether those capabilities are known to be empty or are still unknown.

Why

This appears to be internal plumbing supporting artifact behavior rather than something a reader interacts with directly; the finding doesn't show what feature it enables.

·Internal
Under the hood
Useful1 Signal0
Tooling Architecture

New create() factory form for the memory-read tool with a signal-only call context#

The memory-read tool's internal setup was rewritten to a newer factory pattern, likely with no visible change

Details 0 0 Feedback
What

The tool that reads memory documents (likely the one behind project_memory_read) was restructured internally: instead of a plain method taking a store, path, and an abort controller, it now uses a create() factory function that returns an object whose call method takes a cancellation signal directly. This matches a newer coding pattern already used by other tools.

Why

This is an internal refactor rather than a behavior change, and it doesn't appear to affect what the tool does when reading memory documents.

Related

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

3 entries

Removedopen

Removed
You'll notice
Useful3 Signal2
Plan Mode no docs found

/plan share (publishing the plan as an artifact) removed from the /plan command#

The /plan share subcommand, which published a plan as a claude.ai artifact, has been removed

Details 0 0 Feedback
/plan share
What

The /plan share subcommand has been removed entirely. It used to publish your current plan as a claude.ai artifact so it could be viewed outside the terminal. Running /plan now only shows [open|<description>] as valid arguments, with no share option.

Along with the subcommand, the related fallback message that told cloud-workspace users "the plan lives in the cloud workspace, so /plan share can't publish it from this machine yet" is also gone, since there is no longer a share path to fall back from.

Why

Anyone who used /plan share to hand off a plan as a shareable artifact will need another way to do so; the feature is no longer available from the /plan command.

Related

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

Removed
You'll notice
Useful2 Signal2
Artifacts no docs found

plan-artifact skill/command appears to have been removed as a standalone user-invocable command#

The plan-artifact command that published a plan as a shareable Artifact appears removed

Details 0 0 Feedback
plan-artifact
What

The function that registered a "plan-artifact" skill — user-invocable, with the menu description "Publish a plan as a shareable Artifact" — has been replaced with a plain helper that only builds prompt text internally. No trace of the "plan-artifact" name or its menu entry remains in the bundle.

Why

This means the standalone plan-artifact command is no longer available to users to invoke directly, following earlier removals of other artifact-related skills like the spreadsheet and presentation deck ones.

Related

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

Removed
You'll notice
Useful2 Signal2
Design Command unclear

Possible removal of the 'design' local command (uncertain, likely diff artifact)#

A code diff hints the 'design' slash command may have been removed, but this is uncertain

Unclear Whether the 'design' command was actually removed, or this is just an incidental code-reorganization artifact, is not established.

Details 0 0 Feedback
/design
What

A piece of code that defined a design slash-command (described as "Grant or revoke Claude agent access to your Design projects") appears to have been replaced by unrelated internal code in the same part of the program. It's not clear whether this means the design command was actually removed, or whether this is just an artifact of how the code was reorganized.

Why

If you used the design command to manage Claude's access to Design projects, it's worth checking whether it still works, since the evidence doesn't confirm one way or the other.

Related

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

Verbatim
Official · Anthropic

Anthropic’s official release notes

Published verbatim by Anthropic for v2.1.265. 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 50 bullets, 12 name something an entry on this page also names, 11 name something no entry here does, and 27 name nothing specific enough to line up either way. The pairings are made on names both sides wrote down, a flag or a setting or a slash command, so read one as probably the same thing rather than as a fact, and read the middle number as candidates rather than as a miss count.

System prompt

1 prompt changed. 1 new prompt appeared. 1 of 28 tool descriptions changed.

Claude Code, interactive mode

Documentation

What the docs did around this release

162 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 143 literal strings found in the bundle, with the number of entries that name each one. Picking one searches for it. A name is here because this build's code mentions it, which is not the same as it working or being finished.

Slash commands

CLI flags

Environment variables

Settings and names in the code