Claude Code 2.1.128
`--channels` now works with console (API key) authentication, and `/mcp` shows per-server tool counts and flags zero-tool servers. `OTEL_*` environment variables no longer leak into subprocesses, and `EnterWorktree` branches from local HEAD as documented. Plus fixes for falsely-blocked 1M-context sessions, parallel shell tool regressions, sub-agent cache misses, and more.
This article is a summary based on official documentation.
What changed
Claude Code 2.1.128 (May 4, 2026) — --channels is now usable with console API-key authentication, MCP and plugin operability gets several visibility improvements, and OTEL environment-variable leakage into subprocesses is closed off. EnterWorktree now branches from local HEAD as documented, and a wide range of stability issues — falsely-blocked 1M-context prompts, parallel shell tool regressions, sub-agent cache misses — are fixed.
New features
-
--channelsworks with console (API key) authentication--channelspreviously only worked with OAuth-based workspaces, leaving organizations on console API keys without access. This release extends it to console authentication. Console orgs with managed settings must setchannelsEnabled: trueto enable. -
/mcpsurfaces tool counts and unhealthy serversA flat list of connected MCP servers made it hard to tell which servers were actually exposing tools.
/mcpnow shows the tool count for each connected server and flags servers that connected with 0 tools, making it easier to spot misconfiguration or auth failures at a glance. -
--plugin-diraccepts.zipplugin archivesTrying out a local plugin used to require unpacking the directory first.
--plugin-dirnow takes a path to a.ziparchive directly, so plugins can be loaded without extracting. -
/modelpicker cleanup — Opus 4.7 duplicates collapsedDuplicate Opus 4.7 entries in the
/modelpicker have been collapsed, and the current Opus now shows as “Opus” instead of “Opus 4.7”. -
EnterWorktreebranches from local HEAD (wasorigin/<default-branch>)Despite the documented behavior,
EnterWorktreewas creating new branches from the remote default branch, dropping any unpushed local commits. It now branches from local HEAD, so unpushed commits are preserved. -
MCP:
workspaceis reserved as a server nameExisting MCP servers registered under the name
workspaceare now skipped with a warning. The name is reserved for system use going forward, so rename any conflicting server. -
MCP reconnects no longer flood the conversation with tool names
When an MCP server reconnected, the full tool-name list was re-announced into the conversation on every reconnect. Re-announced tools are now summarized by server prefix.
-
SDK hosts get a persistent
localSettingssuggestionWhen a user picks “Always allow” on a Bash permission prompt, SDK hosts now receive a persistent
localSettingssuggestion so the choice can be written to.claude/settings.local.json. -
Auto mode: classifier errors include a recovery hint
When the auto-mode classifier can’t evaluate an action, it used to fail without telling you what to try next. The error message now includes a hint pointing at retry,
/compact, or running with--debug. -
Bare
/colorpicks a random session colorRunning
/colorwith no arguments now picks a random session color — useful as a quick visual marker when juggling multiple sessions.
Improvements
-
Subprocesses no longer inherit
OTEL_*env varsWhen Claude Code ran with its own OTLP endpoint configured, subprocesses (Bash, hooks, MCP, LSP) inherited those
OTEL_*variables. OTEL-instrumented apps launched via the Bash tool would unintentionally send their telemetry to the CLI’s endpoint. Subprocesses now run without those variables, so user apps emit telemetry only to their own configured destination. -
Sub-agent progress summaries use the prompt cache
Sub-agent progress summaries previously bypassed the prompt cache, generating unnecessary
cache_creationtokens — roughly a 3× reduction has been reported with this fix. Summaries also no longer fire repeatedly while a sub-agent’s transcript is static, capping the worst-case token cost on idle sub-agents.
Notable fixes
Sessions and UI
- Focus mode briefly dimming the previous response when submitting a new prompt — fixed.
- Stray “4;0;” desktop notification on every
/exitin Kitty and other terminals that interpret OSC 9 as a notification — fixed. - Remote Control showing an empty “Opening your options…” message on rate limit — now shows actionable upsell options instead.
- Drag-and-drop image upload hanging on “Pasting text…” when the image read fails — fixed.
- Long URLs not being individually clickable on every wrapped row in fullscreen mode — fixed.
- Markdown link labels lost on terminals without OSC 8 hyperlink support — links now render as
label (url)instead of just the URL. - Terminal progress indicator (OSC 9;4) flickering off between tool calls — now stays visible across the full turn.
- Stale “remote-control is active” status lines from prior sessions appearing after
--resume/--continue— fixed.
MCP and plugins
/pluginComponents panel showing “Marketplace ‘inline’ not found” for plugins loaded via--plugin-dir— fixed.- MCP tool results dropping images when the server returns both structured content and content blocks — fixed.
/plugin updatenever detecting new versions of npm-sourced plugins — fixed.- MCP stdio servers receiving corrupted arguments when
CLAUDE_CODE_SHELL_PREFIXis set and an argument contains spaces or shell metacharacters — fixed. - Stale
installed_plugins.jsonentries pointing at deleted cache directories polluting PATH — fixed. - Headless
--output-format stream-json—init.plugin_errorsnow includes--plugin-dirload failures in addition to dependency demotions.
Input and text
- Fenced code blocks inside list items carrying leading whitespace into the clipboard on copy-paste — fixed.
- Tab navigation in
/configstranding focus — the tab header now stays focused so arrows and Esc keep working. - vim mode:
Spacein NORMAL mode now moves the cursor right, matching standard vi/vim behavior — fixed.
Model and assistant behavior
- Sessions on 1M-context models with a smaller autocompact window being falsely blocked with “Prompt is too long” before reaching the actual API limit — fixed.
- Parallel shell tool calls: a failing read-only command (grep, git diff, ls) no longer cancels sibling calls — fixed.
- Banner showing “with X effort” on models that don’t support effort — fixed.
/faston 3P providers fuzzy-matching to an unrelated skill — now shows “not available” instead.- Bedrock default model resolving to
global.*instead of the region-appropriate prefix — fixed.
Resume and headless
/renamewithout args failing on resumed sessions whose last entry is a compact boundary — fixed.- Crash loop when piping very large input (>10 MB) to
claude -pvia stdin — fixed.
Notes
--channelson console orgs with managed settings requireschannelsEnabled: true— console orgs without managed settings can use it without extra configuration.- Rename any MCP server called
workspace— the name is reserved going forward and conflicting servers are skipped with a warning. - Direct impact for OTEL operators — environments that configured Claude Code with its own OTLP endpoint will no longer leak those settings to subprocess apps started via the Bash tool. If you were intentionally relying on inheritance, set the variables explicitly for those subprocesses.
/modellabel change — automation that matched the exact string “Opus 4.7” in the picker should be updated to match “Opus”.EnterWorktreebehavior change — new branches now come from local HEAD rather thanorigin/<default-branch>. If you specifically need the remote default branch as the starting point, handle it explicitly.