Skip to content

fix: make Claude 200k context window selection take effect - #8409

Open
MaxHTu wants to merge 1 commit into
pingdotgg:mainfrom
MaxHTu:fix/claude-200k-context-window
Open

fix: make Claude 200k context window selection take effect#8409
MaxHTu wants to merge 1 commit into
pingdotgg:mainfrom
MaxHTu:fix/claude-200k-context-window

Conversation

@MaxHTu

@MaxHTu MaxHTu commented Aug 27, 2026

Copy link
Copy Markdown

What Changed

Selecting the 200k context window for Claude models now actually runs the session at 200k. The adapter injects env: { CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" } into the SDK's flag-settings layer whenever the resolved context window is 200k, restates or clears it on mid-thread model switches via applyFlagSettings, and applies the same opt-out in ClaudeTextGeneration (commit-message / PR-content / thread-title generation, which spawns the same CLI).

Why

Fixes #8405. Claude Code auto-enables the 1M window for claude-opus-5 / claude-fable-5 / claude-sonnet-5 unless the process opts out, so resolveClaudeApiModelId's bare slug does not mean 200k — the 200k selection was a silent no-op and every such session ran at 1M (verified empirically via modelUsage[].contextWindow; details in the issue).

Three design points, each verified against SDK 0.3.170 + CLI 2.1.247:

  • Flag settings, not process env: sessions spawn with settingSources: ["user", "project", "local"], and an env block in a user/project settings file overrides the spawned process env — a queryOptions.env-based fix is silently defeated by e.g. "env": {"CLAUDE_CODE_DISABLE_1M_CONTEXT": "0"} in ~/.claude/settings.json. Flag settings (the SDK settings option) outrank those files.
  • Mid-thread switches: the opt-out outranks an explicit [1m] model suffix, so without restating it on setModel, a session started at 200k (any default Sonnet session) would silently clamp a later 1M selection to 200k. sendTurn now calls applyFlagSettings alongside setModel, passing null to clear when the new selection isn't 200k.
  • Same bug in text generation: ClaudeTextGeneration spawns the same CLI with the same bare slug and already builds a --settings object, so it gets the same conditional spread.

This also makes the context meter agree with reality (#5286): selectedClaudeContextWindow seeds 200k and the CLI now confirms it instead of reporting 1M.

Testing: 7 new / 2 updated unit tests across ClaudeAdapter.test.ts and ClaudeTextGeneration.test.ts; full src/provider + src/textGeneration suites pass (691 passed, 8 skipped); typecheck clean. Behavior verified end-to-end through the real SDK: bare slug → 1,000,000; with the flag-settings opt-out → 200,000 (including winning against a conflicting user-settings env block); mid-session applyFlagSettings flip verified in both directions.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (no UI changes)
  • I included a video for animation/interaction changes (no animation changes)

🤖 Generated with Claude Code


Note

Medium Risk
Changes how Claude sessions are configured (context window and live model switches); wrong flag logic would silently run at 1M or clamp 1M selections, but behavior is narrowly scoped and well-tested.

Overview
Fixes 200k context window selections being ignored: Claude Code auto-enables 1M for supported models, so the adapter now sets CLAUDE_CODE_DISABLE_1M_CONTEXT through the SDK settings / flag-settings layer (not process env) when resolveClaudeContextWindow is 200k, including default-200k models like Sonnet 5.

On mid-thread model changes, sendTurn calls applyFlagSettings before setModel—setting the opt-out for 200k or env: null to clear it—so the flag stays in sync with the model id and can override an explicit [1m] suffix.

The same conditional is applied in ClaudeTextGeneration for CLI-spawned flows (commit messages, etc.). Tests cover start-session settings, merges with fast mode, and flag updates when switching between 1M and 200k.

Reviewed by Cursor Bugbot for commit 87eba2d. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix Claude 200k context window by setting CLAUDE_CODE_DISABLE_1M_CONTEXT flag

When a user selects the 200k context window, the SDK and CLI now set env: { CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" } so the 1M context is actually disabled.

  • makeClaudeAdapter injects the flag into createQuery settings and calls query.applyFlagSettings on model switches in sendTurn, clearing it (env: null) when the new model is not 200k.
  • makeClaudeTextGeneration adds the same env flag to the CLI --settings payload for 200k selections.
  • ClaudeQueryRuntime interface now exposes applyFlagSettings typed from the SDK's Query.

Macroscope summarized 87eba2d.

Claude Code auto-enables the 1M-token context window for models that
support it (claude-opus-5, claude-fable-5, claude-sonnet-5), so passing
a bare model slug does not mean 200k — the session silently runs at 1M
regardless of the selection. Opt out explicitly by setting
CLAUDE_CODE_DISABLE_1M_CONTEXT=1 whenever the resolved context window
is 200k.

The opt-out goes through the SDK settings option (the flag-settings
layer) instead of the spawned process env, because an `env` block in a
user or project settings file overrides the process env and would
silently defeat the fix.

Because the flag-settings opt-out also outranks an explicit `[1m]`
model suffix (verified empirically), a mid-thread model switch must
restate it for the new selection — otherwise a session started at 200k
would silently clamp a later 1M selection, and vice versa. sendTurn now
calls applyFlagSettings alongside setModel.

ClaudeTextGeneration spawns the same CLI with the same bare slug, so it
gets the same opt-out.

Fixes pingdotgg#8405

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings August 27, 2026 15:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Aug 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38fd0cb7-3d62-400f-b2af-6628ead132d4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Aug 27, 2026
@macroscopeapp

macroscopeapp Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This change makes the existing Claude 200k selection alter the effective context capacity across live sessions and CLI-based text generation, including model switches. The implementation is focused and tested, but the production runtime impact of this propagated SDK/CLI configuration merits human review.

You can add or adjust custom eligibility rules. Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Claude 200k context window selection is a no-op; sessions always run at 1M

2 participants