Repository navigation
Setup: the picked model is the cron model too - #533
Merged
Merged
Conversation
The Model step wrote agent.model and left agent.cron_model at the installer's default, so an instance set up for Opus ran every scheduled job — most of a worker's work — on Sonnet without anyone choosing that. build_config_layers now derives cron_model from the pick and the step writes both. The page sends the picker's model after a live test and on the Continue that follows a credential save, so the preselected default counts as the choice; a done step visited later sends it only when it changes, and a cron model set by hand survives effort-only and credential-only saves. The picker says what scheduled jobs will run on, and the docs follow.
alex-clickhouse
approved these changes
Oct 20, 2026
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.
What
Picking a model on the setup page's Model step now writes
agent.cron_modelalongsideagent.model. Before, the cron model stayed at the installer's default (claude-sonnet-5-5), so an instance set up for Opus ran every scheduled job — most of a worker's work — on Sonnet without anyone choosing that.Cost note: the default wizard path now runs scheduled jobs on the chat model (Opus by default) instead of Sonnet. That is the point of the change;
agent.cron_modelinsettings.yamlremains the knob for a cheaper one, and a later save that picks nothing leaves it alone.How
nerve/setup_writer.py:build_config_layersderivesagent.cron_modelfromagent_model(the picker's answer), after the Bedrock block, so a geo-prefixed pick lands as-is.nerve/gateway/routes/setup.py: the Model step publishesagent.cron_modelwhenever amodelis in the request. An effort-only or credential-only save touches neither; a switch into or out of Bedrock without a pick returns both to the installer's defaults (geo-prefixed on Bedrock), as before.web/…/ProviderStep.tsx: the picker on screen during the first pass is the choice, the preselected default included — the page sends its model after a live test on a pending step and on the Continue that follows a credential save. Not on a save that moves into or out of Bedrock (the model on screen belongs to the other provider; the server applies the region's ids). A done step visited later sends the model only when it changes, so a cron model set by hand is left alone;WizardShellnow also drops the "Saved…" notice when the wizard unmounts, so a later visit confirms nothing. The line under the picker says what scheduled jobs will run on: "Scheduled jobs run on this model too." when the pick is sent (or already agrees), otherwise "Scheduled jobs run on ; choosing a different model here moves them to it."docs/setup.md(step table + Model notes),docs/config.md(agent.cron_model),docs/api.md(PUT contract + example).Tests
tests/test_setup_api.py: the two exact-equality expectations now includecron_model; newtest_the_cron_model_follows_the_picked_modelwalks pick → a hand-set cron model survives an effort-only and a credential-only save → switch to Bedrock → pick on Bedrock → leave Bedrock.tests/test_setup_writer.py: the writer test asserts the derivedcron_model.web/…/SetupWizard.test.tsx: the Continue after a credential save carries the preselected model; a live test then Continue sends it with the credential; Bedrock after a live test sends no model; a "Saved" notice does not outlive the wizard; the help line names another cron model and switches once a pick is made.pytest tests/,npm testandnpm run buildgreen in the worktree.