[BUG] VS Code extension: Fable 5 blocked behind 'requires usage credits' on Max 5x plan - consent dialog never renders, /model hint is circular

Status Open
Reported on v2.1.220
Maintainer reply None cached
Activity 0 comments · opened Jul 28, 2026

Environment

  • Extension: Claude Code for VS Code 2.1.220 (anthropic.claude-code-2.1.220-win32-x64)
  • OS: Windows 11 Home 10.0.26200
  • Plan: Claude Max 5x (default_claude_max_5x) - plan includes Fable 5 at no extra usage cost (up to 50% of weekly quota)
  • Auth: re-logged in (/login) to refresh tokens before reproducing; entitlement prompt unchanged

Expected behavior

Selecting Fable 5 from the model picker (or /model fable) on a Max 5x plan should either use the plan's included Fable allowance directly, or show the one-time Fable consent dialog and then proceed on plan usage.

Actual behavior

Every path to Fable via the UI/commands dead-ends in a "buy credits" wall:

  1. Model picker → Fable shows a blocking dialog:

> Fable 5 requires usage credits
> Fable 5 runs on usage credits, billed separately from your plan. You don't have usage credits yet. [Buy usage credits on claude.ai] [Switch to the default model and continue]

  1. /model claude-fable-5 (and claude-fable-5[1m]) responds:

> Fable 5 uses usage credits and needs a one-time consent · pick Fable from /model in an interactive session to set it up

This instruction is circular: picking Fable from /model in an interactive session is exactly what produces the credits dialog from (1). There is no path where the "one-time consent" can actually be granted.

  1. The consent dialog itself never renders. The only dialog ever shown is the "Buy usage credits" one.

Workaround that proves entitlement is fine

Setting the default model in .claude/settings.json:

{ "model": "claude-fable-5" }

then fully restarting VS Code → new sessions run on Fable 5 with no credit prompt and no consent dialog, billed against the plan. So the account is entitled; only the interactive switching path is broken.

However: once in a Fable session, switching to any other model (e.g. /model sonnet) and then back to Fable re-triggers the credits dialog. The settings.json override is only honored at session start.

Attempts that did NOT help

  • Re-login (/login) to refresh tokens/entitlements - no change
  • /model claude-fable-5 and /model claude-fable-5[1m] from the prompt - both return the circular consent message
  • Restarting VS Code without the settings.json override - picker still shows the credits dialog

Investigation (minified extension bundle)

Traced through anthropic.claude-code-2.1.220-win32-x64/extension.js (minified bundle; positions are chunk offsets, not source lines):

Model registry entry (duplicated in chunks 54 and 190):

id:"claude-fable-5", ... context:{window:1e6, native_1m:!0, supports_1m_beta:!0}, ... pricing:"tier_10_50"

Fable carries a native 1M window (window:1e6, native_1m:!0) and supports_1m_beta:!0 at the same time. Compare Haiku 4.5's entry: context:{window:200000, supports_1m_suffix:!0} — a 200k default with a separate suffix-based opt-in. If any code path treats Fable's supports_1m_beta like a suffix-style opt-in and produces/matches the alias claude-fable-5[1m] literally, that would line up with the alias-resolution root cause described in #79337.

Runtime consent-gate flags found in the same bundle:

fableCreditsRequired
fableConsentSessionFallback
fableBridgeDialogTimedOut
fableConsentDialogInteracted

The naming strongly suggests the intended flow is: Fable access is gated behind a one-time consent dialog (fableConsentDialogInteracted), delivered over a bridge to the webview; if the bridge dialog times out or is never answered (fableBridgeDialogTimedOut), the session falls back (fableConsentSessionFallback) to fableCreditsRequired - i.e. the "buy credits" wall.

Hypothesis: in the VS Code extension the consent bridge dialog never renders (times out silently), so every interactive model switch falls into the credits-required fallback - regardless of actual plan entitlement. The settings.json path works because a session that starts on Fable never goes through the interactive consent bridge.

Plan/entitlement resolution itself (planSlug, weekly-quota gating) is not present in extension.js - it appears to be decided server-side or in the CLI core process, so the fallback misclassification may also be reproducible in plain CLI (the /model responses above suggest it is).

Related issues

  • #79386 - original report of the credits prompt on Max
  • #79337 - entitlement check failing to resolve claude-fable-5[1m]-style aliases (literal string match)
  • #79412 - /model vs /usage display inconsistency

The entitlement cluster reportedly started ~2026-07-20 when Fable 5 moved from promotional to standard Max-plan inclusion, and was reported fixed in late July - but 2.1.220 with fresh tokens still reproduces it as of 2026-07-28.

Repro steps

  1. Log in to Claude Code VS Code extension with a Max 5x account (no purchased usage credits)
  2. Open the model picker, select Fable 5
  3. Observe "Fable 5 requires usage credits" dialog - no consent dialog is ever offered
  4. Run /model claude-fable-5 → observe the circular "pick Fable from /model in an interactive session" message
  5. Set "model": "claude-fable-5" in .claude/settings.json, restart VS Code → session runs Fable on plan usage, proving entitlement
  6. /model sonnet then /model fable → credits dialog returns

Resolution on my account (confirms the consent-gate hypothesis)

After running one or more sessions that started on Fable via the settings.json override, I reverted settings.json back to "model": "claude-sonnet-5" and restarted VS Code. Model switching from the UI (including to Fable and claude-fable-5[1m]) now works freely with no credits prompt.

This is consistent with the one-time consent being satisfied account-side by the settings.json-started session - i.e. the session-start path records the consent/entitlement state that the interactive dialog path was supposed to establish but never could (dialog never rendered → timed out → fableConsentSessionFallbackfableCreditsRequired).

Implications:

  • The bug is in the interactive consent flow, not entitlement itself - affected Max users are stuck in the circular loop with no in-product way to grant consent.
  • Repro is single-shot per account: once consent is recorded (via the workaround), the broken path can no longer be observed from that account.
  • Effective workaround for affected users: set "model": "claude-fable-5" in .claude/settings.json, restart VS Code, run one session, then revert the setting - UI switching works from then on.

View original on GitHub ↗