Claude docs changes for April 3rd, 2026 [diff]

Executive Summary

  • Distributed tracing support (beta): Claude Code can now export distributed traces via OpenTelemetry, with new env vars and backend recommendations for tools like Jaeger, Grafana Tempo, and Datadog
  • CLAUDE.local.md: New personal, gitignored project-specific instructions file that loads alongside CLAUDE.md, allowing per-worktree private notes without affecting version control
  • Computer use on Windows: Desktop app computer use is now available on Windows in addition to macOS
  • Python SDK parity: Per-step token breakdowns and the dontAsk permission mode are now available in the Python SDK (previously TypeScript-only)
  • Plugin bin/ directory + marketplace CLI: Plugins can now ship executables under bin/, and marketplaces can be managed via claude plugin marketplace CLI subcommands

New Claude Code versions

2.1.91

New features

  • Added MCP tool result persistence override via _meta["anthropic/maxResultSizeChars"] annotation (up to 500,000 characters), allowing larger results like DB schemas to pass through without truncation
  • Added disableSkillShellExecution setting to disable inline shell execution in skills, custom slash commands, and plugin commands
  • Added support for multi-line prompts in claude-cli://open?q= deep links (URL-encoded newlines %0A no longer rejected)
  • Plugins can now ship executables under bin/ and invoke them as bare commands from the Bash tool

Existing feature improvements

  • /feedback now explains why it's unavailable instead of disappearing from the slash menu
  • Improved /claude-api skill guidance for agent design patterns including tool surface decisions, context management, and caching strategy
  • Improved performance: faster stripAnsi on Bun by routing through Bun.stripANSI
  • Edit tool now uses shorter old_string anchors, reducing output tokens

Major bug fixes

  • Fixed transcript chain breaks on --resume that could lose conversation history when async transcript writes fail silently
  • Fixed cmd+delete not deleting to start of line on iTerm2, kitty, WezTerm, Ghostty, and Windows Terminal
  • Fixed plan mode in remote sessions losing track of the plan file after a container restart, which caused permission prompts on plan edits and an empty plan-approval modal
  • Fixed JSON schema validation for permissions.defaultMode: "auto" in settings.json

Claude Code changes

Changed documents

amazon-bedrock [Source]

  • Added reference link to "Bedrock token burndown and quotas" documentation [line 258] [Source]

best-practices [Source]

  • Added CLAUDE.local.md as a new file location — a personal, project-specific notes file that should be gitignored [line 42] [Source]

commands [Source]

  • Added new /powerup command: "Discover Claude Code features through quick interactive lessons with animated demos" [line 48] [Source]

common-workflows [Source]

  • Clarified /resume picker behavior: only shows interactive sessions; sessions from claude -p or SDK invocations don't appear but can still be resumed via claude --resume <session-id> [~line 117]
  • Documented that subagent worktrees orphaned by a crash or interrupted parallel run are automatically removed at startup once older than cleanupPeriodDays, provided they have no modifications or unpushed commits; worktrees created with --worktree are never removed by this sweep [~line 125]

computer-use [Source]

  • Clarified that Desktop app computer use is available on macOS and Windows (not just macOS) [~line 147]
  • Added platform comparison row to the Desktop vs CLI table: Desktop supports macOS and Windows; CLI supports macOS only [~line 160]

desktop [Source]

  • Computer use availability extended to Windows throughout the document [~lines 207-283]
  • On Windows, the computer use toggle takes effect immediately; macOS still requires granting Accessibility and Screen Recording permissions [~line 240]
  • CLAUDE.md and CLAUDE.local.md are both used by Desktop and CLI [~line 274]

env-vars [Source]

  • Added new env var CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE: when set to 1, keeps the existing marketplace cache when a git pull fails instead of wiping and re-cloning — useful in offline/airgapped environments [line 104] [Source]

index [Source]

  • Corrected teleport command syntax: /teleport updated to claude --teleport [~line 14]

interactive-mode [Source]

  • Added Alt+T to the list of shortcuts that require Option-as-Meta configuration in macOS terminals [~line 401]
  • Updated VS Code configuration instruction: now correctly directs users to set "terminal.integrated.macOptionIsMeta": true in VS Code settings [~line 406]
  • Changed Ctrl+L description from "Clear terminal screen" to "Redraw the screen" (conversation history is preserved) [~line 415]
  • Extended thinking toggle no longer requires /terminal-setup; configure Option as Meta in your terminal instead [~line 424]

keybindings [Source]

  • Added new global action app:redraw bound to Ctrl+L [~line 454]
  • Added second default binding for chat:undo: now Ctrl+\_ and Ctrl+Shift+- [~line 463]
  • Added new confirmation context action confirm:toggle bound to Space [~line 471]
  • Updated transcript:exit default bindings to include q (previously only Ctrl+C and Escape) [~line 480]
  • Added new settings context action settings:close bound to Enter (saves and closes; Escape discards and closes) [~line 488]

mcp [Source]

  • Added new MCP server entries: Exa (Web Search + Code Docs Search), Fiscal.ai (Public Equity Fundamental Data), Lucid (Ideate, diagram, and align teams), Enterpret Wisdom, GoCardless, IFTTT [~lines 500-562]
  • Added new section "Override result size per tool": MCP server authors can set _meta["anthropic/maxResultSizeChars"] in a tool's tools/list response to allow individual tools to return results larger than the default limit (up to 500,000 characters) [line 1605] [Source]

memory [Source]

  • Added CLAUDE.local.md as a new "Local instructions" scope in the CLAUDE.md files table [line 43] [Source]
  • Documented full behavior of CLAUDE.local.md: loaded alongside CLAUDE.md, appended after it so personal notes take precedence when instructions conflict; not loaded from additional directories; works across worktrees via home directory imports [lines 80-123] [Source]
  • Updated /memory command description: now lists CLAUDE.local.md files as well [line 316] [Source]

monitoring-usage [Source]

  • Updated intro to mention distributed traces via the traces protocol (beta) [line 3] [Source]
  • Added new env var OTEL_LOG_TOOL_CONTENT: enables logging of tool input/output content in span events (requires tracing, truncated at 60 KB) [line 78] [Source]
  • Added new "Traces (beta)" subsection: enabled via CLAUDE_CODE_ENABLE_TELEMETRY=1 and CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, includes trace-specific env vars (OTEL_TRACES_EXPORTER, OTEL_EXPORTER_OTLP_TRACES_PROTOCOL, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT) [lines 94-104] [Source]
  • Added "For traces" backend section recommending Jaeger, Zipkin, Grafana Tempo, Honeycomb, Datadog [line 492] [Source]
  • Added security note that OTEL_LOG_TOOL_CONTENT=1 can expose raw file contents and Bash output in trace spans [~line 500]

overview [Source]

  • Corrected teleport command syntax: /teleport updated to claude --teleport [~line 14]

permission-modes [Source]

  • Clarified that acceptEdits auto-approves file edits "except in protected directories" [line 90] [Source]
  • Added new paragraph: writes to .git, .vscode, .idea, .husky, and .claude are never auto-approved in any mode (with exceptions for .claude/commands, .claude/agents, .claude/skills) [line 96] [Source]

permissions [Source]

  • Added .husky to the list of directories protected even in bypassPermissions mode [~line 847]
  • Added note: when sandboxing is enabled with autoAllowBashIfSandboxed: true (the default), sandboxed Bash commands run without prompting even if permissions include ask: Bash(*) [~line 855]

plugin-marketplaces [Source]

  • Added guidance to use CLAUDE_CODE_PLUGIN_CACHE_DIR to install plugins directly to a seed path during container image builds, avoiding a separate copy step [lines 570-577] [Source]
  • Added note that remove and update commands are blocked against seed-managed marketplaces [line 584] [Source]
  • Added new section "Manage marketplaces from the CLI" with full documentation of claude plugin marketplace add, list, remove, and update subcommands [lines 780-873] [Source]
  • Added troubleshooting entry for "Marketplace updates fail in offline environments" explaining the CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1 workaround [line 946] [Source]

plugins [Source]

  • Added bin/ directory to the plugin components table: executables placed here are added to the Bash tool's PATH while the plugin is enabled [line 180] [Source]

plugins-reference [Source]

  • Added bin/ directory as a plugin component with full documentation: executables placed here are added to the Bash tool's PATH while the plugin is enabled [~line 1061]

quickstart [Source]

  • Removed claude commit from the quick-reference commands table [~line 1120]
  • Corrected exit instruction: exit or Ctrl+D (not Ctrl+C) [~line 1124]

sandboxing [Source]

  • Clarified sandbox auto-allow mode: explicit ask rules now only apply to commands that fall back to the regular permission flow (not to sandboxed commands) [~line 1137]
  • Fixed excludedCommands example: entry for docker should be "docker *" (with glob) rather than just "docker" [~line 1146]

settings [Source]

  • Added CLAUDE.local.md as the local scope for the CLAUDE.md row in the scopes table [~line 1168]
  • Updated cleanupPeriodDays description: also controls automatic removal of orphaned subagent worktrees [~line 1177]
  • Updated disableDeepLinkRegistration description: the q parameter in deep links now supports multi-line prompts via URL-encoded newlines (%0A) [~line 1184]
  • Updated excludedCommands example: corrected from ["docker"] to ["docker *"] (glob syntax required) [~line 1201]

skills [Source]

  • Updated allowed-tools frontmatter syntax: now uses space-separated string (Read Grep) instead of comma-separated (Read, Grep); accepts a space-separated string or a YAML list [~lines 1264-1274]

statusline [Source]

  • Added new status line field workspace.added_dirs: additional directories added via /add-dir or --add-dir [line 140] [Source]
  • Added new status line field session_name: custom session name set with --name or /rename (absent if not set) [line 154] [Source]

sub-agents [Source]

  • Updated acceptEdits mode description: "Auto-accept file edits except in protected directories" [~line 1368]
  • Added .husky to the list of protected directories in the bypassPermissions warning [~line 1375]

terminal-guide [Source]

  • Corrected exit instruction: Ctrl+D (not Ctrl+C) to exit Claude Code [~line 1397]

API changes

Changed documents

agent-loop [Source]

  • Clarified that in TypeScript, the compact boundary is a separate SDKCompactBoundaryMessage type rather than a subtype of SDKSystemMessage [~line 10]
  • Added "auto" (TypeScript only) permission mode to the modes table: uses a model classifier to approve or deny each tool call [~line 20]

api-and-data-retention [Source]

  • Renamed "HIPAA compliance" to "HIPAA readiness" throughout the document — language now describes the offering as "HIPAA-ready" rather than "HIPAA-compliant"; the section now clarifies that HIPAA-ready API access no longer requires ZDR [lines 10-64] [Source]

cost-tracking [Source]

  • Updated documentation: Python SDK now exposes per-step token breakdowns on each assistant message via message.usage and message.message_id (previously documented as TypeScript-only) [~lines 43-56]
  • Renamed section from "Track detailed usage in TypeScript" to "Track per-step and per-model usage" [~line 74]

file-checkpointing [Source]

  • Added -p flag to the CLI rewind command: claude -p --resume <session-id> --rewind-files <checkpoint-uuid> [~line 99]

hosting [Source]

  • Clarified that the Claude Code CLI is bundled in both SDK packages — no separate install needed [~line 113]

mcp [Source]

  • Corrected .mcp.json loading behavior: the SDK does not load filesystem settings automatically; settingSources: ["project"] must be set explicitly [~line 126]

modifying-system-prompts [Source]

  • Corrected TypeScript systemPrompt syntax: { type: "preset", preset: "claude_code" } (was missing the type field) [~line 148]

permissions [Source]

  • dontAsk permission mode is now available in both Python and TypeScript (previously TypeScript-only) [line 79] [Source]
  • Added new auto mode (TypeScript only) to the modes table: uses a model classifier to approve or deny each tool call [line 83] [Source]

plugins [Source]

  • Fixed code example: message.message.content instead of message.content to correctly access assistant message content [~line 212]

python [Source]

  • Added "dontAsk" to the PermissionMode type definition [line 983] [Source]
  • Added message_id: str | None field to AssistantMessage dataclass: API message ID shared by all messages from one turn [line 1344] [Source]
  • Added model_usage: dict[str, Any] | None field to ResultMessage dataclass with full documentation of the inner dict keys (inputTokens, outputTokens, cacheReadInputTokens, cacheCreationInputTokens, webSearchRequests, costUSD, contextWindow, maxOutputTokens) [line 1401] [Source]

quickstart [Source]

  • Removed TypeScript-only restriction from dontAsk mode; added auto (TypeScript only) permission mode to the table [~line 290]

remote-mcp-servers [Source]

  • Added new remote MCP server entries: Exa, Fiscal.ai, Lucid, Intuit Credit Karma, Enterpret Wisdom, GoCardless, IFTTT [~lines 389-486]

streaming-output [Source]

  • Clarified compact boundary message type names per SDK: SDKCompactBoundaryMessage in TypeScript vs SystemMessage with subtype "compact_boundary" in Python [~line 317]

structured-outputs [Source]

  • Updated result message checks: added message.subtype === "success" guard to all message.type === "result" checks to prevent processing error results as structured data [~lines 330-349]

typescript [Source]

  • Added "auto" to the PermissionMode type union: "Use a model classifier to approve or deny each tool call" [line 541] [Source]

typescript-v2-preview [Source]

  • Added msg.subtype === "success" guard to result message check [~line 363]