# Claude Code v2.1.212

> Claude Code v2.1.212, released 16 Jul 2026 (2026-07-16). 27 entries read out of the shipped bundle. Unofficial, and not affiliated with Anthropic.

Web version: https://changelogs.core-directive.com/v/2.1.212

This release introduces a major feedback system where Claude can draft bug reports and feature requests for user review, adds a `/fork` command to split a conversation into a background session, and ships a comprehensive Windows sandbox installation workflow. The entire context-tips system (proactive spinner tips) was removed and replaced with nothing yet visible, and the `propose_skills` tool was added so Claude can surface recurring procedures as skill candidates.

## New Features

### SendFeedback Tool and /feedback Command

Claude now has a `SendFeedback` tool that lets it draft product feedback or bug reports at high-signal moments — such as after encountering a recurring issue or completing a complex workflow. Drafts are written locally and never sent without your review.

**Usage**

`/feedback # review and send queued feedback drafts /bug # same as /feedback, also aliased to /share` **Details** - Claude drafts feedback silently without announcing it. A counter in the footer shows when drafts are queued. - The `/feedback` panel lets you review, edit, or discard each draft before sending. You can toggle transcript inclusion, edit the title/details/area, and choose the type (bug report vs. feature request). - Drafts expire after 30 days and live only on your machine. - The tool is rate-limited: Claude can queue at most N drafts per session. Once the limit is reached, existing queued drafts are unaffected. - A "quiet" mode and "off" mode are configurable in settings (`model-drafted feedback` setting). - Transcript content from third-party providers is withheld from submissions for privacy. **Evidence** "Queue a draft product-feedback report about Claude Code itself for the user to review and send later. Nothing is sent anywhere by this tool — it writes a local draft the user can review, edit, and explicitly send with /feedback." (search for `"SendFeedback"`)

### /fork Command

New `/fork` command copies the current conversation into a new background session, letting you branch off to explore an idea or delegate work without interrupting the main thread.

**Usage**

`/fork # fork with no initial prompt /fork <prompt> # fork and immediately send the prompt to the copy` **Details** - The fork starts with your full conversation history up to this point. - The forked session runs as a background agent — check on it with `claude attach` or the agent view. - Cannot fork if session persistence is off, or if the session was started with certain launch flags (safe mode, custom system prompt, tool allowlist) that the copy wouldn't inherit. - The fork tip: "(← moves this session into the agent view too) · tip: /fork \<prompt\> starts the copy working right away" **Evidence** "Copy this conversation into a new background session and keep working here" (search for `"fork"` in command definitions)

### /subtask Command

New `/subtask` command sends a subagent off with your full conversation context; its result lands back in the current session.

**Usage**

`/subtask <task>` **Details** - The subagent runs synchronously and its result returns inline to the current conversation. - Not available in coordinator sessions — use `/branch` there instead. - Cannot be started before the first conversation turn. **Evidence** "Send a subagent off with your full context; its result comes back here" (search for `"subtask"`)

### Auto-mode Setup (/auto-mode-setup)

New `/auto-mode-setup` command scans your repository and recent sessions, then generates a proposed auto-mode configuration for your review. The scan runs in the background; a review card pops up when it's ready.

**Usage**

`/auto-mode-setup # scan and propose auto-mode rules /auto-mode # inspect or reset current auto-mode configuration` **Details** - If your GitHub org is accessible, the scan also reviews org-level patterns. - The proposal includes new auto-approve rules and may flag existing `permissions.allow` entries for removal. - After reviewing the proposal, you can accept, decline, or discard it. Only accepting writes to your settings file. - `/auto-mode reset` removes the `autoMode` section from your user settings, restoring shipped defaults. - Managed settings auto-mode rules always apply regardless of reset. - Only one setup scan can run at a time; a second `/auto-mode-setup` while a scan is active shows status. **Evidence** "Gathering data and drafting your auto-mode setup; back soon" (search for `"auto-mode-setup"`)

### Propose Skills Tool

Claude now has a `propose_skills` tool that surfaces recurring multi-step procedures from the session as skill proposals. A review card appears in the conversation; nothing is written until you approve.

**Details**

- Claude uses this tool when you ask to turn a workflow into a skill, or when it notices the same procedure has recurred.
- The card shows up to 3 proposals at once.
- Render-only — selecting a proposal on the card triggers the actual skill-save flow.

**Evidence**

"Surface recurring multi-step procedures from this session as skill proposals. Render-only — calling this shows a review card in the conversation; it does not write any files or create the skill." (search for `"propose_skills"`)

### Windows Sandbox Installation

Windows sandbox support now includes a full one-time install flow that sets up a dedicated sandbox user and WFP (Windows Filtering Platform) network filters.

**Usage**

`/sandbox install # install sandbox user and WFP network filters /sandbox # check current sandbox status` **Details** - Requires administrator privileges for the initial install (an elevation prompt appears). - After install: `Sandbox user and network filters installed` — confirmed via `/sandbox`. - If the elevation prompt was missed: re-run `/sandbox install` and approve within a minute. - WFP filter installation is idempotent; passing `force: true` replaces existing filters if the port range or sandbox user name changed. - New error classes: `SandboxCommandTooLongError` (command too long for the OS argv limit — write to a file instead), `SandboxPolicyRefusalError` (enterprise policy blocks the command), `SandboxUnavailableForShellError` (shell not sandboxable). - PowerShell commands on Windows are labeled `PowerShell command (unsandboxed)` to clarify they bypass the sandbox. - Feature-gated via `tengu_nankeen_kestrel`. **Evidence** "Windows sandbox needs a one-time install." (search for `"srt-win install"` and `"ClaudeCodeSandbox"`)

- Flag `tengu_nankeen_kestrel`: Not enough to say (read for one account on one subscription tier against v2.1.212; this account: no value returned, anonymous baseline: no value returned, compiled default: on) These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

### Persistent File-Based Memory (tengu_stone_shell) [Gradual Rollout]

A new memory system gives Claude a persistent, file-based scratchpad stored in a configurable memory directory. Information saved there carries over to future sessions.

**Details**

- Enabled by the `tengu_stone_shell` feature flag.
- Claude receives detailed guidance on what makes a good memory: applicable (prevents repeated mistakes), durable (recurring workflows), and legible (self-contained, full sentences).
- Claude is instructed to write memory before the end of any turn where the user corrects it or it discovers something new about the environment.
- Memory files use markdown with frontmatter (`name`, `description` keys).
- This is separate from the existing `#/memory` shortcut system; it's a lower-level persistent layer.

**Evidence**

"You have a persistent, file-based memory stored at `{memory_dir}`." (search for `"TVh"` or `"tengu_stone_shell"`)

- Flag `tengu_stone_shell`: Off in both readings (read for one account on one subscription tier against v2.1.212; this account: off, anonymous baseline: off, compiled default: on) These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

### Artifact Syntax Highlighting (tengu_artifact_hljs_highlight)

Published artifacts that contain fenced code blocks now include an inline highlight.js (hljs) runtime for client-side syntax highlighting. The runtime is appended only when the artifact contains recognizable language classes.

**Details**

- Feature-flagged via `tengu_artifact_hljs_highlight` (default: true).
- The hljs bundle is loaded from `/$bunfs/root/hljsBundle.generated.min.js` and embedded inline so artifacts remain standalone.
- A per-artifact token budget limits how much code gets highlighted to keep page load fast.
- The runtime is validated before injection; unsafe bundles are rejected.
- The artifact footer note now reads: "— includes the inline syntax-highlight runtime (~1MB), appended because the page contains fenced code"

**Evidence**

"bundle contains an hljs runtime sentinel" (search for `"tengu_artifact_hljs_highlight"`)

- Flag `tengu_artifact_hljs_highlight`: Not enough to say (read for one account on one subscription tier against v2.1.212; this account: no value returned, anonymous baseline: no value returned, compiled default: off) These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

### Claude Code Insights Report

New `/auto-mode-setup` scanning infrastructure also powers a "Claude Code Insights" HTML artifact — a richly styled personal usage report with charts, statistics, and AI-generated analysis.

**Details**

- Shows total messages, lines added/removed, files modified, days active, messages per day.
- Sections: What You Work On, How You Use Claude Code, Impressive Things You Did, Where Things Go Wrong, Features to Try, New Ways to Use Claude Code, On the Horizon, Team Feedback.
- Includes "At a Glance" summary, tool usage charts, language distribution, session types, user response time distribution, and multi-clauding (parallel session) detection.
- Features a time-of-day histogram with timezone selector (PT, ET, London, CET, Tokyo, custom).
- Suggested CLAUDE.md additions are shown with checkboxes and a "Copy All Checked" button.

**Evidence**

"Claude Code Insights" title in generated HTML (search for `"Claude Code Insights"`)

### GrowthBook Authenticated Feature Flag Fetch [Gradual Rollout]

GrowthBook feature flag evaluation can now use an authenticated endpoint (`/api/eval-authed/`) that attaches your auth headers, enabling per-user flag targeting. Falls back to the unauthenticated `/api/eval` endpoint on any error.

**Details**

- Controlled by `tengu_gb_eval_authed_enable` (default: false).
- When enabled, GrowthBook's `fetchRemoteEvalCall` hook is monkey-patched once at startup (idempotent — a boolean sentinel prevents double-installation). Subsequent feature-flag evaluations POST to `<host>/api/eval-authed/<clientKey>` instead of the standard `<host>/api/eval/<clientKey>`.
- Auth headers are sourced from the user's current authentication state via `getAuthHeaders()`: an OAuth access token adds `Authorization: Bearer <token>` and the `anthropic-beta` header; an API key adds `x-api-key`; gateway or third-party provider sessions attach no auth headers, leaving the request functionally unauthenticated despite hitting the authed endpoint.
- On non-2xx response: logs `"GrowthBook eval-authed returned non-ok; falling back to /api/eval"` and re-runs the call via the original unauthenticated path.
- On network or exception error: logs `"GrowthBook eval-authed fetch threw; falling back to /api/eval"` and falls back similarly.

**Evidence**

"GrowthBook eval-authed fetch threw; falling back to /api/eval" (search for `"/api/eval-authed/"`)

- Flag `tengu_gb_eval_authed_enable`: Not enough to say (read for one account on one subscription tier against v2.1.212; this account: no value returned, anonymous baseline: no value returned, compiled default: on) These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.

## Improvements

### Ultrareview Auto-Fetches Missing Branches

When `/code-review ultra` or `/review` can't find the specified base branch, it now attempts to auto-fetch it from origin before failing. If fetch succeeds, the review proceeds without user intervention.

**Details**

- Uses `git ls-remote --heads origin <branch>` to check existence, then `git fetch ... refs/heads/<branch>:refs/remotes/origin/<branch>`.
- If the branch exists on origin but couldn't be fetched: `"<branch>" exists on origin but couldn't be fetched. Run \`git fetch origin <branch>\` and try again.`
- If the branch name looks like a typo, Claude now suggests the closest branch: `"<name>" is not a branch in this repo. Did you mean \`<suggestion>\`?`
- Shallow clone detection: if fetch succeeds but no merge-base exists, suggests `git fetch --unshallow origin`.

**Evidence**

`"exists on origin but couldn't be fetched. Run \`git fetch origin"` (search for `"JI_"`)

### Worktree Symlink Security Check

Worktree creation now rejects `.claude`, `.claude/worktrees`, and `.claude/worktrees/<name>` if any of them is a symbolic link, preventing path traversal outside the repository.

Error shown: `Cannot create worktree: <path> is a symlink. A repository-committed symlink at .claude, .claude/worktrees, or .claude/worktrees/<name> could redirect worktree creation outside the repository. Remove the symlink and retry.`

**Evidence**

"is a symlink. A repository-committed symlink at .claude, .claude/worktrees…" (search for `"git_worktree_create_symlink_rejected"`)

### Shell CWD Read-back Validation

The shell's current working directory reported back after commands is now validated against several conditions before being trusted. Ignored cases are logged at warn level:

- Contains a dot-segment (`/./` or `/../`)
- Is a network path (UNC path on Windows)
- Crosses a foreign automount host
- Resolves through a network symlink or junction
- Is not an absolute path
- Is not a directory (stat check)
- Is not readable

**Evidence**

"shell cwd read-back contains a dot-segment; ignoring" (search for `"dwu"`)

### Per-Turn Effort Control

The API request builder now supports a `per_turn_effort` capability: when the server reports it supports per-turn effort, Claude sends an `outputConfig.effort` field on system-turn messages. If the server rejects this (400 with "effort parameter" and "not support"), the effort field is stripped and the model is added to a permanent blocklist for the session.

**Evidence**

"rejected output_config.effort; latching unsupported and retrying without it." (search for `"per_turn_effort"`)

### Cache Control Demotion on Mid-Conversation System

When the API rejects `cache_control` on a mid-conversation system turn with an "additional properties", "unknown field", or similar error, Claude now detects this and demotes the cache breakpoint to the trailing message rather than the system block. Logged as: `[mid-conv-system] proxy rejected cache_control on the api_system tail — demoting the breakpoint to the trailing message for this conversation`.

**Evidence**

`"retry:api-system-cache-demote"` (search for `"q9i"`)

### Login Method Enforcement Improvements

`forceLoginMethod` settings are now validated per-session with clearer error messages:

- `forceLoginMethod is 'claudeai' in <settings>; log in with a Claude.ai subscription account instead.`
- `forceLoginMethod is 'console' in <settings>; log in with an Anthropic Console account instead.`
- `forceLoginMethod is 'gateway' in managed settings; run /login from an interactive terminal to authenticate.`
- When `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` is set, the login method is not enforced and a warning is logged.

**Evidence**

`"forceLoginMethod is 'claudeai' in"` (search for `"_tt"`)

### Subagent Mode Parameter Deprecated

The `mode` parameter for the Agent tool in teammate/subagent contexts is now marked as deprecated: `"Deprecated; ignored. Subagents inherit the parent session's permission mode; agent-definition frontmatter may override it."` Previously this produced different error text referencing `mode` as unavailable.

**Evidence**

"Deprecated; ignored. Subagents inherit the parent session's permission mode" (search for the string directly)

### MCP WebSocket Subprotocol Support

MCP WebSocket connection errors now include the list of subprotocols offered by the server when relevant. The message format is `(subprotocols: "proto1", "proto2")` appended to connection error text.

**Evidence**

"(subprotocols:" (search for `"Nxu"`)

### Git Config Remote URL Parser

A new native git config parser (`W_s`) replaces reliance on spawning `git config` to read remote URLs. It correctly handles quoted values, escape sequences, section headers with subsection names, and continuation lines.

**Evidence**

Internal function reading `[remote "..."]` sections (search for `"W_s"`)

### Fork Session Safety Checks

`/fork` refuses in additional edge cases with clear messages:

- Session not yet saved: `"Couldn't fork — this conversation is still being saved. Try again in a moment."`
- No messages yet: `"Nothing to fork yet — send a message first."`
- Session started with incompatible launch flags: describes which flags prevent inheritance.

**Evidence**

"Cannot fork — session persistence is off, so the new session would have nothing to start from." (search for `"Cannot fork"`)

### Resume Session at Flag

New CLI flag `--resume-session-at=<message-uuid>` for resuming a session starting at a specific point in the transcript.

**Details**

- Must be combined with `--resume`; without it Claude Code exits immediately with `Error: --resume-session-at requires --resume`.
- The value is the `uuid` field of a specific message in the saved transcript — not a timestamp, ordinal index, or boundary marker.
- When the UUID is found, the loaded transcript is sliced to include only messages up to and including that message (`messages.slice(0, index + 1)`), so the resumed session behaves as if the conversation ended exactly at that point.
- When the UUID is not found in the transcript, Claude Code exits with `No message found with message.uuid of: <value>` and a non-zero exit code.
- Available in the TypeScript SDK as the `resumeSessionAt` option on the session options object; the SDK translates it to `--resume-session-at=<value>` in the subprocess argument list.
- The flag is hidden from `--help` output (`.hideHelp()`); the internal help string reads: "When resuming, only messages up to and including the assistant message with <message.id>".

**Evidence**

`--resume-session-at <message id>` CLI option definition and the `c.messages.findIndex((d) => d.uuid === t.resumeSessionAt)` slicing inside `loadInitialMessages` / `dqf` (search for `"resume-session-at"`)

### CLAUDE_CODE_TMPDIR Environment Variable

New `CLAUDE_CODE_TMPDIR` environment variable lets you override the temporary directory used by Claude Code (defaults to `os.tmpdir()`).

**Evidence**

`Z.CLAUDE_CODE_TMPDIR` (search for `"CLAUDE_CODE_TMPDIR"`)

### CLAUDE_CODE_SIMPLE Environment Variable

New `CLAUDE_CODE_SIMPLE` environment variable for enabling a simplified mode.

**Details**

- Activated by setting `CLAUDE_CODE_SIMPLE=1` in the environment **or** by passing the `--bare` CLI flag; both paths go through `cf()`, which returns true for either.
- When active, the following subsystems are **disabled**: CLAUDE.md reading, skills discovery, plugins, syntax-highlight language packs (`hljsLanguages`), hooks, MCP agent frontmatter, agent definitions, and LSP servers.
- The following subsystems remain **enabled** in simple mode: workflows, themes, status line, file suggestions, auto-discovered MCP, Claude.ai MCP, output styles, and keybindings.
- Authentication is narrowed to the minimum: OAuth (Claude.ai login) is bypassed entirely; only `ANTHROPIC_API_KEY` or an `apiKeyHelper`-sourced key is accepted. The normal managed-key and OAuth token paths return `null`.
- Auto-memory (persistent write-after-turn memory) is unconditionally disabled regardless of other memory settings or the `CLAUDE_CODE_DISABLE_AUTO_MEMORY` env var.
- Several background startup jobs are skipped: plugin hook setup and hot-reload, session file access hooks, release-notes prefetch, and memory extraction after turns.
- In coordinator/multi-agent mode, worker tool guidance is abbreviated: workers are described as having access only to bash, computer-use, read/write tools, and connected MCP tools — the Skill and Workflow tools are omitted from the listing.
- Forking is refused: `/fork` exits with "Cannot fork — this session was started with launch flags (safe or bare mode, a custom system prompt, a tool allowlist, or restricted settings) that the copy wouldn't inherit…"

**Evidence**

`function cf() { return qt(process.env.CLAUDE_CODE_SIMPLE) || fsi("--bare"); }` and the `Ffg` feature-disable map at `ZT` initialization (search for `"CLAUDE_CODE_SIMPLE"` and `"Ffg"`)

## Bug Fixes

- Fixed OTLP telemetry requests failing with missing `Content-Length` header when the request body was written in chunks rather than all at once. (search for `"OTLP request body chunk conversion failed"`)

- Fixed proxy auth helper TTL parsing to accept `0` as a valid value (previously `0` was silently ignored and defaulted to the built-in TTL). (search for `"CLAUDE_CODE_PROXY_AUTH_HELPER_TTL_MS"`)

- Fixed shell CWD read-back accepting network paths and automount-crossing paths that could cause incorrect directory resolution on Windows and NFS setups. (search for `"shell cwd read-back is a network path"`)

- Fixed cache_control being rejected by some proxies when sent on the api_system message tail; Claude now gracefully demotes the breakpoint and continues the conversation without interruption. (search for `"retry:api-system-cache-demote"`)

## Removed

### Context Tips System Removed

The entire proactive context-tips system (spinner tips) has been removed. This system used a side-call AI classifier to detect friction patterns in your conversation and surface relevant tips (e.g., "you're doing Y — X would help"). The classifier, tip catalog, reception scoring, and all tip-related UI code are gone from this version.

The tip catalog included situations like: correction spirals, large context windows, opus-on-pro near limit, workflow orchestration, tmux users, and more. These tips will no longer appear.

**Evidence**

All `[context-tips]` log strings removed (search for `"[context-tips]"` — absent in new version)

### Agentic Session Search Removed

The AI-powered session search feature (which used a subagent with Grep/Read tools to find matching sessions) has been removed. The `/resume` UI now loads past sessions by listing them directly rather than running an agentic search.

**Evidence**

"Agentic search found", "Agentic search response:", "agenticSessionSearch: query loop failed" — all removed (search for `"C4o"` — absent in new version)

## Notes

The context-tips removal is the largest behavioral change in this release. If you relied on proactive tips appearing during conversations to discover features, those will no longer show. The feature infrastructure (tip catalog, classifier prompt) has been fully removed rather than just disabled.

The Windows sandbox (`/sandbox install`) requires administrator rights for the one-time setup. If your machine is managed and the elevation prompt doesn't appear or is blocked, contact your administrator and point them to `https://code.claude.com/docs/en/sandboxing`.
