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
commandsourcesA 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
commandsource: a local command prints the plugin directory, and Claude Code re-resolves it each session and applies it without a restart. Withmode: "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--continuefor 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
-
ListAgentsmarks offline and cloud sessionsRemote Control sessions that had already disconnected still appeared in
ListAgentsoutput, indistinguishable from live ones. Disconnected Remote Control sessions are now markedoffline, and your cloud sessions are labeledcloud. -
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=0to 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. -
/loginrepeats theCLAUDE_CODE_OAUTH_TOKENoverride warningWhen
CLAUDE_CODE_OAUTH_TOKENis 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./loginnow repeats the override warning after a successful login. -
/commit-push-prno longer auto-approves dangerous flags/commit-push-prauto-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-dirThere 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
/btwpanel“Report a problem” and
/bugpointed at a retired survey link; both now open the built-in feedback dialog. The/btwside-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, orcommandvalue — fixed; this also hit--resumeof 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/--resumeat 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. /modelrejecting Sonnet/Opus 1M for claude.ai subscribers using a customANTHROPIC_BASE_URLgateway — fixed.- MCP OAuth failing against strict authorization servers — fixed by using
127.0.0.1instead oflocalhostin the redirect URI. - SDK and
--input-format stream-jsonsessions 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-appcompleting 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.jsonis 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 plugincommands 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-prnow 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-prunattended 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 thelocalhostform, check that the127.0.0.1address 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=0to launch same-prefix sibling agents simultaneously as before. commandmarketplace 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.