# Claude Code v2.1.263

> Claude Code v2.1.263, released 6 Sep 2026 (2026-09-06). 14 entries read out of the shipped bundle. Unofficial, and not affiliated with Anthropic.

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

This build carries eight dormant additions, none of them reachable yet. A hidden environment-variable switch called tengu_polished_dewdrop can make certain responses silently drop or error, and the effort-medium nudge that suggests downgrading thinking effort has been rebuilt to work per model, each still needing its own remote-config gate flipped on. The model-switch dialog quietly gained new schema fields for a warning banner and an effort range, plus templated copy and new confirmation wording for a downgrade dialog, none of it shown to users yet. API telemetry can log a new thinkingPrefixMismatchBehavior setting, but only under an unreleased beta header, and an internal ultracode-mode check can now suppress the effort-switch nudge once enabled.

## 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.

### Effort-medium nudge generalized to per-model remote-config gates

The effort-downgrade nudge was rebuilt to support multiple models, each hidden behind its own remote switch.

The effort-medium downgrade nudge was reworked from a single hardcoded `opus-5`-to-medium check into a table-driven system covering multiple models, each behind its own remote gate: `claude-opus-5` behind `tengu_radiant_island` and `claude-fable-5-1` behind `tengu_steady_plum`. The nudge's from/to effort levels, title, body, confirm/cancel labels, and an optional warning banner are now supplied by that gate's payload rather than being fixed strings.

- Flag `tengu_radiant_island`: Not enough to say (read for one account on one subscription tier against v2.1.263; this account: no value returned, anonymous baseline: no value returned, compiled default: no gate table built for this version) 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.
- Area: Effort Nudge
- Tier: Nothing to try yet
- Useful: 4/5
- Signal: 4/5
- Present in the build but not switched on

### Effort-switch dialog gains an "ultracode" awareness check

An internal ultracode-mode check can now silently suppress the effort-switch nudge.

The confirm-model-switch payload schema (`Vbe`) now validates `modelKey` and `fromLevel`/`toLevel` effort transitions, enforcing that `toLevel` is a downgrade from `fromLevel`. The related dialog code (`K7`) reads `ultracode` from app state and passes it into the effort-negotiation call (`Net`), and a new `getLiveUltracode` accessor joins `getLiveEffort`/`getLiveModel`. The nudge eligibility function (`$be`) also gained an `ultracode` parameter that, when truthy, unconditionally skips showing the nudge, alongside existing conditions like being mid-bridge-reattach or lacking `userSettings` write access.

- Area: Effort Nudge
- Tier: Under the hood
- Useful: 3/5
- Signal: 4/5
- Present in the build but not switched on

### New thinkingPrefixMismatchBehavior field on API telemetry, tied to a 'block_binding' beta feature

API telemetry can now log a thinking-block mismatch setting, but only under a specific unreleased beta header.

The `tengu_api_query` and `tengu_api_success` telemetry events now carry a `thinkingPrefixMismatchBehavior` field. It's populated from `block_binding.mismatch_behavior`, which is attached to the thinking config only when a specific beta header is present and the request doesn't already carry its own `thinking` key.

- Area: Telemetry
- Tier: Under the hood
- Useful: 3/5
- Signal: 4/5
- Present in the build but not switched on

### New gated behavior: tengu_polished_dewdrop controls a 'drop/block/error' response

A new hidden switch, settable via env var, can make certain responses silently drop or error instead.

A new function, `Oar()`, reads the env var `CLAUDE_CODE_POLISHED_DEWDROP` or falls back to a gate named `tengu_polished_dewdrop` (default empty string), mapping the value `drop` to `drop_block` and `block` to `error` (any other value falls through to `undefined`). It's consulted alongside an existing check (`KPe()`/`LTn`) to decide whether to short-circuit or flag an error path, guarded by `!a.CLAUDE_CODE_SIMULATE_PROXY_USAGE && !rK() && qh()`.

- Flag `tengu_polished_dewdrop`: Not enough to say (read for one account on one subscription tier against v2.1.263; this account: no value returned, anonymous baseline: no value returned, compiled default: no gate table built for this version) 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.
- Area: Rate Limiting
- Tier: Nothing to try yet
- Useful: 2/5
- Signal: 3/5
- Present in the build but not switched on

## In Development

### Effort-medium nudge generalized to multiple models and effort levels

The effort-downgrade nudge now works per model instead of just one, but each model needs its own flag turned on.

The effort-medium nudge, previously hardcoded to a single model and level, is now driven by a per-model config table (`v2`). It currently covers `claude-opus-5` (nudging from `high`) and `claude-fable-5-1` (nudging from `high`, `xhigh`, or `max`), with each model gated by its own flag.

- Flag `tengu_radiant_island`: Not enough to say (read for one account on one subscription tier against v2.1.263; this account: no value returned, anonymous baseline: no value returned, compiled default: no gate table built for this version) 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.
- Area: Effort Nudge
- Tier: Nothing to try yet
- Useful: 3/5
- Signal: 3/5
- Present in the build but not switched on

### New schema fields for warning text and effort-range extend the model-switch dialog

The model-switch dialog gained hidden fields for a warning banner and effort range, not yet shown to users.

The dialog schema `jbe` (feeding `Vbe`) gained optional `fromEffort` (a single value or an array of at least one), `toEffort`, a `showWarning` boolean, and a validated single-line `warningText` field, capped at length `v3t` and disallowing control characters.

- Area: Effort Nudge
- Tier: Nothing to try yet
- Useful: 3/5
- Signal: 3/5
- Present in the build but not switched on

### Effort nudge confirm dialog supports templated copy and an optional warning banner

The effort nudge dialog can now fill in the model and levels by name and show a warning banner, once enabled.

The confirmation dialog component (`HFe`) now interpolates `{model}`, `{from}`, and `{to}` placeholders into its title, body, and labels, and conditionally renders a warning-colored `warningText` banner when `showWarning` is set in the served nudge config.

- Flag `tengu_radiant_island`: Not enough to say (read for one account on one subscription tier against v2.1.263; this account: no value returned, anonymous baseline: no value returned, compiled default: no gate table built for this version) 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.
- Area: Effort Nudge
- Tier: Nothing to try yet
- Useful: 3/5
- Signal: 3/5
- Present in the build but not switched on

### New copy strings for an effort-downgrade confirmation dialog

New wording was added for a dialog confirming a drop to a lower thinking-effort level, not yet fully wired.

Three new UI strings were added for a dialog confirming a switch to a lower thinking-effort level: a title, an accept action, and a decline action.

- Area: Effort Nudge
- Tier: Nothing to try yet
- Useful: 2/5
- Signal: 2/5
- Present in the build but not switched on

## Internal Changes

### New API-error detection for thinking block_binding mismatch

Claude Code can now recognize a specific new 400 error about thinking-block mismatch settings.

A new function, `Got(e)`, detects a specific 400 API error about `thinking.adaptive`/`enabled` `block_binding` `mismatch_behavior` being an unrecognized input, distinguishing it from other known error types (`Aq`, `Dle`) already handled.

- Area: API Errors
- Tier: Under the hood
- Useful: 2/5
- Signal: 3/5

### Effort nudge now tracked per-model, not just once globally

Dismissing the effort nudge for one model no longer silences it for other models.

Settings storage now tracks nudge dismissal per model via `hasSeenEffortMediumNudgeByModel`, so dismissing the effort nudge for one model (e.g. `fable-5-1`) no longer suppresses it for another (e.g. `opus-5`). The old global dismissal flag is kept only for backward compatibility with `opus-5`.

- Area: Effort Nudge
- Tier: Under the hood
- Useful: 2/5
- Signal: 2/5

### Effort-medium-nudge remote config now validated for effort-level ordering, plus fromEffort/toEffort treated as invalid fields

Server-served effort nudge text is now rejected outright if its effort-level ordering looks invalid.

The parser for the server-served effort-medium-nudge copy now runs parsed config through a new validation wrapper `Aet`, which calls `w3t` to check that every level in `fromEffort` is strictly below `toEffort` using an ordering array `om`. If the ordering check fails, the config is rejected and `g("effort_medium_nudge", "served_copy_invalid")` is recorded. Also, when the initial `safeParse` fails and the invalid fields include `fromEffort` or `toEffort`, the app now discards the whole served copy instead of stripping just the bad fields and salvaging the rest, as it previously did.

- Flag `tengu_radiant_island`: Not enough to say (read for one account on one subscription tier against v2.1.263; this account: no value returned, anonymous baseline: no value returned, compiled default: no gate table built for this version) 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.
- Area: Effort Nudge
- Tier: Under the hood
- Useful: 2/5
- Signal: 2/5

### Effort-switch reason text generator added

A new internal helper writes the explanatory sentence shown when suggesting an effort-level change.

A new helper, `U_t`, builds the explanatory copy shown when suggesting an effort-level change, either a max-effort special case or a sentence comparing estimated costs.

- Area: Effort Nudge
- Tier: Under the hood
- Useful: 2/5
- Signal: 2/5

### Effort nudge telemetry gains model/level detail

Effort nudge telemetry now records which model and effort levels were involved.

The `tengu_effort_medium_nudge_shown` and `tengu_effort_medium_nudge_resolved` telemetry events now include `nudge_model`, `from_level`, `to_level`, and `warning_shown`, reflecting the generalized per-model nudge. Previously these events only logged cohort and option order.

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

### All version-string literals bumped to 2.1.263

Routine version bump to 2.1.263 with no behavior change.

Version stamps across the CLI (update-check, telemetry, daemon, remote-control, native-installer, and user-agent code paths) bumped from `2.1.261` to `2.1.263`, with matching `BUILD_TIME` (`2026-09-06T01:08:56Z`) and `GIT_SHA` (`37ae3f38d765199d54a6913cd61c6c9ad8576cc6`). Routine release stamping, no behavioral change.

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