claudekit / updates / claude-code-2-1-229
[ PATCH · ]

Claude Code 2.1.229

Plugin marketplaces can now come from a `command` source: a local command prints the plugin directory, which is re-resolved each session and applied without a restart. Gateway streaming responses send SSE keepalive pings during long thinking pauses, preventing idle-timeout disconnects on Vertex and Bedrock upstreams, and self-hosted runner sessions now get server-supplied hooks, matching managed-environment behavior. Several crashes are fixed — a RangeError in very narrow terminal windows, a crash on non-string `glob`, `file_path`, or `command` values, and a Windows crash on extended-length or UNC paths — along with long responses partly disappearing while streaming and being printed twice. `/commit-push-pr` no longer auto-approves git/gh commands carrying dangerous flags like `--force`, `--amend`, or `--no-verify`.

Official announcement →

This article is a summary based on official documentation.

What changed

Claude Code 2.1.229 shipped on August 12, 2026. It’s a large release — five additions, eighteen fixes, and nine other changes. The additions cluster around plugin distribution and remote execution environments; the fixes cluster around crashes and terminal rendering. Two changes alter existing behavior: /commit-push-pr no longer auto-approves dangerous git flags, and self-hosted runner startup on Windows now requires an explicit --base-dir.

New features

  • Plugin marketplace command sources

    A marketplace had to point at a fixed path or a remote repository. When the plugin directory differs per machine or is managed by something else — an IDE, for instance — that path had to be written into settings and edited whenever it moved. Marketplaces can now use a command source: a local command prints the plugin directory, and Claude Code re-resolves it each session and applies it without a restart. With mode: "link", the plugin is used in place rather than copied.

  • Server-supplied hooks for self-hosted runner sessions

    A managed environment could deliver hooks from the server to a session, but sessions running on a self-hosted runner didn’t receive them, so organization-level hook policy had to be installed on the runner separately. Self-hosted runner sessions now get server-supplied Claude Code hook support, matching managed-environment behavior.

  • SSE keepalive pings during long thinking pauses

    While the model is thinking, nothing flows over a streaming response — and something in between could treat that quiet stretch as an idle connection and drop it. Gateway streaming responses now send SSE keepalive pings during long thinking pauses, preventing idle-timeout disconnects on Vertex and Bedrock upstreams.

  • claude remote-control --continue

    --continue for resuming the most recent Remote Control session is now documented. Use it to pick up the last session directly instead of selecting one from a list.

  • [VSCode] Session groups in the sidebar

    As sessions accumulate, finding one in the sidebar list gets harder. Sessions can now be organized into groups: right-click to create, rename, or delete a group, and Cmd/Ctrl- or Shift-click to move several sessions at once.

Key improvements

  • ListAgents marks offline and cloud sessions

    Remote Control sessions that had already disconnected still appeared in ListAgents output, indistinguishable from live ones. Disconnected Remote Control sessions are now marked offline, and your cloud sessions are labeled cloud.

  • Workflow fan-outs reuse the cached prompt prefix

    When a dynamic workflow fans out sibling agents that share a prompt prefix, they all started together — before the first one had written the cache — so each re-paid for the same prefix. Same-prefix sibling agents are now staggered, so subsequent agents read the cached prompt prefix instead of re-paying it. Set CLAUDE_CODE_WORKFLOW_PREFIX_STAGGER_MS=0 to disable.

  • “prompt is too long” errors explain themselves

    The error only suggested /compact, including in cases where automatic compaction had already run and failed — leaving no indication of what to do next. It now explains why automatic compaction could not recover.

  • Sandbox handling of IPv6 literals

    In sandbox network domain lists, the colons inside an IPv6 address and the colon before a port could be read more than one way. IPv6 literals are now bracketed ([::1]:443), and ambiguous spellings are enforced fail-closed and flagged by /doctor.

  • /login repeats the CLAUDE_CODE_OAUTH_TOKEN override warning

    When CLAUDE_CODE_OAUTH_TOKEN is set, it takes precedence over whatever you just logged in as. The warning disappeared on a successful login, making it easy to miss that the new account wasn’t the one in use. /login now repeats the override warning after a successful login.

  • /commit-push-pr no longer auto-approves dangerous flags

    /commit-push-pr auto-approved the git and gh commands it ran, including ones carrying flags whose effects are hard to undo. Commands with dangerous flags (--force, --amend, --no-verify, etc.) are no longer auto-approved.

  • Self-hosted runner on Windows requires --base-dir

    There is no default checkout directory on Windows, so self-hosted runner startup there now requires an explicit --base-dir.

  • [VSCode] Feedback routing and a resizable /btw panel

    “Report a problem” and /bug pointed at a retired survey link; both now open the built-in feedback dialog. The /btw side-question panel is also resizable by dragging its boundary, in both side-docked and stacked layouts.

Bug fixes

Crashes & rendering

  • Long responses partly disappearing while streaming and being printed twice in the terminal — fixed.
  • A crash to the error screen when a tool call had a non-string glob, file_path, or command value — fixed; this also hit --resume of the affected session.
  • A RangeError crash when a progress bar or markdown table rendered in a very narrow terminal window — fixed; it could also crash claude --continue/--resume at startup.
  • A crash on Windows when a tool call or message referenced a file by an extended-length (\\?\) or UNC path — fixed.
  • Multi-second UI stalls after editing a file with thousands of IDE diagnostics while the IDE extension is connected — fixed.

Model connections & API

  • Auto mode failing on every tool call for users who disable the attribution header via CLAUDE_CODE_ATTRIBUTION_HEADER — fixed; this affected direct Anthropic API connections.
  • /model rejecting Sonnet/Opus 1M for claude.ai subscribers using a custom ANTHROPIC_BASE_URL gateway — fixed.
  • MCP OAuth failing against strict authorization servers — fixed by using 127.0.0.1 instead of localhost in the redirect URI.
  • SDK and --input-format stream-json sessions getting a 400 API error when a whitespace-only message was submitted — fixed.
  • Conversations whose messages alone exceed the API’s 32 MB request limit retrying compaction when no images or documents can be stripped — fixed; they now fail once with a clear message.
  • OpenTelemetry export from Claude Desktop sessions being rejected by the Desktop-managed gateway when that gateway is also the telemetry endpoint — fixed.

Remote Control & GitHub integration

  • Remote Control clients showing a stuck working spinner after a slash command typed in the laptop terminal — fixed.
  • The Claude Code Review workflow generated by /install-github-app completing without posting its review on the pull request — fixed.

Self-hosted runners & remote sessions

  • Self-hosted runner and other remote sessions exiting at startup when managed-mcp.json is deployed and the server delivers MCP servers — fixed; those servers are now skipped with a warning.
  • Self-hosted runner repository preparation hanging on a Git Credential Manager prompt — fixed; git now fails fast when credentials are missing.

Plugins & background work

  • One-shot claude plugin commands leaving a stray liveness file that could prevent cleanup of outdated plugin versions — fixed.
  • Dynamic workflows inside CPU-limited containers using the host machine’s core count instead of the container’s CPU limit — fixed.
  • A file-watcher handle leak after atomic file replacements, and an uncaught error on Windows when the scheduled-tasks watcher failed on a network or virtual filesystem — fixed.

Notes

  • /commit-push-pr now prompts on dangerous flags — git and gh commands carrying --force, --amend, --no-verify, and similar are no longer auto-approved. Any flow that ran /commit-push-pr unattended now has an approval step in it.
  • Windows self-hosted runners won’t start without --base-dir — there is no default checkout directory on Windows, so existing runner startup scripts need the flag added.
  • The MCP OAuth redirect URI is now 127.0.0.1 — if the redirect URIs registered with your authorization server only cover the localhost form, check that the 127.0.0.1 address is registered too.
  • Oversized conversations now fail instead of retrying — when the messages alone exceed the 32 MB request limit and nothing can be stripped, compaction can’t recover, so the request fails once. Splitting the conversation or starting a new session is the way forward.
  • Prefix staggering can be turned off — set CLAUDE_CODE_WORKFLOW_PREFIX_STAGGER_MS=0 to launch same-prefix sibling agents simultaneously as before.
  • command marketplace sources are re-resolved every session — the command that prints the plugin directory runs at each session start, so a slow or failing command affects startup.