Skip to content

LLM provider configuration

Provider selection, model defaults, and model execution policy.

Defaults come from the schema when declared, otherwise from the bundled YAML. An object with listed children is expanded below; {…} and […] summarize compound defaults. A dash means the schema has no finite allowed-value list.

llm_provider

Config key Type Default Allowed values Description
llm_provider object {…} (9 keys; values below) — Configuration for the LLM provider abstraction layer
llm_provider.provider string "" — Name of the LLM provider to use (e.g., 'agy', 'claude', 'codex'). Leave empty to autodetect an installed provider CLI.
llm_provider.default_effort string "" "", "none", "minimal", "low", "medium", "high", "xhigh", "max" Default reasoning-effort level applied to agent launches when a prompt does not request one via %effort or a %model:<model>@<effort> suffix. Leave empty for no override (let each provider use its own default). A configured level is best-effort: providers that cannot honor it skip it with a warning.
llm_provider.default_model string "@large" — Model expression used when a prompt has no %model directive. Values use the same grammar as %model and may reference built-in size aliases such as @large.
llm_provider.epic_lander_model string "@large" — Model expression used for epic land agents unless the plan sets an explicit land model.
llm_provider.big_epic_lander_model string "@xlarge" — Model expression used for threshold-selected big epic land agents unless the plan sets an explicit land model.
llm_provider.model_alias_history_limit integer 10 — Maximum runs shown per alias in the Launch settings agent-history panel.
llm_provider.model_tier_map object not set — Mapping from model tiers to specific model identifiers
llm_provider.model_tier_map.large string not set — Model identifier for the 'large' tier
llm_provider.model_tier_map.small string not set — Model identifier for the 'small' tier
llm_provider.model_aliases object not set — Model alias configuration. builtin contains overrides for SASE's five size aliases; custom contains user-defined aliases with required descriptions.
llm_provider.model_aliases.builtin object not set — Overrides for SASE's built-in size aliases: xsmall, small, medium, large, and xlarge. See src/sase/llm_provider/models.yml for the current shipped default of each alias. Values are bare known models, explicit provider/model targets, nested provider-local model paths, or '@<alias>' references; a reference may carry a trailing '@<effort>' that overrides the referenced alias's effort. Single-pipe values (A | B) form load-balanced round-robin pools; a pool member may be prefixed with a positive integer weight and a space (A | 3 B, weights 1-99) to favor that member. Double-pipe values (A || B) form ordered provider-availability fallbacks and cannot carry weights. Parenthesize a pool to attach a last-resort tail ((A | B) || C); unparenthesized mixing is still rejected. Every member uses the same grammar and may carry a trailing @<effort>.
llm_provider.model_aliases.builtin.<key> string not set — —
llm_provider.model_aliases.custom object not set — User-defined custom model aliases usable from %model:@<alias> / %m:@<alias>. Each custom alias must include both the target model and a short description shown in completions and Launch settings.
llm_provider.model_aliases.custom.<key> object not set — —
llm_provider.model_aliases.custom.<key>.model string not set — Model target using a bare model, provider/model, nested provider-local path, or @<alias>. Single-pipe values (A | B) form load-balanced round-robin pools; a pool member may be prefixed with a positive integer weight and a space (A | 3 B, weights 1-99) to favor that member. Double-pipe values (A || B) form ordered provider-availability fallbacks and cannot carry weights. Parenthesize a pool to attach a last-resort tail ((A | B) || C); unparenthesized mixing is still rejected. Every member uses the same grammar and may carry a trailing @<effort>.
llm_provider.model_aliases.custom.<key>.description string not set — —
llm_provider.model_aliases.custom.<key>.bucket string not set — Optional display-only bucket in sase's TUI Launch settings; alias resolution remains flat and unchanged.
llm_provider.model_aliases.buckets object not set — Optional display-only Launch settings bucket metadata for buckets referenced by custom aliases.
llm_provider.model_aliases.buckets.<key> object not set — —
llm_provider.model_aliases.buckets.<key>.description string not set — —
llm_provider.continuation_budget object {…} (7 keys; values below) — Continuation preflight budget settings for monitor successor prompts. Environment variables documented in docs/reference/environment-variables.md override these values.
llm_provider.continuation_budget.context_limit_bytes integer 800000 — Maximum provider context budget, in UTF-8 bytes, before reserves are subtracted.
llm_provider.continuation_budget.transport_limit_bytes integer not set — Maximum prompt bytes that can safely pass through the provider transport.
llm_provider.continuation_budget.checkpoint_threshold_bytes integer not set — Prompt-size threshold at which checkpoint-backed reductions are considered.
llm_provider.continuation_budget.instruction_reserve_bytes integer 0 — Bytes reserved for provider-side system instructions or command framing.
llm_provider.continuation_budget.tool_reserve_bytes integer 0 — Bytes reserved for provider tool definitions or tool-call framing.
llm_provider.continuation_budget.output_reserve_bytes integer 0 — Bytes reserved for the model's response.
llm_provider.continuation_budget.reasoning_reserve_bytes integer 0 — Bytes reserved for hidden reasoning or provider-specific overhead.
llm_provider.continuation_budget.estimate_uncertain boolean true — Whether the budget request marks byte estimates as uncertain when exact provider accounting is unavailable.
llm_provider.continuation_budget.providers object {agy} (values below) — Per-provider continuation budget overrides. Keys are registered provider names.
llm_provider.continuation_budget.providers.<key> object not set — —
llm_provider.continuation_budget.providers.<key>.context_limit_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.transport_limit_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.checkpoint_threshold_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.instruction_reserve_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.tool_reserve_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.output_reserve_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.reasoning_reserve_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.estimate_uncertain boolean not set — —
llm_provider.continuation_budget.providers.<key>.models object not set — Per-model continuation budget overrides for this provider. Keys are provider-resolved model names.
llm_provider.continuation_budget.providers.<key>.models.<key> object not set — —
llm_provider.continuation_budget.providers.<key>.models.<key>.context_limit_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.models.<key>.transport_limit_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.models.<key>.checkpoint_threshold_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.models.<key>.instruction_reserve_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.models.<key>.tool_reserve_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.models.<key>.output_reserve_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.models.<key>.reasoning_reserve_bytes integer not set — —
llm_provider.continuation_budget.providers.<key>.models.<key>.estimate_uncertain boolean not set — —
llm_provider.retry object {claude, codex, sase} (values below) — Per-provider retry configuration. Keys are provider names (e.g., 'agy', 'claude', 'codex').
llm_provider.retry.<key> object not set — —
llm_provider.retry.<key>.max_retries integer 0 — Maximum number of retries on matching errors
llm_provider.retry.<key>.error_patterns array [] — Substrings to match against error output (case-insensitive)
llm_provider.retry.<key>.error_patterns[] string not set — —
llm_provider.retry.<key>.wait_times array [30] — Wait times in seconds for each retry attempt. Last value is reused if retries exceed list length.
llm_provider.retry.<key>.wait_times[] integer not set — —
llm_provider.retry.<key>.fallback_model string not set — Model to fall back to after all retries are exhausted
llm_provider.retry.<key>.continuation_prompt string not set — Prompt prefix applied when continuing after a retry
llm_provider.retry.<key>.preserve_workspace boolean false — Preserve the existing workspace when retrying
llm_provider.retry.<key>.spawn_new_agent boolean false — Retry in a fresh detached agent process
llm_provider.usage_limit object not set — Usage-limit detection and automatic provider disable configuration. Unlike 'retry', this section has genuine global scalars (enabled, disable_seconds, min/max_disable_seconds, honor_reset_hint, notify) alongside per-provider pattern overrides nested under 'providers', because every provider's disable duration and reset-hint handling share the same defaults unless overridden.
llm_provider.usage_limit.enabled boolean true — Enable automatic provider disable on detected usage-limit errors.
llm_provider.usage_limit.disable_seconds integer 86400 — Fallback disable duration in seconds used when no reset hint is available or honored.
llm_provider.usage_limit.min_disable_seconds integer 60 — Minimum disable duration in seconds; clamps any duration derived from a parsed reset hint.
llm_provider.usage_limit.max_disable_seconds integer 604800 — Maximum disable duration in seconds; clamps any duration derived from a parsed reset hint.
llm_provider.usage_limit.honor_reset_hint boolean true — Prefer a reset time reported by the provider itself over the flat disable_seconds fallback. Parses a bare or zoned clock time ('resets at 8pm', 'resets 6:38pm (America/New_York)'), an absolute date ('try again at Aug 20th, 2026 6:38 AM', 'resets Aug 22, 8pm (America/New_York)', 'resets 2026-08-20 06:38 UTC'), or a relative duration ('try again in 2 hours').
llm_provider.usage_limit.honor_usage_windows boolean true — When no reset hint is found, fall back to a corroborated reset instant read from the collected usage-window data (the collectors behind 'usage_metrics') before using the flat disable_seconds fallback.
llm_provider.usage_limit.notify boolean true — Send a notification when a provider is automatically disabled.
llm_provider.usage_limit.relaunch boolean true — Submit a durable 'sase agent drain' proc when a usage-limit disable hard-disables a provider, relaunching the agents it stranded and folding the drain report into the notify notification.
llm_provider.usage_limit.relaunch_limit integer 20 — Most agents an automatic usage-limit drain relaunches (the drain's --limit).
llm_provider.usage_limit.providers object not set — Per-provider usage-limit overrides. Keys are provider names (e.g., 'agy', 'claude', 'codex').
llm_provider.usage_limit.providers.<key> object not set — —
llm_provider.usage_limit.providers.<key>.patterns array [] — Substrings to match against error output (case- and apostrophe-insensitive). Added to the built-in patterns unless replace_patterns is true.
llm_provider.usage_limit.providers.<key>.patterns[] string not set — —
llm_provider.usage_limit.providers.<key>.exclude_patterns array [] — Substrings that, when present anywhere in the error output, prevent a match even if a pattern also matches. Always additive to the built-ins.
llm_provider.usage_limit.providers.<key>.exclude_patterns[] string not set — —
llm_provider.usage_limit.providers.<key>.disable_seconds integer | null not set — Per-provider override for the fallback disable duration. Null falls back to the global disable_seconds.
llm_provider.usage_limit.providers.<key>.honor_reset_hint boolean | null not set — Per-provider override for honoring the provider's own reset hint. Null falls back to the global honor_reset_hint.
llm_provider.usage_limit.providers.<key>.honor_usage_windows boolean | null not set — Per-provider override for the usage-window disable-expiry fallback. Null falls back to the global honor_usage_windows.
llm_provider.usage_limit.providers.<key>.replace_patterns boolean false — When true, 'patterns' replaces the built-in patterns entirely instead of extending them.
llm_provider.usage_metrics object {…} (7 keys; values below) — Subscription-capacity collection settings. Distinct from usage_limit auto-disable. "enabled" is the durable user preference for probes and passive observation writes.
llm_provider.usage_metrics.enabled boolean true — Collect subscription usage. False stops probes, passive writes, scheduled requests, and attention while inspection can still explain the opt-out.
llm_provider.usage_metrics.refresh_seconds number 300 — Background refresh cadence in seconds. Must be finite and at least 60.
llm_provider.usage_metrics.active_refresh_seconds number 120 — Hot refresh cadence in seconds for providers in active use. Must be finite and at least 60; values above refresh_seconds are capped at it.
llm_provider.usage_metrics.warn_percent number 75 — Percentage used that classifies a window as low. Must satisfy 0 <= warn_percent < critical_percent <= 100. UI copy uses percentage left.
llm_provider.usage_metrics.critical_percent number 90 — Percentage used that classifies a window as very low. Must satisfy 0 <= warn_percent < critical_percent <= 100.
llm_provider.usage_metrics.indicator object {enabled, default, weekly_all, providers} (values below) — Top-bar usage-window display preferences. Display selection is independent from collection and from warn/critical attention thresholds.
llm_provider.usage_metrics.indicator.enabled boolean true — Show usage-window indicators in sase's TUI. False hides display entries while leaving collection and the Providers · Usage view active.
llm_provider.usage_metrics.indicator.default string | object {below_remaining_percent} (values below) "always", "never" Fallback display policy for windows that do not match a provider/window override or the weekly_all default.
llm_provider.usage_metrics.indicator.default.below_remaining_percent number 20 — Select only windows with remaining capacity strictly below this finite percentage. Use always to include exactly full windows.
llm_provider.usage_metrics.indicator.weekly_all string | object "always" "always", "never" Display policy for positively classified weekly all-model windows after exact and provider defaults.
llm_provider.usage_metrics.indicator.weekly_all.below_remaining_percent number not set — Select only windows with remaining capacity strictly below this finite percentage. Use always to include exactly full windows.
llm_provider.usage_metrics.indicator.providers object {muse} (values below) — Per-provider display overrides. Keys are provider IDs. This map is separate from the sibling collection providers map.
llm_provider.usage_metrics.indicator.providers.<key> object not set — Per-provider usage-window display overrides. Window keys are exact provider-reported IDs from sase usage list --json.
llm_provider.usage_metrics.indicator.providers.<key>.default string | object not set "always", "never" Default display policy for this provider's windows.
llm_provider.usage_metrics.indicator.providers.<key>.default.below_remaining_percent number not set — Select only windows with remaining capacity strictly below this finite percentage. Use always to include exactly full windows.
llm_provider.usage_metrics.indicator.providers.<key>.windows object not set — Exact window-key display overrides for this provider.
llm_provider.usage_metrics.indicator.providers.<key>.windows.<key> string | object not set "always", "never" Usage-window display selection policy. String forms are always or never. The threshold form selects windows whose remaining percentage is strictly below the configured number.
llm_provider.usage_metrics.indicator.providers.<key>.windows.<key>.below_remaining_percent number not set — Select only windows with remaining capacity strictly below this finite percentage. Use always to include exactly full windows.
llm_provider.usage_metrics.providers object {} — Optional per-provider collection overrides. Keys are registered provider names; the generic schema does not hard-code the initial three providers.
llm_provider.usage_metrics.providers.<key> object not set — —
llm_provider.usage_metrics.providers.<key>.enabled boolean not set — Per-provider collection override. When omitted, the provider inherits llm_provider.usage_metrics.enabled.

_[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.