Source Intelligence

DisclaimerUnofficial, and not affiliated with Anthropic. Nearly all of this is read straight out of what ships: npm bundles, captured prompts, published docs. Anthropic's own notes go in verbatim, marked as theirs. The rest is my reading, and every entry carries the strings behind it. If one looks wrong, vote it down and say why.

All releases Home olderv2.1.201 v2.1.203newer

Claude Code v2.1.202

18 entries read diff v2.1.201 → v2.1.202 Markdown

This release adds audio file transcription via @-mention, a new "Dynamic workflow size" setting in /config, and an explicit stop: true mechanism for ending /loop sessions. Background agents also gain improved git/GitHub authentication through a governed git proxy and better cloud credential forwarding. The internal teammate pane backend has been removed in a significant infrastructure cleanup.

Find
Pick an entry · j / k steps through
3 entries

New Featuresopen

Audio File Transcription via @-mention#

What

Users can now @-mention audio files in their prompts. Claude Code sends the audio to Anthropic's speech-to-text service and injects a structured transcript into the conversation before Claude sees it.

Details
  • The transcript is wrapped in <audio-transcript filename="..."> XML with optional duration="M:SS" metadata
  • If transcription fails, an error variant is injected instead of silently dropping the attachment
  • The reference panel regex that handles pasted/attached items now recognizes [Audio #N] placeholders alongside existing [Image #N] and [Pasted text #N] entries
  • Governed by a new HIPAA-compatible permission: allow_voice_file_transcription
  • Audio attachments are now passed through in subagent message filtering alongside image attachments
Evidence

Audio transcription handler (search for "audio-transcript" and "The user @-mentioned the audio file")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Dynamic Workflow Size Setting in /config#

What

A new "Dynamic workflow size" option is available in the /config menu, letting users set a persistent default scale for workflow agent counts (unrestricted / small / medium / large).

Usage
/config → Dynamic workflow size → [unrestricted | small | medium | large]
Details
  • The guideline is injected into each workflow turn so the model follows it without requiring repeated prompting
  • Changes mid-session emit a context message: "The user changed their workflow size guideline in /config: [size]."
  • Removing the setting emits: "The user removed their workflow size guideline in /config — workflow size is unrestricted again."
  • Two new tips are registered to teach users about the feature:
  • workflow-size-prompting — shown in explicit workflow contexts, suggests "use a small workflow, 5 agents max" and mentions /config
  • workflow-size-prompting-ambient — shown in other contexts, suggests "use at most 5 agents"
  • Prompting inline still works and overrides the setting: "use a small workflow, 5 agents max"
Evidence

Config menu entry (search for "Dynamic workflow size" and "workflowSizeGuideline")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

/loop Explicit Stop via ScheduleWakeup({stop: true})#

What

The ScheduleWakeup tool used in dynamic /loop sessions now accepts a stop: true field to explicitly terminate the loop, replacing the previous implicit approach of simply omitting the call.

Details
  • stop: true cancels all pending wakeups and records a terminal event
  • When called after the loop has already ended, it logs a cleanup-only message and suppresses the terminal event to avoid double-firing
  • The /loop instructions now clearly enumerate step 6: "To stop the loop — call ScheduleWakeup with stop: true (no other fields) ... Stopping is the loop's normal ending — the user can restart it anytime with /loop."
  • A loopEnded flag is now tracked in session state to guard against duplicate stop events
  • A noop field was already present; delaySeconds, reason, and prompt are now explicitly documented as required only when stop is not true
  • The tool description now reads: "call with stop: true to end the loop immediately" (was: "omit the call to end it")
Evidence

Loop stop handler (search for "[loop] model called ScheduleWakeup({stop:true})" and "stop the /loop — cancel pending wakeups, schedule nothing")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

10 entries

Improvementsopen

Agent Proxy: Governed Git and GitHub (gh) Shim#

Background agents running through the agent proxy now get automatic git and GitHub CLI (gh) authentication wired in per-session.

Details
  • On startup, the proxy writes a per-session git config that routes github.com traffic through the relay, sets the CA bundle, and injects a dummy token guard so accidental raw requests to GitHub fail fast
  • If gh is on PATH, the proxy also writes a per-session gh wrapper script (shim) in a temp directory and prepends it to PATH so gh commands also route through the relay
  • Supported tokens: GH_TOKEN, GITHUB_TOKEN, GH_ENTERPRISE_TOKEN, GITHUB_ENTERPRISE_TOKEN
  • The relay routing entry is appended to the global git config file named by $GIT_CONFIG_GLOBAL (refuses if the variable is unset to avoid writing a shared config)
  • Skip conditions are logged: CA bundle path contains newline/quote, gh not on PATH, path contains a single quote
  • The permission pattern for gh operations has been expanded to include prs+comment, releases+upload, and repos+fork
  • The proxy status message now clearly distinguishes between git-only and git+gh modes
Evidence

Git proxy config writer (search for "[agent-proxy] governed git: relay routing for" and "governed-git (auto-generated; do not edit)")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

AWS and GCP Credential Environment Variables Forwarded to Subagents#

Several cloud SDK environment variables that were previously not forwarded to spawned subagents are now included in the forwarded set.

Newly forwarded variables:

  • GCLOUD_PROJECT, GOOGLE_CLOUD_QUOTA_PROJECT
  • GCE_METADATA_HOST, GCE_METADATA_IP, METADATA_SERVER_DETECTION
  • AWS_CONTAINER_CREDENTIALS_FULL_URI, AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
  • AWS_CONTAINER_AUTHORIZATION_TOKEN, AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE
  • AWS_EC2_METADATA_SERVICE_ENDPOINT, AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE
  • AWS_REGION, AWS_DEFAULT_REGION

This fixes authentication failures when subagents attempt to use EC2 instance profiles, ECS task roles, GCE metadata server credentials, or custom metadata endpoints.

Evidence

Environment forwarding list (search for "METADATA_SERVER_DETECTION" and "AWS_EC2_METADATA_SERVICE_ENDPOINT")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Unified Credential Error Messages for Cloud Providers#

The separate error strings for each cloud credential provider (Bedrock, Vertex, Foundry, Mantle, Anthropic-on-AWS) have been consolidated into a single generic credential error factory.

Details
  • All credential providers now use: "[Provider] credentials are managed by the desktop app, but none are available. The app may have quit or its credential file is stale — restart the desktop app."
  • A new explicit message for incompatible credential types: "Background agents and teammates are not supported for this credential kind. Run this from the main session, or switch the desktop app to a profile-based or API-key credential. If this is the main session, restart the desktop app."
  • AWS credential detection now uses Pqs() to read AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_PROFILE, AWS_CONFIG_FILE, and AWS_SHARED_CREDENTIALS_FILE
Evidence

Credential error factory (search for "host-managed provider credentials unavailable" and "Background agents and teammates are not supported for this credential kind")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

MCP Connector Duplicate Entry Merging#

When multiple skill manifest entries resolve to the same MCP connector, they are now automatically merged into a single connector entry instead of producing ambiguous server_ambiguous errors.

Details
  • Duplicate entries are merged by unioning their tool lists
  • A warning is emitted: "[N] manifest entries resolve to connector '[name]' and were merged into one ([M] tools). A viewer with more than one connector named '[name]' gets server_ambiguous on every call until the duplicates are renamed or removed."
  • Entries that cannot be resolved (using the claude_ai_ prefix namespace) are reported as unresolved rather than silently dropped
Evidence

Connector dedup logic (search for "were merged into one (" and "server_ambiguous on every call")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Skill Re-Invocation Deduplication#

When a slash command (skill) is invoked a second time within the same session, byte-identical invocations are now elided rather than injecting the full skill content again.

Details
  • If the content is already present in the conversation body, a brief inline note replaces it: "Skill /[name] is already loaded above; instructions unchanged. Arguments: [args]"
  • If the content is only in the invoked-skills attachment (compacted), a new-invocation message is injected: "Skill /[name] was loaded earlier (see the invoked-skills reminder above); this is a NEW invocation — follow those instructions now, including any setup steps."
  • If a skill was truncated by compaction, the re-invocation injects the full content preceded by: "(Re-invocation of /[name] — the previously loaded copy was truncated by compaction; the full instructions follow.)"
  • Logged when elision occurs: "SkillTool eliding byte-identical re-invocation of skill [name]"
Evidence

Skill re-invocation handler (search for "SkillTool eliding byte-identical re-invocation of skill" and "is already loaded above; instructions unchanged")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

bypassPermissions Mode Not Restored from Sessions Unless Explicitly Launched#

When restoring a session whose saved permission mode was bypassPermissions, Claude Code now checks whether the current session was launched with --dangerously-skip-permissions (or the mode is allowed by settings/policy). If not, it falls back to default and logs a warning.

Details
  • Previously, a restored session could silently inherit dangerous permissions from a prior session
  • The warning logged: "[externalMetadataToAppState] Refusing restored mode 'bypassPermissions' (disabled by settings/policy or session not launched with --dangerously-skip-permissions); falling back to 'default'"
Evidence

Permission mode restore guard (search for "Refusing restored mode 'bypassPermissions'")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Worktree Orphan Directory Cleanup#

A new self-healing check detects and removes orphaned worktree directories left behind from interrupted worktree operations.

Details
  • A directory is considered orphaned when its path exists on disk but is not registered as an active worktree in git
  • Before removing, the check verifies: (1) the branch has no unpushed commits, (2) git remote succeeds, (3) git rev-parse succeeds on the branch ref
  • If any safety check fails, removal is refused with a message explaining what to do manually
  • On successful cleanup: "[worktree] removed orphaned worktree directory at [path]"
Evidence

Orphan worktree cleanup (search for "Orphaned worktree dir at" and "refusing to self-heal")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Binary Update Download Retry and Error Reporting#

Updates to the binary downloader improve resilience and error surfacing during interrupted downloads.

Details
  • Checksum mismatches now produce a short canonical error string "Checksum mismatch during binary download" in addition to the detailed mismatch message, making them easier to surface and log
  • Repeated connection drops during a binary download now report: "Connection dropped repeatedly during binary download" after exhausting retries
  • Version fetch failures now emit: "Failed to fetch version from binary repo" as a canonical event alongside the detailed attempt-count message
  • Manifest fetch connection drops are similarly tagged: "Manifest fetch connection dropped on attempt [N]"
Evidence

Binary updater (search for "Checksum mismatch during binary download" and "Connection dropped repeatedly during binary download")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

PDF Empty Page Tree Detection#

When a PDF attachment reports 0 pages (malformed or empty page tree), Claude Code now emits a specific diagnostic: "PDF reports 0 pages (empty page tree). The PDF may be invalid."

Details
  • The check runs inside the pdftoppm-based PDF-to-image renderer (external poppler-utils tool; 120 s timeout, max file size 100 MB)
  • Triggered when pdftoppm exits non-zero and its stderr matches /Wrong page range given.*last page \((\d+)\)/i with a captured page count of exactly 0
  • The error reason field is "corrupted" — the same category used for structurally damaged PDFs; the distinct message distinguishes an empty page tree from the generic "PDF file is corrupted or invalid." error
  • This check lives inside a cascaded error-classification block that also handles: password_protected (stderr contains "password"), page_out_of_range (same regex but captured count > 0), xref/trailer syntax errors (Syntax Error: Couldn't find trailer dictionary / read xref table), and a generic stderr pass-through fallback
  • Pre-conditions enforced before pdftoppm is invoked: path must be a regular file, size > 0, size ≤ 100 MB, and pdftoppm availability is verified via a cached -v probe (5 s timeout); if any precondition fails, a different error reason is returned without reaching this check
Evidence

PDF validation (search for "PDF reports 0 pages" and "Wrong page range given" inside NGo())

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Refusal Fallback Tracking#

Refusal-continuation retries are now tracked explicitly with a refusalFallbackOccurred flag in session state, allowing downstream code to distinguish sessions where a silent retry occurred.

Details
  • refusalFallbackOccurred is a boolean in session state initialized to false; it is set to true (Hdr()) only when a silent (non-interactive, ni = true) refusal fallback fires — visible-to-user fallbacks do not set it
  • When the flag is true and the convolute_arcades GrowthBook feature flag is also active, the HTTP header x-is-refusal-fallback: true is attached to every subsequent Anthropic API request in that query, signalling to the backend that a retry is in progress
  • The flag is reset to false per-query by XHn(), and is also cleared on session transitions: both SHn() (new session UUID) and pA() (session switch) reset it, ensuring it does not bleed across tasks
  • During conversation rewind, kCe() is read as latchActive to determine whether the refusalFallbackModelLatch should be cleared and the original model restored; this prevents rewinding past a fallback from leaving the model permanently switched
  • The refusal_continuation QueryEvent now brackets the retry window with phase: "begin" (carrying salvageText to preserve any partial streamed text visible in the UI) and phase: "end"; the SDK schema describes it as "@internal Emitted when a silent refusal-continuation retry begins … or ends"
  • The internal QueryEvent 'refusal_continuation' description was updated from "window begins" to "retry begins" to more accurately reflect the mechanism
  • Session state gains refusalFallbackOccurred: false at initialization, reset per-query via XHn()
Evidence

Refusal fallback state (search for "refusalFallbackOccurred", "x-is-refusal-fallback", and "convolute_arcades")

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

1 entry

Bug Fixesopen

#

  • Hook async JSON output that fails schema validation now gracefully delivers recognized fields (systemMessage, metrics, hookSpecificOutput) instead of dropping everything. Malformed individual fields are logged and skipped rather than failing the whole hook output. (search for "async hook JSON output failed schema validation")
  • VirtualMessageList desync between item keys and messages array now produces specific diagnostic messages distinguishing a length mismatch from an undefined element, improving debuggability. (search for "VirtualMessageList: itemKeys/messages length desync")
  • The totalTokensReminder setting's padded-countdown mode gains a new totalTokensReminderAfterUserTurn flag. When enabled, the token budget re-anchors to the full configured value at the start of each user turn (task-budget semantics) and the reminder also fires after regular user prompts, not only after tool results. (search for "CLAUDE_CODE_TOTAL_TOKENS_REMINDER_AFTER_USER_TURN")
  • Session hook failures during session reset are now caught and logged with [skills] session-reset hook failed: rather than propagating as unhandled errors. (search for "[skills] session-reset hook failed:")
1 entry

Notesopen

Teammate Pane Backend Removed#

The InProcessBackend and PaneBackendExecutor classes (which backed the teammate/swarm pane UI) have been removed from the codebase. Associated log messages ([InProcessBackend] ..., [PaneBackendExecutor] ..., [BackendRegistry] ...), the --teammate-mode CLI flag, and the ITermBackend pane show/hide/rebalance stubs are gone.

Users relying on the teammate swarm UI should be aware this infrastructure has been cleaned out. The teammateMode configuration key still exists for compatibility, but the pane-spawning backend is no longer present.

Verbatim
Official · Anthropic

Anthropic’s official release notes

Published verbatim by Anthropic for v2.1.202. Text is unmodified from the upstream changelog. Everything else on this page came out of the bundle instead, which is why the two lists don't match.

  • 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
  • Fixed a crash in the inline Ctrl+R history search when accepting or cancelling while the search was still scanning the history file
  • Fixed /rename on background sessions being reverted when the job restarts, which broke addressing the session by its new name
  • Fixed transient mTLS handshake failures when settings were re-applied during an in-place client certificate rotation
  • 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 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
  • 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 /remote-control sessions showing the wrong permission mode in the mobile and web apps
  • 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
  • Fixed re-invoking an already-loaded skill appending a duplicate copy of its instructions to context
  • 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
System prompt

1 of 27 tool descriptions changed.

Claude Code, interactive mode