Release notes

FEATURE

Tighter permission gates close command loopholes

When Claude edits files or runs terminal commands, lookalike commands should not get a free pass. Permission checks now treat dir/**, PowerShell, Bash redirects, very long commands, zsh comparisons, risky uses of help and man, and file commands using -m/--magic-file or -f/--files-from more cautiously. Docker or Podman commands aimed at another daemon also ask first, and remote sessions wait for local confirmation. Think of it as fixing badge readers that once mistook a hallway sign for building-wide access.

FEATURE

Sessions can end safely and long jobs stay visible

Claude can now end a session with persistently abusive users or jailbreak attempts, while long tool calls send periodic heartbeats so they no longer look dead. Several quiet failure paths are fixed too: bad feature flags, settings files pointing to device files that could cause unbounded memory growth, oversized settings files that now fail clearly at startup when over 2 MiB, corporate proxies, slow SDK consumers, scheduled tasks, Linux pkill -f, and shell-config paths that are directories. The advisor no longer raises a false network warning while thinking, and claude rc explains why trust cannot persist in the home directory. It is like a help desk that can end an abusive call while its back room keeps a status light on.

FEATURE

Logs now connect the pieces of one job

Tracing one job should not mean sorting scattered receipts. Memory files now carry an ISO modified timestamp, while OpenTelemetry events get message IDs, request IDs, and tool provenance, with a configurable 60 KB content limit. Custom agent rows can show model and reasoning effort; streaming telemetry no longer double-counts costs or tokens, and async logs retain trace context. Inline # no longer chops off saved memory values. It is a ledger where every receipt is numbered and filed together.

BUGFIX

Windows terminal work loses its hangs and garbling

On Windows, PowerShell commands no longer wait until timeout when a child process needs standard input. Python now survives non-UTF-8 input and non-ASCII output, PowerShell 7 errors lose their raw terminal control codes, and valid “not found” answers from where.exe, fc.exe, and diff.exe are not treated as failures. PowerShell 5.1 redirects now write UTF-8 instead of UTF-16LE. It is one conveyor belt with labels every tool can read.

BUGFIX

Background work no longer lingers or becomes undeletable

Background work should not keep a desk forever or become impossible to remove. A departing daemon no longer deletes its successor’s control socket; parked jobs no longer keep workers alive indefinitely; and deletion or restore no longer breaks because the service is idle, work came from outside Git, or the session store has an unreadable folder. Like a night shift that hands over the right keys, every finished session can be removed cleanly.

BUGFIX

Remote control and settings stop getting blocked for no reason

Remote Control no longer sends “session ready” notifications for sessions where you never enabled it. In agent view, /install-github-app and /mcp settings are available unless a background session has no terminal attached. Plugins enabled with --settings load again, and long-running sessions refresh feature flags after an OAuth token rotates. It is a remote control that responds only to paired devices, with settings blocked only when a background session has no terminal attached.

BUGFIX

MCP services and connections survive temporary errors

A transient error while refreshing MCP prompts and resources no longer clears a server's existing slash commands and resources, like a brief power flicker that leaves tools in their box. Hooks returning exit code 2 still block as documented when their stdout JSON fails schema validation. /ultrareview no longer refuses to run in a Git repository with no merge base: it offers to review all tracked files. After a stale-connection error, keep-alive connection pooling is disabled so retries open a fresh socket.

Original changelog

Original changelogTighter permission gates close command loopholes
Fixed single-segment `dir/**` allow rules like `Edit(src/**)` auto-approving writes to nested `dir/` directories anywhere in the tree instead of only `<cwd>/dir`
Fixed a permission-check bypass affecting commands run in Windows PowerShell 5.1 sessions
Fixed Bash permission checks to fail closed on file-descriptor redirect forms that bash parses differently than the permission analyzer
Fixed Bash permission checks misjudging very long commands — commands over 10,000 characters now always prompt instead of running automatically
Fixed Bash permission checks treating zsh variable subscripts and modifiers in `[[ ]]` comparisons as inert text — these commands now prompt for approval
Fixed Bash permission checks to no longer auto-approve certain `help` and `man` commands that could run unsafe options, command substitutions, or backslash paths
Fixed permission prompts on remote sessions that could proceed before the local confirmation dialog
Added permission prompts for `docker` commands (including the Podman `docker` shim) carrying daemon-redirect flags (`--url`, `--connection`, `--identity`, and Podman's remote mode) that previously ran without one
Changed single-segment `dir/**` hook `if:` conditions to match only `<cwd>/dir`; write `**/dir/**` for any-depth matching. `deny`/`ask` permission rules keep their any-depth match.
Changed `file` commands using `-m`/`--magic-file` or `-f`/`--files-from` to require permission instead of being auto-allowed as read-only
Original changelogSessions can end safely and long jobs stay visible
Added the EndConversation tool: Claude can end sessions with highly abusive users or jailbreak attempts, as on claude.ai since 2025 — see https://www.anthropic.com/research/end-subset-conversations
Added a periodic progress heartbeat for long-running tool calls that previously went silent
Fixed a crash when a GrowthBook feature evaluates to null, and a bug where a malformed flag payload could wipe the cached feature flags
Fixed Bash tool killing the Claude session when a `pkill -f` pattern accidentally matched the CLI's own process (Linux)
Fixed unbounded memory growth when `--settings` points at a device file or multi-GB file; oversized (>2 MiB) settings files now fail at startup with a clear error
Fixed streaming turns failing with "Socket is closed" behind corporate proxies on Windows
Fixed stream-json output truncation at exit for slow-reading SDK/pipeline consumers; the exit drain now scales with queued bytes instead of a flat 2s cap
Fixed scheduled tasks refusing their own configured prompt as untrusted input — the fired prompt is now delivered as the session's assigned task
Fixed `claude update` and `claude doctor` hanging silently, and the `/status` System diagnostics section going blank, when a shell-config path is a directory
Fixed a spurious "check your network" warning that appeared while the advisor was thinking
Improved the `claude rc` workspace-trust error in the home directory to say trust there is never saved and to suggest running from a project directory
Original changelogLogs now connect the pieces of one job
Added an ISO `modified` timestamp to memory file frontmatter
Added `message.uuid`, `client_request_id`, and `tool_source` attributes to OpenTelemetry log events for message-level correlation and tool provenance
Added `CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH` to configure the 60 KB truncation limit on OpenTelemetry content attributes
Added reasoning effort to the `subagentStatusLine` payload, so custom agent rows can render model and effort
Fixed memory frontmatter values being silently truncated at an inline `#` when memory files are saved
Fixed session cost and token telemetry double-counting on streams that emit multiple cumulative `message_delta` frames
Fixed OTel log events emitted outside the turn's async context missing the interaction span's trace context
Original changelogWindows terminal work loses its hangs and garbling
Fixed PowerShell tool commands hanging until timeout when a child process waited on standard input (Windows)
Fixed Python scripts under the PowerShell tool crashing with UnicodeDecodeError when reading non-UTF-8 data from standard input (Windows)
Fixed Python scripts run via the PowerShell tool crashing with UnicodeEncodeError on non-ASCII output, and PowerShell 7 error messages containing raw ANSI escape sequences (Windows)
Fixed the PowerShell tool reporting `where.exe`, `fc.exe`, and `diff.exe` as errors when they return a valid negative answer (Windows)
Fixed `>` and `>>` under the PowerShell tool on Windows PowerShell 5.1 writing UTF-16LE files that other tools couldn't read as UTF-8
Original changelogBackground work no longer lingers or becomes undeletable
Fixed a displaced background daemon deleting its successor's control socket on shutdown, which made the next client kill the healthy replacement daemon
Fixed background sessions parked with `←` or `/background` and left idle keeping the background daemon and a worker process alive indefinitely
Fixed completed background sessions being impossible to remove via `claude rm` or the agent view once the background service had gone idle
Fixed background sessions dispatched from a non-git folder being impossible to delete from the agents view
Fixed reopening a stopped background session failing to restore its saved conversation when an unreadable folder exists in the session store
Original changelogRemote control and settings stop getting blocked for no reason
Fixed the Remote Control "session ready" push notification firing for sessions where Remote Control was not explicitly enabled
Fixed `/install-github-app` and the `/mcp` settings menu being blocked in agent-view sessions — they're now refused only in background sessions with no terminal attached
Fixed plugins enabled via the `--settings` CLI flag not loading (regression since v2.1.181)
Fixed feature flags going stale in long-running sessions after the OAuth token rotates
Changed SessionStart hooks to report source `"fork"` when a session begins as a fork instead of `"resume"`
Original changelogMCP services and connections survive temporary errors
Fixed `/ultrareview` refusing to run in repos with no merge base — it now offers to review all tracked files
Fixed hooks with exit code 2 not blocking as documented when the hook's stdout JSON fails schema validation
Fixed MCP transient errors during prompts/resources refresh clearing the server's slash commands and resources
Changed keep-alive connection pooling to disable after a stale-connection error, so retries open a fresh socket