# Claude Code v2.1.241

> Claude Code v2.1.241, released 22 Aug 2026 (2026-08-22). 5 entries read out of the shipped bundle. Unofficial, and not affiliated with Anthropic.

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

Claude Code now sends the VS Code extension a map of experiment flags at startup, and that map picks up an entry called `tengu_sable_thrush`, which tells the IDE whether narration summaries are enabled so it can branch on that. The flag is off by default in this build unless a server config switches it on. If you want to decide for yourself, `CLAUDE_CODE_SABLE_THRUSH` forces it on or off in either direction. Nothing about narration itself is reachable here; this is only the plumbing that reports its state.

The control-protocol schema an SDK client uses to set extended thinking now describes its null case more accurately: passing null for `thinking_display` clears the override so Claude Code's own default display handling takes over, rather than falling back to the API default. This is a wording change to the schema description alone. The fields, the "summarized" and "omitted" values, and the `--thinking-display` flag all behave exactly as they did before.

## What probably matters to you

Anything you can use today, anything that visibly changes, and anything worth poking at. One line each, open for detail.

### Narration gate state now reported to the VS Code extension

A narration-summary feature can be forced on with an env var, but it's off by default here.

**What**

Claude Code sends the VS Code extension a map of experiment flags at startup, and that map gains one entry, `tengu_sable_thrush`, so the IDE side can branch on whether narration summaries are enabled. The flag is off by default in this build unless a server config turns it on. Set `CLAUDE_CODE_SABLE_THRUSH` to force it on or off in either direction.

**Details**

- The value comes from the narration module's own check: the environment variable wins if set, otherwise the remote flag is consulted with an in-source fallback of false.
- The result is read once and latched for the process; a test-only helper exists to clear that latch.
- The flag itself is not new, it already drove narration-summary rendering in 2.1.240. What is new is that its state is shared with the extension.
- What the extension does with the value lives outside this build.

**Evidence**

`tengu_sable_thrush: (Cmr(), ln(uYr)).isSableThrushEnabled(),`

- Flag `tengu_sable_thrush`: On for this account, and not off by default (read for one account on one subscription tier against v2.1.241; this account: on, anonymous baseline: on, compiled default: on)
- Area: IDE Integration
- Names: `CLAUDE_CODE_SABLE_THRUSH`
- Tier: Not switched on
- Useful: 2/5
- Signal: 4/5
- Present in the build but not switched on

## Improvements

### Clearer wording for clearing the thinking display override

A schema description was reworded to explain that clearing the thinking display setting restores Claude Code's own default.

**What**

The control-protocol schema that lets an SDK client set extended thinking now explains the null case differently: passing null for `thinking_display` clears the override so Claude Code's own default display handling applies, rather than reverting to the API default. Wording only; the fields, the "summarized" and "omitted" values, and `--thinking-display` all behave as before.

**Details**

- Affects `max_thinking_tokens` and `thinking_display` on the extended-thinking control request.
- No gate; visible to anyone reading the schema.

**Evidence**

`null clears that override so Claude Code's default display handling applies again`

- Area: Elsewhere
- Names: `--thinking-display`
- Tier: Under the hood
- Useful: 1/5
- Signal: 1/5

## Internal Changes

### Version stamped to 2.1.241

The version number moved from 2.1.240 to 2.1.241; nothing else changed.

**What**

The embedded build constants advance from 2.1.240 to 2.1.241, with a new build timestamp and commit hash. Nothing changes but the numbers.

**Details**

- The version string is inlined at roughly 120 places, so it moves everything that reports a version: `--version`, the /status and /doctor panels, the `claude-code/` and `claude-cli/` User-Agent strings, the `shr-` prefixed environment-runner version header, the update and downgrade messages, the Remote Control minimum-version check, the daemon start log line, and telemetry group names built from the version.
- Build time is 2026-08-22T22:46:48Z.

**Evidence**

`GIT_SHA: "c87e2742fc9ad269ec8920460d00a091b1e410f0"`, `BUILD_TIME: "2026-08-22T22:46:48Z"`

- Area: Elsewhere
- Tier: Under the hood
- Useful: 2/5
- Signal: 1/5

### Code-review prompt rebuilt with the same text

The code-review prompt was rebuilt with identical wording, so reviews work exactly as before.

**What**

The multi-angle code-review prompt was re-emitted in the bundle, but a line-by-line comparison against the previous build shows the same angles, phases and fallback text in the same order. Reviews behave exactly as before.

**Details**

- Covers the Angles A through E block, the verify and sweep phases including the recall-biased variant, and the text used when subagents are unavailable.
- The apparent change is the minifier reshuffling internal symbols.

**Evidence**

`### Angle E \u2014 wrapper/proxy correctness`

- Area: Elsewhere
- Tier: Under the hood
- Useful: 1/5
- Signal: 0/5

### Module startup wiring shuffled

Startup wiring was rearranged behind the scenes with no difference you can see.

**What**

One aggregate module initialiser no longer runs a dependency it previously did, and a single initialiser call was added elsewhere. Bookkeeping that follows the code motion in this release, with no effect anyone can observe.

**Evidence**

` ia_();`

- Area: Elsewhere
- Tier: Under the hood
- Useful: 1/5
- Signal: 0/5
