Claude Code
- Hooks can now call MCP tools directly. Add
type: "mcp_tool"to any hook definition to invoke a connected MCP tool without a wrapper script. - Auto mode rules are additive with
"$defaults". Include"$defaults"inautoMode.allow,soft_deny, orenvironmentto extend the built-in list instead of replacing it. /costand/statsmerged into/usage. Both old names still work as typing shortcuts that open the relevant tab, so nothing breaks.- Vim visual mode is live. Press
vfor character selection orVfor line selection, with operators and visual feedback. - Seven MCP OAuth fixes shipped in one release (more below). If you hit spurious "Please run /login" prompts, stuck auth states, or credential corruption on Linux/Windows, this batch likely covers it.
New in 2.1.118
2.1.118 (April 23, 2026)
- Added vim visual mode (
v) and visual-line mode (V) with selection, operators, and visual feedback - Merged
/costand/statsinto/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 athemes/directory - Hooks can now invoke MCP tools directly via
type: "mcp_tool" - Added
DISABLE_UPDATESenv var to completely block all update paths including manualclaude update(stricter thanDISABLE_AUTOUPDATER) - WSL on Windows can now inherit Windows-side managed settings via the
wslInheritsWindowsSettingspolicy key - Auto mode: include
"$defaults"inautoMode.allow,autoMode.soft_deny, orautoMode.environmentto 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 tagto create release git tags for plugins with version validation --continue/--resumenow find sessions that added the current directory via/add-dir/colornow syncs the session accent color to claude.ai/code when Remote Control is connected- The
/modelpicker now honorsANTHROPIC_DEFAULT_*_MODEL_NAME/_DESCRIPTIONoverrides when using a customANTHROPIC_BASE_URLgateway - When auto-update skips a plugin due to another plugin's version constraint, the skip now appears in
/doctorand the/pluginErrors tab - Fixed
/mcpmenu hiding OAuth Authenticate/Re-authenticate actions for servers configured withheadersHelper, 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_inrequiring re-authentication every hour - Fixed MCP step-up authorization silently refreshing instead of prompting for re-consent when the server's
insufficient_scope403 names a scope the current token already has - Fixed an unhandled promise rejection when an MCP server's OAuth flow times out or is cancelled
- Fixed MCP OAuth refresh proceeding without its cross-process lock under contention
- Fixed macOS keychain race where a concurrent MCP token refresh could overwrite a freshly-refreshed OAuth token, causing unexpected "Please run /login" prompts
- Fixed OAuth token refresh failing when the server revokes a token before its local expiry time
- Fixed credential save crash on Linux/Windows corrupting
~/.claude/.credentials.json - Fixed
/loginhaving no effect in a session launched withCLAUDE_CODE_OAUTH_TOKEN(the env token is now cleared so disk credentials take effect) - Fixed unreadable text in the "new messages" scroll pill and
/pluginbadges - 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
StoporSubagentStop - Fixed
prompthooks re-firing on tool calls made by an agent-hook verifier subagent - Fixed
/forkwriting 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
modelsetting in~/.claude/settings.json - Fixed typeahead showing "No commands match" error when pasting file paths that start with
/ - Fixed
plugin installon an already-installed plugin not re-resolving a dependency installed at the wrong version - Fixed unhandled errors from file watcher on invalid paths or fd exhaustion
- Fixed Remote Control sessions getting archived on transient CCR initialization blips during JWT refresh
- Fixed subagents resumed via
SendMessagenot restoring the explicitcwdthey were spawned with
Notes
MCP OAuth hardening batch
This is the most concentrated OAuth fix pass in the changelog. 2.1.117 fixed Plain-CLI OAuth dying on 401 mid-session. 2.1.118 goes deeper: cross-process lock contention during refresh, macOS keychain races between concurrent token refreshes, servers that revoke tokens before local expiry, step-up authorization silently refreshing instead of prompting, and a credential save crash on Linux/Windows that corrupted ~/.claude/.credentials.json. If you were seeing intermittent "Please run /login" prompts or had to restart sessions after MCP auth hiccups, update and see if the pattern stops.