Skip to main content

Models and effort are chosen per runtime, from what it offers

A runtime configuration and a role could each name a model in free text; the role's replaced the configuration's, but only when the role required one runtime kind, since a model is named by its runtime (ADR 0006, ADR 0019). Nothing else could be set, so every run thought as hard as its runtime's default: Codex at low reasoning effort, whatever the work. And nothing showed what a runtime offers, so a misspelt model surfaced only when a run failed on it. We decided that a runtime configuration and a role each set a model and an effort, a role per runtime kind, and that Mission Control learns what each runtime offers from the sessions it opens. A role holds settings per kind (codex: gpt-6.1-sol, high; claude-code: opus, high), so it keeps them whichever configuration serves it; requiring a kind stays a choice of its own. Each of the role's settings replaces the configuration's, and either may be left to the one below it, down to the runtime's own default. At the start of a session Mission Control sets the model, then the effort, through the session's ACP config options of category model and thought_level, matched as models are (the id, else one name, else one part). Every session's options are recorded on the configuration it ran on: the models, and the efforts each model offers, which the web app and the CLI show as choices.

Considered Options​

  • The model and effort as one id, as Codex's older model list writes them (gpt-6.1-sol[high]): rejected; it is one runtime's notation, Claude Code's bracket means a context window, and both bridges now offer effort as an option of its own.
  • One model per role that requires a kind: what we had. Rejected; a role served by either kind could not choose for both, and requiring a kind only to name a model narrowed who could serve it.
  • Starting a session only to read a runtime's options when a configuration is saved: deferred; it starts a container, signs in and spends a session for a list the first run reads anyway. Until a configuration has run, its fields take free text, matched at the session's start.
  • More settings per kind (fast mode, approval mode): deferred; the mode is Mission Control's to set (a contained Codex runs with full access), and nothing asks for fast mode yet.
  • Leaving an unmatched effort to the runtime's default: rejected; a run that silently thinks less than asked is worse than one that fails naming what is offered, as a model already does.

Consequences​

  • The effort follows the model. The runtime lists efforts for the model the session is on, so Mission Control sets the effort after the model, and a model without an effort setting fails a run that asks for one.
  • What is offered is learned, not known. A configuration shows choices after its first session; the role editor shows, per kind, what the organization's configurations of that kind have offered. A value no longer offered stays shown as it is, and fails the next run that uses it.
  • Revisions from before keep their meaning: a role revision with a kind and a model restores as that kind's model.
  • Supersedes the part of ADR 0019 where a role's model needs a required kind.