TL;DR
/goalsets a completion condition and Claude keeps working across turns until it's met. Works in interactive,-p, and Remote Control, with a live overlay showing elapsed time, turns, and tokens.Agent view (
claude agents) shows every session in one list: running, blocked on you, or done (more below). Combined with/goal, this opens a fire-and-forget workflow pattern.Remote Control,
/schedule, claude.ai MCP connectors, and notifications are disabled when an API key is set, even with a Claude.ai login present. UnsetANTHROPIC_API_KEY/apiKeyHelper/ANTHROPIC_AUTH_TOKENto re-enable.Hook
args: string[](exec form) spawns commands directly without a shell, so path placeholders never need quoting (more below). Pair with the newcontinueOnBlockoption onPostToolUseto feed rejection reasons back to Claude instead of blocking the turn.Compaction prompt now preserves sensitive user instructions through context compression. If you've been working around compaction dropping CLAUDE.md directives, this targets that failure mode.
New in 2.1.139, 2.1.138, 2.1.137, 2.1.136
2.1.139 (May 12, 2026)
- Added agent view (Research Preview): a single list of every Claude Code session, running, blocked on you, or done. Run
claude agentsto get started - Added
/goalcommand: set a completion condition and Claude keeps working across turns until it's met. Works in interactive,-p, and Remote Control. Shows live elapsed/turns/tokens as an overlay panel - Added
/scroll-speedcommand to tune mouse wheel scroll speed with a live preview - Added
claude plugin details <name>to show a plugin's component inventory and projected per-session token cost - Added transcript view navigation:
?for keyboard shortcuts,{/}to jump between user prompts,vto toggle shortcut panel - Added hook
args: string[]field (exec form) that spawns the command directly without a shell, so path placeholders never need quoting - Added hook
continueOnBlockconfig option forPostToolUse, set totrueto feed the hook's rejection reason back to Claude and continue the turn - MCP stdio servers now receive
CLAUDE_PROJECT_DIRin their environment, matching hooks. Plugin configs can reference${CLAUDE_PROJECT_DIR}in commands - Compaction prompt now asks the model to preserve sensitive user instructions
/mcpReconnect now picks up.mcp.jsonedits without a restart, and shows the HTTP status and URL when reconnecting fails/context allper-skill token estimates now account for the model's tokenizer and show rounded valuesclaude plugin install <name>@<marketplace>now auto-refreshes the marketplace and retries before reporting a plugin as not found/plugininstalled-plugin details now show hook event names and MCP server names cleanly/contextnow shows the providing plugin's name for plugin-sourced skills- Remote MCP server reconnect retry on transient failures is now enabled for all users
- API requests from subagents now carry
x-claude-code-agent-id/x-claude-code-parent-agent-idheaders, andclaude_code.llm_requestOTEL spans includeagent_id/parent_agent_idattributes - Remote Control,
/schedule, claude.ai MCP connectors, and notification preferences are now disabled whenANTHROPIC_API_KEY/apiKeyHelper/ANTHROPIC_AUTH_TOKENis set, even if a Claude.ai login also exists. Unset the API key to use these features - Fixed a deadlock where expired credentials and the
forceRemoteSettingsRefreshpolicy setting blockedclaude auth login/logout/statuswith no way to recover - Fixed
autoAllowBashIfSandboxednot auto-approving commands with shell expansions like$VARand$(cmd) - Fixed a bug where a hook writing to the terminal could corrupt an on-screen interactive prompt; hooks now run without terminal access
- Fixed unbounded memory growth when an HTTP/SSE MCP server streams non-protocol data; response bodies now capped at 16 MB per SSE frame
- Fixed
Skill(name *)permission rules; the wildcard form now works as a prefix match, matchingBash(ls *)behavior - Fixed settings hot-reload not detecting edits to symlinked
~/.claude/settings.json - Fixed plugin details failing to load when the marketplace key differs from the manifest name
- Fixed
/modelpicker "Default" row not reflectingANTHROPIC_DEFAULT_OPUS_MODEL/ANTHROPIC_DEFAULT_SONNET_MODELoverrides - Fixed spurious "stream idle timeout" 5 minutes after a response completed, caused by the watchdog timer not being cleared on stream cancellation
- Fixed silent
exit 1when 10+ MCP servers are configured and the cache directory is unwritable; the error message now includes the underlying cause - Fixed a typing cursor blinking on tab names, list pointers, and select rows in dialogs
- Fixed transcript view letter shortcuts not working after mouse click
- Fixed Bash-mode up-arrow history repeating the first entry and clobbering the in-progress draft
- Fixed pasting or dropping multiple images only inserting the last one
- Fixed hyperlinks using unreadable dark navy on dark themes; they now adapt to the active theme
- Fixed model picker showing a redundant "Current model" row for third-party users whose model is set to the
opusalias - Fixed legacy Opus picker entry on PAYG 3P providers resolving to the same model as the default entry
- Fixed mouse wheel scrolling speed in Cursor and VS Code 1.92-1.104; the trackpad now scrolls at a steady rate and the mouse wheel keeps ~3 lines per notch
- Fixed scroll behavior in Windows Terminal and VS Code when attached to background sessions
- Fixed MCP resources from disconnected servers lingering in
@server:autocomplete - Fixed two-file diff snippets over-reporting the number of truncated lines by one
- Fixed Grep results not relativizing Windows drive-letter paths and count mode reporting wrong totals for single-file paths
- Fixed border-embedded text overflowing on CJK/emoji due to visual cell width miscalculation
- Fixed fuzzy-match highlighting splitting emoji and astral-plane characters mid-pair
- Fixed skill argument names containing regex metacharacters breaking argument substitution
- Fixed ProgressBar rendering a full block for an almost-full fractional cell
- Fixed task polling and
fs.watchbeing resurrected when the last subscriber leaves while a fetch is in flight - Fixed plugin dependency resolution leaving a stale count when the manifest name differs from the source identifier
- Fixed Insights Time-of-Day chart skewing when a session has an unparseable timestamp
- Fixed keybindings using only the cmd/super/win modifier being flagged as unparseable
- Fixed
claude_code.active_time.totalOpenTelemetry metric not being emitted in--printmode - Fixed
claude plugin updatenot preserving cross-plugin symlinks inside a marketplace - [VSCode] Press Cmd/Ctrl+Shift+T to reopen the most recently closed session tab, configurable via
claudeCode.enableReopenClosedSessionShortcut
2.1.138 (May 12, 2026)
- Internal fixes
2.1.137 (May 12, 2026)
- [VSCode] Fixed extension failing to activate on Windows
2.1.136 (May 12, 2026)
- Added
CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTELto re-enable the session quality survey for enterprises capturing responses through OpenTelemetry - Added
settings.autoMode.hard_denyfor auto mode classifier rules that block unconditionally regardless of user intent or allow exceptions - Fixed MCP servers configured in
.mcp.json, plugins, and claude.ai connectors silently disappearing after/clearin the VS Code extension, JetBrains plugin, and Agent SDK - Fixed a rare login loop where a concurrent credential write could overwrite a freshly-rotated OAuth token and force re-login
- Fixed MCP OAuth refresh tokens being lost when multiple servers refresh concurrently; users with several remote MCP servers should no longer need daily re-authentication
- Fixed an API error (400) when extended thinking emitted a redacted thinking block after a tool call
- Fixed
--resume/--continuenot finding sessions when the project path contains underscores - Fixed plan mode not blocking file writes when a matching
Edit(...)allow rule exists - WSL2: image paste from Windows clipboard now works via a PowerShell fallback when xclip/wl-paste cannot read image data
- Fixed plugin
Stop/UserPromptSubmithooks failing when cache cleanup deletes a version still in use by a running session - Improved visual consistency across slash command dialogs: standardized footer hints, dialog spacing, and arrow-key styling, and the dialog frame now appears immediately during loading instead of popping in after
- Fixed colors appearing at wrong positions in bash command output and markdown code blocks
- Fixed ReasonML diffs rendering corrupted "undefined" text artifacts at word-diff boundaries
- Fixed worktree exit dialog warning about uncommitted files in the wrong directory after worktree removal
- Fixed
@file picker not matching files created mid-session in small non-git directories - Fixed
@-mention file picker not finding files in directories with more than 100 entries - Fixed failed tool calls not being click-to-expand in fullscreen mode when their output was truncated
- Fixed Backspace and Ctrl+Backspace getting swapped after using Ctrl+G to open an external editor on terminals with persistent extended-key modes
- Fixed
/usageweekly reset showing time of day instead of the calendar date - Fixed welcome banner ellipsis causing column overflow on CJK terminals
- Fixed
/insightscrash when session history contains tool calls with malformed input fields - Fixed a renderer crash when a tool's collapsibility classification changes mid-session
- Fixed a
skillsentry inplugin.jsonhiding the plugin's defaultskills/directory, and listing a file path now shows an error instead of failing silently - Fixed IDE shell-integration lock files not respecting
CLAUDE_CONFIG_DIR - Fixed trailing whitespace in copied terminal output during streaming
- Fixed plugin uninstall and enable/disable not matching slugs case-insensitively
- Fixed tool error truncation marker showing a negative count for surrogate-pair strings
- Fixed env vars from
CLAUDE_ENV_FILESessionStart hooks going stale after/resumeor/clear - Fixed
/branchsaving a multi-line session title when given a pasted multi-line name - Fixed a stray leading space on the second line of wrapped text at the column boundary
- Fixed Esc not dismissing dialogs in
/install-github-app,/desktop,/resume, and/web-setup - Fixed
/doctorMCP schema errors not naming the missing field or showing the source file path - Fixed Bash permission prompts showing an internal parser diagnostic instead of a user-readable explanation
- Fixed plugin slash commands with spaces (e.g.
/myplugin review) not resolving to their namespaced form - Fixed
AskUserQuestiondiscarding multi-select answers when supplied as an array - Fixed
/clear <name>not labeling the cleared session for/resume - Fixed
CronListoutput missing qualifiers and the scheduled prompt - Fixed "Jump to bottom" overlay leaving color artifacts on CJK characters in fullscreen mode
- Fixed wide markdown tables leaving a stale bordered render in terminal scrollback while streaming
- Fixed pasted text being silently dropped when a long prompt with a pasted-text placeholder was auto-truncated
- Fixed
/release-notesgetting stuck on an old version after a failed changelog refresh - Fixed
/mcpserver list not scrolling when there are more servers than fit in the terminal - Fixed mid-input slash command autocomplete not working after an initial slash command
- Fixed scrolling to bottom re-engaging auto-follow with
autoScrollEnabled: false - Fixed prompt suggestions being auto-submitted by Enter on an empty input instead of requiring Tab or arrow to accept
- Fixed keyboard shortcut hints not reflecting rebound keys from
keybindings.json - Fixed
/settingslanguage change being reverted on Escape after confirming - Fixed
/terminal-setuponly appearing in autocomplete on exact name match instead of partial prefixes - Fixed "Chat about this" on an
AskUserQuestiondialog erasing the question text - Fixed MCP tool results being invisible when the server returns content blocks
- Improved error message when
--worktreecollides with an existing or stale worktree - Changed plugin marketplace removal key to
d(matching delete elsewhere) instead ofrwhich collided with retry
Notes
Agent view and /goal: the fire-and-forget pattern
These two features create a workflow that didn't exist before. Set a /goal ("all tests pass and the PR is ready"), walk away, and check claude agents later to see if the session finished, needs input, or is still running. The agent view groups sessions by state, so you know at a glance which ones need you and which are still working.
This builds on the session management improvements from recent versions. 2.1.129 added /resume matching PR URLs, 2.1.121 added alwaysLoad for MCP servers and the /skills search box, and 2.1.120 added the claude ultrareview subcommand. The agent view sits above all of these as a unified entry point. If you run multiple concurrent sessions across projects, this is the surface to build habits around.
Hook exec form and MCP project-directory parity
The args: string[] exec form solves a longstanding quoting pain point in hooks. Previously, hook commands ran through a shell, meaning path placeholders containing spaces or special characters required careful escaping. The exec form bypasses the shell entirely, so $CLAUDE_FILE in a hook argument works regardless of what the file path contains.
MCP stdio servers now receive CLAUDE_PROJECT_DIR, closing a gap where hooks had project context but MCP servers did not. If you have an MCP server that needs to know which project it's serving (for example, to scope its tool output or find config files), you no longer need to hard-code the path or pass it through a wrapper script. Plugin configs can also reference ${CLAUDE_PROJECT_DIR} in their command definitions.