What changed
Claude Code 2.1.214 shipped on July 18, 2026. Permission-check hardening is the center of this release: over-eager auto-approval from single-segment rules like Edit(src/**), a permission-check bypass in Windows PowerShell 5.1, and Bash permission checks misjudging file-descriptor redirects and commands over 10,000 characters all now fail closed. A new EndConversation tool and a progress heartbeat for long-running tool calls land alongside a large batch of fixes to background daemon and session lifecycle, Windows PowerShell tool reliability, and streaming behind corporate proxies.
New features
-
EndConversation tool
Claude had no way to end a conversation, so sessions with highly abusive users or jailbreak attempts kept going. Claude can now end those sessions with the new EndConversation tool — a safeguard that has been on claude.ai since 2025.
-
Progress heartbeat for long-running tool calls
Long-running tool calls produced no output until they finished, so they looked stalled. A periodic progress heartbeat now shows that work is still in flight.
-
Reasoning effort in the
subagentStatusLinepayloadCustom agent rows could render the model but not the reasoning effort. Reasoning effort is now added to the
subagentStatusLinepayload, so custom agent rows can render both model and effort. -
ISO
modifiedtimestamp in memory file frontmatterMemory files didn’t record when they were last changed. An ISO
modifiedtimestamp is now added to memory file frontmatter. -
OpenTelemetry correlation and provenance attributes
There was no way to correlate log events at the message level or trace tool provenance.
message.uuid,client_request_id, andtool_sourceattributes are now added to OpenTelemetry log events, andCLAUDE_CODE_OTEL_CONTENT_MAX_LENGTHconfigures the 60 KB truncation limit on OpenTelemetry content attributes.
Key improvements
-
dir/**hookif:conditions now match only<cwd>/dirSingle-segment
dir/**hookif:conditions matched adir/anywhere in the tree. They now match only<cwd>/dir; write**/dir/**for any-depth matching.deny/askpermission rules keep their any-depth match. -
filecommands with-m/--magic-fileor-f/--files-fromrequire permissionThese options were auto-allowed as read-only. They now require permission instead.
-
Keep-alive connection pooling disables after a stale-connection error
The connection pool was reused even after a stale-connection error, so retries hit the same dead socket. Keep-alive pooling now disables after such an error, so retries open a fresh socket.
-
SessionStart hooks report
"fork"sourceA session that began as a fork was reported as
"resume". SessionStart hooks now report source"fork"when a session begins as a fork. -
Clearer
claude rcworkspace-trust error in the home directoryThe workspace-trust error in the home directory was unclear. It now says trust there is never saved and suggests running from a project directory.
Bug fixes
Permission checks
- Single-segment
dir/**allow rules likeEdit(src/**)auto-approving writes to nesteddir/directories anywhere in the tree — they now apply only to<cwd>/dir. - A permission-check bypass affecting commands run in Windows PowerShell 5.1 sessions — fixed.
- Bash permission checks not failing 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.
- Bash permission checks treating zsh variable subscripts and modifiers in
[[ ]]comparisons as inert text — these commands now prompt for approval. - Certain
helpandmancommands that could run unsafe options, command substitutions, or backslash paths being auto-approved — fixed. - Permission prompts on remote sessions that could proceed before the local confirmation dialog — fixed.
dockercommands (including the Podmandockershim) carrying daemon-redirect flags (--url,--connection,--identity, and Podman’s remote mode) running without a permission prompt — they now prompt.
Background sessions & daemon
- 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/backgroundand left idle keeping the background daemon and a worker process alive indefinitely — fixed. - Completed background sessions being impossible to remove via
claude rmor 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 — fixed.
- The Remote Control “session ready” push notification firing for sessions where Remote Control was not explicitly enabled — fixed.
/install-github-appand the/mcpsettings menu being blocked in agent-view sessions — they’re now refused only in background sessions with no terminal attached.
Windows & PowerShell tool
- Streaming turns failing with “Socket is closed” behind corporate proxies on Windows — 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, anddiff.exeas 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 — fixed.
Streaming & telemetry
- 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.
- Session cost and token telemetry double-counting on streams that emit multiple cumulative
message_deltaframes — fixed. - OTel log events emitted outside the turn’s async context missing the interaction span’s trace context — fixed.
- Feature flags going stale in long-running sessions after the OAuth token rotates — 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.
Other
- The Bash tool killing the Claude session when a
pkill -fpattern accidentally matched the CLI’s own process (Linux) — fixed. - Unbounded memory growth when
--settingspoints at a device file or multi-GB file — oversized (>2 MiB) settings files now fail at startup with a clear error. - Scheduled tasks refusing their own configured prompt as untrusted input — the fired prompt is now delivered as the session’s assigned task.
- Plugins enabled via the
--settingsCLI flag not loading (regression since v2.1.181) — fixed. /ultrareviewrefusing to run in repos with no merge base — it now offers to review all tracked files.claude updateandclaude doctorhanging silently, and the/statusSystem diagnostics section going blank, when a shell-config path is a directory — fixed.- Memory frontmatter values being silently truncated at an inline
#when memory files are saved — fixed. - A spurious “check your network” warning that appeared while the advisor was thinking — 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 — fixed.
Notes
- If you use permission rules, re-verify behavior — single-segment
dir/**allow rules now apply only to<cwd>/dirinstead of the whole tree. Write**/dir/**for any-depth matching.deny/askrules keep their any-depth match. - Bash permission checks are more conservative — commands over 10,000 characters, zsh subscripts/modifiers in
[[ ]], file-descriptor redirect forms, and certainhelp/mancommands now prompt instead of running automatically. Commands that were previously auto-approved may now ask for confirmation. dockerpermission change — docker/Podman commands carrying daemon-redirect flags (--url,--connection,--identity, Podman’s remote mode) now require permission. Automation scripts using these flags may need permission-rule adjustments.- EndConversation is an existing claude.ai safeguard — it’s new to Claude Code, but it has been applied to highly abusive users and jailbreak attempts on claude.ai since 2025.