What changed
Claude Code 2.1.309 shipped on October 22, 2026. Most of its fixes close gaps in the sandbox and permission checks: shell startup files running outside the sandbox, denyWrite patterns not applying through symlinks, and Bash permission checks not prompting for some compound commands. It also changes how sed -i, claude ultrareview, dangerous rm in bypass permissions mode and worktree creation behave, with further fixes across sessions and input, skills and hooks, the VS Code extension, cloud sessions, Claude Tag and Code Review.
Key improvements
-
Git commands on Windows, and English git errors everywhere
Many git commands Claude Code runs for itself are faster on Windows. On every platform, errors from those commands now show in English even when git is set to another language.
-
Disk-full handling
A Bash command cut off by a full disk now says so and names the folder to free up, and starting on a full temp volume prints a clear message, not a raw ENOSPC error.
-
Hooks module nested too deep
The error now names the file instead of showing a bare stack-overflow message.
-
/claude-apiskillOffers API tracing alongside SDK tracing when asked to add OpenTelemetry, and checks the live docs before saying a feature is unsupported. It now also covers service account keys and Workload Identity Federation tokens managing OpenTelemetry destinations.
-
Bundled dataviz skill
Accepts APCA as a text-contrast measure (keeping WCAG 2 ratios where AA conformance is required), adds an
apca(text, background)function to its palette validator scripts, and says whether a label inside a colored chart fill should be white or near-black. -
[Self-hosted runner] Sessions that move to a new runner
Claude now sees the tool call that was interrupted, marked as outcome unknown.
-
[VSCode] Edit and Write speed
The wait for new problems after each edit in the chat panel is now 0.75 seconds in most cases, down from 1 to 1.5 seconds.
-
[VSCode] Certificate verification warning
A log warning now says what to do when dictation or the extension’s own requests fail certificate verification, such as behind a TLS-inspecting proxy.
-
[Cloud sessions] Changes pane
Now says when it lists only pushed commits or only Claude’s edits.
Changed behavior
-
sed -iGets the standard Bash prompt and runs as written, not a simulated file-edit preview. Like other Bash edits, it is no longer restored by
/rewind. -
claude ultrareviewrequires workspace trustIt asks on a terminal, else refuses. Scripts pass
--trust-workspace, which takes no value (put a PR number or base branch before it), or setCLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1. -
Dangerous
rmandrmdirin bypass permissions modeIn the Desktop app and VS Code, the prompt now denies the command at once with a rewrite hint, so unattended sessions keep going.
-
Commands excluded from the sandbox
While the sandbox is enabled but cannot run, commands the settings exclude from the sandbox now ask before writing to its write-list paths; the unsandboxed fallback is refused there.
-
Worktree creation and reuse
Git no longer fetches objects on demand, in ordinary clones and in partial clones with a Bash sandbox configured; such a partial clone fetches them first.
-
/claude-apiManaged Agents subagent teamsBuilt on
multiagent_20261001with dynamic workflows on by default, instead ofcoordinator.
Bug fixes
Sandbox & permission checks
- Sandboxed Bash commands on macOS and Linux running the shell’s startup files outside the sandbox before each command.
- macOS sandbox
denyWriteglob patterns not applying at a path’s real location when the pattern’s folder is reached through a symlink. - Sandboxed commands and auto-accepted edits being able to modify the MCP config file passed with
--mcp-config. - A disabled MCP server being reconnected by a later permission prompt in print and SDK sessions.
- The Bash permission check trusting a variable set by a command whose redirect can fail to open.
- Bash permission checks not prompting for some compound commands that change directory before running git when the
cdis wrapped or prefixed, as they do for a plaincd. - An
Edit(path)deny rule not blocking a Bash redirect to that path in some commands that also held a subshell. - Worktree-isolated sessions accepting some locale-prefixed commands, and on zsh some arithmetic commands, that the isolation guard should refuse.
- Profile store write protection not applying when the config directory is reached through a symlink.
- Split-pane agent teammates not inheriting the tool deny and
--toolsrules given on the leader’s command line. - Linux: Sandbox write denies lifting when a background command outlived the session.
- Windows: PowerShell permission checks auto-approving some
Set-Locationorcdcommands that target the current directory and carry extra arguments; these now prompt for approval.
Worktrees & git
- Worktrees and branch checkouts that Claude Code creates not ignoring git replace refs, as its other git operations already do.
Sessions, input & transcripts
- Sessions compacting repeatedly after reading files under a very large nested CLAUDE.md; a nested CLAUDE.md over the size limit now loads only its start.
- ctrl+enter (send now) only queuing a message when pressed before the response had started, and restarting a prompt’s hooks while leaving the message queued when pressed while those hooks were running.
- Key-bound slash commands running in the shell from
!mode. - ctrl+o not showing messages from other agents and sessions that are still waiting to be delivered; they now appear in full under the transcript, marked as waiting.
- Long tool output previews being cut through an emoji, leaving session transcripts that
jqcould not parse. - Sessions renamed with
/renameappearing to other sessions under a generated name after a VS Code window reload or a non-interactive--resume. - The
/rewindlist showing “No code changes” for a turn that changed checkpointed files through/code-review --fix, a subagent or a shell command. /privacy-settingsshowing an out-of-date “Help improve our AI models” value; it now also says when the setting can’t be fetched.- Feedback saying “try again later” when your organization does not accept feedback; it now shows the server’s reason and where to report a bug.
- Oversized /feedback reports failing instead of being resent without the transcript.
- Read reporting “File does not exist” for PDF page ranges in Linux sandboxes that share the parent’s
/proc.
Skills, hooks & mods
- A skill in an
--add-dirfolder being unreachable when another skill already held its name; it is now offered as<folder>:<name>. /verifyand/code-reviewnot finding a nested package’s own skill when its files were changed from the shell.- The /claude-api skill’s tracing guidance: it no longer says that
ant beta:worker poll --on-workpasses trace context to the command, its C# tracing setup no longer misses spans from the cloud platform clients, and it no longer says that API spans for requests to Claude Platform on AWS can’t join the caller’s trace. - Hooks that run in PowerShell not blocking when the hook’s program exits with code 2, and on Windows
PreToolUseandPermissionRequesthooks with"shell": "powershell"failing open when Git for Windows isn’t installed. - A mod’s
turn.stephook that names a model by alias, such ashaiku, failing every request with a model error; the alias now resolves to its model.
Plugins & artifacts
- Plugins and skills synced from claude.ai being removed, sometimes mid-session, after a disk read error.
- Artifact publishes and updates being refused for some ordinary pages, such as pages with certain minified scripts or artifacts Claude could not read first.
- Claude asking for permission on each artifact update for the rest of a turn after the conversation was compacted in that turn.
Gateways & connections
- Fine-grained tool streaming staying off on Amazon Bedrock when
ANTHROPIC_BEDROCK_BASE_URLis set to the defaultbedrock-runtime.<region>.amazonaws.comendpoint. - The “Waiting for API response” hint flickering behind gateways that send only keepalive pings; routes off Anthropic’s backend now wait 45 seconds.
- Messages from a Claude Desktop-hosted session sometimes being lost when its connection refreshed.
- Features missing from Claude Code sessions in the Claude desktop app when the terminal on the same computer was signed in to a different account or organization.
- The
claude remote-controlstatus line showingHEADas the branch for a folder that is not in a git repository. - Claude notifying unrelated GitHub users by writing role names and placeholders as mentions in PRs, issues and comments.
Platforms & self-hosted runner
- macOS: The “Install Command Line Developer Tools” dialog opening each time Claude Code starts on a Mac without Xcode or the Command Line Tools.
- [Self-hosted runner]
--startup-timeout-minstopping a session whose first prompt, such as/code-review, was still working in a subagent; a frozen process is still stopped.
VS Code extension
- The Claude panel staying blank after the editor cached an incomplete copy of its files; it now recovers by itself, or says what went wrong and how to fix it.
- Session history filling up with empty “Untitled” sessions each time you start a new session without sending a message.
- Long slash-command messages such as
/goalfilling the chat panel, and long messages not folding behind Show more after the chat panel is made narrower. - Ctrl+J in the chat input always inserting a newline; it is now left to VS Code and the OS when “ctrl+j” is set to null in the Chat context of
~/.claude/keybindings.json. - A mod’s “From the … plugin” label above the prompt being drawn over the slash command and @-mention menus.
- An empty list item, paragraph or code block, and list items renumbered from 1, when pasting copied LaTeX math.
- The feedback error showing only an HTTP status when your organization does not accept feedback.
Cloud sessions
- The Add connector list in routine forms saying no connectors were available while they were still loading.
- The cloud environment editor shuffling environment variables and adding backslashes to values that contain both kinds of quote.
- The self-hosted environment details dialog in admin settings now keeps its title, tabs and buttons in view while only the content scrolls.
- The “read documentation” tool row showing escaped JSON instead of a readable page.
Claude Tag (Slack)
- Claude in Slack posting a draft you approved for a channel into your DM by mistake; a post with no channel is now refused so it can go to the approved channel.
- Allow and Deny on Claude’s approval cards doing nothing when the session had stopped; your answer now restarts the session.
- Claude ignoring untagged messages in a Slack channel after its workspace moved to a different Claude organization, including unshared channels on Enterprise Grid.
- Claude posting a threaded reply before reading a newer message someone had just added to that thread.
- The Slack page in Claude Tag admin settings saying no workspaces were connected when the list failed to load; it now shows an error with a Retry button.
Code Review
- A finished review showing no check on the pull request when earlier tries to create it failed; a final try now adds a completed check.
- A push queued behind a running review still starting a review after
@claude review stop; its check now closes and says why.
Notes
- If you run
claude ultrareviewfrom scripts, it now refuses without workspace trust. Pass--trust-workspaceafter any PR number or base branch, or setCLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1. - If you relied on
/rewindto undosed -iedits, it no longer restores them.sed -inow gets the standard Bash prompt and runs as written. - If you run unattended sessions in bypass permissions mode in the Desktop app or VS Code, dangerous
rmandrmdircommands are now denied at once with a rewrite hint instead of waiting on a prompt. - If your settings exclude commands from the sandbox, they now ask before writing to the sandbox’s write-list paths while the sandbox is enabled but cannot run.
- If you use worktrees in a partial clone with a Bash sandbox configured, git objects are fetched first rather than on demand.
- If you keep a very large nested CLAUDE.md, only its start loads once it is over the size limit, so put the instructions that matter near the top.