Claude Code 2.1.129
`--plugin-url` loads a `.zip` plugin straight from a URL, and Homebrew/WinGet installs can self-upgrade in the background. Ctrl+R history is back to searching all projects by default, and Gateway `/v1/models` discovery is now opt-in via env var. Plus fixes for 1-hour prompt cache TTL silently downgrading, OAuth logouts after wake-from-sleep, and `/context` wasting ~1.6k tokens per call.
This article is a summary based on official documentation.
What changed
Claude Code 2.1.129 shipped on May 6, 2026. The release adds new flags and env vars that streamline plugin distribution and installer upgrades, and rolls back two behavior changes from 2.1.124–2.1.128 to opt-in. It also fixes a set of high-impact bugs: a 1-hour prompt cache TTL that was silently downgraded to 5 minutes, an OAuth refresh race that logged out every running session after wake-from-sleep, and /context dumping its ASCII visualization grid into the conversation and burning ~1.6k tokens per call.
New features
-
--plugin-url <url>— load a.zipplugin straight from a URLPreviously you had to download a plugin archive locally and either point
--plugin-dirat the unpacked directory or register it in a marketplace.--plugin-urlaccepts a.zipURL and fetches it directly for the current session. -
CLAUDE_CODE_FORCE_SYNC_OUTPUT=1— force-enable synchronized outputSome terminals (e.g. Emacs
eat) aren’t picked up by auto-detection, which left synchronized output disabled and caused flicker or interleaved rendering. Setting this env var forces sync output on regardless of detection. -
CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE— auto-upgrade Homebrew/WinGet installsHomebrew and WinGet installs previously required users to run the upgrade command manually. With this env var set, Claude Code runs the package manager’s upgrade in the background and prompts to restart when it’s done.
Improvements
-
Gateway
/v1/modelsdiscovery is now opt-inIn 2.1.126–2.1.128 the
/modelpicker called the gateway’s/v1/modelsendpoint automatically to populate the model list. It’s now gated behindCLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1. -
Ctrl+R history picker defaults to all projects again
2.1.124 changed the Ctrl+R history picker to scope to the current project by default, which made prompts from other projects invisible. The pre-2.1.124 default — searching all prompts across all projects — is back. Press Ctrl+S to narrow to the current project or session.
-
Third-party deployments no longer see first-party spinner tips
Bedrock, Vertex, Foundry, and
ANTHROPIC_BASE_URLgateway users were getting spinner tips that pointed at first-party Anthropic surfaces (e.g. claude.com/plugins). Those tips are now suppressed for third-party deployments. -
skillOverridessetting now actually appliesThe setting was defined but not wired up.
offnow hides skills from both the model and/,user-invocable-onlyhides from the model only (still callable via/), andname-onlycollapses the description so only the name is shown. -
claude_code.pull_request.countOTel metric counts MCP-created PRs/MRsThe metric only counted PRs/MRs created via shell commands, missing PRs created through MCP tools. Both paths are now counted.
-
Policy refusal errors include the API Request ID
When a request was refused by policy, support and debugging had no way to locate the specific request. The refusal message now includes the API Request ID.
-
Plugin manifests: move
themesandmonitorsunder"experimental": { ... }Top-level declarations still work, but
claude plugin validatenow warns. These two surfaces remain experimental until they stabilize.
Bug fixes
Session & UI
- API errors with unrecognized 400 status codes showing raw JSON instead of the underlying error message — fixed.
/clearnot resetting the terminal tab title after a conversation — fixed.- Session title chip from
/renamedisappearing while a permission or other dialog is active — fixed. - Agent panel below the prompt being hidden when subagents are running — fixed (regression in 2.1.122).
- External-editor handoff (Ctrl+G) blanking the conversation history above the prompt — fixed.
/contextdumping its rendered ASCII visualization grid into the conversation, wasting ~1.6k tokens per call — fixed./agentsLibrary list arrow-key navigation: highlighted agent now stays visible when the list exceeds the viewport — fixed./branchsuccess message not including the new branch’s session id for/resume— fixed.- Bold headers with keycap/ZWJ/skin-tone emoji losing trailing characters in fullscreen mode — fixed.
- Harmless WebSocket warning being logged as an error in
--debugduring voice mode — fixed.
Permissions, auth & policy
- Server-managed settings policy not applying for enterprise/team users whose stored OAuth credentials lacked the
user:inferencescope — fixed. - OAuth refresh race after wake-from-sleep that could log out all running sessions — fixed.
Bash(mkdir *),Bash(touch *)and similar allow rules not being honored for in-project paths — fixed.deniedMcpServerspatterns with a*://scheme wildcard not matching mixed-case hostnames — fixed.
Cache & model
- 1-hour prompt cache TTL being silently downgraded to 5 minutes — fixed.
- Cache-miss warning appearing spuriously after
/clearor compaction when changing/effortor/model— fixed.
VSCode
/clearnot clearing the conversation context and displayed transcript — fixed.
Notes
- Gateway model discovery is opt-in now — the automatic
/v1/modelscall from 2.1.126–2.1.128 is gone. To populate the/modelpicker from your gateway, setCLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1. - Ctrl+R default reverted — the 2.1.124 behavior that scoped Ctrl+R to the current project is reverted to the pre-2.1.124 all-projects default. Use Ctrl+S to narrow.
- Homebrew/WinGet auto-upgrade is opt-in — without
CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE, the installer flow stays manual, exactly as before. - Plugin manifest migration — top-level
themesandmonitorsdeclarations work but triggerclaude plugin validatewarnings. Move them under"experimental": { ... }to stay forward-compatible. - 1-hour prompt cache TTL is honored again — workflows configured for 1-hour TTL were effectively running on 5 minutes. Expect cache hit rates and cost curves to recover after this fix.