[BUG] Desktop macOS 1.49585.0: effort slider is inert — all models stuck at Max, every session
Summary
On the macOS desktop app (Code tab), the effort/reasoning slider in the model picker at the bottom of the window is completely non-responsive. Every model is stuck at Max effort and cannot be changed from the UI. This affects all sessions, both pre-existing and newly created.
Environment
- Claude desktop app: 1.49585.0 (macOS)
- Embedded CLI: 2.1.260
- macOS: 27.0 (build 26A5425a)
- Affected models: all tested — Haiku 4.5, Sonnet 4.6, Opus 5
Symptoms
- The model picker opens normally.
- The
?affordance renders its hint text correctly, so the popover itself is alive. - The effort slider does not respond to interaction — it cannot be dragged or clicked to a different level.
- Effort stays pinned at Max for every model.
- Reproduces in every chat session, old and new.
/model <id>via slash command still switches models successfully. Model selection works; it is specifically the effort control that is inert.
The bug is confined to the UI — /effort still works
Running /effort medium succeeded and immediately changed the effort actually in use. The session transcript (~/.claude/projects/<project>/<session>.jsonl) carries an effort field per assistant turn, and the split across a single session is unambiguous:
| effort recorded | turns | when |
| --- | --- | --- |
| max | 50 | every turn before /effort medium |
| medium | 7 | every turn after /effort medium |
Two things follow:
- The effort subsystem itself is healthy — the slash-command path sets effort correctly.
- The defect is in the picker UI: the slider renders but never commits a value.
This also independently corroborates the "stuck at Max" symptom — 50 consecutive turns were pinned at max with no way to change them from the UI, matching what the inert slider displayed.
(Noting for completeness that this field is the client-recorded value; #88842 documents a case where the transcript recorded a different level than was actually sent. It is strong evidence, not proof of the wire value.)
Steps to reproduce
- Open the Claude desktop app on macOS (Code tab).
- Click the model/effort selector at the bottom of the window.
- Attempt to move the effort slider to any level other than Max.
- Slider does not move; effort remains Max.
- Repeat in a brand-new chat session — same result.
What I ruled out
No effort override is present in configuration:
~/.claude/settings.json— noeffortLevelkey- project
.claude/settings.jsonand.claude/settings.local.json— absent /Library/Application Support/ClaudeCode/managed-settings.json— absent~/.claude.json— a recursive search over the whole file finds noeffortLevelat any depth
So this does not look like the known "settings override disconnects the picker" pattern reported in #91184.
Possibly relevant
~/.claude.json contains launch-effort unpin flags, but only for older models:
"unpinOpus47LaunchEffort": true,
"unpinOpus48LaunchEffort": true,
"unpinFable5LaunchEffort": true
There is no corresponding key for Opus 5, Sonnet 5, Fable 5.1, or Haiku 4.5. If newer models have their effort pinned at launch, and the unpin path is what writes these flags, then a broken or missing unpin handler for the current model generation would explain a slider that renders but never commits a change — and would explain why the pin resolves to Max across every model and every session.
Workaround
/effort <level> sets effort correctly, but only for the current session — it has to be re-run in every new chat, since the UI control that would make it stick is the thing that is broken.
Expected behavior
The effort slider should allow selecting any supported effort level for the active model, and the selection should persist for the session.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗