feat(server): default Claude context window to 1M - #3950

Closed
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default
Closed

feat(server): default Claude context window to 1M#3950
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • Flips the contextWindow option default from 200k to 1m for the toggle-capable Claude models (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). 200k remains selectable.
  • Adds resolveClaudeContextWindow (mirroring resolveClaudeEffort) so a selection with no explicit contextWindow option resolves through the descriptor default instead of implicitly meaning 200k. Both resolveClaudeApiModelId (which appends the [1m] model-ID suffix for the CLI) and the adapter's selectedClaudeContextWindow (which seeds the context meter's maxTokens) now share it.
  • Opus 4.8/4.7 are unchanged: no toggle, hard-coded 1M, bare slug sent to the CLI (now with a comment explaining the asymmetry).

Why

The 200k default came from #1556, when 1M context was gated behind premium Claude subscriptions and carried a long-context pricing premium — that PR flipped the default from 1M to 200k and promoted 1M back only for detected Max/Enterprise/Team plans. #1899 then removed the subscription detection but kept the conservative default for everyone.

Anthropic has since made 1M the default for every model that supports it: no beta header, no tier gate, and standard pricing for long-context requests. Opus 4.8 and Fable 5 — the models most users run — are 1M by default upstream, so the 200k default only created a mismatch for the toggle models.

Users whose saved drafts explicitly selected 200k keep that selection; only option-less selections move to 1M.

Testing

  • bun run typecheck — clean
  • bun run lint — clean
  • apps/server full test suite — 1399 passed
  • packages/shared model tests — 256 passed
  • apps/web composerProviderState + TraitsPicker tests — passed
  • Updated ClaudeAdapter.test.ts: a bare opus-4-6 selection now dispatches claude-opus-4-6[1m]; the model-change test passes an explicit 200k to keep exercising the suffix transition.

🤖 Generated with Claude Code


Note

Medium Risk
Changes default context size and CLI model IDs for selections without an explicit window, which affects billing/limits and token metering; behavior is localized to Claude provider/adapter with tests updated.

Overview
Default Claude context window is now 1M for models that expose a contextWindow toggle (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). The option descriptor default moves from 200k to 1m; explicit 200k selections are unchanged.

A new resolveClaudeContextWindow helper resolves the effective window through model capability descriptors (same pattern as effort), so missing contextWindow on a selection no longer implicitly means 200k. resolveClaudeApiModelId and the adapter’s selectedClaudeContextWindow (CLI [1m] suffix and context-meter maxTokens) both use this helper. Opus 4.8/4.7 stay fixed at 1M with no toggle.

Tests expect bare Opus 4.6 selections to call setModel with claude-opus-4-6[1m] and use an explicit 200k on the second turn to assert the suffix transition.

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

Note

Default Claude context window to 1M for supported models

  • Sets 1m as the default contextWindow option for claude-fable-5, claude-opus-4-8, claude-opus-4-5, and claude-sonnet-4-6 in BUILT_IN_MODELS, replacing the previous 200k default.
  • Adds resolveClaudeContextWindow in ClaudeProvider.ts to derive the effective context window from model capability descriptors and any explicit selection, so defaults are respected without manual parsing.
  • Updates resolveClaudeApiModelId and selectedClaudeContextWindow in ClaudeAdapter.ts to use resolveClaudeContextWindow, ensuring the [1m] model ID suffix is applied when the resolved value is 1m.
  • Behavioral Change: users who previously relied on the 200k default will now have 1m selected by default for the affected models.

Macroscope summarized b05bdd1.

The 200k default dates to the era when 1M context was entitlement-gated
and carried a long-context pricing premium. Anthropic has since made 1M
the default for every model that supports it, with no beta header, tier
gate, or premium. Most users run Opus 4.8 or Fable 5, which are already
1M-default upstream, so the conservative default only added a stale
mismatch for the toggle-capable models.
- Flip the contextWindow default to 1m for Fable 5, Opus 4.6, Sonnet 5,
and Sonnet 4.6; 200k remains selectable.
- Add resolveClaudeContextWindow so option-less selections resolve to
the descriptor default instead of implicitly meaning 200k; both
resolveClaudeApiModelId ([1m] suffix) and the adapter's token
accounting now share it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

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

Run ID: afd93300-e62d-4bbb-9655-bf7a38ebce6a

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude-1m-context-default

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 13, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR changes the default Claude context window from 200k to 1M tokens, which is a significant runtime behavior change affecting all users. Default changes with potential cost implications warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotggt3dotgg changed the title Default Claude context window to 1Mfeat(server): default Claude context window to 1MJul 14, 2026
@t3dotgg

Copy link
Copy Markdown
MemberAuthor

Folded into #4240 (combined "fix a bunch of defaults" PR), with one adjustment: Sonnet 5 / Sonnet 4.6 keep the 200k default there to match Claude Code's own defaults — only Fable 5 and Opus get 1M by default. Closing in favor of that PR once it lands.

@t3dotggt3dotgg closed this Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(server): default Claude context window to 1M - #3950

Closed
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default
Closed

feat(server): default Claude context window to 1M#3950
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • Flips the contextWindow option default from 200k to 1m for the toggle-capable Claude models (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). 200k remains selectable.
  • Adds resolveClaudeContextWindow (mirroring resolveClaudeEffort) so a selection with no explicit contextWindow option resolves through the descriptor default instead of implicitly meaning 200k. Both resolveClaudeApiModelId (which appends the [1m] model-ID suffix for the CLI) and the adapter's selectedClaudeContextWindow (which seeds the context meter's maxTokens) now share it.
  • Opus 4.8/4.7 are unchanged: no toggle, hard-coded 1M, bare slug sent to the CLI (now with a comment explaining the asymmetry).

Why

The 200k default came from #1556, when 1M context was gated behind premium Claude subscriptions and carried a long-context pricing premium — that PR flipped the default from 1M to 200k and promoted 1M back only for detected Max/Enterprise/Team plans. #1899 then removed the subscription detection but kept the conservative default for everyone.

Anthropic has since made 1M the default for every model that supports it: no beta header, no tier gate, and standard pricing for long-context requests. Opus 4.8 and Fable 5 — the models most users run — are 1M by default upstream, so the 200k default only created a mismatch for the toggle models.

Users whose saved drafts explicitly selected 200k keep that selection; only option-less selections move to 1M.

Testing

  • bun run typecheck — clean
  • bun run lint — clean
  • apps/server full test suite — 1399 passed
  • packages/shared model tests — 256 passed
  • apps/web composerProviderState + TraitsPicker tests — passed
  • Updated ClaudeAdapter.test.ts: a bare opus-4-6 selection now dispatches claude-opus-4-6[1m]; the model-change test passes an explicit 200k to keep exercising the suffix transition.

🤖 Generated with Claude Code


Note

Medium Risk
Changes default context size and CLI model IDs for selections without an explicit window, which affects billing/limits and token metering; behavior is localized to Claude provider/adapter with tests updated.

Overview
Default Claude context window is now 1M for models that expose a contextWindow toggle (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). The option descriptor default moves from 200k to 1m; explicit 200k selections are unchanged.

A new resolveClaudeContextWindow helper resolves the effective window through model capability descriptors (same pattern as effort), so missing contextWindow on a selection no longer implicitly means 200k. resolveClaudeApiModelId and the adapter’s selectedClaudeContextWindow (CLI [1m] suffix and context-meter maxTokens) both use this helper. Opus 4.8/4.7 stay fixed at 1M with no toggle.

Tests expect bare Opus 4.6 selections to call setModel with claude-opus-4-6[1m] and use an explicit 200k on the second turn to assert the suffix transition.

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

Note

Default Claude context window to 1M for supported models

  • Sets 1m as the default contextWindow option for claude-fable-5, claude-opus-4-8, claude-opus-4-5, and claude-sonnet-4-6 in BUILT_IN_MODELS, replacing the previous 200k default.
  • Adds resolveClaudeContextWindow in ClaudeProvider.ts to derive the effective context window from model capability descriptors and any explicit selection, so defaults are respected without manual parsing.
  • Updates resolveClaudeApiModelId and selectedClaudeContextWindow in ClaudeAdapter.ts to use resolveClaudeContextWindow, ensuring the [1m] model ID suffix is applied when the resolved value is 1m.
  • Behavioral Change: users who previously relied on the 200k default will now have 1m selected by default for the affected models.

Macroscope summarized b05bdd1.

The 200k default dates to the era when 1M context was entitlement-gated
and carried a long-context pricing premium. Anthropic has since made 1M
the default for every model that supports it, with no beta header, tier
gate, or premium. Most users run Opus 4.8 or Fable 5, which are already
1M-default upstream, so the conservative default only added a stale
mismatch for the toggle-capable models.
- Flip the contextWindow default to 1m for Fable 5, Opus 4.6, Sonnet 5,
and Sonnet 4.6; 200k remains selectable.
- Add resolveClaudeContextWindow so option-less selections resolve to
the descriptor default instead of implicitly meaning 200k; both
resolveClaudeApiModelId ([1m] suffix) and the adapter's token
accounting now share it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

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

Run ID: afd93300-e62d-4bbb-9655-bf7a38ebce6a

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude-1m-context-default

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 13, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR changes the default Claude context window from 200k to 1M tokens, which is a significant runtime behavior change affecting all users. Default changes with potential cost implications warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotggt3dotgg changed the title Default Claude context window to 1Mfeat(server): default Claude context window to 1MJul 14, 2026
@t3dotgg

Copy link
Copy Markdown
MemberAuthor

Folded into #4240 (combined "fix a bunch of defaults" PR), with one adjustment: Sonnet 5 / Sonnet 4.6 keep the 200k default there to match Claude Code's own defaults — only Fable 5 and Opus get 1M by default. Closing in favor of that PR once it lands.

@t3dotggt3dotgg closed this Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(server): default Claude context window to 1M - #3950

Closed
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default
Closed

feat(server): default Claude context window to 1M#3950
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • Flips the contextWindow option default from 200k to 1m for the toggle-capable Claude models (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). 200k remains selectable.
  • Adds resolveClaudeContextWindow (mirroring resolveClaudeEffort) so a selection with no explicit contextWindow option resolves through the descriptor default instead of implicitly meaning 200k. Both resolveClaudeApiModelId (which appends the [1m] model-ID suffix for the CLI) and the adapter's selectedClaudeContextWindow (which seeds the context meter's maxTokens) now share it.
  • Opus 4.8/4.7 are unchanged: no toggle, hard-coded 1M, bare slug sent to the CLI (now with a comment explaining the asymmetry).

Why

The 200k default came from #1556, when 1M context was gated behind premium Claude subscriptions and carried a long-context pricing premium — that PR flipped the default from 1M to 200k and promoted 1M back only for detected Max/Enterprise/Team plans. #1899 then removed the subscription detection but kept the conservative default for everyone.

Anthropic has since made 1M the default for every model that supports it: no beta header, no tier gate, and standard pricing for long-context requests. Opus 4.8 and Fable 5 — the models most users run — are 1M by default upstream, so the 200k default only created a mismatch for the toggle models.

Users whose saved drafts explicitly selected 200k keep that selection; only option-less selections move to 1M.

Testing

  • bun run typecheck — clean
  • bun run lint — clean
  • apps/server full test suite — 1399 passed
  • packages/shared model tests — 256 passed
  • apps/web composerProviderState + TraitsPicker tests — passed
  • Updated ClaudeAdapter.test.ts: a bare opus-4-6 selection now dispatches claude-opus-4-6[1m]; the model-change test passes an explicit 200k to keep exercising the suffix transition.

🤖 Generated with Claude Code


Note

Medium Risk
Changes default context size and CLI model IDs for selections without an explicit window, which affects billing/limits and token metering; behavior is localized to Claude provider/adapter with tests updated.

Overview
Default Claude context window is now 1M for models that expose a contextWindow toggle (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). The option descriptor default moves from 200k to 1m; explicit 200k selections are unchanged.

A new resolveClaudeContextWindow helper resolves the effective window through model capability descriptors (same pattern as effort), so missing contextWindow on a selection no longer implicitly means 200k. resolveClaudeApiModelId and the adapter’s selectedClaudeContextWindow (CLI [1m] suffix and context-meter maxTokens) both use this helper. Opus 4.8/4.7 stay fixed at 1M with no toggle.

Tests expect bare Opus 4.6 selections to call setModel with claude-opus-4-6[1m] and use an explicit 200k on the second turn to assert the suffix transition.

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

Note

Default Claude context window to 1M for supported models

  • Sets 1m as the default contextWindow option for claude-fable-5, claude-opus-4-8, claude-opus-4-5, and claude-sonnet-4-6 in BUILT_IN_MODELS, replacing the previous 200k default.
  • Adds resolveClaudeContextWindow in ClaudeProvider.ts to derive the effective context window from model capability descriptors and any explicit selection, so defaults are respected without manual parsing.
  • Updates resolveClaudeApiModelId and selectedClaudeContextWindow in ClaudeAdapter.ts to use resolveClaudeContextWindow, ensuring the [1m] model ID suffix is applied when the resolved value is 1m.
  • Behavioral Change: users who previously relied on the 200k default will now have 1m selected by default for the affected models.

Macroscope summarized b05bdd1.

The 200k default dates to the era when 1M context was entitlement-gated
and carried a long-context pricing premium. Anthropic has since made 1M
the default for every model that supports it, with no beta header, tier
gate, or premium. Most users run Opus 4.8 or Fable 5, which are already
1M-default upstream, so the conservative default only added a stale
mismatch for the toggle-capable models.
- Flip the contextWindow default to 1m for Fable 5, Opus 4.6, Sonnet 5,
and Sonnet 4.6; 200k remains selectable.
- Add resolveClaudeContextWindow so option-less selections resolve to
the descriptor default instead of implicitly meaning 200k; both
resolveClaudeApiModelId ([1m] suffix) and the adapter's token
accounting now share it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

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

Run ID: afd93300-e62d-4bbb-9655-bf7a38ebce6a

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude-1m-context-default

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 13, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR changes the default Claude context window from 200k to 1M tokens, which is a significant runtime behavior change affecting all users. Default changes with potential cost implications warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotggt3dotgg changed the title Default Claude context window to 1Mfeat(server): default Claude context window to 1MJul 14, 2026
@t3dotgg

Copy link
Copy Markdown
MemberAuthor

Folded into #4240 (combined "fix a bunch of defaults" PR), with one adjustment: Sonnet 5 / Sonnet 4.6 keep the 200k default there to match Claude Code's own defaults — only Fable 5 and Opus get 1M by default. Closing in favor of that PR once it lands.

@t3dotggt3dotgg closed this Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(server): default Claude context window to 1M - #3950

Closed
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default
Closed

feat(server): default Claude context window to 1M#3950
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • Flips the contextWindow option default from 200k to 1m for the toggle-capable Claude models (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). 200k remains selectable.
  • Adds resolveClaudeContextWindow (mirroring resolveClaudeEffort) so a selection with no explicit contextWindow option resolves through the descriptor default instead of implicitly meaning 200k. Both resolveClaudeApiModelId (which appends the [1m] model-ID suffix for the CLI) and the adapter's selectedClaudeContextWindow (which seeds the context meter's maxTokens) now share it.
  • Opus 4.8/4.7 are unchanged: no toggle, hard-coded 1M, bare slug sent to the CLI (now with a comment explaining the asymmetry).

Why

The 200k default came from #1556, when 1M context was gated behind premium Claude subscriptions and carried a long-context pricing premium — that PR flipped the default from 1M to 200k and promoted 1M back only for detected Max/Enterprise/Team plans. #1899 then removed the subscription detection but kept the conservative default for everyone.

Anthropic has since made 1M the default for every model that supports it: no beta header, no tier gate, and standard pricing for long-context requests. Opus 4.8 and Fable 5 — the models most users run — are 1M by default upstream, so the 200k default only created a mismatch for the toggle models.

Users whose saved drafts explicitly selected 200k keep that selection; only option-less selections move to 1M.

Testing

  • bun run typecheck — clean
  • bun run lint — clean
  • apps/server full test suite — 1399 passed
  • packages/shared model tests — 256 passed
  • apps/web composerProviderState + TraitsPicker tests — passed
  • Updated ClaudeAdapter.test.ts: a bare opus-4-6 selection now dispatches claude-opus-4-6[1m]; the model-change test passes an explicit 200k to keep exercising the suffix transition.

🤖 Generated with Claude Code


Note

Medium Risk
Changes default context size and CLI model IDs for selections without an explicit window, which affects billing/limits and token metering; behavior is localized to Claude provider/adapter with tests updated.

Overview
Default Claude context window is now 1M for models that expose a contextWindow toggle (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). The option descriptor default moves from 200k to 1m; explicit 200k selections are unchanged.

A new resolveClaudeContextWindow helper resolves the effective window through model capability descriptors (same pattern as effort), so missing contextWindow on a selection no longer implicitly means 200k. resolveClaudeApiModelId and the adapter’s selectedClaudeContextWindow (CLI [1m] suffix and context-meter maxTokens) both use this helper. Opus 4.8/4.7 stay fixed at 1M with no toggle.

Tests expect bare Opus 4.6 selections to call setModel with claude-opus-4-6[1m] and use an explicit 200k on the second turn to assert the suffix transition.

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

Note

Default Claude context window to 1M for supported models

  • Sets 1m as the default contextWindow option for claude-fable-5, claude-opus-4-8, claude-opus-4-5, and claude-sonnet-4-6 in BUILT_IN_MODELS, replacing the previous 200k default.
  • Adds resolveClaudeContextWindow in ClaudeProvider.ts to derive the effective context window from model capability descriptors and any explicit selection, so defaults are respected without manual parsing.
  • Updates resolveClaudeApiModelId and selectedClaudeContextWindow in ClaudeAdapter.ts to use resolveClaudeContextWindow, ensuring the [1m] model ID suffix is applied when the resolved value is 1m.
  • Behavioral Change: users who previously relied on the 200k default will now have 1m selected by default for the affected models.

Macroscope summarized b05bdd1.

The 200k default dates to the era when 1M context was entitlement-gated
and carried a long-context pricing premium. Anthropic has since made 1M
the default for every model that supports it, with no beta header, tier
gate, or premium. Most users run Opus 4.8 or Fable 5, which are already
1M-default upstream, so the conservative default only added a stale
mismatch for the toggle-capable models.
- Flip the contextWindow default to 1m for Fable 5, Opus 4.6, Sonnet 5,
and Sonnet 4.6; 200k remains selectable.
- Add resolveClaudeContextWindow so option-less selections resolve to
the descriptor default instead of implicitly meaning 200k; both
resolveClaudeApiModelId ([1m] suffix) and the adapter's token
accounting now share it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

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

Run ID: afd93300-e62d-4bbb-9655-bf7a38ebce6a

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude-1m-context-default

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 13, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR changes the default Claude context window from 200k to 1M tokens, which is a significant runtime behavior change affecting all users. Default changes with potential cost implications warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotggt3dotgg changed the title Default Claude context window to 1Mfeat(server): default Claude context window to 1MJul 14, 2026
@t3dotgg

Copy link
Copy Markdown
MemberAuthor

Folded into #4240 (combined "fix a bunch of defaults" PR), with one adjustment: Sonnet 5 / Sonnet 4.6 keep the 200k default there to match Claude Code's own defaults — only Fable 5 and Opus get 1M by default. Closing in favor of that PR once it lands.

@t3dotggt3dotgg closed this Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(server): default Claude context window to 1M - #3950

Closed
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default
Closed

feat(server): default Claude context window to 1M#3950
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • Flips the contextWindow option default from 200k to 1m for the toggle-capable Claude models (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). 200k remains selectable.
  • Adds resolveClaudeContextWindow (mirroring resolveClaudeEffort) so a selection with no explicit contextWindow option resolves through the descriptor default instead of implicitly meaning 200k. Both resolveClaudeApiModelId (which appends the [1m] model-ID suffix for the CLI) and the adapter's selectedClaudeContextWindow (which seeds the context meter's maxTokens) now share it.
  • Opus 4.8/4.7 are unchanged: no toggle, hard-coded 1M, bare slug sent to the CLI (now with a comment explaining the asymmetry).

Why

The 200k default came from #1556, when 1M context was gated behind premium Claude subscriptions and carried a long-context pricing premium — that PR flipped the default from 1M to 200k and promoted 1M back only for detected Max/Enterprise/Team plans. #1899 then removed the subscription detection but kept the conservative default for everyone.

Anthropic has since made 1M the default for every model that supports it: no beta header, no tier gate, and standard pricing for long-context requests. Opus 4.8 and Fable 5 — the models most users run — are 1M by default upstream, so the 200k default only created a mismatch for the toggle models.

Users whose saved drafts explicitly selected 200k keep that selection; only option-less selections move to 1M.

Testing

  • bun run typecheck — clean
  • bun run lint — clean
  • apps/server full test suite — 1399 passed
  • packages/shared model tests — 256 passed
  • apps/web composerProviderState + TraitsPicker tests — passed
  • Updated ClaudeAdapter.test.ts: a bare opus-4-6 selection now dispatches claude-opus-4-6[1m]; the model-change test passes an explicit 200k to keep exercising the suffix transition.

🤖 Generated with Claude Code


Note

Medium Risk
Changes default context size and CLI model IDs for selections without an explicit window, which affects billing/limits and token metering; behavior is localized to Claude provider/adapter with tests updated.

Overview
Default Claude context window is now 1M for models that expose a contextWindow toggle (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). The option descriptor default moves from 200k to 1m; explicit 200k selections are unchanged.

A new resolveClaudeContextWindow helper resolves the effective window through model capability descriptors (same pattern as effort), so missing contextWindow on a selection no longer implicitly means 200k. resolveClaudeApiModelId and the adapter’s selectedClaudeContextWindow (CLI [1m] suffix and context-meter maxTokens) both use this helper. Opus 4.8/4.7 stay fixed at 1M with no toggle.

Tests expect bare Opus 4.6 selections to call setModel with claude-opus-4-6[1m] and use an explicit 200k on the second turn to assert the suffix transition.

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

Note

Default Claude context window to 1M for supported models

  • Sets 1m as the default contextWindow option for claude-fable-5, claude-opus-4-8, claude-opus-4-5, and claude-sonnet-4-6 in BUILT_IN_MODELS, replacing the previous 200k default.
  • Adds resolveClaudeContextWindow in ClaudeProvider.ts to derive the effective context window from model capability descriptors and any explicit selection, so defaults are respected without manual parsing.
  • Updates resolveClaudeApiModelId and selectedClaudeContextWindow in ClaudeAdapter.ts to use resolveClaudeContextWindow, ensuring the [1m] model ID suffix is applied when the resolved value is 1m.
  • Behavioral Change: users who previously relied on the 200k default will now have 1m selected by default for the affected models.

Macroscope summarized b05bdd1.

The 200k default dates to the era when 1M context was entitlement-gated
and carried a long-context pricing premium. Anthropic has since made 1M
the default for every model that supports it, with no beta header, tier
gate, or premium. Most users run Opus 4.8 or Fable 5, which are already
1M-default upstream, so the conservative default only added a stale
mismatch for the toggle-capable models.
- Flip the contextWindow default to 1m for Fable 5, Opus 4.6, Sonnet 5,
and Sonnet 4.6; 200k remains selectable.
- Add resolveClaudeContextWindow so option-less selections resolve to
the descriptor default instead of implicitly meaning 200k; both
resolveClaudeApiModelId ([1m] suffix) and the adapter's token
accounting now share it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

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

Run ID: afd93300-e62d-4bbb-9655-bf7a38ebce6a

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude-1m-context-default

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 13, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR changes the default Claude context window from 200k to 1M tokens, which is a significant runtime behavior change affecting all users. Default changes with potential cost implications warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotggt3dotgg changed the title Default Claude context window to 1Mfeat(server): default Claude context window to 1MJul 14, 2026
@t3dotgg

Copy link
Copy Markdown
MemberAuthor

Folded into #4240 (combined "fix a bunch of defaults" PR), with one adjustment: Sonnet 5 / Sonnet 4.6 keep the 200k default there to match Claude Code's own defaults — only Fable 5 and Opus get 1M by default. Closing in favor of that PR once it lands.

@t3dotggt3dotgg closed this Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(server): default Claude context window to 1M - #3950

Closed
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default
Closed

feat(server): default Claude context window to 1M#3950
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • Flips the contextWindow option default from 200k to 1m for the toggle-capable Claude models (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). 200k remains selectable.
  • Adds resolveClaudeContextWindow (mirroring resolveClaudeEffort) so a selection with no explicit contextWindow option resolves through the descriptor default instead of implicitly meaning 200k. Both resolveClaudeApiModelId (which appends the [1m] model-ID suffix for the CLI) and the adapter's selectedClaudeContextWindow (which seeds the context meter's maxTokens) now share it.
  • Opus 4.8/4.7 are unchanged: no toggle, hard-coded 1M, bare slug sent to the CLI (now with a comment explaining the asymmetry).

Why

The 200k default came from #1556, when 1M context was gated behind premium Claude subscriptions and carried a long-context pricing premium — that PR flipped the default from 1M to 200k and promoted 1M back only for detected Max/Enterprise/Team plans. #1899 then removed the subscription detection but kept the conservative default for everyone.

Anthropic has since made 1M the default for every model that supports it: no beta header, no tier gate, and standard pricing for long-context requests. Opus 4.8 and Fable 5 — the models most users run — are 1M by default upstream, so the 200k default only created a mismatch for the toggle models.

Users whose saved drafts explicitly selected 200k keep that selection; only option-less selections move to 1M.

Testing

  • bun run typecheck — clean
  • bun run lint — clean
  • apps/server full test suite — 1399 passed
  • packages/shared model tests — 256 passed
  • apps/web composerProviderState + TraitsPicker tests — passed
  • Updated ClaudeAdapter.test.ts: a bare opus-4-6 selection now dispatches claude-opus-4-6[1m]; the model-change test passes an explicit 200k to keep exercising the suffix transition.

🤖 Generated with Claude Code


Note

Medium Risk
Changes default context size and CLI model IDs for selections without an explicit window, which affects billing/limits and token metering; behavior is localized to Claude provider/adapter with tests updated.

Overview
Default Claude context window is now 1M for models that expose a contextWindow toggle (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). The option descriptor default moves from 200k to 1m; explicit 200k selections are unchanged.

A new resolveClaudeContextWindow helper resolves the effective window through model capability descriptors (same pattern as effort), so missing contextWindow on a selection no longer implicitly means 200k. resolveClaudeApiModelId and the adapter’s selectedClaudeContextWindow (CLI [1m] suffix and context-meter maxTokens) both use this helper. Opus 4.8/4.7 stay fixed at 1M with no toggle.

Tests expect bare Opus 4.6 selections to call setModel with claude-opus-4-6[1m] and use an explicit 200k on the second turn to assert the suffix transition.

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

Note

Default Claude context window to 1M for supported models

  • Sets 1m as the default contextWindow option for claude-fable-5, claude-opus-4-8, claude-opus-4-5, and claude-sonnet-4-6 in BUILT_IN_MODELS, replacing the previous 200k default.
  • Adds resolveClaudeContextWindow in ClaudeProvider.ts to derive the effective context window from model capability descriptors and any explicit selection, so defaults are respected without manual parsing.
  • Updates resolveClaudeApiModelId and selectedClaudeContextWindow in ClaudeAdapter.ts to use resolveClaudeContextWindow, ensuring the [1m] model ID suffix is applied when the resolved value is 1m.
  • Behavioral Change: users who previously relied on the 200k default will now have 1m selected by default for the affected models.

Macroscope summarized b05bdd1.

The 200k default dates to the era when 1M context was entitlement-gated
and carried a long-context pricing premium. Anthropic has since made 1M
the default for every model that supports it, with no beta header, tier
gate, or premium. Most users run Opus 4.8 or Fable 5, which are already
1M-default upstream, so the conservative default only added a stale
mismatch for the toggle-capable models.
- Flip the contextWindow default to 1m for Fable 5, Opus 4.6, Sonnet 5,
and Sonnet 4.6; 200k remains selectable.
- Add resolveClaudeContextWindow so option-less selections resolve to
the descriptor default instead of implicitly meaning 200k; both
resolveClaudeApiModelId ([1m] suffix) and the adapter's token
accounting now share it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

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

Run ID: afd93300-e62d-4bbb-9655-bf7a38ebce6a

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude-1m-context-default

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 13, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR changes the default Claude context window from 200k to 1M tokens, which is a significant runtime behavior change affecting all users. Default changes with potential cost implications warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotggt3dotgg changed the title Default Claude context window to 1Mfeat(server): default Claude context window to 1MJul 14, 2026
@t3dotgg

Copy link
Copy Markdown
MemberAuthor

Folded into #4240 (combined "fix a bunch of defaults" PR), with one adjustment: Sonnet 5 / Sonnet 4.6 keep the 200k default there to match Claude Code's own defaults — only Fable 5 and Opus get 1M by default. Closing in favor of that PR once it lands.

@t3dotggt3dotgg closed this Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(server): default Claude context window to 1M - #3950

Closed
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default
Closed

feat(server): default Claude context window to 1M#3950
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • Flips the contextWindow option default from 200k to 1m for the toggle-capable Claude models (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). 200k remains selectable.
  • Adds resolveClaudeContextWindow (mirroring resolveClaudeEffort) so a selection with no explicit contextWindow option resolves through the descriptor default instead of implicitly meaning 200k. Both resolveClaudeApiModelId (which appends the [1m] model-ID suffix for the CLI) and the adapter's selectedClaudeContextWindow (which seeds the context meter's maxTokens) now share it.
  • Opus 4.8/4.7 are unchanged: no toggle, hard-coded 1M, bare slug sent to the CLI (now with a comment explaining the asymmetry).

Why

The 200k default came from #1556, when 1M context was gated behind premium Claude subscriptions and carried a long-context pricing premium — that PR flipped the default from 1M to 200k and promoted 1M back only for detected Max/Enterprise/Team plans. #1899 then removed the subscription detection but kept the conservative default for everyone.

Anthropic has since made 1M the default for every model that supports it: no beta header, no tier gate, and standard pricing for long-context requests. Opus 4.8 and Fable 5 — the models most users run — are 1M by default upstream, so the 200k default only created a mismatch for the toggle models.

Users whose saved drafts explicitly selected 200k keep that selection; only option-less selections move to 1M.

Testing

  • bun run typecheck — clean
  • bun run lint — clean
  • apps/server full test suite — 1399 passed
  • packages/shared model tests — 256 passed
  • apps/web composerProviderState + TraitsPicker tests — passed
  • Updated ClaudeAdapter.test.ts: a bare opus-4-6 selection now dispatches claude-opus-4-6[1m]; the model-change test passes an explicit 200k to keep exercising the suffix transition.

🤖 Generated with Claude Code


Note

Medium Risk
Changes default context size and CLI model IDs for selections without an explicit window, which affects billing/limits and token metering; behavior is localized to Claude provider/adapter with tests updated.

Overview
Default Claude context window is now 1M for models that expose a contextWindow toggle (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). The option descriptor default moves from 200k to 1m; explicit 200k selections are unchanged.

A new resolveClaudeContextWindow helper resolves the effective window through model capability descriptors (same pattern as effort), so missing contextWindow on a selection no longer implicitly means 200k. resolveClaudeApiModelId and the adapter’s selectedClaudeContextWindow (CLI [1m] suffix and context-meter maxTokens) both use this helper. Opus 4.8/4.7 stay fixed at 1M with no toggle.

Tests expect bare Opus 4.6 selections to call setModel with claude-opus-4-6[1m] and use an explicit 200k on the second turn to assert the suffix transition.

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

Note

Default Claude context window to 1M for supported models

  • Sets 1m as the default contextWindow option for claude-fable-5, claude-opus-4-8, claude-opus-4-5, and claude-sonnet-4-6 in BUILT_IN_MODELS, replacing the previous 200k default.
  • Adds resolveClaudeContextWindow in ClaudeProvider.ts to derive the effective context window from model capability descriptors and any explicit selection, so defaults are respected without manual parsing.
  • Updates resolveClaudeApiModelId and selectedClaudeContextWindow in ClaudeAdapter.ts to use resolveClaudeContextWindow, ensuring the [1m] model ID suffix is applied when the resolved value is 1m.
  • Behavioral Change: users who previously relied on the 200k default will now have 1m selected by default for the affected models.

Macroscope summarized b05bdd1.

The 200k default dates to the era when 1M context was entitlement-gated
and carried a long-context pricing premium. Anthropic has since made 1M
the default for every model that supports it, with no beta header, tier
gate, or premium. Most users run Opus 4.8 or Fable 5, which are already
1M-default upstream, so the conservative default only added a stale
mismatch for the toggle-capable models.
- Flip the contextWindow default to 1m for Fable 5, Opus 4.6, Sonnet 5,
and Sonnet 4.6; 200k remains selectable.
- Add resolveClaudeContextWindow so option-less selections resolve to
the descriptor default instead of implicitly meaning 200k; both
resolveClaudeApiModelId ([1m] suffix) and the adapter's token
accounting now share it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

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

Run ID: afd93300-e62d-4bbb-9655-bf7a38ebce6a

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude-1m-context-default

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 13, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR changes the default Claude context window from 200k to 1M tokens, which is a significant runtime behavior change affecting all users. Default changes with potential cost implications warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotggt3dotgg changed the title Default Claude context window to 1Mfeat(server): default Claude context window to 1MJul 14, 2026
@t3dotgg

Copy link
Copy Markdown
MemberAuthor

Folded into #4240 (combined "fix a bunch of defaults" PR), with one adjustment: Sonnet 5 / Sonnet 4.6 keep the 200k default there to match Claude Code's own defaults — only Fable 5 and Opus get 1M by default. Closing in favor of that PR once it lands.

@t3dotggt3dotgg closed this Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(server): default Claude context window to 1M - #3950

Closed
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default
Closed

feat(server): default Claude context window to 1M#3950
t3dotgg wants to merge 1 commit into
mainfrom
claude-1m-context-default

Conversation

@t3dotgg

@t3dotggt3dotgg commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary

  • Flips the contextWindow option default from 200k to 1m for the toggle-capable Claude models (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). 200k remains selectable.
  • Adds resolveClaudeContextWindow (mirroring resolveClaudeEffort) so a selection with no explicit contextWindow option resolves through the descriptor default instead of implicitly meaning 200k. Both resolveClaudeApiModelId (which appends the [1m] model-ID suffix for the CLI) and the adapter's selectedClaudeContextWindow (which seeds the context meter's maxTokens) now share it.
  • Opus 4.8/4.7 are unchanged: no toggle, hard-coded 1M, bare slug sent to the CLI (now with a comment explaining the asymmetry).

Why

The 200k default came from #1556, when 1M context was gated behind premium Claude subscriptions and carried a long-context pricing premium — that PR flipped the default from 1M to 200k and promoted 1M back only for detected Max/Enterprise/Team plans. #1899 then removed the subscription detection but kept the conservative default for everyone.

Anthropic has since made 1M the default for every model that supports it: no beta header, no tier gate, and standard pricing for long-context requests. Opus 4.8 and Fable 5 — the models most users run — are 1M by default upstream, so the 200k default only created a mismatch for the toggle models.

Users whose saved drafts explicitly selected 200k keep that selection; only option-less selections move to 1M.

Testing

  • bun run typecheck — clean
  • bun run lint — clean
  • apps/server full test suite — 1399 passed
  • packages/shared model tests — 256 passed
  • apps/web composerProviderState + TraitsPicker tests — passed
  • Updated ClaudeAdapter.test.ts: a bare opus-4-6 selection now dispatches claude-opus-4-6[1m]; the model-change test passes an explicit 200k to keep exercising the suffix transition.

🤖 Generated with Claude Code


Note

Medium Risk
Changes default context size and CLI model IDs for selections without an explicit window, which affects billing/limits and token metering; behavior is localized to Claude provider/adapter with tests updated.

Overview
Default Claude context window is now 1M for models that expose a contextWindow toggle (Fable 5, Opus 4.6, Sonnet 5, Sonnet 4.6). The option descriptor default moves from 200k to 1m; explicit 200k selections are unchanged.

A new resolveClaudeContextWindow helper resolves the effective window through model capability descriptors (same pattern as effort), so missing contextWindow on a selection no longer implicitly means 200k. resolveClaudeApiModelId and the adapter’s selectedClaudeContextWindow (CLI [1m] suffix and context-meter maxTokens) both use this helper. Opus 4.8/4.7 stay fixed at 1M with no toggle.

Tests expect bare Opus 4.6 selections to call setModel with claude-opus-4-6[1m] and use an explicit 200k on the second turn to assert the suffix transition.

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

Note

Default Claude context window to 1M for supported models

  • Sets 1m as the default contextWindow option for claude-fable-5, claude-opus-4-8, claude-opus-4-5, and claude-sonnet-4-6 in BUILT_IN_MODELS, replacing the previous 200k default.
  • Adds resolveClaudeContextWindow in ClaudeProvider.ts to derive the effective context window from model capability descriptors and any explicit selection, so defaults are respected without manual parsing.
  • Updates resolveClaudeApiModelId and selectedClaudeContextWindow in ClaudeAdapter.ts to use resolveClaudeContextWindow, ensuring the [1m] model ID suffix is applied when the resolved value is 1m.
  • Behavioral Change: users who previously relied on the 200k default will now have 1m selected by default for the affected models.

Macroscope summarized b05bdd1.

The 200k default dates to the era when 1M context was entitlement-gated
and carried a long-context pricing premium. Anthropic has since made 1M
the default for every model that supports it, with no beta header, tier
gate, or premium. Most users run Opus 4.8 or Fable 5, which are already
1M-default upstream, so the conservative default only added a stale
mismatch for the toggle-capable models.
- Flip the contextWindow default to 1m for Fable 5, Opus 4.6, Sonnet 5,
and Sonnet 4.6; 200k remains selectable.
- Add resolveClaudeContextWindow so option-less selections resolve to
the descriptor default instead of implicitly meaning 200k; both
resolveClaudeApiModelId ([1m] suffix) and the adapter's token
accounting now share it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

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

Run ID: afd93300-e62d-4bbb-9655-bf7a38ebce6a

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude-1m-context-default

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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jul 13, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR changes the default Claude context window from 200k to 1M tokens, which is a significant runtime behavior change affecting all users. Default changes with potential cost implications warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@t3dotggt3dotgg changed the title Default Claude context window to 1Mfeat(server): default Claude context window to 1MJul 14, 2026
@t3dotgg

Copy link
Copy Markdown
MemberAuthor

Folded into #4240 (combined "fix a bunch of defaults" PR), with one adjustment: Sonnet 5 / Sonnet 4.6 keep the 200k default there to match Claude Code's own defaults — only Fable 5 and Opus get 1M by default. Closing in favor of that PR once it lands.

@t3dotggt3dotgg closed this Jul 21, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@t3dotgg