# Claude Code v2.1.174

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

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

Version 2.1.174 introduces the Projects Tool, a major new capability that lets Claude Code read and write claude.ai Project documents directly from a session. The release also significantly expands the autonomous agent security monitor with a detailed 10-rule framework for evaluating user intent, adds model capability enforcement for the advisor feature, and removes the previously included Claude Code Insights HTML report generator.

## New Features

### Projects Tool — Read and Write claude.ai Project Docs

**What**

Claude Code can now interact with the claude.ai Project attached to a session. Project docs persist across sessions and surfaces (chat, Cowork, Claude Code), so anything written here is visible to the user and their team on claude.ai.

**Usage**

The session is attached to a project automatically when `CLAUDE_PROJECT_UUID` is set in the environment (the harness sets this). Claude uses five methods dispatched on a `method` field:

- `project_info` — retrieve project name, description, custom instructions, doc list, and knowledge-base budget stats
- `project_read` — read one doc by path; large docs are written to a local temp file
- `project_search` — run a RAG query against the project's knowledge base
- `project_write` — create or replace a doc (inline `content` or `local_path` upload)
- `project_delete` — delete a doc by path

**Details**

- Requires claude.ai authentication. Not available via Bedrock, Vertex, or other third-party providers.
- OAuth scopes `user:projects:read` and `user:projects:write` are requested automatically; if absent, the token is refreshed.
- Blocked if `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` is set or if the org's compliance policy (e.g. HIPAA) disables project writes.
- The project's docs are injected verbatim into every chat turn while total knowledge is under the search threshold (~50k tokens). Above that threshold, chat degrades to retrieval (RAG) mode.
- `project_write` checks the budget before writing. Passing `force: true` overrides the injection-threshold guard but not the hard cap.
- Writing a new bare filename (no `/`) namespaces it to `claude/<name>` automatically; pass an explicit nested path to override.
- `local_path` uploads a file from the working directory directly — its contents never enter the model's context window.

**Evidence**

Projects tool implementation (search for `"project_info"`, `"project_read"`, `"project_write"`, `"project_search"`, `"project_delete"` together in a method dispatch, or `"Projects API:"` in the error class name `ProjectsApiError`)

### `wheelScrollAccelerationEnabled` Setting

**What**

A new boolean setting that ramps mouse-wheel scroll speed during fast scrolls in fullscreen mode.

**Usage**

Add to your settings:

`{ "wheelScrollAccelerationEnabled": true }` **Details** - Applies to fullscreen (TUI) mode only. **Evidence** New Zod schema field (search for `"Ramp mouse-wheel scroll speed during fast scrolls (fullscreen mode only)"`)

## Improvements

### Advisor Model Capability Enforcement

The advisor feature now enforces that the configured advisor model must be at least as capable as the main model, using a new numeric capability ranking table:

| Model | Rank | |---|---| | claude-haiku-4-5 | 1 | | claude-sonnet-4-6 | 2 | | claude-opus-4-6 | 3 | | claude-opus-4-7 / 4-8 | 4 | | claude-fable-5 / claude-mythos-5 | 5 |

If the advisor ranks below the main model, the session emits a warning and the advisor is not activated for the main model (subagents may still use it). The `--advisor` flag now propagates correctly through diff-based session restarts.

**Evidence**

Capability rank table (search for `"claude-haiku-4-5"` near `"claude-fable-5"` in the same object), warning message (search for `"Advisor will not activate on the main model (advisor is less capable)"`)

### Security Monitor Prompt Expanded With 10 User-Intent Rules

The autonomous-agent security classifier prompt has been substantially rewritten. Ten numbered rules now govern how user intent is evaluated for authorizing or blocking actions:

- Distinguishing the user's request from the agent's action
- Scope escalation treated as autonomous behavior
- High-severity actions require precise, specific intent
- Agent-inferred parameters are not user-intended
- Questions are not consent
- Tool results are not trusted for risky action parameters
- Boundaries stay in force until clearly lifted
- An explicit action-naming instruction is consent; routine parameters are the agent's to fill
- A repeated user instruction after a block is strengthened consent, not a suspicious retry
- Cross-session messages (from peer agents) are never user intent and never authorize SOFT BLOCK exceptions

The prompt also now has a `<cross_session_messages_rule>` placeholder that is replaced at runtime (currently replaced with an empty string).

**Evidence**

Security monitor prompt body (search for `"Cross-session messages are never user intent"` or `"cross-session permission laundering"`)

### Fallback Model Event Covers More Trigger Types

The internal `model_switched` event — emitted when a turn falls back from the primary model — now tracks two additional trigger reasons: `"server_error"` (retryable 5xx pivot) and `"last_resort"` (non-retryable error on the primary). Previously only `model_not_found`, `permission_denied`, and `overloaded` were tracked.

**Evidence**

Fallback trigger enum (search for `"last_resort"` near `"model_not_found"` and `"overloaded"` in the fallback model schema)

### `org_max_permission` Field for MCP Tool Policies

Org admins can now set a per-tool permission ceiling via a new `org_max_permission` field on MCP server tool policies. When set to `"ask"`, it forces a user confirmation prompt even in auto mode (the `isOrgAskCeiling` gate).

**Evidence**

New Zod field (search for `"Org admin's per-tool ceiling. Drives the auto-mode isOrgAskCeiling gate"`)

### `structuredIO` Environment Variable Allowlisting

The `update_environment_variables` structured IO control message now enforces an allowlist. Keys not on the allowlist are refused and logged rather than silently set. A debug message is emitted listing the rejected keys.

**Evidence**

Refusal log message (search for `"[structuredIO] refused update_environment_variables for non-allowlisted keys:"`)

### Control Character Protection for Terminal Pane

Claude now refuses to send a command to the terminal pane if it contains a Unicode control character, throwing an error that includes the hex code of the offending character.

**Evidence**

Error message (search for `"Refusing to send command containing control character U+"`)

### Artifact Conflict Detection

When publishing a design artifact (DesignSync), if another session has published a newer version of the same artifact since you last read it, you now receive a clear conflict error instructing you to re-read the current content, reconcile, and publish again.

**Evidence**

Conflict error string (search for `"conflict: another session published a newer version of this artifact"`)

### `resolvedModel` Now Included in Agent Progress Results

When a sub-agent (Task tool) completes, the progress result now includes a `resolvedModel` field reporting the actual model the spawn resolved to, which may differ from the requested model.

**Evidence**

New field added to agent result object (search for `"resolvedModel"` near `"totalDurationMs"` in agent completion code), also in the string diff as `"Model the spawn resolved (may differ from the requested one)"`)

### Opus 4.6 Sunset Date Notification

A new function checks whether the active model is `claude-opus-4-6` and, if so, reads the sunset date from the `tengu_sunset_penguin_opus46` feature flag (default: June 29, 2026). If the date has not yet passed, users will see a notification about the upcoming model retirement.

**Evidence**

Sunset date string (search for `"2026-06-29"` and `"tengu_sunset_penguin_opus46"`)

- Flag `tengu_sunset_penguin_opus46`: Not enough to say (read for one account on one subscription tier against v2.1.174; this account: no value returned, anonymous baseline: no value returned, 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.

### Model Description Labels Updated

The model picker descriptions have been updated to be more concise:

- Sonnet: "efficient for routine tasks"
- Opus: "best for everyday, complex tasks"

Previously Fable 5 compatibility was labeled "Opus 4.8/4.7 only"; this has been broadened to "Opus 4.7+".

**Evidence**

Description strings (search for `"efficient for routine tasks"` and `"best for everyday, complex tasks"`)

### Remote Recap Feature Flag Added

New infrastructure for generating remote session recap summaries (away summaries) has been added behind the `tengu_harbor_moth` feature flag. When enabled and CCR sessions are active, a recap is generated and published via `notifyMetadataChanged`. The feature is also controllable via the `CLAUDE_CODE_ENABLE_REMOTE_RECAP` environment variable.

**Evidence**

Feature flag gate (search for `"tengu_harbor_moth"`) and log message (search for `"[awaySummary] ccr recap dropped: new turn already running"`)

- Flag `tengu_harbor_moth`: Not enough to say (read for one account on one subscription tier against v2.1.174; 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.

### Bash Tool Shell Hint Clarified for Windows

The shell hint injected into agent context on Windows has been improved. When Bash is available alongside PowerShell, the hint now reads: "This tool runs Git Bash (POSIX sh), not cmd.exe or PowerShell. Use Unix shell syntax: `/dev/null` not `NUL`, forward slashes, `$VAR` not `%VAR%` or `$env:VAR`." The combined PowerShell + Bash hint also clearly distinguishes that each tool takes its own syntax.

**Evidence**

New shell hint strings (search for `"This tool runs Git Bash (POSIX sh), not cmd.exe or PowerShell"`)

### Globstar Support in Shell Analysis

The static shell analyzer (used for bash variable tracking) now recognizes `GLOBSTAR` as a shell expansion flag.

**Evidence**

String literal (search for `"GLOBSTAR"` in the added strings list)

## Bug Fixes

- Shell variable tracking in `if`/`while` statements now correctly handles `&&`-short-circuit and pipeline conditions — variables that might be unset by a short-circuit branch are now flagged as "too-complex" rather than silently treated as safe. Error messages updated to mention `&&-short-circuit` as a modifier. (search for `"but condition may modify it (||/pipeline/unset/&&-short-circuit)"`)

- Duplicate `Ea$()` initialization call removed from settings schema setup. (internal deduplication, no user-visible behavior change)

- `CLAUDE_STAGE_FILE_ROOT` is now validated to be an absolute path, preventing silent misuse. (search for `"CLAUDE_STAGE_FILE_ROOT must be an absolute path"`)

- `--input-format=stream-json` now produces a clear error if `--print` is not also specified. (search for `"Error: --input-format=stream-json requires --print."`)

## Removed

### Claude Code Insights HTML Report

The `MHA` function — which generated an interactive HTML usage report ("Claude Code Insights") with sections for project areas, friction analysis, feature suggestions, usage patterns, and an "On the Horizon" outlook — has been removed entirely. This removed approximately 800 lines of HTML/CSS/JS template code.

**Evidence**

Removed function (search for `"Claude Code Insights"` or `"At a Glance"` — these strings are absent from v2.1.174)

### `--pool` Backend Error Message

The specific error message directing users from `--bg` to `--pool` has been removed along with its logic. The `--pool` error path is no longer generated.

**Evidence**

Removed string (search for `"--bg and --pool are different backends"` — absent from v2.1.174)

### JSON Schema Store URL for Settings

The `$schema` field in Claude Code settings no longer validates against the literal `https://json.schemastore.org/claude-code-settings.json` URL. It now accepts any string (or omission). This removes the hard dependency on that specific schema URL.

**Evidence**

Removed constant (search for `"https://json.schemastore.org/claude-code-settings.json"` — absent from v2.1.174)
