# Claude Code v2.1.182

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

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

Version 2.1.182 introduces `/migrate`, a new command for importing configuration from OpenAI Codex and Google Gemini CLI into Claude Code — covering MCP servers, slash commands, subagents, skills, and instruction files with path-safety guards and a dry-run preview mode. The release also adds a built-in `/artifact-design` skill for structured UI design, a `disableClaudeAiConnectors` setting to block auto-fetching of cloud MCP connectors, a `git.sessionUrl` setting to control whether session links appear in commits and PRs, and a `CLAUDE_CODE_CONNECT_TIMEOUT_MS` environment variable for streaming time-to-first-byte timeouts.

## New Features

### `/migrate` — Import config from Codex or Gemini CLI

**What**

A new slash command and CLI subcommand that scans for OpenAI Codex or Google Gemini CLI configuration and imports compatible items into Claude Code.

**Usage**

`# Interactive TUI picker (terminal only) claude migrate # Import from a specific agent claude migrate codex claude migrate gemini # Preview without writing anything claude migrate --dry-run # Non-interactive: auto-import user-level items (skips ⚠-flagged and project-level items) claude migrate --yes claude migrate codex --yes --dry-run` Or from inside a session:

`/migrate /migrate codex --dry-run /migrate --yes` **Details** - Detects Codex config at `~/.codex/config.toml`, `~/.codex/AGENTS.md`, `~/.codex/prompts/`, and `.codex/config.toml` in the current project - Detects Gemini CLI config at `~/.gemini/settings.json`, `~/.gemini/GEMINI.md`, `~/.gemini/commands/`, and `GEMINI.md` / `.gemini/` in the current project - Importable item types: MCP servers, slash commands, subagents, skill directories, and instruction files (AGENTS.md / AGENTS.override.md / GEMINI.md → CLAUDE.md) - Items requiring extra review are flagged with ⚠ and held back by `--yes`; they can be individually toggled in the terminal checkbox picker - Project-level config (from `.codex/` or `.gemini/` in the repo) is detected and listed but never auto-imported — project config can be authored by anyone with write access to that repo. Run `claude migrate` from a terminal to review project items individually - Items that cannot be mapped automatically (hooks, sandbox settings, named profiles, Gemini extensions) generate a `/migrate-to-claude-code` fallback skill listing each one with guidance - On surfaces without an interactive picker, `/migrate` asks Claude to summarize what was found and guide the user to run `--yes` or use the terminal - Path-traversal guards prevent importing files that escape the config directory (symlinks and `..` components are rejected) - Files exceeding the size limit are refused with `"file exceeds MIGRATE_MAX_FILE_BYTES; refusing to load"` **Evidence** Full migration subsystem — search for `"Import config from another AI coding agent (Codex, Gemini CLI)"` and `"claude migrate [codex|gemini] [--dry-run] [--yes]"`

### `/artifact-design` — Built-in design skill for Artifacts

**What**

A new built-in skill that provides comprehensive design guidance for building distinctive, production-grade frontend pages published as claude.ai Artifacts.

**Usage**

`/artifact-design` **Details** - Guides a two-pass design process: (1) brainstorm a compact token system — 4–6 named hex values, 2+ typeface roles, a layout concept with ASCII wireframes; (2) critique the plan against the subject before building, revise anything that reads as a generic default, then build from the revised plan exactly - Design principles: hero as a thesis, typography as personality, structure as information, deliberate motion (one orchestrated moment), copy as design material - Includes a palette-commit format (`<palette_commit>` block) to pin color decisions before writing CSS - References three common AI design defaults to avoid (warm cream + high-contrast serif + terracotta; dark + acid-green; broadsheet hairlines) when the user has not specified a visual direction - User-invocable on all surfaces that support skills **Evidence** New `artifact-design` skill definition — search for `"artifact-design"` or `"Design guidance for Artifact pages — process, principles, palette, copy."`

### `disableClaudeAiConnectors` Setting

**What**

A new boolean setting that prevents Claude Code from automatically fetching and connecting claude.ai MCP cloud connectors.

**Details**

- Set in any settings source:

` { "disableClaudeAiConnectors": true }` - Any-source-true wins: a project can opt out (set `true`), but a project-level `false` cannot override a user-level `true` - Only gates auto-fetched connectors; a `claudeai-proxy` server passed explicitly via `--mcp-config` or the SDK `mcpServers` option still follows the normal MCP config trust flow - Useful for air-gapped environments, strict compliance setups, or projects requiring explicit MCP server control **Evidence** New settings schema field — search for `"When true in any settings source, claude.ai MCP cloud connectors are not auto-fetched or connected."`

### `attribution.sessionUrl` Setting

**What**

Controls whether Claude Code appends a claude.ai session link to commits and pull requests created during web or Remote Control sessions.

**Details**

- Set in settings.json under the `attribution` key:

` { "attribution": { "sessionUrl": false } }` - Default is `true` — the `Claude-Session` commit trailer and PR-body link are added automatically - Set to `false` to omit both the trailer and the link (useful for organizations that want clean commit history or disallow external links in PRs) **Evidence** New settings schema field — search for `"Whether to append the claude.ai session link to commits and PRs created from web or Remote Control sessions"`

### `CLAUDE_CODE_CONNECT_TIMEOUT_MS` — Streaming time-to-first-byte timeout

**What**

A new environment variable that sets a hard timeout for receiving the first response headers on streaming API calls. When the API does not return headers within the configured time, the request is aborted with a clear error instead of hanging.

**Usage**

`CLAUDE_CODE_CONNECT_TIMEOUT_MS=15000 claude # abort if no headers within 15 s` **Details** - Applies only to streaming requests (event-stream, Bedrock eventstream, `:streamRawPredict` paths) - Error message: "Request timed out: no response headers after 15s (CLAUDE_CODE_CONNECT_TIMEOUT_MS)" - Warning logged: "[TTFB] no response headers after Nms — aborting (CLAUDE_CODE_CONNECT_TIMEOUT_MS)" - Previously there was no way to configure a TTFB timeout; streaming requests would wait indefinitely for the first byte before any timeout applied **Evidence** New `yVu()` function and timeout logic — search for `"CLAUDE_CODE_CONNECT_TIMEOUT_MS"` and `"[TTFB] no response headers after"`

### MCP `resources/directory/read` Support

**What**

Claude Code now supports MCP servers that implement directory listing via the `io.modelcontextprotocol/skills` protocol extension, enabling skill-serving MCP servers to expose navigable directory structures.

**Details**

- MCP servers advertise the capability via `extensions["io.modelcontextprotocol/skills"].directoryRead: true`
- Claude can list directory contents at a URI and descend into subdirectories; subdirectories appear with `mimeType: "inode/directory"`
- When a skill at a URI references a supporting file by relative path (e.g. `templates/invoice.md`), Claude is told to call the MCP read tool with the full composed URI rather than reading locally
- Cursor-based pagination is handled automatically; an `InvalidParams` error mid-pagination returns prior-page results with a warning rather than throwing
- URI sanitization strips Unicode control characters, private-use codepoints, and bidirectional markers to prevent path confusion

**Evidence**

New `mZi()` directory-read function — search for `"readMcpDirectory called on a server without directoryRead capability"` and `"resources/directory/read"`

## Improvements

### Fable Model Disabled State — Clearer Messaging

When Fable is unavailable because your organization has not provisioned usage credits, it now appears in the model picker as "Fable (disabled)" instead of a selectable option, with the label "— contact your admin to turn on usage credits".

Contextual messages are also now more specific by plan type:

- Team plan: "Run /usage-credits to request more from your admin, or switch models to keep working."
- Individual: "Buy more to keep using Fable, or switch models to keep working."
- When `/usage-credits` is disabled via env: "Switch models to keep working."

**Evidence**

New `YCd()` and `Xwn()` functions — search for `"Fable (disabled)"` and `"contact your admin to turn on usage credits"`

### Legacy Model Remapping — Clearer Warning and Opt-Out

When Claude Code automatically remaps a deprecated model ID to a current one, the warning now includes the model name being used and mentions the opt-out env var:

Before: `⚠ Claude Opus 4.7 has been updated to claude-opus-4-8.`

After: `⚠ claude-opus-4-7 is automatically remapped to Claude Opus 4.8 (claude-opus-4-8). Set CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP=1 to keep the requested model.`

Also, the status-line model indicator now shows the same opt-out hint in shortened form: `⚠ Opus 4.7 remaps to Claude Opus 4.8. CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP=1 opts out`.

**Evidence**

Modified `DCo()` and new `lzn()` functions — search for `"is automatically remapped to"` and `"CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP=1 opts out"`

### Auto-Compact Diff — Branch Changes Context

The compact view's diff header now distinguishes between uncommitted working-tree changes and changes on a feature branch relative to its upstream base:

- Working-tree only → `Uncommitted changes (git diff HEAD)`
- Branch relative to upstream → `Branch changes (vs main)`

**Evidence**

Modified compact diff function — search for `"Branch changes"`

### Linux Sandbox Bridge Error — Actionable Message

When the Linux sandbox's socat bridge socket disappears (e.g., because socat died), Claude Code now raises a named `SandboxBridgeUnavailableError` with a clear message instead of an opaque socket error:

`Linux sandbox SOCKS bridge socket is missing (socat may have died). Restart to retry.`

**Evidence**

New `SandboxBridgeUnavailableError` class — search for `"SandboxBridgeUnavailableError"` or `"bridge socket is missing (socat may have died)"`

### Agent Proxy CA Certificate Installed to Linux System Trust

When the CCR agent proxy runs on Linux, Claude Code now attempts to install its CA certificate into the system-level certificate store in addition to using environment variable trust. Supports:

- Debian/Ubuntu: `/usr/local/share/ca-certificates/ccr-agent-proxy.crt` + `update-ca-certificates`
- RHEL/CentOS: `/etc/pki/ca-trust/source/anchors/ccr-agent-proxy.crt` + `update-ca-trust extract`

Falls back to env-var trust if the system install fails. A notification is logged when system trust succeeds: `[agent-proxy] CA installed to system trust via update-ca-certificates`.

**Evidence**

New `Bjl()` function — search for `"[agent-proxy] CA installed to system trust via"` and `"/etc/pki/ca-trust/source/anchors"`

### Design MCP Connector Scope Auto-Expansion

When a session accesses the Design MCP connector (`/v1/design/` paths), Claude Code now automatically requests the required `user:design:read` and `user:design:write` OAuth scopes if not already present. A one-time notification is shown when the scopes are added:

`Added user:design:read and user:design:write to your claude.ai login (for the Design MCP connector).`

**Evidence**

New `EWd()` function — search for `"Added user:design:read and user:design:write to your claude.ai login"`

### MCP Per-Server Permission Mode Override (Control Channel)

The MCP control channel now supports a tighten-only per-server permission mode override. Orchestration layers can downgrade specific MCP server permissions to `'default'` (or clear the override with `null`) without a full session restart. Escalation attempts (e.g., setting `'auto'`) are rejected:

`Permission mode override over the control channel is tighten-only ('default' or null); rejected 'auto'`

**Evidence**

New `Qta()` function — search for `"set_mcp_permission_mode_override"` and `"tighten-only"`

### Team Memory Index Size Warning

When a team memory index file is approaching or exceeding its read limit (configurable via `promptIndexMaxBytes`), Claude now surfaces a contextual warning during reads:

`The memory index at team/[mount]/[path] is [size], approaching the [limit] read limit — content beyond that is dropped when this index is loaded. Compact it to under [target] now: keep one line per entry, move detail into topic files, and merge or drop stale entries.`

**Evidence**

New `FXa()` function — search for `"Compact it to under"` and `"approaching the"` with `"read limit"`

### In-Process Teammate Resume — Improved Reliability

Resuming an in-process teammate now:

- Verifies the team context is active before attempting resume, with a clear error: "Cannot resume teammate: no team is active in this session"
- Checks team membership and reports missing teammates: "No teammate named 'X' is currently on team 'Y'. Spawn one with …"
- Loads prior transcript and content replacements before spawning
- Re-registers the teammate in the team file and lifecycle tracker after spawn
- Drops stale protocol frames before delivering the new prompt

**Evidence**

New `Lza()` function — search for `"resumeInProcessTeammate"` and `"Cannot resume teammate: no team is active in this session"`

### `/doctor` Hint on Setup Issue Count

When Claude Code detects setup issues at startup (MCP failures, keybinding errors, etc.), the log message now appends "(run /doctor for details)" so users know how to investigate:

`2 setup issues: settings, MCP (run /doctor for details)`

**Evidence**

New `dD()` function — search for `"run /doctor for details"`

### CCR WebSearch Proxy

For Remote Control sessions with `CLAUDE_CODE_WEBSEARCH_USE_CCR_PROXY=1` set, web searches are now routed through the Anthropic API's session WebSearch proxy (`/worker/web-search`) instead of directly to the search provider. Error messages from the proxy are surfaced clearly with type-specific descriptions.

**Evidence**

New `L8a()` function — search for `"ccr websearch-proxy transport error"` and `"/worker/web-search"`

### Removed Repeated Tool Validation Schema Dump

The feature that appended a verbose JSON schema dump to tool results after multiple consecutive `InputValidationError` responses (the "This call has now failed validation N times in a row. The tool's input schema is: …" message) has been removed. Tool input errors are now handled without the repeated schema echo, reducing noise and token consumption.

**Evidence**

Removed `Bfi()` function — search for removed string `"This call has now failed validation"`

### `SendUserFile` Tool — Usage Example Added

The `SendUserFile` tool description now includes a concrete example: `Example: SendUserFile({ files: ["report.md"], caption: "Here's the report.", status: "normal" })`

**Evidence**

Updated `R5r` string — search for `"Example: SendUserFile({ files:"`

## Bug Fixes

- Fixed extra keys on `{type:'disabled'}` thinking parameters being forwarded to the API (gh-68567). A leftover `display` field or similar on a disabled thinking config is now stripped before the request is sent, preventing API validation failures. (search for `"extra key(s) from {type:'disabled'} thinking param (gh-68567)"`)

- Fixed VirtualMessageList crash when the message array contains an `undefined` element. Bounds-checked access now emits a diagnostic error event with neighbor context instead of throwing. (search for `"VirtualMessageList: undefined element in messages[]"`)

- Fixed opaque socket errors when the Linux sandbox bridge dies. Claude Code now raises a named `SandboxBridgeUnavailableError` with the message "Linux sandbox [SOCKS|HTTP] bridge socket is missing (socat may have died). Restart to retry." (search for `"SandboxBridgeUnavailableError"`)

- Fixed `input JSON failed to parse` errors not including the payload size. The error message now reads `input JSON failed to parse — N bytes`, making it easier to diagnose oversized or malformed tool inputs. (search for `"input JSON failed to parse —"`)

- Fixed Codex `never` approval policy mapping: it is now explicitly mapped to `auto` permission mode with a warning explaining the sandbox difference, rather than being silently dropped. (search for `"Codex \`never\` relies on Codex's own sandbox"`)

## Notes

The `/migrate` command's `--yes` flag imports only user-level items that have no ⚠ warning. Items flagged as requiring review — such as commands with shell exec (`!{cmd}`), MCP servers with repo-authored configs, or permission-mode escalations — are held back and must be reviewed individually via the terminal picker (`claude migrate` without `--yes`). Project-level items from `.codex/` or `.gemini/` in your repo are always held back in `--yes` mode because project config can be authored by anyone with write access to the repository.
