Dispatches

From the toolroom

Short automated notes on what changed in the tools we build with. Filed daily; read in a minute.

Claude Code v2.1.220 July 30, 2026 source

Desktop learns to talk between sessions

  • A whole new Desktop capability shipped doc-only, with no changelog entry: Claude can now list, read, rename, message, and archive your other Code tab sessions in plain language.
  • Cross-session messaging is fenced by three new safety behaviors — archiving always prompts (even in Auto and Bypass modes), and a session nobody is watching can neither send nor receive messages.
  • Scheduled desktop tasks quietly gained a limitation: a scheduled run can't send or receive cross-session messages, since no one is watching it.
  • Bypass permissions picked up a new always-ask exception for 'desktop actions where Claude always asks first, such as archiving a session.'
  • The Agent SDK todo lifecycle's 'Removed' step was redefined — a todo is now deleted explicitly via `status: "deleted"` in a `TaskUpdate` call, rather than auto-removed when a task group finishes.

What the release notes didn’t say

Today’s docs are almost entirely a voice-and-tone rewrite (passive → active) with no changelog behind them, but a genuinely new Desktop feature slipped in under that cover. A new ‘Work across sessions’ section documents Claude listing, reading, renaming, messaging, and archiving your other Code tab sessions from plain-language requests like ‘what did the API session conclude?’ or ‘tell the payments session the schema changed.’ It only sees sessions the desktop app runs itself — local, SSH, and WSL — never cloud, CLI, or VS Code sessions, and skips archived ones and the session you’re asking from. Three safety rails ship with it: archiving always shows an approval card in every permission mode (Bypass permissions now lists this as an explicit exception), and an unwatched session such as a scheduled-task run can neither send nor receive messages (a limitation now spelled out on the scheduled-tasks page too). Separately, the Agent SDK’s todo-tracking doc quietly redefined its ‘Removed’ lifecycle step: a todo is now deleted explicitly with status: "deleted" in a TaskUpdate call, not auto-purged when its group completes.

Claude Code v2.1.220 July 29, 2026 source

Claude Code aliases quietly stop meaning "latest"

  • The advisor's model aliases (`opus`, `sonnet`, `fable`) no longer resolve to the latest version of each family — the docs now say they pin to Claude Code's built-in default, which only advances when you update Claude Code, so a stale install silently pins a stale model.
  • Admin docs relocated org-shared cloud environments off the `claude-code-on-the-web` page onto a new `cloud-environments` page, and split the default-environment picker out to a separate URL (`claude.ai/admin-settings/claude-code`).
  • A new `DirectoryAdded` hook fires when a working directory is added mid-session — handy for installing dependencies when a repo is attached after startup.
  • Checkpoint rewind now refuses to write or delete through symlinks, hard links, and relocated paths (counted in a new `skippedLinks` field on `RewindFilesResult`), and the docs newly spell out that subagent edits aren't tracked at all.
  • The hooks reference rewrote timeout behavior per-event: a `PreToolUse` timeout (v2.1.210+) now returns a tool error and continues instead of stalling unattended sessions, and a new `CLAUDE_AX_STARTUP_QUIET_MS` env var controls an accessibility startup hold.

What the release notes didn’t say

There is no changelog today, so every one of these is a doc-only change that shipped without an announcement. The quietest and most consequential: the advisor page walked back its promise that model aliases resolve to “the latest version of each model.” They now resolve to “Claude Code’s built-in default version for each model family, which advances with new Claude Code releases” — meaning an un-updated Claude Code will keep handing you an older model behind opus/sonnet/fable even after a newer one ships. The admin-setup page also removed the inline org-shared-environments guidance, pointing instead at a new cloud-environments page and moving the default-environment choice to its own admin URL. On the SDK side, the checkpointing docs newly admit two things that were previously unstated: subagent edits are never tracked or restored, and rewind now skips non-regular files rather than clobbering through links — a safety fix (v2.1.216+) surfaced only in prose. The hooks reference gained a DirectoryAdded event and a full rewrite of timeout semantics clarifying that older versions (pre-2.1.208/2.1.210) would stall unattended sessions on a PreToolUse or UserPromptSubmit hook timeout.

Claude Code v2.1.220 July 28, 2026 source

Claude Desktop joins the enterprise gateway, quietly

  • No changelog shipped today — every change here landed as documentation-only, so none of it appears in the release notes.
  • The Cloud gateway now serves Claude Desktop alongside the CLI via a new `/user/bootstrap` endpoint and a per-policy `desktop` opt-in block, gated behind gateway server v2.1.203+.
  • The gateway rewrote its docs to surface min-version fences (auto mode without an env var since v2.1.207, public-endpoint login since v2.1.206) that were live in the binary but only now documented.
  • The Agent SDK's Python `ResultMessage` gained a `terminal_reason` field that distinguishes `completed`/`max_turns` from interrupt-driven `aborted_streaming`/`aborted_tools` cancellations.
  • Per-model usage now reports `provider` (firstParty, bedrock, vertex, foundry, gateway, and more) and `canonicalModel`, exposing which upstream actually served each request.

What the release notes didn’t say

There is no changelog entry today — everything below is the docs catching up with behavior that already shipped. The headline is that Claude Desktop can now authenticate against the same self-hosted Cloud gateway as the CLI: point Desktop’s bootstrapUrl at <listen.public_url>/user/bootstrap, and the gateway derives its model list, disabled tools, egress allowlist, and OTLP endpoint from the matched policy’s cli block. It is opt-in and fails closed — /user/bootstrap returns 404 unless a policy carries a desktop key, with rejections logged as desktop_bootstrap.denied. A new desktop policy block also gates Desktop-only features (tab visibility, local MCP, auto-updates, a persistent banner) with no CLI equivalent. The scattered min-version fences newly written into the gateway tables (v2.1.203 for Desktop, v2.1.207 for env-free auto mode, v2.1.206 for public-endpoint login) reveal these were binary features documented after the fact.

For SDK users, the Python ResultMessage now surfaces terminal_reason to tell a clean completion from an interrupt, and model_usage is properly typed as ModelUsage with two new keys — provider and canonicalModel — that let you see which upstream and pricing identity served each model. No pages, flags, or settings were removed.

Claude Code v2.1.220 July 27, 2026 source

Refusal messages get reworded and subagent nesting flips back on

  • The usage-policy refusal string `Claude Code is unable to respond to this request, which appears to violate our Usage Policy` is now capped at v2.1.218 and replaced by a terser `<model> can't help with this. Start a new session to continue`.
  • The cybersecurity-flag message `<model> has safety measures that flagged this message for a cybersecurity topic` is likewise retired at v2.1.218 in favor of `<model>'s safeguards flagged this message`.
  • Subagent nesting is on by default again: v2.1.219 raised the default spawn depth back to 3 after v2.1.217–218 had defaulted it to 1 (nesting off).
  • The `CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH` semantics inverted — you now set `1` to turn nesting off, whereas two versions ago you set `2` or higher to turn it on.
  • None of this appears in a changelog entry today; it all landed as quiet documentation edits.

What the release notes didn’t say

Today is a doc-only day with no changelog delta, but the error and env-var pages moved. Two refusal messages were retired: the wordy usage-policy refusal and the cybersecurity-topic warning are both now version-capped at v2.1.218, replaced by shorter strings (<model> can't help with this. Start a new session to continue and <model>'s safeguards flagged this message). If you match on refusal text in scripts or wrappers, update your patterns. Separately, the subagent nesting default finished a round trip: 5 layers (v2.1.172–216, unchangeable) → 1 (v2.1.217–218, off by default) → 3 (v2.1.219). The CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH knob flipped meaning with it — 1 now disables nesting rather than being the locked-off default, so anyone who set the flag during the brief opt-in window should recheck it.

Claude Code v2.1.220 July 26, 2026 source

Claude Code docs quietly narrow a flag claim and add a fullscreen Ctrl+L shortcut

  • The agent-view docs walked back an over-broad claim: only --settings and --plugin-dir are applied to agent view itself, not "each" configuration flag as previously stated.
  • Fullscreen rendering gained an undocumented Ctrl+L behavior — press once to redraw plus a hint, press twice within two seconds to run /clear and start a new conversation.
  • Plugin manifests silently gained an optional url field for owner/author blocks (website, GitHub, or org URL).
  • CLAUDE_CODE_GIT_BASH_PATH now fails soft as of v2.1.219: a bad or wrongly-named path is ignored with a warning and auto-detection kicks in, instead of the old hard startup exit.
  • The path is now validated by name — only bash.exe, sh.exe, bash, or sh are accepted; Git for Windows' git-bash.exe launcher is rejected.

What the release notes didn’t say

With no changelog today, every change here shipped silently in the docs. The headline is a quiet correction: agent view previously claimed to apply “each” configuration flag to itself, but the docs now scope that to just --settings and --plugin-dir — everything else is only passed through to dispatched sessions. The v2.1.200 history entry got the same treatment, narrowing “configuration flags placed after agents, such as --plugin-dir” down to a single --plugin-dir flag. If you relied on other flags self-applying to agent view, that was never really the behavior.

Two other undocumented additions: fullscreen rendering now maps a double-press of Ctrl+L (within two seconds) to /clear, with a hint on the first press — worth knowing before you accidentally wipe a conversation. And plugin marketplace manifests gained an optional url field on owner and author objects.

Finally, CLAUDE_CODE_GIT_BASH_PATH behavior changed in v2.1.219: a nonexistent or wrongly-named path (anything but bash.exe/sh.exe/bash/sh) is now ignored with a --debug warning and normal auto-detection, rather than the previous hard exit at startup. This closes a Windows footgun where Git for Windows’ git-bash.exe launcher was accepted uncritically as the shell.

Claude Code v2.1.220 July 25, 2026 source

The self-hosted runner docs quietly disappear as Opus 5 lands

  • Docs quietly scrubbed the self-hosted runners program: the Cloud environments page dropped its line about managing runner pools, and a historical changelog entry (v2.1.169) had its `post-session` runner-hook bullet deleted outright.
  • Undocumented walk-back: auto mode's denial reason is now the fixed string `Blocked by classifier` in most sessions (v2.1.208+) — the classifier scores on an internal severity scale instead of writing the per-denial explanations shipped in v2.1.193.
  • Not in the changelog: the Agent SDK budget cap now counts subagent spend, and once the cap is hit, spawning a subagent fails with `Budget limit reached` while running background subagents are stopped (v2.1.217+).
  • New agent-view guidance that never hit the changelog: keep `--add-dir` and `--mcp-config` after `agents` or `claude agents --json` fails with an `unknown option` error.
  • The changelog headline: Opus 5 (`claude-opus-5`) becomes the default Opus model with 1M context and $10/$50 fast mode, while Opus 4.7 was removed from fast mode and subagents can now nest to depth 3.

What the release notes didn’t say

The day’s most interesting moves aren’t in the changelog. The self-hosted runners program is being quietly walked back in the docs: the Cloud-on-the-web page removed the sentence pointing orgs to manage runner pools from the Cloud environments page, and — more tellingly — a bullet about the runner post-session lifecycle hook was deleted from the already-published v2.1.169 changelog entry, not just from current docs. Editing history is a stronger deprecation signal than any release note.

Auto mode’s denial UX also quietly regressed. The v2.1.193 feature that showed the classifier’s written reason for each denial is now, in v2.1.208+, usually just the fixed text Blocked by classifier — the classifier scores severity internally rather than explaining itself, and you can’t configure which behavior you get. Separately, the Agent SDK docs gained an unannounced budget-cap change (subagent spend now counts toward the cap; hitting it kills background subagents and fails new spawns with Budget limit reached, v2.1.217+), and agent view gained a flag-ordering gotcha where --add-dir/--mcp-config before agents breaks claude agents --json.

The changelog itself

Opus 5 arrives as the default Opus model everywhere — direct API, Bedrock, and AWS aliases all now resolve opus to claude-opus-5 — with 1M context and $10/$50 fast mode. Opus 4.7 lost fast-mode support, subagents nest to depth 3 by default, and dynamic workflows now default to a medium size guideline (aim for <15 agents).

Claude Code v2.1.218 July 24, 2026 source

Code review and forked skills now run in the background by default

  • No changelog shipped today, so everything below arrived silently in the docs: the biggest change is that `/code-review` now runs as a background subagent by default (v2.1.218), where it previously ran inside your conversation.
  • Forked skills also flipped to running in the background by default (v2.1.218); to get the old behavior you now set `background: false` in the skill's frontmatter.
  • A new gotcha: edits from background subagents — including a `/code-review --fix` run — land outside your session's checkpoints, so `/rewind` won't undo them and you have to revert with git.
  • `--max-budget-usd` now counts subagent spend toward the cap, and from v2.1.217 hitting the cap fails new subagents with `Budget limit reached` and kills background subagents still running.
  • The Claude Security docs quietly confirm that Fable 5's cybersecurity classifiers will block certain activities and auto-downgrade to Opus mid-scan — expected behavior, per the new note.

What the release notes didn’t say

There was no changelog today, which makes the doc edits the whole story. The headline is a pair of default flips buried in checkpointing.md and code-review.md: as of v2.1.218, /code-review runs as a background subagent with its own context window instead of filling your conversation, and forked skills now run in the background by default rather than always in the foreground. Both change day-to-day behavior without a corresponding changelog line. The consequence worth internalizing is the new Subagent edits not restored section — background subagent edits, including /code-review --fix, sit outside your checkpoints, so /rewind silently leaves them in place and you must revert with git. Only a foreground context: fork skill edits your tree during your own turn and stays rewindable. Two quieter items round it out: the /code-review /fix-issue 123 parsing changed so a stacked command is now read as target text rather than expanding as its own skill, and the Claude Security page added a note that Fable 5’s classifiers will block certain activities and auto-downgrade to Opus.

Among the version-tagged catch-ups, the practical one is --max-budget-usd: subagent spend now counts toward the cap, and from v2.1.217 the cap actually enforces — new subagents fail with Budget limit reached and running background subagents get stopped. You can also now kick off a cloud ultrareview from CI with claude -p '/code-review ultra'.

Claude Code v2.1.218 July 23, 2026 source

Nested subagents lose their default, and a security-scan plugin lands undocumented

  • The by-default nesting of subagents is walked back: from v2.1.217, subagents can no longer spawn their own subagents unless you set CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH to 2 or higher — the docs now admit that v2.1.172 through v2.1.216 nested up to five layers by default.
  • A whole new page, claude-security.md, documents a multi-agent vulnerability-scanning plugin (/claude-security) that never appears in the changelog — it maps your architecture, hunts bugs, and turns findings into git-apply patches you review yourself.
  • The login-expiry warning quietly shrank from five days out to three, and the sub-agents anchor was renamed from #spawn-nested-subagents to #let-subagents-spawn-their-own-subagents — both undocumented in the changelog.
  • costs.md gains a new 'Why usage climbs in a long session' section and /usage now flags long context or cache misses when either tops 10% of recent usage, neither called out in release notes.
  • From the changelog proper: /code-review runs as a background subagent, and skills with context: fork now run in the background by default (opt out with background: false).

What the release notes didn’t say

The headline reversal isn’t in the 2.1.218 changelog at all — it’s a doc rewrite covering a v2.1.217 default flip. Subagents used to spawn their own subagents by default (up to five layers, v2.1.172–2.1.216); now that’s off unless you opt in via CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH. If your workflows relied on deep agent trees, they silently stopped nesting. A brand-new page, claude-security.md, ships an entire vulnerability-scanning plugin with no changelog mention — worth knowing it counts against plan usage and runs best in auto mode. Smaller silent changes: the login renewal warning now fires at three days instead of five; costs.md adds a ‘Why usage climbs’ explainer plus /usage behavior flags (long context, cache misses at ≥10%); teleported cloud sessions now get their own local copy that no longer syncs back to claude.ai; and the desktop ‘Remote’ session type was renamed ‘Cloud’. Subagent tool inheritance wording also tightened — ‘all tools’ became ‘every tool available to subagents,’ filtered for background runs.

Among the changelog items that actually change daily practice: /code-review now runs as a background subagent so it stops flooding your conversation, context: fork skills default to background execution, and agent names may no longer contain : (reserved for plugin namespacing).

Claude Code v2.1.217 July 22, 2026 source

The quiet clawback of Claude's self-run reviews

  • Undocumented in the changelog: as of v2.1.215, `/verify` and `/code-review` run only when you invoke them — Claude can no longer trigger them on its own.
  • Checkpointing now refuses to rewind symlinked or hard-linked files and warns you; before v2.1.216 `/rewind` silently wrote and deleted through those links.
  • Chrome integration is now gated on `/login` — API-key and long-lived-token sessions keep it off, walking back a state that previously enabled it only to fail with a 403.
  • The `--channels` flag quietly broadened from Claude.ai-only auth to also accept a Console API key, and neither channels flag appears in `claude --help` during the preview.
  • The changelog's own headline items: a cap of 20 concurrent subagents (`CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS`) and subagents no longer spawning nested subagents by default.

What the release notes didn’t say

The changelog for v2.1.217 is a long list of fixes, but the most consequential behavior changes landed silently in the docs a version or two earlier. The commands page now notes that, since v2.1.215, /verify and /code-review run only when you invoke them — Claude used to be able to fire them autonomously. That’s a real narrowing of agent initiative and it appears nowhere in a changelog entry. Separately, checkpointing gained a new failure mode disclosure: /rewind now skips symlinked and hard-linked paths with a Restored the code, but skipped N files warning, and the docs admit that before v2.1.216 it wrote and deleted through those links without any warning — a quiet fix for silent data loss. Chrome integration was also walked back: API-key and long-lived-token sessions can no longer enable it (they previously could, only to 403 on every connection). Smaller undocumented shifts: --channels now accepts a Console API key rather than Claude.ai auth alone, both channels flags are hidden from --help, --settings files are capped at 2 MiB, and CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH (v2.1.214) makes OTEL body truncation configurable.

Of the changelog items proper, the two worth practitioners’ attention are structural guardrails on fan-out: subagents are now capped at 20 concurrent (override via CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS) and no longer spawn their own nested subagents unless you raise CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH.

Claude Code v2.1.216 July 21, 2026 source

The docs quietly moved every URL, and a login rule grew a gateway exception

  • Undocumented and not in the changelog: the entire docs site relocated its URLs from /en/... to /docs/en/..., so every old bookmark, deep link, and copied reference now points at the pre-migration path.
  • Undocumented content change in admin-setup: the forceLoginOrgUUID organization-restriction now explicitly excludes Claude apps gateway sign-in, which doesn't authenticate against an Anthropic org — a real enforcement gap that only appears in the docs, not the release notes.
  • New sandbox.filesystem.disabled setting lets you skip filesystem isolation while keeping network egress control, a middle ground the sandbox previously didn't offer.
  • A long-standing performance bug is fixed: message normalization grew quadratically with turn count, which was the cause of multi-second stalls and slow resumes in long sessions.
  • Several path-safety fixes landed — .claude workflow/scheduled-task writes and /rewind no longer follow symlinks or hard links that could redirect writes outside the project, and worktree subagents can no longer redirect git into the shared checkout.

What the release notes didn’t say

The day’s docs diff is dominated by a change the changelog never mentions: a site-wide URL migration moving every page from /en/... to /docs/en/.... Hundreds of cross-links were rewritten in bulk (accessibility, admin-setup, and beyond), so any external link or bookmark to the old /en/ paths is now stale. Buried inside that mechanical churn is one genuine content edit worth catching: the admin login-enforcement table now states that forceLoginOrgUUID’s organization restriction covers the terminal, VS Code extension, and Agent SDK except Claude apps gateway sign-in, which doesn’t authenticate against an Anthropic organization. That’s a documented enforcement gap admins should know about, and it shipped without a changelog line.

Among the public 2.1.216 items, the ones that actually change day-to-day work are the quadratic message-normalization fix (the real culprit behind multi-second stalls in long sessions), the new sandbox.filesystem.disabled setting, and a cluster of symlink/hard-link path-safety fixes across .claude writes, /rewind, and worktree-isolated subagents.

Claude Code v2.1.215 July 19, 2026 source

Claude stops auto-running verify and code-review

  • Claude no longer runs the `/verify` and `/code-review` skills on its own — you now invoke them explicitly, so any workflow that relied on automatic review passes needs an added step.
  • Undocumented in the changelog: the VS Code extension's minimum version was quietly lowered from 1.98.0 to 1.94.0, widening compatibility for teams stuck on older editors.
  • New silent guidance warns that `claude mcp add` saves configs without validating credentials, so a bad token only surfaces as a `failed` server under `/mcp` later.
  • Install troubleshooting gained explicit handling for `403` (proxy/region block) and `5xx` (transient) results — previously all failures were lumped as generic network blocks.
  • The gateway-deploy and heapdump docs added redaction warnings, flagging that audit streams, developer identities, and diagnostics files leak sensitive data if posted to public issues.

The one changelog item that matters day to day (2.1.215) is a behavior removal: Claude will no longer trigger /verify or /code-review autonomously. If you were leaning on those skills firing automatically, they now require an explicit call.

What the release notes didn’t say

The more interesting changes shipped silently in the docs. The VS Code extension’s minimum supported version was rolled back from 1.98.0 to 1.94.0 across three spots (requirements, install troubleshooting, Spark icon) — a compatibility loosening with no changelog mention. New MCP guidance now warns that claude mcp add never validates credentials, so placeholder or wrong tokens are accepted at add-time and only show as failed when you later run /mcp. Install troubleshooting picked up specific 403 (proxy/network filter or unsupported region) and 5xx (transient) diagnoses instead of the old catch-all “network is blocking.” Security-conscious edits also landed: the Cloud gateway deploy guide now tells you to redact audit streams and developer identities before filing public issues, and the heapdump docs clarify that the -diagnostics.json file is the safe one to attach. Finally, /desktop handoff is now documented as macOS and x64-Windows only.

Claude Code v2.1.214 July 18, 2026 source

Nine new SDK hooks land in the docs, none in the changelog

  • Nine new TypeScript SDK hook events appear in the docs with no changelog mention: StopFailure, PostCompact, PermissionDenied, TaskCreated, Elicitation, ElicitationResult, InstructionsLoaded, CwdChanged, and FileChanged.
  • The hook `timeout` default of 60 seconds is gone — omitting it now applies per-event defaults instead: 10 minutes for most events, 30 seconds for UserPromptSubmit, 10 seconds for MessageDisplay.
  • UserPromptExpansion quietly gained scope — it now also fires when an MCP prompt expands, but explicitly does not fire when Claude invokes a skill itself.
  • Login enforcement (forceLoginMethod/forceLoginOrgUUID) now reaches the VS Code extension, Agent SDK, setup-token, and install-github-app; before v2.1.212 only terminal logins enforced either key.
  • A long-lived token from `claude setup-token` no longer loads claude.ai MCP connectors — that token can only make model requests.

What the release notes didn’t say

The SDK hooks reference grew by nine events that the changelog never mentions — StopFailure, PostCompact, PermissionDenied, TaskCreated, Elicitation, ElicitationResult, InstructionsLoaded, CwdChanged, and FileChanged — all TypeScript-only. If you build with hooks, several of these are genuinely new surface area (watch a file, react to compaction completing, catch classifier denials, audit which CLAUDE.md files load).

The quieter behavior change matters more: the hook timeout default of 60 seconds was removed. Omitting timeout now yields per-event defaults — 10 minutes for most events, 30s for UserPromptSubmit, 10s for MessageDisplay. Any hook that leaned on a 60-second cap now runs under a much longer leash. Two new events (StopFailure, FileChanged) also use a stricter matcher grammar: only | separates alternatives, and FileChanged’s matcher doubles as the literal watch list of filenames.

Separately, forceLoginMethod/forceLoginOrgUUID enforcement expanded beyond the terminal to the VS Code extension, Agent SDK, setup-token, and install-github-app as of v2.1.212, and claude setup-token tokens no longer pull in claude.ai MCP connectors.

Claude Code v2.1.212 July 17, 2026 source

Fable 5 quietly pulled as an advisor model

  • Fable 5 is no longer offered as an advisor model: the `/advisor` picker now dims it as `Fable 5 (temporarily unavailable)` and Claude Code rejects both `/advisor fable` and `--advisor fable`, with a remote rollout gating its return — none of which appears in the changelog.
  • The `--advisor` launch flag is now documented as hidden from `claude --help`, and enabling the advisor prints a new `Advisor Tool (experimental) is on and may use more tokens` notice after startup.
  • A new managed control, `processWrapper` (the 'corporate launcher'), lets orgs prefix the background-agent supervisor and its workers instead of disabling agent view outright — shipped silently to the docs.
  • The Agent SDK gained undocumented 'Hosting' and 'Session storage' guidance, including a `session_store`/`sessionStore` adapter for resuming sessions across stateless or serverless hosts.
  • In the changelog proper: `/fork` now spins up a real background session (the old in-session subagent becomes `/subtask`), and plan mode no longer auto-runs file-modifying Bash like `touch`/`rm` without a permission prompt.

What the release notes didn’t say

The headline change is a removal the changelog is silent on: Fable 5 has been walked back as an advisor model. Where the docs previously told you the version needed to use Fable 5 as the advisor, they now state Claude Code simply doesn’t offer it — the picker shows it as a dimmed Fable 5 (temporarily unavailable) row, and --advisor fable is rejected outright. A Fable 5 main model still works but runs without an advisor, and a remotely configured rollout decides when the option comes back. Two smaller advisor details also surfaced only in the docs: the --advisor flag is now hidden from claude --help, and turning the advisor on prints an experimental-token-usage notice. Separately, the admin docs added a processWrapper ‘corporate launcher’ control for wrapping background-agent processes, and the Agent SDK picked up new Hosting and Session-storage pages (with a session_store adapter for serverless resume) — neither mentioned in the changelog.

Among the published changes, two matter day to day: /fork now copies your conversation into its own background session while the former in-session subagent becomes /subtask, and a plan-mode bug that let file-modifying Bash commands run without a permission prompt was fixed. New session caps also landed — 200 WebSearch calls and 200 subagent spawns per session — and the Task tool’s mode parameter is now deprecated and ignored.

Claude Code v2.1.211 July 16, 2026 source

The doc updates Claude Code's changelog left out

  • None of the day's most consequential doc edits appear in the public changelog — they shipped silently in the docs.
  • Cost tracking now warns that the SDK `usage` field excludes subagent tokens entirely, so any agent that spawns subagents undercounts unless you read `modelUsage`/`model_usage` instead.
  • New managed-settings lockdowns landed undocumented in the changelog: `forceLoginMethod`/`forceLoginOrgUUID` block API-key and token-based sessions at startup, and `pluginSuggestionMarketplaces` allowlists which marketplaces can suggest plugins.
  • Organization-set `ask` controls on claude.ai connector tools now force a prompt across every permission mode — even `bypassPermissions` and `dontAsk` deny them regardless of your allow rules.
  • The SDK docs newly spell out the 25,000-token MCP output cap (overridable via `MAX_MCP_OUTPUT_TOKENS`) and scoped `Read`/`Edit` path rules with `//path` absolute anchoring.

What the release notes didn’t say

The changelog (2.1.211) is full of fixes but omits the day’s substantive doc changes. Cost tracking gained a table making explicit that the SDK usage field counts only the top-level loop and silently drops subagent tokens — a real accounting trap for anyone building supervisor/subagent workflows, where only total_cost_usd and modelUsage include the whole tree. Admin lockdown grew two undocumented capabilities: login enforcement (forceLoginMethod, forceLoginOrgUUID), which blocks ANTHROPIC_API_KEY/ANTHROPIC_AUTH_TOKEN/apiKeyHelper sessions at startup while leaving cloud-provider sessions alone, and pluginSuggestionMarketplaces for allowlisting plugin suggestions. A new cross-cutting rule threads through every SDK permissions page: connector tools an org sets to ask now fall through to your callback in all modes and are hard-denied in dontAsk — allow rules no longer override org policy. Also newly documented: the 25k-token MCP output limit that spills to a file, and scoped Read/Edit path rules where //path means an absolute filesystem path and a single leading slash anchors at the rule’s source. Separately, the advisor page quietly added “Claude Platform on AWS” to the list of surfaces where the advisor tool isn’t available. No pages or flags were removed today.

Claude Code v2.1.210 July 15, 2026 source

The quiet worktree-deletion walk-back, and a hook that never made the changelog

  • The agent-view docs stripped 'merge or push before deleting' down to just 'commit' — because deletion now refuses to remove a worktree that holds unpushed commits, keeping both the worktree and its session instead of silently destroying work.
  • A new TypeScript-only hook, UserPromptExpansion, appears in the hooks table with no matching changelog line: it fires when a user-typed command expands into a prompt, letting you block direct invocation or inject context when a skill is typed.
  • Background sessions now quietly refuse /install-github-app and the /mcp settings list (including auth actions) whether attached or replying from the peek panel — a limitation that shipped in the docs, not the release notes.
  • Typing /model <name> in an attached agent-view session now saves it as your default for new sessions; the old behavior required pressing 's' in the picker for a session-only switch, which is now the explicit opt-out.
  • The SDK gains SDKThinkingTokensMessage for live thinking-token progress, and setMaxThinkingTokens(null) now resets thinking to the session default rather than forcing a value.

What the release notes didn’t say

The headline change is a removal you won’t find called out: across agent-view.md, the long-standing ‘merge or push changes before deleting’ warning has been pared back to ‘commit’ everywhere. That’s not a copy edit — it reflects a behavior walk-back. Deleting a session (via Ctrl+X twice, claude rm, or the shell) now refuses to remove a worktree with commits that aren’t pushed anywhere, keeping the session row alongside it and naming the kept path and reason. The destructive-by-default delete that could vaporize unpushed commits is gone. Several other changes rode in under doc version stamps (v2.1.153–208) with no entry in the 2.1.210 changelog: the UserPromptExpansion hook, background sessions refusing /install-github-app and the /mcp settings list, /model <name> now persisting as the new-session default, screen-reader mode inheriting through CLAUDE_AX_SCREEN_READER on relaunch, and admin-managed organization-shared cloud environments for Claude Code on the web.

Of the changelog items proper, the ones that touch daily practice are the fix for isolation: 'worktree' subagents being able to mutate the main checkout, the new startup warning steering Write/Glob/NotebookEdit permission rules toward Edit/Read, and hook-timeout handling that no longer misreports as a user rejection and stalls unattended sessions.

Claude Code v2.1.209 July 14, 2026 source

Quiet removals in the Agent tool schema and advisor docs

  • The Agent SDK's `AgentInput` type dropped the `resume` and `max_turns` fields and made `subagent_type` optional — a breaking surface change with no changelog line.
  • The `AgentOutput` `sub_agent_entered` status for interactive subagents was deleted and replaced by `remote_launched`, which points at a remote cloud session via `sessionUrl` and `taskId`.
  • The advisor tool's docs removed its `v2.1.98 or later` version gate and the `plan-availability` annotation, quietly loosening how the experimental feature is described.
  • Screen reader mode made the changelog, but a full accessibility page shipped alongside it documenting magnifier support (`CLAUDE_CODE_ACCESSIBILITY`), `prefersReducedMotion`, daltonized themes, and OSC 133 turn markers the notes never mentioned.
  • Undocumented behavior change: an MCP server that returns an OAuth challenge with no stored token now continues the run without that server's tools and reports `needs-auth`, instead of the SDK simply not handling the flow.

What the release notes didn’t say

The changelog is dominated by screen reader mode and a long list of fixes, but the sharper changes are in the Agent SDK type surface. The AgentInput schema lost two fields outright — resume?: string and max_turns?: number — and subagent_type went from required to optional; mode also gained an auto value. On the output side, the sub_agent_entered result variant (interactive subagents) was removed entirely and replaced by remote_launched, reframing that code path around tasks dispatched to remote cloud sessions. None of this appears in the changelog, so SDK consumers reading only the release notes won’t know their resume/max_turns calls or sub_agent_entered handling just fell off the documented API. The advisor page separately deleted its v2.1.98 or later requirement and the plan-availability annotation, softening the feature’s gating in the docs.

Several behavior changes also shipped silently: MCP servers that hit an OAuth challenge now degrade to needs-auth and run without their tools; agent-team mailboxes are now validated JSON files that drop malformed entries instead of looping errors; SDK subagents with SendMessage now start with a roster of named peers; and the terminal_reason enum grew a batch of new values (api_error, budget_exhausted, malformed_tool_use_exhausted, and more). A new accessibility page and an admin-setup section on WSL Desktop sessions (wslInheritsWindowsSettings, CrowdStrike Falcon guidance) round out the undocumented surface.

Claude Code v2.1.207 July 12, 2026 source

Linux desktop install pivots to apt, and MCP output limits surface in the SDK docs

  • The troubleshooting page dropped its Linux download link entirely — Linux users are now steered to apt install instructions instead of a one-click download that macOS and Windows still get.
  • The 'install from a downloaded file' path on Linux was rewritten: instead of grabbing a .deb from claude.com/download, you now curl directly from the downloads.claude.ai package pool via a repository-index lookup.
  • The Agent SDK's MCP page added a pointer to MCP output limits — the persist-to-disk fallback when results exceed MAX_MCP_OUTPUT_TOKENS, plus a new per-tool anthropic/maxResultSizeChars annotation — none of which rode a changelog entry.
  • New Linux error-handling guidance explains the 'Remote file name has no length' failure and ties it to a blocked downloads.claude.ai or an unsupported architecture (only amd64/arm64 are published).
  • setup.md and troubleshoot-install.md repointed their Linux links from the generic claude.com/download to the dedicated /en/desktop-linux guide.

What the release notes didn’t say

There was no changelog today, so every one of these shipped silently. The quiet removal is on Linux: the troubleshooting page no longer offers Linux users a download link at all — where macOS and Windows keep their one-click installers, Linux now gets ‘install with apt’ instead. In parallel, the desktop-linux page walked back its simple ‘download the .deb from claude.com/download’ instruction and replaced it with a package-pool curl that scrapes the apt repository index for the newest build. The practical read: Anthropic wants Linux desktop installs to go through apt so they stay updated, and is deliberately de-emphasizing the standalone-file path. Separately, the Agent SDK’s MCP page gained a cross-reference to MCP output limits — MAX_MCP_OUTPUT_TOKENS, a persist-to-disk fallback for oversized tool results, and a new anthropic/maxResultSizeChars per-tool annotation — surfacing behavior that practitioners hitting large MCP responses will want to know about but that never appeared in a changelog.

Claude Code v2.1.207 July 11, 2026 source

Auto mode quietly drops its 'research preview' label

  • The phrase 'research preview' was deleted from every Auto mode description — glossary, desktop, and how-it-works docs — signaling a silent graduation to GA that the changelog never states.
  • A new undocumented SDK option, `SystemPromptFile` (`--system-prompt-file`), lets you load large system prompts from disk to dodge OS argv length limits (~128KB Linux, ~32KB Windows).
  • The docs now clarify that a built-in set of read-only shell commands like `ls` and `cat` runs without any permission prompt, restrictable only via sandbox `denyRead` rules.
  • A shell-injection fix landed: plugin hooks/monitors now reject `${user_config.*}` in shell-form commands, and project-level `.claude/settings.json` no longer supplies plugin option values.
  • Bedrock, Vertex, and Claude Platform on AWS all now default the `opus` alias to Opus 4.8, moving teams up from 4.6/4.7 unless pinned.

What the release notes didn’t say

The loudest change is one the changelog only half-tells. The 2.1.207 notes say Auto mode no longer needs the CLAUDE_CODE_ENABLE_AUTO_MODE opt-in on cloud providers — but the docs go further, stripping ‘research preview’ from Auto mode’s description in the glossary, the desktop page, and how-claude-code-works. Read together, Auto mode has effectively graduated on the Anthropic API too, and nothing in the changelog says so. Two other silent additions matter for practitioners: the SDK gained a SystemPromptFile type mapping to a new --system-prompt-file CLI flag (for prompts too large to survive argv length limits), and the permissions docs now admit that read-only shell commands such as ls and cat run with no prompt at all — you restrict them with sandbox denyRead rules. The ‘Manual’ permission-mode wording was also quietly softened from ‘asks before each action’ to ‘asks before file edits and most shell commands.’

Among shipped-and-documented items, the security-relevant ones lead: a plugin shell-injection fix rejecting ${user_config.*} in shell-form commands, a fix for non-interactive runs being silently recorded as having consented to remote managed settings, and Opus 4.8 becoming the default across Bedrock, Vertex, and Claude Platform on AWS.

Claude Code v2.1.206 July 10, 2026 source

What Claude Code quietly walked back in the SDK and agent view

  • Plan mode's `allowedPrompts` is now deprecated and ignored — the field that requested prompt-based Bash permissions to implement a plan does nothing, though it's still accepted so old callers validate.
  • `/doctor` no longer summarizes the `claude daemon status` check; that line was deleted from the docs with no changelog mention.
  • Agent view dropped the `done/total` parallel-work counter (e.g. `2/5`) from row summaries, which now show the session's own one-line report instead of a raw tool invocation.
  • The SDK's `interrupt()` now returns an interrupt receipt (`SDKControlInterruptResponse`) listing which queued messages survive, gated behind a new `capabilities` feature-detection array — neither appears in the changelog.
  • Auto mode's repo-visibility classifier was quietly narrowed: it reads your messages and the commands Claude runs but not their output, so a bare `gh repo view` result no longer counts as evidence a repo is public.

What the release notes didn’t say

The published changelog for 2.1.205–2.1.206 covers /cd suggestions, a CLAUDE.md-trimming /doctor check, and a pile of fixes — but the more interesting movement is in the docs it didn’t touch. Three things were removed or walked back: plan mode’s allowedPrompts field is now marked deprecated, no longer used (Claude Code still accepts it only so existing transcripts validate); /doctor’s summary of the daemon-status check was deleted outright; and agent view lost the done/total parallel-work count from its row summaries. Separately, the SDK grew an entire interrupt-receipt protocol — interrupt() can now resolve with an SDKControlInterruptResponse.still_queued list, feature-detected via a new open-ended capabilities array on SDKSystemMessage — plus name/body fields on peer message origins, none of which surface in the changelog. Two silent behavior changes are worth noting for anyone relying on them: an invalid --json-schema now fails the run at startup instead of degrading to unstructured text, and auto mode’s visibility classifier was narrowed to read commands but not their output, so evidence a repo is public must now come from your own words, not a gh repo view result.

Claude Code v2.1.205 July 9, 2026 source

Background sessions quietly get their gateway, PATH, and onboarding hint rewired

  • The empty agent-view onboarding hint with example prompts is gone, replaced by section headers with a description under each; the separate hint shown below a lone session row was removed too.
  • None of it is in the 2.1.205 changelog, but the docs quietly detail a v2.1.203 fix where a gateway's `ANTHROPIC_BASE_URL` is now forwarded to background workers — previously it was dropped while the paired API key was kept, so every request 401'd against the default endpoint.
  • The dispatching shell's `PATH` now reaches each background worker, fixing tools that went missing (most often on Windows) because sessions kept the supervisor's original launch-shell PATH.
  • Pressing `←` to background a session now waits for running subagents instead of silently restarting them from the beginning after ten seconds, and edits to the `effortLevel` setting now reach already-backgrounded sessions live.
  • The TypeScript SDK gained two undocumented-in-changelog message types — `SDKBackgroundTasksChangedMessage` and `SDKConversationResetMessage` — plus an `"ultracode"` value for `effortLevel` accepted only by `applyFlagSettings()`.

What the release notes didn’t say

The 2.1.205 changelog is all agent-view polish, but the docs diff exposes a much larger, mostly undocumented v2.1.203 overhaul of how background sessions source their environment. The headline reversal: a gateway ANTHROPIC_BASE_URL exported in your dispatching shell now reaches the session’s worker (along with ANTHROPIC_CUSTOM_HEADERS and the credential exported beside it) when the supervisor shares that gateway environment. Before this, the base URL was dropped while the API key was kept — so the gateway’s key was sent to Anthropic’s default endpoint and every request failed with a 401. The dispatching shell’s PATH is now forwarded the same way. On the removal side, agent view’s empty-state onboarding hint (the one with example prompts) was deleted in favor of plain section headers, and the hint that appeared below a solitary session row is gone as well. The -to-background flow also stopped silently restarting in-flight subagents, and effortLevel set in settings.json now follows a session across backgrounding and restarts instead of being frozen at dispatch.

Among the actually-listed 2.1.205 items, two matter for practitioners: auto mode now blocks tampering with session transcript files, and background-task notifications explicitly state that no human input occurred — closing a hole where a fabricated in-transcript approval could be acted on. /doctor is now a full setup checkup with /checkup as its alias.

Claude Code v2.1.204 July 8, 2026 source

Auto permission mode quietly lands in the Python SDK

  • The "(TypeScript only)" qualifier on the `auto` permission mode was stripped from four SDK doc pages and `"auto"` was added to Python's `PermissionMode` literal — the Python SDK gained model-classified tool approval with no changelog mention.
  • The custom-tools docs reversed a long-standing claim: an uncaught handler exception no longer stops the agent loop or fails the `query()` call — the in-process MCP server now catches it, so `isError: true` only controls the message Claude reads, not whether work continues.
  • A newly documented Python-only gotcha: the Python SDK silently drops audio blocks and binary (`blob`) resources from tool results and logs a warning, while TypeScript saves audio to disk and keeps binaries.
  • Hooks docs added scoped naming for plugin-bundled MCP servers (`mcp__plugin_<plugin>_<server>__<tool>`), warning that matchers written against the bare server key never fire for these tools.
  • The public changelog's headline for practitioners is a fleet of background-agent fixes in 2.1.203 — stale PATH/`ANTHROPIC_BASE_URL` leaks, worktree isolation bugs, and daemon token recovery — plus a login-expiry warning and an always-visible manual-mode ⏸ badge.

What the release notes didn’t say

The changelog is almost entirely background-agent and TUI fixes, but the docs tell a different story. The biggest quiet change: auto permission mode is no longer TypeScript-only. The “(TypeScript only)” tag was removed from the agent-loop, permissions, quickstart, and Python reference pages simultaneously, and "auto" was appended to Python’s PermissionMode literal — meaning the Python SDK now supports model-classified tool approval with zero changelog acknowledgement. Second, the custom-tools error-handling docs were rewritten to contradict their prior guidance: an uncaught exception used to “stop the agent loop” and fail the whole query; now the SDK’s in-process MCP server catches it, converts it to an error result, and the loop continues — so returning isError: true is now about composing a better message, not keeping the query alive. The same page newly admits a Python/TypeScript asymmetry: the Python SDK drops audio and binary-resource blocks from tool results and only logs a warning. None of these appear in the changelog.

Also landing silently: scoped hook-matcher naming for plugin-bundled MCP servers (mcp__plugin_<plugin>_<server>__<tool>), and expanded PermissionRequest subagent fields (agent_id/agent_type) in Python. Of the actual changelog items, the ones worth acting on are the 2.1.203 background-agent fixes — sessions were leaking a stale PATH and dropping shell-exported ANTHROPIC_BASE_URL (sending keys to the wrong endpoint with a 401), and worktree-isolated subagents were running commands in the parent checkout.

Claude Code v2.1.202 July 7, 2026 source

Remote Control fixes, faster session resume, and a lighter-weight /review

  • Remote Control from mobile/web now works properly: interactive commands no longer fail with "Unknown command," uncaptioned images and files are no longer silently dropped, and the permission mode shown is correct.
  • Resuming a session by name or opening the resume picker is fast again in repos with many git worktrees, instead of taking minutes and burning memory.
  • `/review <pr>` is back to a quick single-pass review; use `/code-review <level> <pr#>` when you actually want the slower multi-agent pass.
  • Re-invoking an already-loaded skill no longer appends a duplicate copy of its instructions to context, so repeated skill use stops quietly bloating your context window.
  • A new "Dynamic workflow size" setting in `/config` lets you steer how many agents Claude spins up for dynamic workflows (small/medium/large), as an advisory guideline rather than a hard cap.

Most of this release is friction removal for people already living in Claude Code day to day. The Remote Control path finally behaves the way you’d expect from a phone or browser, and session resume stops punishing anyone with a worktree-heavy repo. The /review split is worth internalizing: the plain command is fast again, and the heavyweight multi-agent review now lives behind /code-review with an explicit effort level.