What changed
Claude Code 2.1.239 shipped on August 21, 2026. It is a fix-heavy release: most of its 50-plus changes are bug fixes. The one with real money attached is Bedrock streaming behind proxies that strip the response Content-Type header — every turn was re-run non-streaming, silently doubling billed API calls. Cost reporting was corrected too, so the 1.1× US-only-inference premium for data-residency workspaces now shows up in the numbers. The rest clusters around /resume, fullscreen rendering, and prompt-input editing.
New features
-
/claude-api upgradeMigrating a Python project from
anthropic0.x to 1.x meant finding and rewriting each changed call yourself./claude-api upgradenow performs that migration, and the skill’s Python reference was updated for 1.x — timeouts useanthropic.Timeout, nothttpx.Timeout. -
Windows: cross-session messaging
Cross-session messaging was macOS and Linux only, so Windows sessions couldn’t find or reach each other. Claude Code sessions across your machines can now message each other with
SendMessageand find each other withListAgents, as on macOS and Linux.
Key improvements
-
Cost estimates include the data-residency premium
Data-residency workspaces are billed at 1.1× for US-only inference, but
/cost, the status line, and--max-budget-usdleft that multiplier out, so estimates read low against the actual bill. All three now include it. -
Fullscreen renderer offer on Bedrock, Vertex, and Foundry
These setups were excluded from the one-time fullscreen renderer offer, so it never appeared. The offer now shows there, and new installs on those setups start in fullscreen.
-
Synced plugins are distinguishable in cloud sessions
Plugins synced from claude.ai were indistinguishable by name from ones you installed, so a same-named pair could clobber each other. Synced plugins now show as
name@synced, work withclaude plugin enable/disable <name>@synced, and never override a same-named plugin you installed. -
Alpine/musl add-ons load
On Alpine and other musl systems, the native image paste, clipboard, and audio-capture add-ons were glibc-built and the runtime refused them. Musl-built binaries now ship, so the add-ons load.
-
Usage-limit message names the session and weekly resets
The message shown when your monthly spend limit is already used up stated only that fact, with no indication of when you could work again. It now also says when your session or weekly limit resets.
-
Post-compaction reminder — the reminder shown after compaction could get a skill’s original arguments re-run as a new request. Its wording was improved so that no longer happens.
-
/goalcheck-in cadence — repeat check-ins on long-running background work now back off (30 min, then 1 h, then every 2 h) instead of repeating every 30 minutes. Resuming a session from theclaude --resumepicker also restores its active goal. -
ListAgentsreports your own name and your teammates — a session had no way to learn the name its peers use to message it.ListAgentsnow tells a session its own name, andSendMessageto your own name says so instead of “no agent named …”.ListAgentsand/list-agentsalso list your live teammates; previously only subagents and other sessions appeared, so a reachable teammate looked absent. -
keybindingFlavor: "readline"word keys — the readline flavor still diverged from Bash on word motions. It now also matches Bash for word keys: Alt+F and Ctrl/Option+→ stop at the end of the word, Alt+D deletes to it (Ctrl+Y pastes it back), and punctuation separates words. -
Persistent retry mode fails fast on spend limits —
CLAUDE_CODE_RETRY_WATCHDOGwaited indefinitely for a reset on organization spend-limit and out-of-credits errors. It now fails immediately on both. -
Keep-alives during long startup hooks — remote sessions keep sending keep-alives while a long
SessionStartorSetuphook runs, so the container is not idle-reaped mid-hook. -
Mobile image uploads carry a file path — images uploaded from mobile to a remote session had no saved path, so Claude couldn’t copy them into files it creates. They now include their saved file path.
-
Claude in Chrome tab-group cleanup —
/clearnow closes the session’s Chrome tab group, and empty groups are closed on/resumeand when Claude Code exits. -
Web sessions route non-API anthropic.com traffic through the proxy — on Claude Code on the web, requests from Bash and other tools to non-API anthropic.com hosts (e.g. www, docs) bypassed the session’s network proxy. They now go through it, so your environment’s allowed domains apply.
-
Remote Control availability messaging — clearer message and
claude doctorwording when Remote Control isn’t enabled for your account. -
Long file paths on tool-use rows — they now truncate in the middle to stay on one line.
-
[VSCode] usage-limit banner — “View usage” now sits inline with the warning text instead of floating mid-banner.
Bug fixes
Bedrock & proxies
- Bedrock streaming behind proxies that strip the response Content-Type header — fixed; this silently doubled billed API calls by re-running every turn non-streaming.
- Claude Code hanging at startup behind an HTTPS proxy when using Bedrock with an SSO profile and
awsAuthRefresh— fixed; the credential pre-check now honorsHTTPS_PROXY. - A request rejected by an organization policy check being re-sent before the rejection was shown — fixed.
Session resume & session lists
- Custom session titles disappearing from
/resumeafter more than ~64 KB of conversation was written following the rename — fixed. claude -c/resume picking up sessions from a different directory whose path differed only by characters like_,-, or.— fixed./resumeand the agents view showing a session as recently changed (and reordering it) when only its file was touched or it was merely reopened — fixed./resumein all-projects mode telling you tocdinto a deleted directory (e.g. a removed worktree) — fixed; such sessions now resume in the current directory.- A race where pressing Esc with a prompt queued could let the next turn finish early — fixed; this left the session idle while Claude was still working, and let a later resubmit repeat actions.
- Cloud sessions (Claude Code on the web, desktop and mobile apps) resuming out of plan mode after an idle worker restart — fixed.
- Runaway session-title syncing to Remote Control when two Claude Code processes shared one background job’s state (a 2.1.232 regression) — fixed; title updates are now deduplicated and rate-limited.
- Sessions whose title starts with
/being unaddressable bySendMessageand shown as “(untitled)” inListAgents— fixed.
MCP
- MCP elicitation forms taller than the terminal being clipped in fullscreen mode — fixed; the form now fits the window, with hidden fields reachable by scrolling and Accept/Decline always visible.
- Remote MCP servers staying failed after a transient 5xx on a mid-session reconnect — fixed; this affected cloud sessions and SDK
setMcpServers().
Rendering & fullscreen
- The
dark-ansitheme rendering expanded tool results in fullscreen mode with text the same color as the background — fixed. - The fullscreen renderer prompt reappearing on every launch when it could never be answered — fixed; it now stops after being shown on three launches.
- Mouse movement in browser-based terminals inserting text like
"35;150;7M"into the prompt — fixed; this happened when a mouse report arrived split across writes. - Custom theme overrides for the effort/ultracode status badge colors being ignored — fixed.
- Fullscreen mode answering a permission prompt or pressing a button when you clicked the terminal window only to bring it back into focus — fixed.
- Slash-command panels (e.g.
/config,/model) in fullscreen mode covering the latest messages — fixed; the conversation now stays pinned above the panel. - The
/workflowsdetail dialog overflowing the terminal and losing its header off-screen when opened while Claude is still responding — fixed. - Edit and Write calls pausing for about 5 seconds in JetBrains IDE terminals when the Claude Code plugin is connected — fixed.
Prompt input editing
- Vim mode in the agent view clearing the prompt on Escape — fixed; Escape now switches to NORMAL mode and keeps your text.
- The
selection:copykeybinding silently dropping a text selection that had been extended with Shift+Arrow keys — fixed. - Ctrl+W, Ctrl+U, Ctrl+K, Option+Backspace, Option+D and vim
df/dtleaving a broken[Pasted text #N]placeholder when the cursor was inside it — fixed. - Masked (password-style) inputs such as the login code field letting their text be pasted back with Ctrl+Y elsewhere or saved to prompt history when cleared with double Esc — fixed.
- Ctrl+Backspace deleting one character instead of a word in search boxes — fixed.
- Shell-mode (
!) Tab completion dropping the./from a./scriptpath — fixed; this left a command the shell couldn’t run. - The
/voicestartup tip still appearing after voice dictation was enabled via thevoice.enabledsetting — fixed.
Config files & execution environment
.worktreeincludepatterns starting with**/silently matching nothing when the target lived in a gitignored directory — fixed.- Agents, skills, and commands whose
.mdfile starts with a UTF-8 BOM being silently ignored — fixed. - Marketplace
metadata.pluginRoothaving no effect — fixed; bare plugin source names now resolve under it as the docs describe. claudeMdExcludesnot excluding a symlinked.claude/rulesfile when the pattern names the rules directory or the symlink rather than its target — fixed.- The Linux sandbox making a nonexistent
.git/config.worktreeunreadable — fixed; this broke every sandboxed git command in repos withextensions.worktreeConfigset. - Hooks failing with “posix_spawn ENOENT” after the session’s working directory was deleted — fixed; they now run from the project root or home directory instead.
- A raw crash dump when starting Claude Code from a directory that no longer exists — fixed; it now prints a clear message.
- WebFetch retaining expired page content in memory for the whole session instead of the intended 15 minutes — fixed.
/insightsechoing literal<message>tags in its response on some models — fixed.- OpenTelemetry trace fragmentation — fixed; tool executions deferred by a
PreToolUsehook now resume in the original turn’s trace instead of starting a new trace.
Notes
- If you run Bedrock behind a proxy, check your recent bill — behind proxies that strip the response Content-Type header, every turn was re-run non-streaming, so billed API calls were silently doubled until this release.
- A higher
/costfigure is not a price increase — data-residency workspaces were already billed at 1.1× for US-only inference; this release adds that multiplier to/cost, the status line, and--max-budget-usd. - The fullscreen offer now stops after three launches — on Bedrock, Vertex, and Foundry it appears for the first time in this release, and new installs there start in fullscreen.
- Cross-session messaging is available on Windows —
SendMessageandListAgentswork across your machines as they do on macOS and Linux. - Synced plugins are addressed as
name@synced— useclaude plugin enable/disable <name>@synced, and a same-named plugin you installed yourself is never overridden. CLAUDE_CODE_RETRY_WATCHDOGno longer waits out spend limits — organization spend-limit and out-of-credits errors now fail immediately rather than being retried, so they need a billing or limit change.