2.1.121 untested · changelog-derived

Claude Code 2.1.121

**MCP server eager-load control** (`alwaysLoad` config option): Skip deferred tool resolution for trusted MCP servers, making all tools immediately available without tool-search cost. This reduces latency for high-trust integrations and enables agents to invoke tools in non-interactive sessions reliably.

7 new primitives 3 workflow recipes 32 fixes

New primitives

alwaysLoad (MCP config)setting

MCP servers with this flag skip tool-search deferral; all tools are immediately available

Added `alwaysLoad` option to MCP server config — when `true`, all tools from that server skip tool-search deferral and are always available
claude plugin prunecommand

Removes orphaned auto-installed plugin dependencies; `plugin uninstall --prune` cascades

Added `claude plugin prune` to remove orphaned auto-installed plugin dependencies; `plugin uninstall --prune` cascades
/skills search boxfeature

Type-to-filter search box for finding skills in long lists without scrolling

Added a type-to-filter search box to `/skills` so you can find a skill in long lists without scrolling
hookSpecificOutput.updatedToolOutput (PostToolUse hooks)hook-field

PostToolUse hooks can now replace tool output for all tools, not just MCP-only

PostToolUse hooks can now replace tool output for all tools via `hookSpecificOutput.updatedToolOutput` (previously MCP-only)
CLAUDE_CODE_FORK_SUBAGENT=1 (non-interactive)env-var

SDK and `claude -p` now support fork-subagent in non-interactive sessions

SDK and `claude -p`: `CLAUDE_CODE_FORK_SUBAGENT=1` now works in non-interactive sessions
mcp_authenticate with redirectUriSDK capability

SDK MCP authentication now supports custom scheme completion and claude.ai connectors

SDK: `mcp_authenticate` now supports `redirectUri` for custom scheme completion and claude.ai connectors
OTEL_LOG_USER_PROMPTS gatingobservability-flag

OpenTelemetry spans now optionally log `user_system_prompt` when gated behind this flag

OpenTelemetry: added `stop_reason`, `gen_ai.response.finish_reasons`, and `user_system_prompt` (gated behind `OTEL_LOG_USER_PROMPTS`) to LLM request spans

Workflow recipes

Non-interactive Subagent CI/CD Orchestration
CLAUDE_CODE_FORK_SUBAGENT=1 (non-interactive) + alwaysLoad (MCP config) + --dangerously-skip-permissions

Together these enable fully automated subagent spawning in CI/CD pipelines without blocking on permission prompts or deferred tool resolution, allowing agents to coordinate across build steps with eager tool availability.

A parent CI/CD agent forks subagents for parallel work (test, lint, build, security scan) using CLAUDE_CODE_FORK_SUBAGENT=1. Each subagent has its MCP servers configured with alwaysLoad: true for immediate tool access. The parent skips permission interactivity with --dangerously-skip-permissions and monitors subagent exit codes. On success, it chains the next stage; on failure, it culls the subagent and retries or escalates. No pauses, no manual approval checkpoints—native to cloud CI.

Terminal-Driven Agent Configuration + Hotkey Execution
/skills search box + CLAUDE_CODE_FORK_SUBAGENT=1 + hookSpecificOutput.updatedToolOutput

Agent developers can now discover and configure skills interactively in the terminal, then fork subagents to execute them while post-processing tool results through hooks—collapsing the edit-test-deploy cycle.

A developer runs /skills <filter> to search and select a skill. The selection populates an agent spawn command. On fork, the parent agent sets up a PostToolUse hook to intercept the subagent's tool output and apply transformations (e.g., extracting just JSON, filtering logs, republishing metrics). The modified output flows back to the parent for synthesis or logging. Skill discovery is fast and searchable; execution is deterministic and result-controllable.

MCP OAuth + Observability Audit Trail for Agent Ops
mcp_authenticate with redirectUri + OTEL_LOG_USER_PROMPTS (OpenTelemetry) + NO_PROXY managed-settings fix

Agents can now authenticate to MCP services (e.g., GitHub, Slack) via custom redirect schemes and emit full audit traces (system prompt, token counts, finish reasons) to observability backends—essential for multi-tenant agent platforms with compliance audit requirements.

An agent spawning infrastructure initializes mcp_authenticate with custom redirectUri schemes (e.g., x-my-agent-auth://callback) for connector auth. Simultaneously, OTEL_LOG_USER_PROMPTS logs the agent's system prompt and each LLM request/response lifecycle (stop_reason, finish_reasons, token usage) to a tracing backend (Honeycomb, DataDog, Jaeger). When a managed proxy needs to exclude certain hosts, NO_PROXY now respects the setting, ensuring auth requests bypass the proxy chain. Together: full agent compliance auditing, connector auth without terminal prompts, and network control for trust-boundary requests.

Agentic relevance

MCP eager-load and non-interactive subagent support unlock automated tool orchestration without permission prompts or deferred resolution latency—critical for agents running in CI/CD and multi-step workflows. Hook output replacement extends control surface for tool-result sanitization and pipeline composition. The `/skills` search box and enhanced dialog scrolling improve agent configuration velocity in terminal environments.

Hardening & fixes (32)

  • Fullscreen mode: typing no longer jumps scroll to bottom after scrolling up to read earlier output
  • Dialogs now scrollable in fullscreen and non-fullscreen modes (arrow keys, PgUp/PgDn, home/end, mouse wheel)
  • Long URLs that wrap across rows in fullscreen can now be opened by clicking any line
  • `--dangerously-skip-permissions` no longer prompts for writes to `.claude/skills/`, `.claude/agents/`, and `.claude/commands/`
  • `/terminal-setup` enables iTerm2 clipboard access for `/copy` to work from tmux
  • MCP servers auto-retry up to 3 times on transient startup errors
  • Terminal tab session title now uses configured `language` setting
  • Claude.ai connectors with duplicate upstream URLs are deduplicated
  • Vertex AI now supports X.509 certificate-based Workload Identity Federation (mTLS ADC)
  • Faster startup after upgrade (removed Recent Activity panel)
  • LSP diagnostic summaries expand on click/ctrl+o with hint
  • [VSCode] Voice dictation respects `accessibility.voice.speechLanguage` setting
  • [VSCode] `/context` opens native token usage dialog
  • Fixed unbounded memory growth when processing many images
  • Fixed `/usage` leaking ~2GB on large transcript histories
  • Fixed memory leak on long-running tool failures
  • Fixed Bash tool becoming permanently unusable when start directory is deleted
  • Fixed `--resume` crashes in external builds
  • Fixed `--resume` corruption handling on large sessions
  • Fixed `thinking.type.enabled` error with Bedrock ARNs
  • Fixed Microsoft 365 MCP OAuth duplicate/unsupported `prompt` parameter
  • Fixed scrollback duplication (Ctrl+L / redraw on tmux, GNOME Terminal, Windows Terminal, Konsole)
  • Fixed claude.ai connectors disappearing on transient auth errors
  • Fixed "Always allow" rules not surviving worker restarts in remote sessions
  • Fixed `NO_PROXY` not respected under native build
  • Fixed managed settings prompt exiting session on acceptance
  • Fixed `/usage` "rate limited" on stale OAuth (now auto-refreshes)
  • Fixed invalid legacy enum values invalidating entire settings file
  • Fixed `/usage` dialog clipping when no-flicker mode is off
  • Fixed `/focus` "Unknown command" when fullscreen renderer is off
  • Fixed embedded grep/find/rg wrappers failing when binary is deleted mid-session
  • Reduced peak file descriptor usage during `find` on large directory trees

Raw changelog

## 2.1.121

- Added `alwaysLoad` option to MCP server config — when `true`, all tools from that server skip tool-search deferral and are always available
- Added `claude plugin prune` to remove orphaned auto-installed plugin dependencies; `plugin uninstall --prune` cascades
- Added a type-to-filter search box to `/skills` so you can find a skill in long lists without scrolling
- PostToolUse hooks can now replace tool output for all tools via `hookSpecificOutput.updatedToolOutput` (previously MCP-only)
- Fullscreen mode: typing into the prompt no longer jumps scroll back to the bottom after you've scrolled up to read earlier output
- Dialogs that overflow the terminal are now scrollable with arrow keys, PgUp/PgDn, home/end, and mouse wheel in both fullscreen and non-fullscreen modes
- Clicking any line of a long URL that wraps across rows in fullscreen mode now opens the full URL
- SDK and `claude -p`: `CLAUDE_CODE_FORK_SUBAGENT=1` now works in non-interactive sessions
- `--dangerously-skip-permissions` no longer prompts for writes to `.claude/skills/`, `.claude/agents/`, and `.claude/commands/`
- `/terminal-setup` now enables iTerm2's "Applications in terminal may access clipboard" setting so `/copy` works, including from tmux
- MCP servers that hit a transient error during startup now auto-retry up to 3 times instead of staying disconnected
- The terminal tab session title is now generated in your configured `language` setting
- Claude.ai connectors with the same upstream URL are now deduplicated instead of appearing as duplicates
- Vertex AI: support X.509 certificate-based Workload Identity Federation (mTLS ADC)
- Faster startup after upgrading: removed the Recent Activity panel from the release-notes splash
- LSP diagnostic summaries now expand on click/ctrl+o and show the expand hint
- SDK: `mcp_authenticate` now supports `redirectUri` for custom scheme completion and claude.ai connectors
- OpenTelemetry: added `stop_reason`, `gen_ai.response.finish_reasons`, and `user_system_prompt` (gated behind `OTEL_LOG_USER_PROMPTS`) to LLM request spans
- [VSCode] Voice dictation now respects the `accessibility.voice.speechLanguage` setting when no Claude Code language is configured
- [VSCode] `/context` now opens a native token usage dialog
- Fixed unbounded memory growth (multi-GB RSS) when processing many images in a session
- Fixed `/usage` leaking up to ~2GB of memory on machines with large transcript histories
- Fixed memory leak when long-running tools fail to emit a clear progress event
- Fixed Bash tool becoming permanently unusable when the directory Claude was started in is deleted or moved mid-session
- Fixed `--resume` crashing on startup in external builds
- Fixed `--resume` failing on large sessions when a transcript line was corrupted by an unclean shutdown — the corrupt line is now skipped
- Fixed `thinking.type.enabled is not supported` error when using Bedrock application inference profile ARNs
- Fixed Microsoft 365 MCP OAuth failing with duplicate or unsupported `prompt` parameter
- Fixed scrollback duplication when pressing Ctrl+L or triggering a redraw in non-fullscreen mode on tmux, GNOME Terminal, Windows Terminal, and Konsole
- Fixed claude.ai MCP connectors silently disappearing when the connector-list fetch hits a transient auth error at startup
- Fixed "Always allow" rules for built-in tools in remote sessions not surviving worker restarts
- Fixed `NO_PROXY` not being respected for all HTTP clients when set via `managed-settings.json` under the native build
- Fixed managed settings approval prompt exiting the session even when accepted — now applies settings and continues
- Fixed `/usage` returning "rate limited" after a stale OAuth token — now refreshes automatically
- Fixed invalid legacy enum values in `settings.json` invalidating the entire settings file
- Fixed `/usage` dialog content being clipped when no-flicker mode is off
- Fixed `/focus` showing "Unknown command" when the fullscreen renderer is off — now explains how to enable it
- Fixed embedded grep/find/rg shell wrappers failing when the running binary is deleted mid-session — now falls back to installed tools
- Reduced peak file descriptor usage during `find` in the Bash tool on large directory trees