← All changelogs v2.1.223 claude · claude-opus-5 (effort medium)
Claude Code · Source-level changelog

Version 2.1.223

Version 2.1.223 replaces the builtin /review command with /code-review, which now takes a target, accepts /review as an alias, remembers the effort level you last typed, and is hidden from the model by default. Feedback drafts gained substantially more capability: multiline details with a size cap, failure mode and task category fields, richer session context, and the ability to be reviewed and sent through the SDK control protocol. Peer messaging now carries a hop chain and rejects loops and runaway relays through a new abuse guard, with drop notices rate-limited and deduplicated. On the reliability side, the Linux bubblewrap sandbox resolves symlinks and expands deny-only roots, the sandbox fails loudly when /proc/self/exe cannot be opened, credentials are stripped from git remote URLs sent to the bridge, and keybinding-invoked slash commands no longer discard your draft input or pasted images. Auto-compact now enforces an assumed context window for unrecognized models, and a large amount of state, including background jobs, workflows, team config, and user-scope skills, can route through the v5 storage backend.

Official notes ✓ synced Package @anthropic-ai/claude-code Diff v2.1.222 → v2.1.223Provider claudeModel claude-opus-5 (effort medium)
26
Use it now
99
You'll notice
21
Not switched on
40
Env Vars / Flags

Official Changelog

Official · Anthropic
Anthropic’s official release notes
Published verbatim by Anthropic for v2.1.223 — shown here alongside the source-level analysis below. Text is unmodified from the upstream changelog.
View on GitHub ↗
  • Added owner wildcard entries ("owner/*") to the strictKnownMarketplaces and blockedMarketplaces managed settings for allowing or blocking all marketplace repos under a GitHub org
  • Added a warning when workflow agents, forked skills, slash commands, or resumed background agents' requested subagent model is restricted and the parent model runs instead
  • Added a /teleport hint in cloud sessions showing how to continue locally with claude --teleport <session id>
  • Fixed a Bash permission bypass where a crafted command could hide parts of itself from permission checks
  • Fixed permission prompts so commands padded with tabs or invisible Unicode can no longer hide part of the command from the approval dialog
  • Fixed workflow scripts being able to use dynamic import() to run code outside the workflow sandbox
  • Fixed a permission gap where an agent definition's bypassPermissions mode ignored the org bypass-permissions disable policy
  • Fixed resuming a session after a mid-session /cd coming back empty
  • Fixed gateway model discovery hiding Claude models registered under provider-prefixed IDs such as vertex_ai/claude- or bedrock/anthropic.claude-
  • Fixed modelOverrides keys that aren't Anthropic model IDs being treated as the session's canonical model ID; unknown keys are now ignored as documented
  • Fixed managed settings: server-delivered settings no longer disable the env block of a machine-local managed-settings.json or MDM profile; admin env now merges per key
  • Fixed sandboxed commands failing to start on Linux when sandbox.filesystem.denyWrite covers the working directory
  • Fixed forked background agents getting stuck "already resuming" for the rest of the session when rebuilding the fork's parent prompt failed during resume
  • Fixed a resumed session failing every turn, or leaving the interactive app on an unresponsive error screen, when its history held a malformed diagnostics attachment
  • Fixed a rare hang when parsing unusual git push output
  • Changed CLAUDE_CODE_DISABLE_1M_CONTEXT to hold every Claude model with a native 1M window to 200K via auto-compaction, not just a fixed list; a startup warning now appears when auto-compaction isn't holding the session to 200K
  • Changed auto-compact to keep sessions on unrecognized model IDs within the assumed context window instead of letting them grow past it; set CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT=1 to restore the previous behavior
  • Changed /review to be an alias of /code-review, which reviews the current diff or a PR (/code-review <level> <pr#>); use /code-review ultra for a deep cloud review
  • Changed /code-review with no effort level to reuse the level you typed last; type a level like /code-review high to change it
Source: anthropics/claude-code · CHANGELOG.md · 19 entries · synced automatically when Anthropic publishes official notes for a version.
Source-Level Analysis
Reverse-engineered from a diff of the bundled CLI — deeper, structured detail. Unofficial.

Highlights

12 of 201
The rest of the release is below, all 201 findings. Filter it, or open any card for the full detail and source evidence.

Present but switched off

10 of 24
Shipped inside the bundle with its gate off, its guard hardcoded false, or nothing calling it. What the code shows, not a roadmap: no claim about what is released, announced or planned.
Filter

What probably matters to you

48 items

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

Builtin /review command dropped; /code-review takes a target instead #

Juicy

The /review command is gone; /code-review now takes a PR number, branch or path.

/code-review/review/ultrareview
Use it now · Slash Commands

/code-review remembers the effort level you typed, and is hidden from the model by default #

Juicy

/code-review reuses the last effort level you typed, and Claude can no longer run it unprompted.

/code-reviewcodeReviewLastEffort
Use it now · Slash Commands

Admin settings tiers now union their env blocks, with an opt-out #

Juicy

Admin and managed settings now merge their env blocks instead of one replacing the other; you can opt out.

CLAUDE_CODE_DISABLE_ADMIN_ENV_UNIONCLAUDE_CODE_MANAGED_SETTINGS_PATHCLAUDE_BRIDGE_BASE_URLCLAUDE_BRIDGE_OAUTH_TOKENCLAUDE_BRIDGE_SESSION_INGRESS_URL
Use it now · Settings

Ctrl+J inserts a newline in multiline text inputs #

Ctrl+J now adds a line break in any multiline input, not just the chat box.

ctrl+j
Use it now · Terminal UI

New hidden CLI flag --resume-drops-turn #

Juicy

A hidden flag lets you declare which turn a truncating resume is meant to discard.

--resume-drops-turn--resume-session-at--resume-p
Use it now · Sessions

Slash commands unavailable in a cloud session explain how to continue locally #

Commands blocked in cloud sessions now tell you the exact local command to run instead.

/teleport/session/remote-controlclaude --teleport
Use it now · Slash Commands

blockedMarketplaces policy accepts <owner>/* wildcards #

Juicy

You can block every marketplace repo under one owner with a single wildcard entry.

blockedMarketplacesowner/*
Use it now · Permissions

Credentials stripped from the git remote URL sent to the bridge #

Your git remote's embedded username and password are now redacted before being sent anywhere.

You'll notice · Privacy

Read-only org memory tools: memory_list and memory_read #

Juicy

Two read-only tools let Claude browse and read org memory documents, but they stay disabled by default.

memory_listmemory_readCLAUDE_CODE_DISABLE_ORG_MEMORYCLAUDE_MEMORY_STORESorgMemoryRead
Not switched on · Memory

1M-context and compaction checks now go through model capability lookup #

Juicy

Long-context eligibility is now looked up per model, and DISABLE_COMPACT turns off compaction.

DISABLE_COMPACT
Use it now · Compaction

Cloud sessions started with a title rename themselves instead of auto-titling #

Cloud sessions you start with --name keep that name instead of being overwritten by a generated title.

--name
Use it now · Cloud Sessions

Feedback drafts gained failure-mode and task-category fields #

Feedback now lets you tag a failure mode and task category, cycled with the arrow keys.

Use it now · Feedback

Hidden print-mode flag --resume-drops-turn guards truncating resumes #

Juicy

A hidden print-mode flag lets you name the turn a truncating resume should drop, refusing anything unexpected.

--resume-drops-turn--resume-session-at
Use it now · Sessions

Marketplace policy lists accept an owner wildcard #

Juicy

You can block or allow every repo under one owner with a single `owner/*` marketplace entry.

strictKnownMarketplacesblockedMarketplacesextraKnownMarketplaces
Use it now · Marketplaces

Shift+Enter hint extended to editors with the keybinding installed #

Juicy

More terminals and editors now show the shift+enter newline hint if the keybinding is installed.

shiftEnterKeyBindingInstalled
Use it now · Terminal Setup

Dropped peer messages now surface as warnings in the transcript #

Juicy

Dropped messages from peers now show a warning naming the sender and reason instead of disappearing.

tengu_harbor_kite_limits
You'll notice · Peer Messaging

SDK stream emits a permission_denied system message #

Juicy

SDK clients now get an explicit system message when a tool call is denied instead of guessing.

permission_denied
You'll notice · SDK

Destructive-command warning reads the tool input #

Juicy

The destructive-command warning now reads the real command, but it stays off unless the feature flag is on.

tengu_destructive_command_warning
Not switched on · Permissions

--resume-session-at help text clarified to chain entries #

The --resume-session-at help now explains it takes a chain-entry id, not an assistant message id.

--resume-session-at--resume
Use it now · Sessions

Background job state and roster writes can route through the v5 storage backend #

Juicy

Background job files can be stored somewhere other than disk, but nothing switches that on yet.

Not switched on · Background Jobs

Feedback drafts can be reviewed and sent through the SDK control protocol #

Juicy

Saved feedback drafts can be reviewed and sent over the SDK, but the surface is off by default.

submit_feedbackdraft_idattach_transcript
Not switched on · Feedback

Plan mode artifacts-first field is present but inert #

Juicy

Plan mode has an artifacts-first switch wired up, but nothing in this build ever turns it on.

Not switched on · Plan Mode

Remote-control attachments can be inlined as image blocks #

Juicy

Images sent from remote control could be inlined instead of passed as file paths, but that is off.

Not switched on · Remote Control

/code-review gains a /review alias and PR-aware help text #

Juicy

You can type /review instead of /code-review, and pass a PR number as the target.

/review/code-review
Use it now · Slash Commands

/mcp is dispatchable from thin clients #

You can now run /mcp from thin clients where it was previously hidden.

/mcp
Use it now · MCP

Auto-compact enforces an assumed context window for unrecognized models #

Juicy

Unknown model names now get an assumed context budget so auto-compact works instead of stalling.

CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENTmodelOverridesDISABLE_AUTO_COMPACTDISABLE_COMPACT/context
Use it now · Compaction

Model-cycle shortcut opens /model in cloud sessions instead of just nagging #

The model shortcut now actually opens the model picker in cloud sessions instead of just advising you.

/model
Use it now · Models

Session recap and away summary are no longer behind a gate #

Juicy

/recap and the Session recap settings entry now work for everyone without an experiment flag.

/recapCLAUDE_CODE_ENABLE_AWAY_SUMMARYawaySummaryEnabled
Use it now · Slash Commands

Teleport and remote-control commands explain themselves inside cloud sessions #

Juicy

Running teleport inside a cloud session now tells you the exact local command to run instead of just failing.

/teleportclaude --teleportCLAUDE_CODE_REMOTE_SESSION_ID
Use it now · Teleport

Credential read errors are classified by errno #

A temporary failure reading your credentials no longer looks like being logged out.

You'll notice · Auth

Keybinding-invoked slash commands no longer eat your draft input or pasted images #

Slash commands run from a keybinding no longer wipe your typed draft or pasted images.

You'll notice · Slash Commands

Terminal text sanitizer rewritten around grapheme width checks #

Weird characters in output and command previews can no longer break your terminal layout.

You'll notice · Terminal Rendering

/review argument hint lists its target forms #

The /review hint now spells out that you can pass a PR number, branch or path.

/review--fix--comment
Use it now · Code Review

Circuit-breaker permission reasons moved to a registry; isolatePeerMachines is now bypass-immune #

Juicy

Cross-machine file transfer denials can no longer be bypassed once you enable peer isolation.

isolatePeerMachines
Use it now · Permissions

Feedback dialog: new selectable fields and a newline hint #

The feedback form adds failure-mode and task-category rows you cycle with arrow keys, plus a newline hint.

shift+enterctrl+j
Use it now · Feedback

Feedback editor: multiline Details with a size cap, plus Failure mode and Task rows #

The feedback form now has multiline Details plus Failure mode and Task fields you can fill in.

Use it now · Feedback

Marketplace policy entries support owner wildcards and GitHub SSH aliases #

Juicy

Marketplace block and allow lists now match repos written differently, and accept owner-wide wildcards.

blockedMarketplacesstrictKnownMarketplacesfoldGitHubAliases
Use it now · Marketplaces

Org-memory gating consolidated into one predicate #

Juicy

Whether org memory loads is now decided in one place, driven by a kill-switch variable and a setting.

CLAUDE_CODE_DISABLE_ORG_MEMORYorgMemoryRead
Use it now · Memory

Circuit breakers carry declared traits instead of hard-coded name checks #

Juicy

Peer-machine isolation prompts now survive bypass permissions mode and are never auto-approved.

isolatePeerMachinesbypassPermissions
You'll notice · Permissions

Remote-settings env allowlist widened #

Juicy

Remote settings can now supply many more environment variables, including auth tokens and home directory paths.

CLAUDE_CODE_API_BASE_URLCLAUDE_CODE_SESSION_ACCESS_TOKENHOMEXDG_CONFIG_HOME
You'll notice · Settings

Startup warning when CLAUDE_CODE_DISABLE_1M_CONTEXT can't actually be enforced #

Juicy

If your 1M-context disable flag has no effect on your model, startup now tells you and points at the real setting.

CLAUDE_CODE_DISABLE_1M_CONTEXTCLAUDE_CODE_AUTO_COMPACT_WINDOWautoCompactWindow
You'll notice · Context Limits

Thrifty-sonic narrowed to one model; plan artifacts moved to its own gate #

Juicy

Plan artifacts now have their own switch instead of riding along with an unrelated experiment.

CLAUDE_CODE_PLAN_ARTIFACTS
Not switched on · Plan Mode

Artifact comment replies can be applied as find/replace patches #

Replies to artifact comments can be turned into find/replace edits, with one retry if an edit misses.

Not switched on · Artifacts

Daemon lock can now live in the v5 storage backend #

Juicy

The background daemon's lock can live in a storage backend instead of a file on disk.

Not switched on · Daemon

New prompt-variant experiment for two tools #

Juicy

An alternate prompt wording for two tools exists but stays off unless you set an environment variable.

CLAUDE_CODE_PARCHMENT_FERN
Not switched on · Agents

Plugin and skill search requests a new user:plugins OAuth scope #

Juicy

Signing in can request an extra permission for plugin search, though search itself remains policy-gated.

allow_plugin_skill_search
Not switched on · Plugins

User-scope skills and dynamic workflows can be read and written through the storageV5 backend #

Juicy

Your skills and saved workflows can be read and written through a pluggable storage backend instead of local files.

Not switched on · Skills
Everything else · 153
Smaller changes and internals, grouped as the pipeline found them. Nothing is dropped, it is only further down.

New Features

18 items

Telemetry for transient background-job state read failures #

Background job state read failures now report themselves once per job instead of silently falling back to a cache.

Under the hood · Background Jobs

Feedback drafts capture more session context and emit a stream event #

Queuing feedback now shows a confirmation message with a preview instead of happening silently.

You'll notice · Feedback

Remote notifications from the session stream are routed into the local notification queue #

Notifications sent from a remote session now actually reach you instead of being silently discarded.

You'll notice · Terminal UI

Peer drop notices are rate-limited and deduplicated #

Repeated peer message drop notices are now collapsed into one with a count instead of spamming you.

You'll notice · Peer Messaging

Artifact comment auto-reply can patch instead of rewriting the page #

Artifact auto-replies now make targeted find-and-replace edits instead of regenerating the whole page.

You'll notice · Artifacts

Slash commands can announce a default effort level via a notice #

Slash commands can tell you which effort level they defaulted to when you didn't specify one.

You'll notice · Slash Commands

Remote Control registration sends a stable machine_id #

Your machine now gets a stored id so remote sessions recognise the same workstation each time.

remoteControlMachineId
Under the hood · Remote Control

@claude artifact edits get explicit no-change replies #

Artifact edits that change nothing now say so plainly instead of giving a vague reply.

You'll notice · Artifacts

Remote-stream notifications are namespaced, sanitized and capped #

Notifications sent from remote peers are now trimmed, capped and prefixed so they can't flood your queue.

You'll notice · Remote Control

Roster orphan adoption reports itself #

Recovering a stray background agent entry now records that it happened, so gaps are traceable.

Under the hood · Background Jobs

Peer messages carry a hop chain, with loop and runaway-relay rejection #

Messages passed between agents now track their relay path and get refused if they loop or bounce too far.

maxChainLengthmaxSelfHops
You'll notice · Peer Messaging

Peer messages are admitted through a new loop and abuse guard #

Incoming peer messages now pass rate, duplicate and loop checks before queuing, with drops shown to you.

tengu_harbor_kite_limits
You'll notice · Peer Messaging

permission_denied events fire even without a permission prompt #

Headless and SDK runs now report permission denials even when no prompt was ever shown.

-pcanUseTool
You'll notice · Permissions

Notice when a subagent's model is restricted #

You now get a warning when a subagent's requested model gets swapped for a different one.

You'll notice · Subagents

File-upload gate for bridge attachments #

Attachment uploads are now refused with a clear reason when policy or privacy settings forbid them.

You'll notice · Remote Control

New "unclassified" message sender kind, marked as non-user input #

Messages with unknown provenance are now labelled as non-user input so they aren't mistaken for you.

Under the hood · Elsewhere

New "unclassified" message-origin kind for injected turns #

Injected turns with no traceable source are now explicitly tagged and framed as non-user content.

Under the hood · Elsewhere

Feedback form gets a real multi-line details editor and a size limit message #

The feedback form keeps your typed details after submit or Ctrl-C and warns before you exceed the size cap.

/bug
You'll notice · Feedback Form

Improvements

56 items

OAuth token refresh: shared save path, dead-token handling and strict credential reads #

Login token refresh retries saving and stops cleanly on dead tokens instead of failing quietly.

You'll notice · Auth

Undelivered attachments are reported as a tool error #

Attachments that fail to send are now named as errors instead of falsely reported as delivered.

You'll notice · Teammate Messaging

Broader ]] quote-desync detection in bash command analysis #

Shell command parsing catches more cases of mismatched quotes around bracket tests.

You'll notice · Bash Tool

Remote sessions stop shelling out for local git state #

Remote sessions skip local git and gh lookups, so startup is faster there.

You'll notice · Sessions

IDE diagnostics attachments are validated before replay #

Editor diagnostics restored from saved sessions are checked for junk before being shown, so bad data can't garble your screen.

You'll notice · Elsewhere

Broader invisible-character detection in text sanitisation #

More kinds of hidden and invisible characters are now stripped out of text you paste or read.

You'll notice · Text Sanitization

PR-review artifact skill: method-routed GitHub tools accepted #

PR review now works with GitHub connectors that bundle everything into one tool with a method argument.

You'll notice · Skills

Whiteboard skill now embeds the vendored CDS token sheet #

Whiteboard artifacts now follow the viewer's real theme tokens instead of hardcoded colors.

You'll notice · Artifacts

Workshop skill: draft should shrink as decisions settle #

Workshop drafts now get trimmed each round instead of endlessly growing longer.

You'll notice · Skills

Feedback report body must now be labeled bullets #

Bug reports you file now follow a fixed bullet template instead of free-form prose.

Under the hood · Feedback

SDK result docs for modelUsage and totalCostUsd #

SDK results now document exactly what token usage and dollar cost figures include, and that /clear resets them.

totalCostUsdmodelUsage/clear
Under the hood · SDK

Feedback dialog notes that remote workspaces collect no git metadata #

In remote workspaces, the feedback dialog now tells you no git metadata from your machine is sent.

You'll notice · Feedback

Feedback form input gets newline normalization and a backslash-continuation opt-out #

Pasting multi-line text into feedback fields no longer leaves stray line breaks.

You'll notice · Feedback

SDK result schema documents what usage, total_cost_usd and modelUsage actually cover #

SDK result fields now explain that usage covers only the main loop and costs are estimates.

total_cost_usdmodelUsage/clear
Under the hood · SDK

Oversized memory files are now surfaced instead of silently skipped #

You now get told when a memory file is too big to sync to shared memory.

You'll notice · Memory

MCP control tool gives a session-specific message when controls are unavailable #

The MCP tool now says controls are unavailable in this session rather than blaming startup.

You'll notice · MCP

Connector live-binding validators reject method keys holding non-method values #

Malformed connector binding configs now get clearer, more specific error messages.

Under the hood · Elsewhere

Ajv is loaded lazily for JSON-schema validation #

Startup is slightly faster because the schema validation library loads only when first used.

You'll notice · Elsewhere

/mcp summary drops the "use the terminal" hint in remote workspaces #

The /mcp status line stops telling you to use a terminal you don't have in remote workspaces.

/mcpCLAUDE_CODE_REMOTE
You'll notice · MCP

api.anthropic.com and api-staging.anthropic.com are accepted as trusted OAuth origins #

Login now trusts a fixed set of Anthropic API origins unless you point it at a custom OAuth URL.

CLAUDE_CODE_CUSTOM_OAUTH_URL
You'll notice · Auth

Workflow scripts reject dynamic import() #

Workflow scripts using dynamic import() now fail immediately with a clear syntax error instead of mid-run.

You'll notice · Elsewhere

Only four hook types produce non-user content #

Only Stop, TeammateIdle, TaskCreated and TaskCompleted hooks are treated as internal; other hook feedback reads as your text.

StopTeammateIdleTaskCreatedTaskCompleted
You'll notice · Hooks

Gateway model discovery matches claude/anthropic anywhere in the id #

Gateway models with vendor prefixes like anthropic. mid-name now show up as selectable options.

/v1/models
You'll notice · Models

PR review bottom line capped at 600 characters #

PR review summaries now cap their bottom line at 600 characters instead of 900.

You'll notice · Code Review

Permission circuit breakers now have a capability table #

Peer-machine isolation prompts now still appear even when you're running in bypass-permissions mode.

bypassPermissions
You'll notice · Permissions

Command-display sanitizer rewritten to handle bidi controls and lone surrogates #

Commands shown in approval prompts are cleaned harder, so text can't be visually spoofed into looking harmless.

You'll notice · Permissions

Memory tools are now off-limits inside subagents #

Subagents can no longer list or read memory files; those tools are stripped from their toolset.

memory_listmemory_read
You'll notice · Subagents

Citation survey no longer has a force override #

The memory citation survey now only appears at random; nothing can force it to show.

You'll notice · Memory

Projects scope expansion explains custom OAuth clients and save failures #

Expanding Projects permissions now tells you up front when it cannot proceed or could not save credentials.

You'll notice · Auth

Bridge attachments can come back as inline image blocks #

Images sent through bridge messages now arrive inline instead of just as a file path.

You'll notice · Attachments

Stats dialog gets a Suspense fallback, a taller frame and a colour fix #

The usage stats dialog is taller, loads more smoothly, and its model chart colours no longer skip.

/usage
You'll notice · Usage & Limits

Remote agent and MCP task metadata files are schema-validated #

Malformed remote agent and MCP task metadata files are now skipped rather than trusted.

Under the hood · MCP

Policy-settings environment stripping is case-insensitive #

Environment variables your org policy blocks can no longer sneak through by changing their capitalization.

ANTHROPIC_UNIX_SOCKETNO_COLORFORCE_COLOR
You'll notice · Permissions

Clearer wording when Claude is not activated on a comment thread #

When a comment reply can't post, you get a clearer explanation instead of a misleading one about thread state.

You'll notice · Artifacts

PR-review skill rewritten around a three-tier page and tighter prose limits #

PR reviews now come as a layered page with strict length limits, and chat only shows a short summary.

You'll notice · Skills

Prototype skill: explicit build-now vs ask-first intake #

Prototype requests now either get built straight away or get a few pointed questions first.

You'll notice · Skills

Feedback reports carry more session context #

Bug reports now include effort, thinking budget, message and subagent counts so they stand alone.

You'll notice · Feedback

Clearer failures when claude.ai project scopes can't be obtained #

When project permissions fail, you now get a specific reason and advice instead of a vague error.

/loginCLAUDE_CODE_OAUTH_TOKEN
You'll notice · Auth

PR-approval stamp validation covers the create method word #

A loophole in pull-request approval stamp checking is closed, so malformed stamps get rejected.

Under the hood · Permissions

MCP status reply trims terminal-only advice in non-interactive and remote sessions #

The /mcp status reply stops telling you to type commands you cannot type in that session.

/mcp/mcp reconnect allCLAUDE_CODE_REMOTE
You'll notice · MCP

Artifact and frame URLs accept a prefixed slug #

Artifact and frame links that include a readable slug before the id now work instead of being rejected.

You'll notice · Artifacts

Bug reports from cloud workspaces are scoped to the session #

Bug reports filed from a cloud workspace always attach that session's details.

/bug
You'll notice · Feedback

Spinner tips are hidden when the slash command they advertise is unavailable #

Spinner and startup tips stop suggesting slash commands that don't exist in your cloud session.

You'll notice · Elsewhere

Cloud review failure message points at plain /code-review #

A failed cloud review now points you at /code-review instead of a wrong command name.

/code-review
You'll notice · Code Review

Connector list tools honour cancellation #

Cancelling a turn now actually stops the connector listing request instead of letting it finish.

You'll notice · Connectors

Feedback is disabled for SDK entrypoints #

Feedback and bug-report commands are hidden when Claude Code runs through the SDK.

DISABLE_FEEDBACK_COMMANDDISABLE_BUG_COMMANDCLAUDE_CODE_ENTRYPOINT
You'll notice · Feedback

Settings-supplied API and credential env vars are stripped when ANTHROPIC_UNIX_SOCKET is set #

When you connect through a unix socket, settings files can no longer override your API keys or endpoint.

ANTHROPIC_UNIX_SOCKETANTHROPIC_BASE_URLANTHROPIC_API_KEYANTHROPIC_AUTH_TOKENCLAUDE_CODE_OAUTH_TOKEN
You'll notice · Auth

Marketplace host policy folds ssh.github.com to github.com #

Org marketplace rules naming github.com now also match plugins cloned over GitHub's SSH alias host.

strictKnownMarketplaceshostPattern
You'll notice · Plugins

File upload is blocked under ZDR as well as HIPAA #

Under zero data retention, the file-send tool no longer appears at all.

You'll notice · Elsewhere

Model switches invalidate the cached prewarm entry #

Switching models now throws away prewarm work done for the old model instead of finishing it stale.

You'll notice · Models

Attachment upload failures reported back to the model per file #

Attachments that fail to upload are now reported per file instead of silently vanishing.

You'll notice · Attachments

Cloud/teleport session creation accepts an explicit title #

Teleporting a session can carry a title through, skipping auto-generated branch names when reusing a branch.

reuseOutcomeBranch
You'll notice · Cloud Sessions

Bash command classification list extended with Apple, Swift, Bazel and Nix tooling #

Xcode, Swift, Bazel and Nix commands are now named properly in usage telemetry instead of lumped as other.

Under the hood · Bash Tool

LSP diagnostics accept string severities #

IDE diagnostics that label severity with a word instead of a number now show up instead of vanishing.

You'll notice · IDE Integration

Plugin search waits for scope readiness before firing #

Org plugin search now waits until your permissions are fully loaded before searching, avoiding patchy results.

Under the hood · Plugins

Stricter owner/repo validation for gh commands #

Malformed or sneaky owner/repo names are rejected before any gh command is built.

You'll notice · Bash Tool

Bug Fixes

25 items

Sandbox now fails loudly when /proc/self/exe cannot be opened #

On Linux, if the sandbox can't set itself up it now stops instead of silently running half-protected.

You'll notice · Sandbox

Remote mode no longer advertises commands it cannot run #

In remote mode you no longer get suggested slash commands that wouldn't actually run there.

You'll notice · Slash Commands

Session resume falls back to scanning transcripts by id #

Resuming a session by its id now works even when the usual lookup misses it.

You'll notice · Sessions

Bash [[ ]] conditionals: two new bail-outs for shell-lexer divergence #

Tricky bash double-bracket conditions are now treated as too complex instead of being misread.

You'll notice · Bash Permissions

Linux sandbox skips redundant blocking mounts inside read-only denied directories #

The Linux sandbox skips pointless blocking mounts, so sandboxed runs start with less overhead.

You'll notice · Sandbox

Model alias reverse-lookup only applies to recognized models #

Model name overrides no longer swap in an alias pointing at a model the client doesn't know.

modelOverrides
You'll notice · Models

Projects auth errors: two more reasons no longer suggest logging in #

Projects credential errors that logging in can't fix stop telling you to log in.

You'll notice · Auth

Git remote URL parsing normalizes leading slashes and percent-encoding #

Git remote URLs differing only by a slash or escaping now resolve to the same repository.

You'll notice · Git Integration

Invalid config dialog is now awaited before returning #

A broken config file now holds the startup dialog until you dismiss it instead of racing past.

You'll notice · Configuration

Hook-feedback meta messages identified by hook name instead of a line suffix #

Your own messages won't be mistaken for hook feedback just because they end with a marker.

Under the hood · Elsewhere

Resurrected messages bypass hop-chain admission #

Messages restored when a session comes back are no longer dropped by queue checks.

You'll notice · Session Recovery

Config save survives a failing stale-write stat #

An unreadable config file no longer aborts saving your settings.

You'll notice · Internals

Model entitlement check now resolves through model overrides #

Model aliases pointing at models you lack access to are now correctly rejected.

You'll notice · Models

Stats cache is sanitised before it is trusted #

Corrupt usage-stats cache is repaired or rebuilt instead of showing you garbage numbers.

You'll notice · Usage & Limits

Subagent resume and fork prompt reconstruction failures are caught #

Resuming or forking a subagent that fails now gives a clear tool error instead of a raw crash.

You'll notice · Subagents

Stats cache: watermark ahead of today no longer triggers a rebuild #

A clock skewed ahead no longer forces your token stats to rebuild on every run.

You'll notice · Usage & Limits

Atomic file writes no longer copy through the temp file on the fallback path #

File writes are safer on the fallback path and refuse to follow a symlink at the destination.

You'll notice · File Writes

Managed-settings tier merge no longer falls through for two keys #

Two admin-managed settings now come only from the top policy tier, so lower tiers can't sneak values in.

forceLoginOrgUUIDallowedMcpServers
You'll notice · Managed Settings

API error metadata is recovered from wrapped errors #

Error reports now keep the status code and request id even when the error was wrapped.

You'll notice · Error Reporting

Interrupting a remote turn no longer fires the turn-complete callback #

Interrupting a remote turn no longer triggers a completion bell or notification.

You'll notice · Sessions

Command aliases now count when detecting name collisions #

Your custom command is now flagged when its name clashes with a builtin command's alias.

You'll notice · Slash Commands

Gateway model discovery accepts model ids that merely contain claude or anthropic #

Gateways whose model ids carry a vendor prefix now show up instead of an empty model list.

ANTHROPIC_BASE_URL
You'll notice · Model Discovery

Host-orchestrated env var protection is case-insensitive #

On Windows, differently-cased environment variable names can no longer override ones the host has claimed.

You'll notice · Windows

Usage-stats cache is sanitised on load #

A corrupted stats file no longer shows NaN in your usage and cost display.

You'll notice · Usage & Limits

Fetch-output branch parsing requires hex ranges #

Git fetch output is parsed more strictly, so unrelated lines aren't mistaken for updated branches.

Under the hood · Git Integration

In Development

18 items

Compare-and-swap retry helper for versioned storage keys #

Internal plumbing lets concurrent writers update shared state without clobbering each other.

Under the hood · Storage Backend

PR status cache can be persisted through the storage backend #

Your cached pull request statuses could be stored outside a local file, but currently aren't.

Not switched on · Git Integration

Workflow save and discovery can run through the storage backend #

Your saved workflows can be listed and stored through a storage backend rather than plain files.

Under the hood · Elsewhere

Skills discovery skips disabled plugins #

Skills belonging to plugins you disabled no longer show up in skill discovery.

enabledPlugins
You'll notice · Skills

Edit and Write tool descriptions vary by model #

Edit and Write tool instructions can be shortened for certain models, dropping the read-first clause.

Under the hood · Elsewhere

Parked AskUserQuestion can abort the turn when the control stream closes #

Closing the control stream while a question waits can now cancel the turn, but that path stays off.

Not switched on · SDK Control

PR approve stamp validator gained method-key rules #

A PR approval checker got stricter about which words may appear under method keys.

Under the hood · Code Review

/desktop handoff gains a remote-session guard #

Handing your session off to the desktop app now also refuses remote sessions, but the command is inert anyway.

/desktop
Not switched on · Slash Commands

Team config files can be read and written through versioned storage with CAS retries #

Team config files gained an alternate storage path with retry logic that isn't active by default.

Not switched on · Elsewhere

Daemon lock and auto-update lock gained storage-backend implementations #

Lock files that stop two sessions clashing can now live in a storage backend instead of on disk.

Under the hood · Storage Backend

Transcript existence checks and project-directory discovery can use record streams #

Checking whether a past transcript has content can now run over streamed records instead of files.

Under the hood · Sessions

Notice when a memory file is too large to sync #

You get told once when a memory file is too big to sync and may be lost.

You'll notice · Memory

GrowthBook auth header resolution is now async and gated #

Feature-flag requests can now attach auth asynchronously, but that path stays off in this build.

Under the hood · Internals

Programmatic submission of a queued feedback draft #

Scripts can now submit a queued feedback draft by id without opening the review dialog.

Under the hood · Feedback

Artifact explainer must justify having no visual #

Artifact explainers must now name a diagram type or spell out why there is no visual.

Not switched on · Artifacts

Stream close with a parked question can now abort the in-flight query #

Closing input while a question is pending can cancel the running query, once a remote setting says so.

Not switched on · SDK Control

Skill health values are validated against a fixed set #

The skills dashboard drops entries with unrecognised health values, but the dashboard itself stays off.

Not switched on · Skills

Internal Changes

35 items

CCR stream-event flush interval is validated and clamped #

A remotely tuned batching interval is now range-checked so a bad value cannot break event flushing.

Under the hood · Cloud Sessions

Code-review and /simplify prompt modules restructured #

The code-review and /simplify prompts moved into new modules with no change to their wording.

/simplify
Under the hood · Code Review

Remote-control bridge registers a persistent machine id #

Your install now gets a stable machine ID that identifies it when connecting through the remote-control bridge.

Under the hood · Remote Control

Skills and jobs load through the storage sidecar #

Skill listing and job tracking now go through the storage layer instead of touching files directly.

Under the hood · Skills

Skill-invoke telemetry identifies the blocked skill #

When a skill invocation is refused, the log now records which skill it was, hashed rather than named.

Under the hood · Skills

Config saving reports success and detects compromised state #

Config writes now report whether they actually succeeded, so a failed or compromised save isn't treated as done.

Under the hood · Internals

First-party event logging is initialized with startup state #

Telemetry setup now receives startup context instead of being initialized with nothing.

Under the hood · Telemetry

Managed-settings telemetry reports env-union state and tier presence #

Managed settings logging now records which admin config tiers applied and whether env union was opted out.

CLAUDE_CODE_DISABLE_ADMIN_ENV_UNION
Under the hood · Elsewhere

Org memory backend lookups accept an abort signal #

Org memory fetches can now be cancelled mid-flight instead of running to completion.

Under the hood · Memory

Peer message envelopes can carry a hop-chain attribute #

Messages passed between peer sessions now record the path they took to get to you.

Under the hood · Peer Messaging

OAuth refresh telemetry gained a context tag #

Login token refresh failures are now labelled with the action that triggered them.

Under the hood · Auth

Telemetry run files are filtered by extension during collection #

Telemetry collection skips non-JSON files instead of trying to parse them.

Under the hood · Telemetry

Bug-report telemetry records whether the report came from a remote workspace #

Bug reports now note whether you filed them from a remote workspace.

Under the hood · Elsewhere

Memory-store 404s distinguish "store not provisioned" from a missing document #

Memory errors now tell you whether the whole store is missing or just a document.

Under the hood · Memory

Queued peer-message count accessor exported #

A counter for queued peer messages exists but nothing reads it yet.

Not switched on · Peer Messaging

First-party event logging exporter takes a storage backend #

Event logging now routes through a cached storage backend.

Under the hood · Telemetry

More on-disk state moved behind the abstract state store #

Some local lock and cache files can now live in a shared state store instead of loose files.

Under the hood · Elsewhere

Session-file message cache consolidated #

Session message loading now uses one cache instead of three, with no change you'll see.

Under the hood · Elsewhere

Per-request baseUrl override, used for filestore transfers #

File downloads can now come from a server-supplied host, but only for unauthenticated requests.

Under the hood · Elsewhere

Cloud stream-event flush interval is now remote-configurable #

How often cloud session events are batched can now be tuned remotely instead of being fixed.

Under the hood · Cloud Sessions

tengu_init now reports repository and toolchain shape #

Startup telemetry now notes whether your project uses git, Docker, Nix, Bazel, CI configs and similar.

Under the hood · Telemetry

Telemetry run files get their own cleanup pass #

Leftover telemetry run files are cleaned up properly, and cleanup no longer probes folders that don't exist.

You'll notice · Telemetry

Version bump to 2.1.223 #

You're on build 2.1.223, with mostly cosmetic internal tidying alongside it.

/whiteboard/prototype
You'll notice · Internals

Code-review telemetry records where the effort level came from #

Code review logging now records why a given effort level was picked for your run.

Under the hood · Code Review

Cross-worktree session lookup extracted #

The code that finds a session across worktrees moved into a helper with no change you'd notice.

Under the hood · Sessions

REPL registers its own bridge address for loop detection #

Your session now advertises its own address so messages looping back to it get dropped instead of echoing.

Under the hood · Remote Control

Generated review HTML tags its first section #

The generated review report's opening section now carries a class name so styling can target it.

Under the hood · Code Review

Memory-API entry schema accepts size_bytes and updated_at #

Memory entries with size and update-time fields from newer servers no longer break parsing.

Under the hood · Memory

Plugin telemetry records the git remote URL #

Plugin usage reporting now includes the marketplace repository's remote URL.

Under the hood · Plugins

Keybinding config load errors use a shared error formatter #

Keybinding load errors are formatted by a shared helper; the message you see is unchanged.

Under the hood · Terminal UI

git_remote_url added to the internal telemetry event schema #

A git remote URL field is wired through internal analytics but nothing fills it in yet.

Not switched on · Telemetry

Telemetry event for org-memory connected mode #

Claude records whether connected org memory is in use when you haven't listed stores yourself.

CLAUDE_MEMORY_STORES
Under the hood · Memory

NotFoundError carries a kind #

Not-found errors internally track what kind of thing was missing.

Under the hood · Memory

PR-review binding validation treats a method input key specially #

PR-review markers now validate a method field, allowing only read actions live and create actions in stamps.

Under the hood · Code Review

Session-scoped globals refactored into a resettable cell registry #

Session state is now reset through a central registry, so switching sessions clears things more reliably.

Under the hood · Elsewhere

Removed

1 item

"Investigate first" system prompt experiment removed #

Claude no longer spends up to a minute investigating before asking you a clarifying question.

CLAUDE_CODE_INVESTIGATE_FIRST
You'll notice · System Prompt