Repository navigation
feat(web): pick Codex and Claude effort with an effort dial - #551
Draft
incognitojam wants to merge 8 commits into
Draft
incognitojam wants to merge 8 commits into
incognitojam wants to merge 8 commits into
Conversation
Four levels, Light to Ultra, each resolve to a Codex or Claude model and reasoning effort from fixed tables: one per provider for locked threads and single-provider setups, and a cross-provider table for new threads when both are ready. A model the tables do not cover keeps its model and only changes effort.
The model pill opens a Faster to Smarter slider over the four levels, with the resolved model and a speed toggle. The model row opens the model list, and the model picker keybinding and /model go straight to it. The separate effort menu goes away for Codex and Claude; other providers keep it. In a started thread, levels stay on its provider and levels that switch model are marked.
incognitojam
had a problem deploying
to
web-preview
September 30, 2026 09:17 — with
GitHub Actions
Error
Web previewhttps://styal-web-pr-551.cameron-clough.workers.dev (for de952a6) Open this exact URL; the hosted-app origin is baked in at build time. Pair a server into it with The preview is deleted when this PR closes or the preview label is removed. |
The level names sit over their stops and select them on click, the thumb and fill animate between levels, the usual speed is called Normal so it does not read as the Standard level, and the model pill's tooltip names the model and its effort instead of repeating the label.
The manifest's fast mode option now says it runs the same model faster and is billed to usage credits rather than the plan's included usage, matching Claude Code's own wording.
An Effort toggle in the dial switches between the four levels and the selected model's own reasoning efforts, remembered as a client setting. A cost icon on Fast shows the provider's description of what faster output costs.
The dial's model row opens a list of Default and the current Codex and Claude models, like the ChatGPT picker, instead of a separate Effort toggle. Choosing a model switches the slider to its own efforts and Default returns to the levels; All models opens the full picker. The model row moves above a chunkier slider.
This was referenced Oct 6, 2026
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
For Codex and Claude, the composer's model pill now opens an effort dial: a slider over four levels, Light, Standard, Deep and Ultra. Each level picks a model and reasoning effort from a fixed table, across both providers when both are set up. The separate effort menu goes away for those providers.
Problem
The effort menu listed every reasoning level each model offers, so it was easy to run Opus 5.5 at xhigh or max, or Fable when a cheaper model would do. Benchmarks don't back those choices. On FrontierCode, Opus 5.5 at medium matches max at about an eighth of the cost. Choosing well also meant knowing which provider and model suit each kind of task, and for users with both subscriptions that choice decides whose usage a thread spends.
Change
Levels.
packages/shared/src/effortDial.tsresolves each level to a provider, model and effort:Composer. This follows the Codex app's picker:
effortControl,levelsorcustom)./modelopen the full model list directly.Started threads. Levels stay on the thread's provider. Stops that would switch its model have a dashed ring. Choosing one says the next turn re-reads the whole conversation. Effort-only changes apply without a restart (Claude since #541).
Unchanged.
Docs: a new "Effort levels" section in the composer guide, a bullet in the styal differences page, and the
effort-dialfork ledger entry.Not in this PR:
Evidence
The screenshots come from a dev server with isolated state and real Codex 0.159 and Claude Code providers. Thread names come from earlier testing.
Validation
main.packages/shared/src/effortDial.test.tscovers the tables, provider locking, fallbacks, models off the tables, and instance choice.apps/web/src/components/chat/effortDial.logic.test.tscovers which models the dial offers and the speed control. The existingProviderModelPickerand source-control writing settings suites pass.Written by an agent (Claude Code, claude-opus-5-5).