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

Executive Summary

  • Vim visual mode (v/V) and custom themes (via /theme) added to the Claude Code UI
  • Hooks can now invoke MCP tools directly via type: "mcp_tool" in shell command hooks
  • Linux package manager support added (apt for Debian/Ubuntu, dnf for Fedora/RHEL, apk for Alpine)
  • Voice dictation gains tap-to-toggle mode alongside the existing hold-to-talk mode
  • Auto mode configuration extracted into a dedicated reference page (auto-mode-config.md)

New Claude Code versions

2.1.118

New features

  • Added vim visual mode (v) and visual-line mode (V) with selection, operators, and visual feedback
  • Merged /cost and /stats into /usage — both remain as typing shortcuts that open the relevant tab
  • Create and switch between named custom themes from /theme, or hand-edit JSON files in ~/.claude/themes/; plugins can also ship themes via a themes/ directory
  • Hooks can now invoke MCP tools directly via type: "mcp_tool"
  • Added DISABLE_UPDATES env var to completely block all update paths including manual claude update — stricter than DISABLE_AUTOUPDATER
  • WSL on Windows can now inherit Windows-side managed settings via the wslInheritsWindowsSettings policy key
  • Auto mode: include "$defaults" in autoMode.allow, autoMode.soft_deny, or autoMode.environment to add custom rules alongside the built-in list instead of replacing it
  • Added a "Don't ask again" option to the auto mode opt-in prompt
  • Added claude plugin tag to create release git tags for plugins with version validation
  • --continue/--resume now find sessions that added the current directory via /add-dir
  • /color now syncs the session accent color to claude.ai/code when Remote Control is connected
  • The /model picker now honors ANTHROPIC_DEFAULT_*_MODEL_NAME/_DESCRIPTION overrides when using a custom ANTHROPIC_BASE_URL gateway

Existing feature improvements

  • When auto-update skips a plugin due to another plugin's version constraint, the skip now appears in /doctor and the /plugin Errors tab

Major bug fixes

  • Fixed /mcp menu hiding OAuth Authenticate/Re-authenticate actions for servers configured with headersHelper, and HTTP/SSE MCP servers with custom headers being stuck in "needs authentication" after a transient 401
  • Fixed MCP servers whose OAuth token response omits expires_in requiring re-authentication every hour
  • Fixed MCP step-up authorization silently refreshing instead of prompting for re-consent
  • Fixed multiple MCP OAuth race conditions (cross-process lock contention, macOS keychain concurrent refresh, token refresh when server revokes before local expiry)
  • Fixed credential save crash on Linux/Windows corrupting ~/.claude/.credentials.json
  • Fixed /login having no effect in a session launched with CLAUDE_CODE_OAUTH_TOKEN
  • Fixed plan acceptance dialog offering "auto mode" instead of "bypass permissions" when running with --dangerously-skip-permissions
  • Fixed agent-type hooks failing with "Messages are required for agent hooks" when configured for events other than Stop or SubagentStop
  • Fixed prompt hooks re-firing on tool calls made by an agent-hook verifier subagent
  • Fixed /fork writing the full parent conversation to disk per fork — now writes a pointer and hydrates on read
  • Fixed Alt+K / Alt+X / Alt+^ / Alt+_ freezing keyboard input
  • Fixed connecting to a remote session overwriting your local model setting in ~/.claude/settings.json
  • Fixed typeahead showing "No commands match" error when pasting file paths that start with /
  • Fixed plugin install on an already-installed plugin not re-resolving a dependency installed at the wrong version
  • Fixed Remote Control sessions getting archived on transient CCR initialization blips during JWT refresh
  • Fixed subagents resumed via SendMessage not restoring the explicit cwd they were spawned with

Claude Code changes

New Documents

auto-mode-config [Source]

New dedicated configuration reference for the auto mode classifier (previously embedded in permissions.md). Covers how to define trusted infrastructure via autoMode.environment, override block/allow rules with autoMode.soft_deny and autoMode.allow, inspect the effective config with claude auto-mode subcommands, and review denials via the /permissions Recently denied tab.

Changed documents

agent-sdk/hooks [Source]

  • Added "defer" as a new permissionDecision value in the TypeScript SDK PreToolUse hook — allows pausing execution and resuming later from a persisted session. Not available in the Python SDK. [line 179] [Source]
  • Updated hook priority order to: deny > defer > ask > allow [line 183] [Source]

agent-sdk/typescript [Source]

  • Added deferred_tool_use field to SDKResultMessage type carrying the pending tool's id, name, and input when a PreToolUse hook returns "defer" [line 885] [Source]
  • Added "defer" as valid value for permissionDecision in SyncHookJSONOutput type definition [line 1316] [Source]

agent-sdk/user-input [Source]

  • Added note that the canUseTool callback can stay pending indefinitely, and that the TypeScript SDK supports defer to let the process exit and resume later from a persisted session [line 6] [Source]

claude-directory [Source]

  • Added tasks/, shell-snapshots/, and backups/ to the auto-cleanup section (previously backups/ and shell-snapshots/ were listed under "kept until you delete them") [line 189] [Source]

commands [Source]

  • /voice command now accepts optional [hold|tap|off] modes [line 92] [Source]

common-workflows [Source]

  • Added note that --resume, --continue, and /resume offer to resume old large sessions from a summary instead of loading the full transcript (not available on Bedrock, Vertex AI, or Foundry) [line 578] [Source]

errors [Source]

  • Changed recommendation for large CLAUDE.md to use path-scoped rules (load only when relevant) rather than imports (which still load at launch and consume context) [line 330] [Source]

google-vertex-ai [Source]

  • Added multi-region endpoint support: CLOUD_ML_REGION can now be set to global, a multi-region location (eu, us), or a specific region; Claude Code selects the correct hostname automatically [line 41] [Source]

hooks [Source]

  • Deferred sessions are now subject to the cleanupPeriodDays retention sweep (30 days by default) [line 1040] [Source]

interactive-mode [Source]

  • Updated voice dictation shortcut description to reflect both hold and tap modes [line 88] [Source]

mcp [Source]

  • GitHub MCP server connection example updated: now requires a personal access token (PAT) passed as an Authorization header instead of the previous OAuth flow [line 1257] [Source]

memory [Source]

  • Clarified that @path imports do not reduce context (imported files still load at launch); path-scoped rules are now the recommended approach for large CLAUDE.md files [line 68] [Source]

model-config [Source]

  • Added note that /model selection persists across restarts; if project settings pin a different model, the choice is written to .claude/settings.local.json so it continues to apply [line 43] [Source]
  • Simplified effort level defaults: xhigh on Opus 4.7, high on Opus 4.6 and Sonnet 4.6 (removed per-plan differentiation) [line 151] [Source]

monitoring-usage [Source]

  • Added effort attribute to cost counter, token counter, API event, and API error event telemetry [lines 406-536] [Source]
  • Added command_name and command_source attributes to user_prompt event [line 466] [Source]
  • OTEL_LOG_TOOL_DETAILS=1 now also exposes verbatim custom, plugin, and MCP command names on user_prompt events [line 77] [Source]

network-config [Source]

  • Network access requirements reformatted as a table listing each URL with its purpose, and clarified when Bedrock/Vertex/Foundry providers replace api.anthropic.com [line 88] [Source]

permission-modes [Source]

  • Links to auto mode classifier configuration now point to the new auto-mode-config.md page instead of permissions.md [lines 131-28] [Source]

permissions [Source]

  • Large "Configure the auto mode classifier" and "Review auto mode denials" sections removed — content moved to the new auto-mode-config.md page

plugin-dependencies [Source]

  • Added dependency-unsatisfied error to the error table with resolution steps [line 192] [Source]
  • Clarified that re-running claude plugin install or adding a new marketplace also resolves outstanding missing dependencies

plugin-marketplaces [Source]

  • Marketplace restrictions (strictKnownMarketplaces, blockedMarketplaces) are now enforced on plugin install, update, refresh, and auto-update — not just on marketplace add. A marketplace added before the policy was set cannot be used to fetch plugins once its source no longer matches the allowlist [line 204] [Source]

quickstart [Source]

  • Added mention of Linux package manager installation (apt, dnf, apk)

remote-control [Source]

  • Remote Control is now described as "research preview" [line 3] [Source]

settings [Source]

  • Added new voice settings object (enabled, mode, autoSubmit) to replace the legacy voiceEnabled key (which remains as an alias) [line 277] [Source]
  • blockedMarketplaces and strictKnownMarketplaces descriptions updated to reflect enforcement on install/update/refresh/auto-update cycles [lines 263-272] [Source]

setup [Source]

  • Added full Linux package manager installation instructions for apt (Debian/Ubuntu), dnf (Fedora/RHEL), and apk (Alpine) with signed repository setup and GPG key verification [line 265] [Source]
  • Added uninstall instructions for apt/dnf/apk [line 458] [Source]

sub-agents [Source]

  • Clarified that mcpServers field applies both when the agent runs as a subagent and when launched as the main session via --agent [line 311] [Source]

terminal-guide [Source]

  • Added system requirements callouts: macOS 13.0+ for macOS, Windows 10 version 1809+ for Windows [lines 12-59] [Source]
  • Added dyld error troubleshooting section for users on unsupported macOS versions [line 209] [Source]

voice-dictation [Source]

  • Added tap mode: tap once to start recording, tap again to send — no hold required. Enable with /voice tap [line 67] [Source]
  • Added autoSubmit option for hold mode: sends the prompt automatically on key release when transcript is at least three words [line 62] [Source]
  • Added VS Code extension voice dictation support note (not available in VS Code Remote sessions) [line 27] [Source]
  • Transcription does not consume Claude messages or tokens and does not count toward /usage limits [line 17] [Source]
  • Added new troubleshooting entries: "No audio detected", "No speech detected", and tap mode space key behavior [lines 137-141] [Source]

vs-code [Source]

  • GitHub MCP server example updated to use a personal access token passed as a header [line 303] [Source]

API changes

Changed documents

build-with-claude/vision [Source]

  • Added guidance on image compression: using lossy formats (JPEG/WebP) can reduce latency but may introduce artifacts that harm model performance, especially text legibility [line 95] [Source]