Claude Code 2.1.202 adds a "Dynamic workflow size" /config setting that advises Claude to keep dynamic workflows small/medium/large, plus new workflow.run_id/workflow.name OpenTelemetry attributes for reconstructing a workflow run's activity, and fixes a long list of bugs across Remote Control, background sessions, MCP config errors, voice dictation, and the installer/updater.
The Bash tool API docs got a substantial rewrite: it's now explicitly documented as a client tool with a full request/response round trip, a new "Tool versions" section (bash_20250124 vs. the legacy computer-use-only bash_20241022), and a per-model pricing table replacing the old flat 245-token figure.
Code execution tool docs clarify container lifecycle (30-day expiry with ~5-minute checkpointing) and that Claude Haiku 4.5 now accepts the newer code_execution_20260120/code_execution_20260521 tool versions, though without programmatic tool calling or REPL persistence.
Files API docs document the container_upload content block for sending files to the code execution tool and the downloadable metadata field that determines which files can be fetched back.
The C# SDK reference page for Sessions Events, which had been showing a "Console temporarily unavailable" placeholder in recent crawls, is now fully populated with the real API reference.
Added a "Dynamic workflow size" setting in /config for controlling how large Claude generally makes dynamic workflows (small/medium/large agent counts) — an advisory guideline, not an enforced cap
Added workflow.run_id and workflow.name OpenTelemetry attributes to telemetry emitted by workflow-spawned agents, so a workflow run's activity can be reconstructed from OTel data
Existing feature improvements
Improved /workflows agent list layout: wider titles, a dedicated time column, shorter model names, and no per-row tool-call counts
Improved MCP error messages: clearer error when a server config has url but no type, suggesting "type": "http" instead of the misleading "command: expected string"
Changed /review <pr> back to a fast single-pass review; use /code-review <level> <pr#> for the multi-agent review at a chosen effort level
Major bug fixes
Fixed /rename on background sessions being reverted when the job restarts, which broke addressing the session by its new name
Fixed commands sent from Remote Control (mobile/web) into an interactive session failing with "Unknown command"
Fixed images and files sent from the Remote Control mobile or web app without a caption being silently dropped
Fixed /remote-control sessions showing the wrong permission mode in the mobile and web apps
Fixed opening a chat from claude agents sometimes failing with "currently running as a background agent" followed by a worker crash/respawn loop
Fixed workflow scripts with unicode quote escapes in strings being corrupted before parsing; workflow parse errors now show the offending line instead of always blaming TypeScript
Fixed voice dictation retrying in an unbounded loop when the microphone or audio recorder fails — repeated capture failures now pause voice input
Fixed resuming a session by name, or opening the resume picker, taking minutes and using a large amount of memory in repositories with many git worktrees
Fixed installer and updater downloads failing immediately with "aborted" when a proxy or network drops the connection mid-download — transient connection drops now retry (up to three attempts)
Fixed re-invoking an already-loaded skill appending a duplicate copy of its instructions to context
Fixed a crash in the inline Ctrl+R history search when accepting or cancelling while the search was still scanning the history file
Fixed transient mTLS handshake failures when settings were re-applied during an in-place client certificate rotation
Fixed the sign-in URL printed by claude auth login and claude mcp login --no-browser not being reliably clickable when it wraps over SSH — it is now emitted as a single hyperlink
Documented the new parent_agent_id field on session messages: for a nested subagent's messages, the agentId of the subagent that spawned it (requires v2.1.202+). [line 246] [Source]
A name set with /rename or Ctrl+R on a background session now persists when the supervisor stops and restarts its process, instead of reverting to the dispatch-time name and breaking claude --resume <name> (v2.1.202). [line 374] [Source]
Removed the "Deploying Claude Code across your organization? Talk to sales..." enterprise promo banner from the top of the page — the third flip on this banner in as many days (removed July 5th, re-added July 6th). [lines 1-4] [Source]
/review's description no longer says it uses "the same review engine as /code-review", matching the v2.1.202 change that made /review a fast single-pass review again. [lines 13] [line 99] [Source]
/security-review's description changed from "gives a deeper read-only pass" to "checks the diff for security vulnerabilities". [line 13] [Source]
Added a note that fresh Debian/Ubuntu installs may lack curl, needed to download the apt signing key, with the sudo apt install curl fix if the download fails with sudo: curl: command not found. [line 22] [Source]
Added troubleshooting for apt install ./claude-desktop_*.deb failing with E: Unsupported file ... given on commandline, which means the glob didn't match a downloaded .deb in the current directory. [line 72] [Source]
Added a new "The connection dropped while downloading the update" entry: claude install/claude update/the automatic updater now retry up to three times on a dropped connection, stalled transfer, or failed checksum instead of failing immediately with the bare error aborted (fixed in v2.1.202). [lines 848-864] [Source]
Added guidance that if Sonnet 5 refuses a request citing a suspected prompt injection on v2.1.200 or earlier, claude update picks up the v2.1.201 fix. [line 918] [Source]
Documented that async hook JSON output is now validated against the same output schema as synchronous hooks, dropping fields with the wrong type (visible with --debug) instead of crashing the session — a crash that previously recurred on every resume (fixed in v2.1.202). [line 2802] [Source]
Esc now closes an open dialog (such as a permission prompt) instead of interrupting Claude and leaving the dialog open (v2.1.202). [line 27] [Source]
Accepting or cancelling a Ctrl+R history search now works immediately even while history is still loading, instead of sometimes reporting an internal error (v2.1.202). [line 221] [Source]
Documented the clearer error for a JSON server entry with url but no type (add "type": "http" (or "sse" / "ws")), replacing the old confusing command: expected string, received undefined message (v2.1.202). [line 70] [Source]
Documented new workflow.run_id and workflow.name span attributes on API and tool-call spans for agents spawned by a Workflow tool run; workflow.name is replaced with custom for user-authored workflows unless OTEL_LOG_TOOL_DETAILS=1 (requires v2.1.202+). [lines 166-167] [lines 390-391] [Source]
Clarified that Claude Code re-reads mTLS certificate/key files each time it applies settings, so rotating the certificate is just a matter of replacing the files at the same paths — related to the v2.1.202 fix for transient handshake failures during in-place rotation. [line 83] [Source]
Documented that the Remote Control mode dropdown now reflects the local session's actual mode, including modes set from the terminal, and updates live — before v2.1.202 the dropdown didn't report the session's mode at all, though permission prompts were always generated correctly. [line 75] [Source]
Clarified that a compound cd && git command only prompts when the cd actually changes directory (since a new directory could run different git hooks); a cd that resolves to the current directory is a no-op and stays prompt-free. [line 167] [Source]
Documented that approving a file path with "Yes, don't ask again" now escapes gitignore-pattern characters ([, ], *, etc.) in the generated rule, fixing rules for paths like [2024-06] Reports that previously could fail to match themselves or match unintended siblings (v2.1.202). [line 250] [Source]
Added "Send images and files from your phone or browser" as a headline capability; attachments sent without a caption used to be silently dropped before reaching the session (fixed v2.1.202). [line 10] [Source]
Documented that self-paced /loop now ends explicitly via ScheduleWakeup with stop: true, and that a fallback wakeup fires ~20 minutes later if an iteration neither reschedules nor stops (previously, not rescheduling was the only way to end a loop). [line 114] [Source]
Documented the new workflowSizeGuideline setting (unrestricted/small/medium/large, shown as Dynamic workflow size in /config), sent to Claude as advisory guidance on agent counts for dynamic workflows it writes (requires v2.1.202+). [line 309] [Source]
Documented that re-invoking a skill whose rendered content is unchanged now adds a short "already loaded" note instead of appending a full duplicate copy of its instructions; changed content (different arguments or dynamic context) still appends in full (v2.1.202). [line 324] [Source]
Documented that ScheduleWakeup now accepts stop: true to end a self-paced loop by cancelling the pending wakeup (requires v2.1.202+). [line 32] [Source]
Updated the comparison table now that /review <pr> is "a single-pass review at the session's effort" (seconds to a few minutes) rather than "the medium /code-review engine", matching the v2.1.202 change. [lines 82-83] [Source]
Clarified that the "Voice input is failing repeatedly and has been paused" counter now counts both startup failures and a recorder that starts and then produces no audio, not just startup failures (v2.1.202). [line 151] [Source]
Added a new "Set a size guideline" section documenting the /configDynamic workflow size setting and its four values (unrestricted = no guideline/default, small < 5 agents, medium < 15 agents, large < 50 agents) — advisory only, still bounded by the runtime's hard agent caps. [lines 284-294] [Source]
Rewritten to lead with the client-tool model: Claude only returns the tool_use block naming a command, your application runs it and returns the output — includes a full example tool_use response and the request/response round trip. [line 11] [Source]
Added a new "Tool versions" section: bash_20250124 is current and needs no beta header (Sonnet 3.7 onward); the legacy bash_20241022 is computer-use-beta-only and limited to the original Claude Sonnet 3.5. [lines 104-108] [Source]
Replaced the flat "245 input tokens" pricing figure with a per-model table: 325 tokens for Claude Opus 4.7/4.8, 244 tokens for Opus 4.6, Sonnet 4.6, and earlier. [lines 335-342] [Source]
Rewrote the security guidance: the allowlist check in the implementation walkthrough is now framed as "a tripwire for obvious mistakes, not an enforcement boundary" — real isolation is running the session in a container or VM — and added "redact credentials and secrets from output" to the recommended controls. [line 333] [Source]
Claude Haiku 4.5 now supports code_execution_20260120 and code_execution_20260521, though programmatic tool calling and the REPL state persistence they add still aren't available on Haiku, so the newer versions behave like code_execution_20250825 there. [line 36] [lines 39-43] [Source]
Clarified container reuse: containers expire 30 days after creation, are checkpointed after ~5 minutes of inactivity, and restore automatically when a request references them within the 30-day window; an expired container can't be reused and must be recreated by omitting the container parameter. Removed the separate container_expired error code in favor of this description. [line 478] [line 425] [Source]
Spelled out that the sandbox container has no internet access, so Claude can only use the pre-installed libraries and can't install packages at runtime. [line 108] [Source]
Result block field names were changed to snake_case (numLines→num_lines, oldStart→old_start, etc.) and result type values are now specific to the operation (text_editor_code_execution_view_result, ..._create_result, ..._str_replace_result) instead of one shared text_editor_code_execution_result. [lines 307-345] [Source]
Documented the container_upload content block for sending files to the code execution tool, and the downloadable metadata field (false for uploaded files, true only for files created by skills or code execution). [line 72] [lines 154-158] [Source]
Documented that .csv and .md files can now be uploaded through the Files API with an explicit text/plain content type, as an alternative to inlining their content as plain text. [line 167] [Source]
Added a "Not downloadable (400)" error case: downloading a file you uploaded (rather than one created by skills or code execution) returns a 400. [line 286] [Source]
The 100-page limit now applies to any request whose context window is under 1M tokens, rather than being tied specifically to "models with a 200k-token context window". [line 27] [Source]
Noted that Microsoft Foundry doesn't support the Files API for deployments hosted on Azure. [line 95] [Source]
Added guidance that for small elements, precision loss from downscaling can be avoided by cropping the region of interest (offsetting returned coordinates by the crop origin) or by using a high-resolution-tier model. [line 19] [Source]
Clarified that for most photos/screenshots the visual token limit — not the edge limit — determines the final resize, and gave a worked example (1920×1080 → 1456×819, not the edge-limit-implied 1568×882) plus a high-resolution-tier counter-example where the same scanned page isn't resized at all. [line 36] [Source]
Added SDK examples (Python, TypeScript, C#, Go, Java, PHP, Ruby) for the model-override/system-prompt-clearing session example, which previously only showed cURL and CLI. [line 59] [Source]
The C# SDK reference for the Sessions Events API (list, send, and stream session events, plus the full set of BetaManagedAgents*Event model definitions) is now fully populated. Recent crawls of this page had been returning a "Console temporarily unavailable" placeholder instead of real content.
Minor edits (not itemized individually)
adaptive-thinking.md, citations.md, extended-thinking.md, overview.md, prompt-caching.md, task-budgets.md, and manage-claude/workspaces.md had small wording/link fixes, including automatic prompt caching now being GA on Google Cloud (previously Bedrock and Google Cloud were both listed as unsupported; only Bedrock still is).