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
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
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
Corrected .mcp.json loading behavior: the SDK does not load filesystem settings automatically; settingSources: ["project"] must be set explicitly [~line 126]
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]
Clarified compact boundary message type names per SDK: SDKCompactBoundaryMessage in TypeScript vs SystemMessage with subtype "compact_boundary" in Python [~line 317]
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]