Ultracode arms with no ultracode setting in any scope; header shows plain "with xhigh effort" while it is active
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: noultracodekey; 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: noultracode/effort keys - No managed settings file (
C:\ProgramData\ClaudeCode\absent) CLAUDE_CODE_EFFORT_LEVELunset in process, user, and machine scope- No
--effort/--settingslaunch flags (plainclaudeinvocation) ~/.claude.json: no effort-level or ultracode state (only UI flags likeeffortCalloutDismissed)
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
- v2.1.251, config as above (no ultracode key anywhere; no effort setting for Fable 5)
claudein a fresh terminal on a Fable 5 session- 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 xhighpersists per-model xhigh even when current state is ultracode
3 Comments
Supporting doc citations for "no sanctioned route to this state" (checked against current docs + full CHANGELOG):
high, not ultracode: model-config "Adjust effort level", resolution step 4 — "The model's default effort:highon every model that supports effort, except that Opus 4.7 defaults toxhigh..." 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.high, so the hold cannot explain an ultracode start either.ultracodesettings key: "Default: unset, so ultracode is off."/modelpicker silently ignoring an Ultracode selection; picking Ultracode now applies it to the current session."xhigh" — i.e. the header appears to be rendering the reported level, which hides the workflows flag.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.levelcollapses ultracode and xhigh onto the samevalue. 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: truein 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).
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 onultracode, 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
ultracodereturns nothing. The only placethat word exists anywhere on disk is a session title I typed by hand as a workaround
(
"customTitle": "@Active [✦ ultracode]",nameSource: "user") - which is rather thepoint: 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.levelreadsxhigh. This is the same rootcause as #69068 - one fix closes both.