Ultracode arms with no ultracode setting in any scope; header shows plain "with xhigh effort" while it is active

Status Open
Maintainer reply None cached
Activity 3 comments · opened Aug 31, 2026

Environment

  • Claude Code v2.1.251, npm-global install
  • Windows 11 Pro (10.0.26200), VS Code terminal (Git Bash)
  • Claude Max plan

Correction from original report

Originally filed as a cosmetic badge bug. Further checking inverted the diagnosis: opening /effort shows the slider marker sitting ON the ultracode position ("xhigh + workflows") while the session header in the same frame reads "Fable 5 with xhigh effort". The badge was truthful; the header is the element mislabeling the state (consistent with ultracode reporting its level as xhigh internally, per the statusline docs). So there appear to be two real defects:

1. Ultracode is armed with no ultracode opt-in anywhere

A fresh Fable 5 session boots with the /effort slider on ultracode despite:

  • ~/.claude/settings.json: no ultracode key; only "modelSettings": { "claude-opus-5": { "effortLevel": "xhigh" } } — i.e. no effort setting at all for Fable 5
  • Project .claude/settings.json / .claude/settings.local.json: no ultracode/effort keys
  • No managed settings file (C:\ProgramData\ClaudeCode\ absent)
  • CLAUDE_CODE_EFFORT_LEVEL unset in process, user, and machine scope
  • No --effort/--settings launch flags (plain claude invocation)
  • ~/.claude.json: no effort-level or ultracode state (only UI flags like effortCalloutDismissed)

Docs say ultracode's default is "unset, so ultracode is off" and Fable 5's default effort is high. If Fable 5 intentionally defaults to ultracode in this build, that is undocumented; if not, it is arming spontaneously. An Opus 5 (1M) session on the same machine also showed the ultracode badge while its header read "with xhigh effort", with the only relevant config being the per-model xhigh entry above — suggesting a saved plain xhigh may also be loaded/seated as ultracode.

2. Header hides ultracode

When ultracode is active, the header reads "with xhigh effort" with no indication that dynamic-workflow orchestration is armed. Given ultracode's token implications, the header should say ultracode.

Related symptom

With effort state actually at ultracode, /effort xhigh is a silent no-op — no modelSettings entry is written, presumably because ultracode reports its level as xhigh so the CLI sees no change to persist. This makes it impossible to leave ultracode via /effort xhigh; only selecting a different level (or the slider) forces a write.

Reproduction

  1. v2.1.251, config as above (no ultracode key anywhere; no effort setting for Fable 5)
  2. claude in a fresh terminal on a Fable 5 session
  3. Header: "Fable 5 with xhigh effort". Open /effort: marker sits on ultracode ("xhigh + workflows"). Footer badge: "ultracode"

Expected

  • Ultracode off unless enabled via a documented route (or, if Fable 5 defaults to ultracode by design, document it and show it in the header)
  • Header reflects ultracode when active
  • /effort xhigh persists per-model xhigh even when current state is ultracode

View original on GitHub ↗

3 Comments

kenflorian · 1 month ago

Supporting doc citations for "no sanctioned route to this state" (checked against current docs + full CHANGELOG):

  • Documented Fable 5 default effort is high, not ultracode: model-config "Adjust effort level", resolution step 4 — "The model's default effort: high on every model that supports effort, except that Opus 4.7 defaults to xhigh..." The only documented route to a different default is an organization-set default effort for the org default model; this is a personal Max account, so it does not apply.
  • The Fable 5 "hold" (step 2) holds the model default across sessions — which per the docs is high, so the hold cannot explain an ultracode start either.
  • ultracode settings key: "Default: unset, so ultracode is off."
  • CHANGELOG has no entry in any version about ultracode becoming a default, being bundled with a model, or the slider's default position changing. Nearest relevant entry suggests recent churn in exactly this area: 2.1.243 — "Fixed the /model picker silently ignoring an Ultracode selection; picking Ultracode now applies it to the current session."
  • The header reading "with xhigh effort" while ultracode is active is consistent with the statusline doc's "Ultracode is not a distinct level and reports as xhigh" — i.e. the header appears to be rendering the reported level, which hides the workflows flag.
Pashich7 · 1 month ago

Confirming this on Windows 10 Pro (10.0.19045), Claude Code CLI - same symptom:
the session is armed with ultracode while the header reports plain xhigh.

Worth stating the root cause explicitly, because it makes this bug and an existing
feature request the same work item: the status line's stdin JSON carries no field
for ultracode at all - effort.level collapses ultracode and xhigh onto the same
value. So the built-in header and every custom status line are structurally unable
to tell the two apart. That is exactly what #69068 asks for (effort.ultracode: true
in the payload).

This therefore cannot be fixed cosmetically. Fixing the header requires making the
ultracode state observable, which is #69068 - closing that one closes this for free,
whereas patching only the TUI would leave every custom status line still wrong.

Related: #90744 (ultracode unobservable, and not inherited by spawned sessions).

Pashich7 · 1 month ago

Second data point, and it isolates the "no setting in any scope" half of this report.

Environment: Windows 10 Pro (10.0.19045), Claude Code CLI 2.1.252, Opus 5 (1M context).
Different OS build, different CLI build and different model from the original report
(Windows 11 / 2.1.251 / Fable 5), same behaviour - so this is not build- or model-specific.

Reopening /effort (then Esc, to avoid changing anything) puts the slider marker on
ultracode, and the session confirms it with Set effort level to ultracode
(this session only)
.

Meanwhile every persisted scope on disk says xhigh:

| scope | value |
|---|---|
| ~/.claude/settings.json -> effortLevel | "xhigh" |
| ~/.claude/settings.json -> modelSettings["claude-opus-4-8"].effortLevel | "xhigh" |
| ~/.claude/settings.json -> modelSettings["claude-opus-5"].effortLevel | "xhigh" |
| ~/.claude/settings.local.json | file does not exist |
| project .claude/settings.json | file does not exist |
| project .claude/settings.local.json | no effort key |

Grepping every settings file for the string ultracode returns nothing. The only place
that word exists anywhere on disk is a session title I typed by hand as a workaround
("customTitle": "@Active [✦ ultracode]", nameSource: "user") - which is rather the
point: the only way to see the state is to write it down yourself.

So the arming is real, session-only, and recorded nowhere. That is why no consumer can
derive it: not the header, and not a custom status line either, since the statusLine
stdin JSON has no field for it and effort.level reads xhigh. This is the same root
cause as #69068 - one fix closes both.