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.

🔗 Official announcement →

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 .zip plugin straight from a URL

    Previously you had to download a plugin archive locally and either point --plugin-dir at the unpacked directory or register it in a marketplace. --plugin-url accepts a .zip URL and fetches it directly for the current session.

  • CLAUDE_CODE_FORCE_SYNC_OUTPUT=1 — force-enable synchronized output

    Some 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 installs

    Homebrew 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/models discovery is now opt-in

    In 2.1.126–2.1.128 the /model picker called the gateway’s /v1/models endpoint automatically to populate the model list. It’s now gated behind CLAUDE_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_URL gateway 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.

  • skillOverrides setting now actually applies

    The setting was defined but not wired up. off now hides skills from both the model and /, user-invocable-only hides from the model only (still callable via /), and name-only collapses the description so only the name is shown.

  • claude_code.pull_request.count OTel metric counts MCP-created PRs/MRs

    The 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 themes and monitors under "experimental": { ... }

    Top-level declarations still work, but claude plugin validate now 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.
  • /clear not resetting the terminal tab title after a conversation — fixed.
  • Session title chip from /rename disappearing 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.
  • /context dumping its rendered ASCII visualization grid into the conversation, wasting ~1.6k tokens per call — fixed.
  • /agents Library list arrow-key navigation: highlighted agent now stays visible when the list exceeds the viewport — fixed.
  • /branch success 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 --debug during voice mode — fixed.

Permissions, auth & policy

  • Server-managed settings policy not applying for enterprise/team users whose stored OAuth credentials lacked the user:inference scope — 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.
  • deniedMcpServers patterns 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 /clear or compaction when changing /effort or /model — fixed.

VSCode

  • /clear not clearing the conversation context and displayed transcript — fixed.

Notes

  • Gateway model discovery is opt-in now — the automatic /v1/models call from 2.1.126–2.1.128 is gone. To populate the /model picker from your gateway, set CLAUDE_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 themes and monitors declarations work but trigger claude plugin validate warnings. 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.