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.
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
Removed /tasks as a way to monitor cloud session progress, matching the claude-code-on-the-web change; only claude.ai/code is mentioned now. [line 99] [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]
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]
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]
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]
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]
Same VS Code extension changes as ide-integrations above: new Hooks [line 101] and Permissions [line 102] Customize-menu panels, Focus view subagent progress rows [line 108], the new Agent map [lines 112-114], and the new X-to-remove selection indicator [line 129] (all v2.1.269+ except the last). [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.
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.
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]
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]
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]
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]
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]
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]
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]