# Claude Code v2.1.179

> Claude Code v2.1.179, released 16 Jun 2026 (2026-06-16). 23 entries read out of the shipped bundle. Unofficial, and not affiliated with Anthropic.

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

This release adds Claude Design MCP integration, a HIPAA compliance indicator, and a "not used recently" section in the model picker. It also brings multiple reliability improvements: better connection-drop messages with partial-response recovery, OAuth retry logic for remote sessions, graceful worktree cwd recovery, and clearer error messages for `--json-schema`, plugin SHA pins, and ultrareview size limits.

## New Features

### Claude Design MCP Integration [Gradual Rollout]

**What**

A built-in first-party MCP server called `claude_design` is now available, connecting to Anthropic's Design API at `https://api.anthropic.com/v1/design/mcp`. When enabled, Claude can mock up UI screens directly in your session. A tip reads "Use Claude Design to mock up screens before you build."

**Status**

Controlled by feature flag `tengu_omelette_whisk`. Can also be force-enabled via the environment variable `CLAUDE_CODE_ENABLE_DESIGN_MCP=true`.

**Details**

- Server name `claude_design` is treated as first-party — it auto-attaches login OAuth tokens and renders with a bare name (no URL prefix in the UI)
- Setting `CLAUDE_CODE_ENABLE_DESIGN_MCP=1` bypasses the feature flag for self-hosting or testing

**Evidence**

Design MCP server name (search for `"claude_design"`) and URL (search for `"https://api.anthropic.com/v1/design/mcp"`)

### HIPAA Compliance Indicator

**What**

When your session is operating under HIPAA compliance constraints, the status bar now displays a persistent indicator: "HIPAA · some features are restricted · /status for details".

**Usage**

`# Appears automatically in the status bar if your organization has HIPAA mode active # Run /status to see which specific features are restricted` **Details** - The indicator uses tier `"warning"` styling so it stands out - The `/status` command will show the full list of restricted features **Evidence** HIPAA status bar notification (search for `"HIPAA · some features are restricted"`)

### Model Picker "Not Used Recently" Section

**What**

The `/model` picker now surfaces models you haven't used in a while in a dedicated "Not used recently" section, and shows "Last used: X days ago" on individual entries. This helps you spot models you may have tried and moved away from.

**Usage**

`/model # Models not recently used appear in a "Not used recently" section # Each entry shows "· Last used: 3 days ago" (or "today")` **Details** - Models are grouped in this section if they haven't been selected recently - The day-count label appears dimmed next to the model name - This section appears below Attention and Favorites in the picker **Evidence** Section header label (search for `"Not used recently"`) and per-entry label (search for `"· Last used:"`)

### `CLAUDE_CODE_ALTGR_AS_TEXT` Environment Variable

**What**

New env var for Windows users on keyboards with an AltGr key. AltGr is used on many European and international layouts to produce characters like `@`, `€`, `[`, `]`, etc. — but it's also interpreted as Ctrl+Alt in Windows, which can interfere with Claude Code shortcuts.

**Usage**

`# Force AltGr combinations to always be treated as text (recommended for most EU users) CLAUDE_CODE_ALTGR_AS_TEXT=true claude # Disable AltGr text mode entirely CLAUDE_CODE_ALTGR_AS_TEXT=false claude # Auto-detect (default): enabled if WT_SESSION is set (Windows Terminal)` **Details** - `true`/`1` forces "force" mode — AltGr combos always produce text - `false`/`0` forces "off" mode — AltGr combos pass through as Ctrl+Alt key events - Omitted: "auto" mode, enabled when `WT_SESSION` is present (Windows Terminal) - Only applies to printable character ranges (codepoints 32–126 and 160–55295) **Evidence** New env var handler (search for `"CLAUDE_CODE_ALTGR_AS_TEXT"`)

### `CLAUDE_CODE_OTEL_DIAG_STDERR` Environment Variable

**What**

When set, OpenTelemetry diagnostic errors are written directly to stderr in addition to the internal debug log. Useful when debugging custom telemetry or OTEL integrations.

**Usage**

`CLAUDE_CODE_OTEL_DIAG_STDERR=1 claude # OTEL errors now appear on stderr prefixed with "[3P telemetry] OTEL diag error:"` **Details** - Without this flag, OTEL errors only appear in the internal log (visible via `/debug`) - With the flag, errors are also streamed to `process.stderr` immediately - The flag is stripped before spawning subprocesses so it doesn't leak **Evidence** New stderr path (search for `"CLAUDE_CODE_OTEL_DIAG_STDERR"`)

### `CLAUDE_CODE_SUPPRESS_SESSION_ATTRIBUTION` Environment Variable

**What**

In remote sessions, Claude now adds a `Claude-Session:` attribution line to git commit messages and PR bodies. This new env var lets you suppress that attribution.

**Usage**

`# Suppress session attribution in commits and PRs (remote mode only) CLAUDE_CODE_SUPPRESS_SESSION_ATTRIBUTION=1 claude` **Details** - When attribution is active (remote session, no suppression), commit messages get a `Claude-Session: <session-id>` trailer - PR bodies get the session ID appended as a paragraph - Only applies in `remote` mode — no effect in interactive sessions **Evidence** Attribution suppression check (search for `"CLAUDE_CODE_SUPPRESS_SESSION_ATTRIBUTION"`) and header format (search for `"Claude-Session:"`)

## Improvements

### Better Error Messages for `--json-schema`

Two new validation messages are now shown when `--json-schema` is passed invalid input:

- If the value is not parseable JSON: `Error: --json-schema is not valid JSON: <parse error detail>`
- If the JSON is valid but not an object (e.g., an array or string): `Error: --json-schema must be a JSON object`

Previously these failures silently continued with an undefined schema object.

**Evidence**

Validation error strings (search for `"Error: --json-schema is not valid JSON:"` and `"Error: --json-schema must be a JSON object"`)

### Plugin SHA Pin Verification: Clearer Errors

When installing a plugin that specifies a SHA pin and verification fails, the error message is now specific about what went wrong:

`SHA pin verification failed: expected HEAD to be <expected-sha>, got <actual-sha>. The pinned commit may have been removed upstream, or a ref with the same name exists. Refusing to install.` If the underlying `git rev-parse` call itself fails, the `got` field shows `(rev-parse failed)` so the root cause is always clear.

**Evidence**

SHA verification error (search for `"SHA pin verification failed: expected HEAD to be"`)

### Ultrareview Now Checks PR Size Before Starting

The `/ultrareview` command now fetches `additions`, `deletions`, and `changedFiles` from GitHub before attempting the review. If the PR is too large, you get an early, clear error:

`PR #42 is too large for ultrareview (85 files, 3,200 lines). Split it into smaller PRs, or run `claude` on a narrower local diff.` The local-diff too-large message was also improved — it no longer suggests pushing a PR:

Before: "Push a PR and use `claude <PR#>`, or pass a closer base branch…" After: "Pass a closer base branch (`claude <branch>`) to narrow the scope, or split the change."

**Evidence**

Size-check error (search for `"is too large for ultrareview ("`) and field fetch (search for `"additions,deletions,changedFiles"`)

### Git Log Isolated from Local Hooks and fsmonitor

When scanning recently-added files, Claude now passes four safety flags to git:

`-c core.fsmonitor= -c core.hooksPath=/dev/null -c core.pager= -c log.showSignature=false` This prevents fsmonitor daemons from slowing the call, local git hooks from running, pagers from blocking output, and commit-signature verification from failing on machines without GPG. The call was occasionally slow or broken on repos with heavy hook setups.

**Evidence**

New git flags (search for `"core.fsmonitor="` and `"log.showSignature=false"`)

### NUL Redirect Replacement Is Now Safer

Claude translates Windows-style `NUL` redirections (e.g., `2>NUL`) into `/dev/null` for cross-platform compatibility. This substitution is now skipped if the command contains `<`, `$`, or a backtick — characters that indicate shell expansion or redirection contexts where a static replacement would produce incorrect results.

**Evidence**

Safety guard (search for `"H.includes(\"<\") || H.includes(\"$\") || H.includes(\"\`\")"`)

### ExitWorktree: Graceful cwd Recovery

When exiting a git worktree, if the original working directory no longer exists (e.g., it was deleted while Claude was running in the worktree), Claude now tries fallback locations in order: the original worktree path, the home directory, and the process root. A clear message is shown:

`The original directory /path/to/old-dir no longer exists, so the session is now in /home/user. Consider restarting Claude from an existing directory.` If the fallback landed back in the worktree itself, the suggestion to restart is omitted.

**Evidence**

Recovery message (search for `"The original directory"`) and log entry (search for `"ExitWorktree: original directory"`)

### Better Messages When API Connection Drops

Three new user-facing messages now appear when a streaming connection is lost:

- Mid-response (after some content was already delivered): `Connection closed mid-response. The response above may be incomplete.`
- During thinking (before any content): `Connection closed while thinking, before producing a response. Try again.`
- Network-level errors (ECONNRESET, EPIPE, etc.): `Connection to the API was lost (<error_code>). This is usually temporary — try again.`

Previously these all surfaced as generic error messages.

**Evidence**

Stream-drop messages (search for `"Connection closed mid-response"` and `"Connection closed while thinking"`) and network-error handler (search for `"Connection to the API was lost ("`)

### OAuth Retry with Exponential Backoff in Remote Sessions

When a remote session receives a 401 response and OAuth token refresh fails, the client now retries the refresh up to `oauth_retry_max_attempts` times with exponential backoff. During each attempt, the status shows:

`OAuth refresh failed — waiting for a fresh login (1/3)` If all attempts fail: `OAuth token refresh failed — re-authenticate, then re-enable Remote Control`.

**Evidence**

Retry message (search for `"OAuth refresh failed — waiting for a fresh login ("`) and failure message (search for `"OAuth token refresh failed — re-authenticate"`)

### Artifact Share Status Display

The artifact WebFetch tool now probes the sharing status of an artifact before reading it. The mode is now shown in descriptive human-readable form instead of raw enum values:

- `"owner"` → "a private page on claude.ai"
- `"org"` → "a page shared with your organization"
- `"users"` → "a page shared with specific users"
- Live-shared → "on claude.ai (viewers see updates immediately)"
- Unknown mode → "others (unrecognized share mode — treating as shared)"

**Evidence**

Share mode labels (search for `"a private page on claude.ai"` and `"your organization"`)

### Fable 5 Consent Flow Improvements

Several improvements to how usage-credits-gated models (Fable 5) behave when consent hasn't been given:

- When Fable 5 is set as a teammate's default model but consent is missing, the teammate panel now shows: "Fable 5 needs usage-credits consent — /model to set up" instead of a silent failure
- A new `model_consent_fallback` system event is emitted when the gated model falls back to another, carrying the `choice` (`consent`/`switch_default`/`cancelled`), `original_model`, `fallback_model`, and whether the saved default was rewritten
- The model picker shows a "Reset model to the workspace default" option when relevant

**Evidence**

Consent fallback message (search for `"Fable 5 needs usage-credits consent — /model to set up"`) and event type (search for `"model_consent_fallback"`)

### Spinner State Is Now Per-Agent

Internally, the status bar spinner state (responding/thinking/tool-input, compacting status, turn effort) is now tracked per agent ID in a keyed store instead of a single global singleton. This is a prerequisite for correct multi-agent displays where parallel agents each need their own status line. Spinner state for removed agents is cleaned up automatically.

**Evidence**

Per-agent state store (search for `"defaultVerb"` in spinner state initialization) and per-agent accessor (search for `"n64(H.agentId)"`)

### Tool List Truncation Notice

When a tool result or file listing is too long for the context window and must be truncated, the cutoff now shows:

`... and 42 more (truncated for prompt size)` Previously the list was silently cut with no indication of how much was omitted.

**Evidence**

Truncation notice (search for `"more (truncated for prompt size)"`)

### machineID Is Now Resilient to Storage Failures

If saving the machine ID to disk fails (e.g., permissions issue), Claude now falls back to an in-memory ID for the current session rather than leaving the field empty. A warning is logged: `getOrCreateMachineID: could not persist machineID: <error>`.

**Evidence**

Fallback error log (search for `"getOrCreateMachineID: could not persist machineID:"`)

## Bug Fixes

- Worktree cleanup (`process.chdir`) now catches and logs errors instead of crashing if the original directory is gone during teardown (search for `"Could not chdir to original directory while cleaning up worktree:"`)
- Worktree keep (`process.chdir`) similarly catches errors gracefully (search for `"Could not chdir to original directory while keeping worktree:"`)
- `git core.hooksPath` resolution now canonicalizes relative paths before writing them back, preventing the wrong path being stored when `core.hooksPath` is specified as a relative reference

## In Development

Features with infrastructure added but not yet enabled for users.

### Screen Reader / Accessibility Support [In Development]

**What**

Infrastructure for a screen reader accessibility mode has been added under the feature flag `tengu_ax_screen_reader`.

**Status**

Feature-flagged — not yet enabled for any users. No user-visible behavior yet.

**Evidence**

Feature flag constant (search for `"tengu_ax_screen_reader"`)

- Flag `tengu_ax_screen_reader`: Gate removed from the code (read for one account on one subscription tier against v2.1.179; this account: on, anonymous baseline: on, compiled default: not a boolean we can read) 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.

### Precompute Compaction Setting [Gradual Rollout]

**What**

A new experimental setting `precomputeCompactionEnabled` allows Claude to precompute the compaction summary in the background before it's actually needed, making context-window compaction faster when it triggers.

**Status**

Setting infrastructure exists and is wired to the settings UI, but the setting toggle is only shown when the server flag `tengu_sepia_moth` is enabled. The actual precompute behavior also requires this flag. The setting description reads: "@internal Precompute the compaction summary in the background before it is needed. Only applies when auto-compact is on."

**Details**

- Appears in the Experimental section of `/settings` when enabled
- Default value is `true` when the flag is active
- Emits a `tengu_precompute_compaction_setting_changed` telemetry event on change

**Evidence**

Setting description (search for `"Precompute the compaction summary in the background"`) and setting key (search for `"precomputeCompactionEnabled"`)

- Flag `tengu_sepia_moth`: Off in both readings (read for one account on one subscription tier against v2.1.179; 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.
