Launch Control overrides¶
This page lists temporary overrides, persistent alias edits, and examples in sase TUI Launch Control.
Temporary overrides¶
Edit and Override open the shared model picker with an ALIASES group before the
provider-grouped concrete models. Alias rows show the exact @name token and its
current effective provider/model; filter by either @medium or medium, an alias kind
or description, or the displayed target. For persistent edits, the current alias and any
alias that would introduce a direct or transitive cycle remain visible but unavailable
with a concise reason. Custom... accepts a concrete model string, provider/model
path, or bare @alias reference in both flows and applies the same safety check to
free-form @alias values. Concrete model rows for hard-disabled providers are
omitted; soft-disabled providers stay in the picker (header labelled soft, rows
dimmed one step), priority providers are labeled priority, and priority backups are
labeled backup. Alias rows remain visible and show their current live fallback target.
Free-form explicit input is validated before submission and reports the same
disabled-provider diagnostic as a launch. In Edit, Custom... additionally accepts a
typed | pool or || fallback expression and opens prefilled with the alias's current
value, so changing one member of an existing selector does not mean retyping the whole
expression; Edit also offers a guided Pool / fallback... row next to Custom...
that builds a selector from the picker without typing | by hand (see
Persistent edits below). In Override, a typed pool or fallback is
refused outright with a message pointing at e — selectors are config-only and
overrides take a single target, so Override's Custom... never shows the
Pool / fallback... row.
Override continues from the picker to the duration picker (15m, 30m, 1h, 2h,
4h, Until cleared, or a custom duration like 45m, 1h30m, 90m). Press t in
the duration picker to choose Until a specific time. The focused time popup accepts
local forms such as 5pm, 5:30 PM, 17:30, 1730, today 5pm, tomorrow 9am, and
2026-07-12 09:00. An undated clock means its next occurrence (later today or
tomorrow); an explicit day/date must still be in the future.
The popup previews the resolved weekday/date, local time and abbreviation, configured
IANA timezone, and remaining duration before Enter writes anything. Daylight-saving gaps
are rejected; repeated fall-back times require an offset-qualified ISO value such as
2026-11-01T01:30-04:00. Invalid input stays focused with an inline explanation. Esc
goes back to the duration picker, where a second Esc cancels the override flow.
Overrides are per-alias and per-launch-setting, and independent:
- An override on
default modeldrives the no-%modellaunch default. It renders in a gold status-row pill asPROVIDER(model)[@<effort>] <time-left>— the model half of the launch-context cluster at the far right of each tab's status row. - An override on any built-in size alias or custom alias takes effect wherever that
alias is resolved. A size-specific phase or task override affects only that alias. An
override on a selector-valued alias — a
|load-balanced pool,||ordered fallback, or parenthesized(A | B) || Clast-resort, such as the shipped size-alias selectors (see the generated shipped size-alias defaults) — suspends that alias's own rotation/fallback for a single concrete target until the override expires or is cleared. - An override on
epic landerorbig epic landeraffects only epic land agents below, or at/above,bead.big_epic_phase_threshold, independently ofdefault modeland of each other.
Every non-default override (an alias, epic lander, or big epic lander) is surfaced
by the alias pill inside the labeled overrides: violet top-bar group: a single active
override renders as overrides: @<alias>[@<effort>] <time-left> or as
overrides: epic lander <time-left> / overrides: big epic lander <time-left>, and
several render as overrides: <first> +N, naming the alphabetically first overridden
alias or launch-setting label and counting the rest. That alias pill sits beside the
priority and disable pills when those are active. In both pills, lane color carries the
"override" meaning while the effort suffix and time use a recessive tone; ∞ means
until cleared. Hover the group for full target and expiry details, or click it to open
Launch Control.
When no override is active, the same status-row chip instead names the current launch
default — the smallest %model value that would pin this exact target (a bare model
name such as grok-4.7 when the model unambiguously names its provider, otherwise the
explicit codex/o3 form) plus the optional [@<effort>] suffix, with no background
accent — and stays live for the whole sase's TUI session. The label is toned with the
launch default's provider: the model name takes the provider's model hue (the same one
the model picker uses, for example Grok cyan, Claude amber, or Codex mint) and the
@<effort> suffix takes a recessive tone from the same hue family, so the two-tone
shape matches the override pills. Provider hue is the calm lane's identity axis, while
the override lanes keep their gold and violet accents for the override meaning. While
the default is still resolving (...) or unavailable, the pill keeps a neutral dim-cyan
tone rather than guessing a provider. A model alias is never used as the pill's subject,
since an alias may be a rotating pool rather than one concrete model. The optional
@<effort> suffix is the launch-effective default a no-%model / no-%effort prompt
will actually receive (alias-borne effort, a temporary default-effort override, or
llm_provider.default_effort); it is omitted when that value is unset. If
llm_provider.default_model (directly or through a referenced alias, such as a shipped
size-alias pool) resolves to a load-balanced | pool, the pill follows the pool's
round-robin cursor as it advances: a launch consumes one member, and within a few
seconds the pill flips to name whichever member runs next. For a cross-provider | pool
the pill's hue flips with it, so the color tells you which provider the next launch
will actually hit. It never resolves on the UI thread and never advances the cursor
itself — it only reflects state that a real launch already changed. Hover the pill for a
<alias> rotates across N models; PROVIDER(model) is next line whenever the default
routes through such a pool. The tooltip deliberately keeps the provider-qualified
PROVIDER(model) form: the pill is the width-constrained surface and stays compact, and
color is never the only carrier of the provider, so hovering is the authoritative
confirmation of which provider the launch default resolves to.
Overrides do not displace explicit launch intent: explicit prompt directives
(%model:codex/o3, %model:opencode/anthropic/claude-sonnet-4-5) and an explicit
provider_name argument always win, already-running agents keep their current
provider/model. A temporary hard provider disable is different: an explicit request
for a hard-disabled provider fails with a provider-and-expiry diagnostic rather than
silently switching providers. A soft disable never fails that explicit request.
Override state is persisted to ~/.sase/llm_override.json — shared across all sase
processes on the machine — and is best-effort self-cleaning: expired or malformed
entries are pruned on next read. Until cleared is a no-expiry mode — convenient, but
still a temporary state, not a permanent config edit. The temporary override is
independent of SASE_MODEL_TIER_OVERRIDE; a concrete override takes the full
provider/model path, while the tier override only applies when no concrete override is
active.
Delegated launches (plan coder follow-ups and sase bead work phase, task, and land
agents) route directly through the
built-in size aliases
configured under llm_provider.model_aliases.builtin, plus the
epic lander/big epic lander launch settings — there is no more role-alias
indirection through a separate default/smart/cheap/etc. lane. A phase or task
selects @xsmall, @small, @medium, @large, or @xlarge by its normalized size
directly; a phase or task without size metadata uses the @small fallback. Epic land
agents without an explicit land model use epic_lander_model (shipped @large) below
bead.big_epic_phase_threshold, or big_epic_lander_model (shipped @xlarge) at or
above it. Because epic lander and big epic lander are configured as raw alias
references, a temporary override on the alias they reference (@large and @xlarge by
default) cascades into their effective resolution; overriding epic lander or
big epic lander directly takes precedence over that nested reference. A temporary
override on a selector-valued built-in size alias — any shipped size-alias pool or
fallback (see the generated
shipped size-alias defaults) —
suspends only that alias's own rotation/fallback and does not cascade to any other alias
or launch setting.
Persistent edits¶
Edit and Reset change the alias's value in sase.yml itself, written through the
Rust-backed, source-preserving config-edit path (comments and key order are preserved).
The change is shown in a preview/confirm step before it is written, and after a
successful write the panel offers to commit and push it (y/n). With
use_chezmoi: true the edit targets the chezmoi source and the commit/push runs against
the chezmoi repo followed by chezmoi apply; when the target file is not in a git repo
the commit offer is skipped and the file is simply written. An active temporary override
visually "wins" the effective-target column even after a persistent edit; the state tag
distinguishes the configured value from the currently effective (overridden) one.
Selecting an alias during Edit stores the raw reference (for example, editing
epic lander to @xlarge), so it remains a dynamic link and follows future changes to
@xlarge. Selecting an alias during Override instead resolves it when the override is
written and stores that concrete provider/model snapshot together with the raw token;
later changes to the referenced alias do not change the active override. A canonical
trailing effort is snapshotted with the target and shown in the row, success
notification, and single-override pill (the gold status-row chip for a default model
override, the violet top-bar pill otherwise). A known suffix on an alias reference is
ignored for dependency/cycle checks but retained for the written value; unknown trailing
@token text is not treated as effort.
Builtin aliases edit under llm_provider.model_aliases.builtin.<name>. User aliases
under llm_provider.model_aliases.custom.<name> edit their model field and reset by
deleting the whole custom alias entry. The custom input also accepts a |-separated
load-balanced pool, a ||-separated ordered fallback, or a parenthesized (A | B) || C
last-resort. The editor rejects empty or unparenthesized mixed selectors and alias
references that would reach any nested selector before opening the write preview.
Choosing Pool / fallback... from the e picker opens a guided builder instead of
typing an expression by hand. It seeds its state from the alias's current value — an
existing | or || expression expands into its members and mode, a parenthesized
(A | B) || C value populates the pool plus last-resort tail, a single target becomes a
one-member list, and an empty value starts blank — and shows the live normalized
expression as members change. a adds a pool member through the same model picker and
effort ladder used elsewhere in the panel (its own Custom... accepts a bare model,
provider/model path, or @alias, with an optional trailing @effort); f adds a
last-resort candidate the same way; d removes the highlighted member; J / K
reorder it down and up without crossing the pool/tail boundary; E sets or clears that
member's effort; w / W raise and lower a pool member's weight and ignore last-resort
rows; t toggles between round-robin pool and ordered fallback, and refuses while a
last-resort tail is present; enter confirms and routes the composed expression to the
same preview/write path as a typed value; esc cancels back to the picker. As in the
top-level Edit picker, an alias reference that would reach another pool or fallback is
unselectable here. Confirm is blocked, with an inline reason, while the selector has
fewer than two pool members or the live validation line reports an error.
Examples¶
- Highlight
default model,o, pickcodex/o3, duration1h— launches with no%modeldirective use Codexo3for the next hour, then revert to the configured default. - Highlight
@medium,o, pick a model, thent, enter5pm— the preview resolves the next 5:00 PM in the configured timezone and the override expires at that exact instant. - Highlight
@small,o, pickclaude/opus, and chooseUntil cleared— small phases and tasks without an explicit model use CLAUDE(opus) until you clear it; the violet non-default pill appears in the top bar. - Highlight
@large,e, pickclaude/opus, and confirm — only large phases and tasks without an explicit model use that target, replacing the shipped pool (see the generated shipped size-alias defaults); other-sized phase/task routing is unchanged. - Highlight
@xlarge,e, pickclaude/opus, and confirm — xlarge phases and tasks use that target directly, andbig epic lander(left at its shipped@xlargereference) inherits the same change. - Leave
@xlargeimplicit — xlarge phases, tasks, and threshold-selected epic landers (which reference@xlargeby default) select the first available member of its fallback chain (see the generated shipped size-alias defaults). - Highlight
@xsmall,e, chooseCustom..., enterclaude/haiku@minimal | codex/gpt-4.1-mini@low, and confirm — xsmall phases and tasks round-robin across installed providers while the panel continues to show the next selection without consuming it. - Highlight
@small,e, chooseCustom..., enterclaude/haiku | codex/gpt-4.1-mini, and confirm — small phases and tasks round-robin across this independent pool without consuming the@xsmallcursor. - Highlight
@medium,e, chooseCustom..., enterclaude/haiku@minimal | codex/gpt-4o-mini, and confirm — medium phases and tasks round-robin across this independent pool without consuming the@xsmallor@smallcursor. - Press
t— open tmux Agent, thencor Enter on Claude Code to launch it in a newaiwindow;slaunches once without approval-bypass flags. - Press
p, highlightclaude,d, choose1h— new alias-backed launches route around Claude for the next hour, direct%model:claude/opuslaunches fail explicitly, and already-running Claude processes continue. - With
claudedisabled, an override on@mediumthat targetsclaude/opuspauses; the row shows the live fallback target until Claude is re-enabled or the disable expires. - Highlight
big epic lander,e, pick a model, and confirm — only threshold-selected epic landers use that persistent target; leaving it implicit inherits through its shipped@xlargereference, independently ofepic lander. - Highlight
big epic lander,e, filter for@large, select it, and confirm — the persistent value is the dynamic@largereference, not a copied concrete model. - Highlight
@medium, presso, select@xlarge, then choose1h— the override records the concrete provider/model to which@xlargeresolves at write time while retaining@xlargeas its raw input. - Highlight an alias or launch setting,
x— clear its temporary override;r— unset its configured value back to its implicit fallback.
See Temporary model overrides for the resolution order and state-file format.
Related¶
- TUI hub — all TUI reference pages.
- Launch Control — usage, effort, capacity, routing, drain, and tmux Agent.
- Provider routing — temporary overrides, disables, and priority.
_[project]: A sase project is a named unit of work registered with SASE. _[workspace]: A sase workspace is a numbered clone of a project's primary repo, managed by the workspace store and tracked in that project's registry.json. _[agent]: A sase agent is an agent session or a single agent that does not belong to a session. _[prompt]: A prompt is the text SASE hands to a provider to start an agent turn. _[macro]: A macro is a reusable prompt triggered with #name in agent prompts. _[Patch]: A Patch is SASE's local unit of change. _[bead]: A bead is one tracked work item in SASE's git-native issue tracker. _[plan]: A plan is a persisted, approved artifact recording the intent behind agent work. _[TUI]: The TUI is SASE's terminal interface for running agents and reviewing results. _[epic]: An epic is an executable multi-phase plan run with sase bead work. _[gate]: A sase gate is a durable, command-backed request for one user decision, created when work must pause for the user. _[monitor]: A sase monitor is a monitor turn that runs one long command under a detached supervisor, so the command outlives the agent that started it. *[stitch]: A stitch is the lightweight ordered change record inside a Patch's STITCHES: section.