Claude docs changes for September 14th, 2026 [diff]

Executive Summary

  • The VS Code/Cursor extension gains three new panels for managing a session: Hooks and Permissions editors in the Customize menu, and an Agent map that visualizes and lets you inspect or stop running subagents (v2.1.269).
  • /goal no longer just leaves a goal active after a transient failure — in interactive sessions it now automatically retries (overloaded servers, dropped connections) or pauses (rate limits, usage limits) and tells you which it's doing (v2.1.269).
  • Skills synced from claude.ai can now always be reached via /anthropic-skills:<name>, even when their short name is claimed by another command, instead of being silently unavailable (v2.1.269).
  • The advisor model pairing rules were updated for Opus 5 and Fable 5.1, and the docs now distinguish pairs Claude Code silently rejects from pairs it sends that the API itself refuses with an error.
  • The Preserved thinking API guide added a large "Who needs to change anything" self-diagnosis section, clarified several rules about removing/restoring thinking blocks, and added guidance for proxies and libraries sitting in front of the API.

Claude Code changes

Changed documents

advisor [Source]

  • The main-model/advisor pairing table was restructured for new models: Opus 5 (pairs with Fable or Opus 5) and Fable 5.1 (pairs only with Fable 5.1) now get their own rows, and Sonnet 5 now accepts an Opus 4.7-or-later advisor. [lines 82-91] [Source]
  • New distinction between two failure modes: for a rejected pairing Claude Code simply doesn't attach the advisor, but for some pairings (e.g. Sonnet 5 main with an Opus 4.6 advisor) Claude Code attaches it anyway and the API refuses every request until you change or turn off the advisor. [lines 99-103] [Source]

agent-loop [Source]

  • If you don't set effort, Claude Code now resolves the effort level itself (per the effort-level rules) instead of both SDKs simply leaving the parameter unset and deferring to the model's default. [line 211] [Source]
  • error_during_execution's example cause was narrowed to "a cancelled request," dropping the earlier example of a general API failure. [line 310] [Source]

agent-sdk/skills [Source]

  • Clarified that the init message's skills array only includes skills that declare a description or when_to_use frontmatter field. [line 86] [Source]
  • Dropped the claim that user-invocable skills appear in both the printed command list and the skills array — now it just says user-invocable: false skills are excluded from both. [line 146] [Source]

agent-sdk/slash-commands [Source]

  • Same two changes as agent-sdk/skills above (this page shares its content): the init message's skills array only lists skills with description or when_to_use set [line 86], and non-invocable skills are excluded from both the command list and the array [line 146]. [Source]

claude-code-features [Source]

  • Removed the claim that filesystem hooks and programmatic hooks "execute during the same hook lifecycle," and that project hooks in .claude/settings.json run automatically with settingSources: ["project"] and no extra configuration. [line 167] [Source]

hooks [Source]

  • The UserPromptSubmit infinite-loop-prevention advice dropped "check for a subagent indicator in the hook input before spawning," leaving only the session-state-tracking and hook-scoping mitigations. [line 806] [Source]

mcp [Source]

  • Corrected: in-process SDK MCP servers do delay the first turn, until they connect and list their tools — previously documented as never delaying the first turn. [line 141] [Source]

modifying-system-prompts [Source]

  • The Python SDK can now set outputStyle programmatically through the settings option (a JSON string or a path to a settings file) — previously only documented for TypeScript. [line 139] [Source]

plugins [Source]

  • Clarified that relative plugin paths resolve against the SDK's cwd option, not the process's actual working directory. [line 60] [Source]

python [Source]

  • SDKSessionInfo.custom_title now documents the auto-generated-title fallback when no custom title is set, rather than describing it as just the user-set title. [line 250] [Source]
  • set_permission_mode(mode) is now typed as PermissionMode instead of str. [line 433] [Source]
  • get_server_info() now documented as returning the server's initialization info (available commands and output styles), not "session ID and capabilities." [line 461] [Source]
  • ContentBlock now includes ServerToolUseBlock and ServerToolResultBlock in its union. [lines 1775-1783] [Source]
  • allowUnixSockets is now documented as macOS-only and ignored on Linux. [line 3298] [Source]

typescript [Source]

  • The effort option's documented default changed from "Model default" to undefined, matching the agent-loop change where Claude Code now resolves effort itself. [line 421] [Source]

user-input [Source]

  • Removed the note that the SDK only cancels a pending can_use_tool wait when the query itself is cancelled. [line 11] [Source]
  • Removed the Python-specific caveat that can_use_tool requires streaming mode and that the SDK closes the input stream after the last message of a finite generator/iterable unless a hook or in-process MCP server keeps it open. [line 185] [Source]

chrome [Source]

  • Plan-mode browser permission rules were simplified and changed: rather than an explicit read-only-vs-state-changing breakdown, a prompt now appears before Claude records a GIF, opens a new tab, or runs a shortcut, with exceptions for bypass-permissions mode and certain batch/context calls. [lines 101-103] [Source]

claude-code-on-the-web [Source]

  • Removed /tasks as a way to monitor cloud session progress from the CLI; the docs now point only to claude.ai or the mobile app. [line 68] [line 91] [Source]
  • Teleport's "Correct repository" check now notes that before v2.1.219 its error didn't name your checkout's repository. [line 175] [Source]

computer-use [Source]

  • The computer-use lock is now described as a plain per-session lock rather than a "machine-wide lock." [line 95] [Source]
  • The "Claude is using your computer" notification now appears the first time Claude uses your computer in each turn, rather than when Claude first acquires the lock. [line 111] [Source]

desktop [Source]

  • disableMobileSimulatorTools must now be the JSON boolean true; the string "true" is ignored. [line 713] [Source]

desktop-changelog [Source]

  • Same disableMobileSimulatorTools clarification as desktop above: it must be the JSON boolean true, not the string "true". [line 713] [Source]

github-enterprise-server [Source]

goal [Source]

  • New: in interactive sessions on v2.1.269+, a /goal that hits a non-fatal error no longer just sits there — Claude Code automatically retries transient failures (overloaded server, dropped connection; up to 3 times before pausing) or pauses on failures a retry wouldn't fix (rate limits, usage limits, a hook ending the turn), printing a Goal still active or Goal paused notice either way. [lines 122-142] [Source]
  • Setting CLAUDE_CODE_GOAL_CHECKIN_MINUTES to 0 now also turns off these automatic retries, not just idle check-ins. [line 142] [Source]

ide-integrations [Source]

  • New Hooks panel in the Customize menu (v2.1.269+): view every hook loaded in the session grouped by event, and add, edit, or remove the ones saved in your user/project/local settings; hooks from managed settings or plugins are read-only. [line 101] [Source]
  • New Permissions panel in the Customize menu (v2.1.269+): view the session's Allow/Ask/Deny rules and add or remove the ones saved in your own settings; rules from managed settings or session-only approvals are read-only. [line 102] [Source]
  • Focus view now shows live progress rows for running subagents, with their latest activity, under the tool-call group that started them (v2.1.269+). [line 108] [Source]
  • New Agent map: an agent count appears in the prompt box whenever subagents are active; clicking it opens a tree of subagents with status, elapsed time, and token count, and lets you inspect or stop one (v2.1.269+). [lines 112-114] [Source]
  • The editor-selection indicator now shows an X to remove the selection from context, rather than toggling a hidden/visible eye-slash icon; it reappears the next time you select text. [line 129] [Source]

settings-reference [Source]

  • advisorModel's description now points to the advisor page's rewritten pairing/rejection-vs-API-error explanation instead of describing the fallback inline. [line 776] [Source]

skills [Source]

  • New (v2.1.269+): a synced claude.ai skill whose short name collides with another command is no longer just skipped — it stays reachable as /anthropic-skills:<name>, while the other command keeps the short name. Before v2.1.269 a synced skill had only its short name. [lines 207-214] [Source]
  • The name-collision table now notes a synced skill still runs as /anthropic-skills:<name> when it collides with another command. [line 158] [Source]
  • New table row documenting the command name derived for a skill synced from claude.ai (/anthropic-skills:<name>, or bare /<name> when unclaimed). [line 374] [Source]
  • Removed the claim that a synced skill named help or feedback is "still skipped" in non-interactive sessions. [line 378] [Source]

slash-commands [Source]

  • Same changes as skills above (this page shares its content): synced skills stay reachable via /anthropic-skills:<name> on a name collision (v2.1.269+) [lines 207-214], the collision table and command-name table were updated to match [line 158, line 374], and the help/feedback non-interactive exception was removed [line 378]. [Source]

vs-code [Source]


API changes

Changed documents

beta [Source]

  • Mechanical only: union-type fields (e.g. actor, scope, source, resolved_by) now name their actual member types (UserActor or APIActor) instead of generic object or object placeholders. No behavior or schema change.

beta/organization [Source] and its sub-pages (rbac_roles, rbac_roles/permissions, rbac_roles/permissions/list, spend_limits, spend_limits/create, spend_limits/increase_requests and its approve/deny/list/retrieve, spend_limits/list_effective, spend_limits/retrieve, usage_report, usage_report/retrieve_claude_code)

  • Mechanical only: the same union-type-name change as beta above — generic object or object placeholders now name the actual types. No behavior or schema change.

compliance [Source], compliance/activities, and compliance/activities/list

  • Mechanical only: the same union-type-name change — data, actor, provider, audience, updates, and scope fields now name their member types instead of showing generic object. No behavior or schema change.

compliance/apps [Source] and its sub-pages (chats, chats/messages, chats/messages/list, projects, projects/attachments, projects/attachments/list, projects/collaborators, projects/collaborators/list, sessions, sessions/local, sessions/local/messages, sessions/local/messages/list, sessions/remote, sessions/remote/messages, sessions/remote/messages/list)

  • Mechanical only: the same union-type-name change as above. No behavior or schema change.

compliance/organizations [Source], compliance/organizations/settings, and compliance/organizations/settings/retrieve

  • Mechanical only: the same union-type-name change as above. No behavior or schema change.

preserved-thinking [Source]

  • New "Who needs to change anything" section: nothing changes if Claude Code, claude.ai, Managed Agents, or the Agent SDK builds your requests, or your integration only appends to messages; otherwise it lists, with links, the specific request edits (rebuilding system, re-rendering context, trimming/re-encoding old content, changing tools, adding/removing reminders, dropping and restoring thinking blocks, rebuilding a saved session) that invalidate later thinking. [lines 16-31] [Source]
  • Clarified block-removal rules: you can now remove thinking blocks from the start, from the end, or all of them and stay valid (the model just loses that reasoning); a gap in the middle still invalidates everything after it, and putting a removed block back invalidates the blocks produced while it was gone. [line 72] [Source]
  • New operational guidance: "drop_block" keeps requests succeeding but doesn't fix the underlying edit — count and alert on responses whose input_transformations contain a prefix_binding_mismatch entry. [line 83] [Source]
  • New "Handle the error in code" subsection with a concrete retry procedure for the 400 error: retry once with prefix_mismatch_behavior: "drop_block" and persist that choice with the session, or strip thinking/redacted_thinking blocks once if you can't send the beta header. [lines 103-105] [Source]
  • New "Put changing context in the newest turn" section: render environment/context blocks in the first user message once, and put any later change in the newest turn (or a mid-conversation system message) instead of re-rendering messages[0]. [lines 825-843] [Source]
  • New "Libraries, proxies, and gateways" section with guidance for code sitting in front of the API: pass through unrecognized anthropic-beta/block_binding values, leave a caller's mid-conversation system message where they put it, use tool_choice: "none" instead of removing tools, and don't silently catch-and-retry the 400 on a caller's behalf. [lines 1193-1201] [Source]
  • New FAQ entry: "A saved session now fails on every request" — send it with prefix_mismatch_behavior: "drop_block" going forward, or strip its thinking/redacted_thinking blocks once, then find and fix the edit that caused it. [line 1232] [Source]
  • Resuming a saved session now only needs the same content for system/tools/messages, not byte-for-byte identical JSON — formatting and key order don't matter. [line 1228] [Source]

streaming [Source]

  • Corrected display: "omitted" semantics: the API still sends a thinking_delta with an empty thinking string (followed by signature_delta) for each block — it isn't fully silent as previously documented. [line 356] [Source]

thinking [Source]

  • Same display: "omitted" correction as streaming above, plus a new example SSE event showing the empty-string thinking_delta that precedes signature_delta. [line 469, lines 773-780]

thinking-troubleshooting [Source]

  • New guidance on the conversation-binding 400: the error usually names what changed, but code shouldn't pattern-match on that wording; a message that stops right after "Invalid signature in thinking block" with no reason clause means the signature itself failed verification, not a prefix mismatch. [lines 111-113] [Source]
  • New note that a thinking block with an empty thinking field is still complete and valid — the signature alone carries the reasoning — and should be sent back unchanged like any other block. [line 129] [Source]

inference-hooks [Source]

  • New: sustained AI-security-server failures now trip a circuit breaker (Anthropic stops contacting the server and applies your failure-handling setting to every request) that resets automatically once the server is healthy again. [line 34] [Source]

inference-hooks-configuration [Source]

  • Removed the claim that unresolvable role membership makes a request "fail closed with a retryable error" — this is no longer documented behavior. [line 102] [Source]
  • Clarified the circuit-breaker recovery probe: it's a background synthetic test request, not real user traffic — "no user request is involved" — correcting earlier wording that it was "one request from your organization's normal traffic" that "proceeds for its user." [line 128] [Source]

inference-hooks-endpoint [Source]

  • Removed the note about ignorable "deprecated legacy aliases" for request-body field names — those aliases are apparently no longer sent.
  • Clarified that any transcript block field besides type, a text block's text, or a tool_result block's content/is_error can be null when unknown, with an example. [line 223] [Source]
  • The documented transcript body size ceiling changed: bodies stay under ~10MB "in practice," but the protocol actually allows up to 64 MiB, so integrators should size their own limits to that larger ceiling, not the flat 10MB figure previously stated. [line 233] [Source]
  • source.application's known values now include cowork alongside claude-ai and claude-code, and config-test is documented as covering both connection tests and circuit-breaker recovery checks. [line 237] [Source]
  • Rewrote the circuit-breaker recovery description to match inference-hooks-configuration: the probe is literally the same synthetic Test Connection request (source.application: config-test), signed normally but carrying no user content. [line 681] [Source]