Agents and runners configuration
Agent launch, completion, capacity, restart, and process-scope settings.
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.
agent_auto_restart
| Config key |
Type |
Default |
Allowed values |
Description |
agent_auto_restart |
object |
{…} (6 keys; values below) |
— |
Controls recovery of agents interrupted by a live update, including quiescence, retry, and storm limits. |
agent_auto_restart.enabled |
boolean |
true |
— |
Master kill switch for automatic update-skew restarts. False disables every automatic path; pending failures are re-surfaced loudly. |
agent_auto_restart.quiescence_seconds |
number |
30 |
— |
Seconds the managed code tree must stay quiet before the healer relaunches anything. |
agent_auto_restart.max_defer_seconds |
number |
1800 |
— |
Maximum age of a deferred ledger record before it is declined instead of re-attempted. |
agent_auto_restart.pending_resurface_seconds |
number |
600 |
— |
Age after which a pending failure with no ledger record is re-surfaced loudly. |
agent_auto_restart.storm_max_per_episode |
integer |
12 |
— |
Maximum automatic launches per update episode before the storm breaker pauses the feature. |
agent_auto_restart.storm_max_per_30m |
integer |
20 |
— |
Maximum automatic launches per rolling 30 minutes before the storm breaker pauses the feature. |
agent_hold_confirm_capture_threshold
| Config key |
Type |
Default |
Allowed values |
Description |
agent_hold_confirm_capture_threshold |
integer |
10 |
— |
Pending-capture count above which a launch preview's %hold needs interactive confirmation. |
agent_hold_default_ttl
| Config key |
Type |
Default |
Allowed values |
Description |
agent_hold_default_ttl |
string |
"2h" |
— |
TTL applied to sase agent hold create/run when --ttl is omitted. Bare seconds or a number suffixed with s/m/h. |
agent_hold_max_ttl
| Config key |
Type |
Default |
Allowed values |
Description |
agent_hold_max_ttl |
string |
"12h" |
— |
Maximum TTL accepted by sase agent hold create/run --ttl. Same duration syntax as agent_hold_default_ttl. |
agent_scope_teardown
| Config key |
Type |
Default |
Allowed values |
Description |
agent_scope_teardown |
object |
{enabled, term_grace_seconds, reaper_min_scope_age_seconds, spare_process_patterns} (values below) |
— |
Sweeps leaked processes from agent-owned scopes at runner exit and reaps abandoned scopes. |
agent_scope_teardown.enabled |
boolean |
true |
— |
Whether the runner sweeps leaked processes from its own sase-agent scope at exit and between in-process successor turns. |
agent_scope_teardown.term_grace_seconds |
number |
3 |
— |
Grace between SIGTERM and SIGKILL when sweeping leaked scope processes. |
agent_scope_teardown.reaper_min_scope_age_seconds |
number |
120 |
— |
Minimum scope age before the orphaned-scope reaper may sweep it. |
agent_scope_teardown.spare_process_patterns |
array |
["^ssh-agent$","^gpg-agent$","^tmux: server$","^ssh: .*\\[mux\\]$"] |
— |
Regex patterns (re.search) matching shared daemons the sweep never kills. |
agent_scope_teardown.spare_process_patterns[] |
string |
not set |
— |
— |
autonomy
| Config key |
Type |
Default |
Allowed values |
Description |
autonomy |
object |
{roles} (values below) |
— |
Autonomy profile each generated worker role launches with. |
autonomy.roles |
object |
{epic_phase, epic_land} (values below) |
— |
Worker role to autonomy profile mapping. |
autonomy.roles.epic_phase |
string |
"standard" |
"manual", "standard", "tale", "epic" |
Autonomy profile for epic phase agents launched by sase bead work / epic plan approval. E3 will widen values to config profile names. |
autonomy.roles.epic_land |
string |
"standard" |
"manual", "standard", "tale", "epic" |
Autonomy profile for epic land agents. E3 will widen values to config profile names. |
finalizers
| Config key |
Type |
Default |
Allowed values |
Description |
finalizers |
object |
{defaults, required, instances} (values below) |
— |
Host-owned finalizer instances selected for SASE agent completion. |
finalizers.defaults |
array |
["commit"] |
— |
Default finalizer instance IDs selected when no %final directive overrides them. |
finalizers.defaults[] |
string |
not set |
— |
— |
finalizers.required |
array |
[] |
— |
Finalizer instance IDs that cannot be removed by %final. |
finalizers.required[] |
string |
not set |
— |
— |
finalizers.instances |
object |
{commit} (values below) |
— |
Configured finalizer instances keyed by lowercase slug. |
finalizers.instances.<key> |
object |
not set |
— |
— |
finalizers.instances.<key>.use |
string |
not set |
— |
Provider reference such as builtin@commit or distribution@provider. |
finalizers.instances.<key>.after |
array |
[] |
— |
Finalizer instances that must run before this instance. |
finalizers.instances.<key>.after[] |
string |
not set |
— |
— |
finalizers.instances.<key>.max_attempts |
integer |
1 |
— |
Maximum executor attempts for this finalizer. |
finalizers.instances.<key>.refusal |
string |
"fail" |
"fail", "defer" |
Policy for an upheld deferral: 'fail' ends the turn, 'defer' completes the run with a disclosed dirty tree. |
finalizers.instances.<key>.config |
object |
{} |
— |
Provider-specific trusted configuration. |
max_agent_pipe_chain
| Config key |
Type |
Default |
Allowed values |
Description |
max_agent_pipe_chain |
integer |
8 |
— |
Maximum number of sase pipe hops in one session chain. The original agent is depth 0; each successful pipe increments depth by one and is refused when the next link would exceed this bound. |
max_running_agents
| Config key |
Type |
Default |
Allowed values |
Description |
max_running_agents |
integer |
10 |
— |
Host-wide runner-capacity budget. Normal launches claim 1.0 capacity unit; %queue(weight=...) / %q(w=...) may request non-negative finite weights (%q(w=0) adds no load). Serial sessions share one live claim, while independent clan members and parallel session members each hold their own claim. |
runner_slots
| Config key |
Type |
Default |
Allowed values |
Description |
runner_slots |
object |
{deference_seconds_per_step, deference_max_seconds} (values below) |
— |
Priority-based deference for runner-slot waiters, bounded by a maximum delay. |
runner_slots.deference_seconds_per_step |
integer |
3 |
— |
Seconds a waiter defers per priority step above the default priority of 10. |
runner_slots.deference_max_seconds |
integer |
60 |
— |
Maximum continuous-eligibility delay for a waiter with priority above the default. |
tmux_agent
| Config key |
Type |
Default |
Allowed values |
Description |
tmux_agent |
object |
{…} (6 keys; values below) |
— |
Configuration for launching interactive agent CLIs in a new tmux window |
tmux_agent.window_name |
string |
"ai" |
— |
Base tmux window name. The first window is this name; later ones get a numeric suffix (ai, ai2, ai3, ...). |
tmux_agent.bypass_permissions |
boolean |
true |
— |
Pass each agent CLI's approval-bypass flags. Per-provider overrides win. |
tmux_agent.effort |
string |
"" |
"", "off", "none", "minimal", "low", "medium", "high", "xhigh", "max" |
Reasoning effort applied to launches. Empty follows llm_provider.default_effort; "off" passes no effort flags at all. |
tmux_agent.clear_screen |
boolean |
true |
— |
Run clear in the new window before starting the CLI. |
tmux_agent.after_close_command |
string |
"" |
— |
Optional shell command run after an agent CLI window closes, alongside SASE's own window renumbering. Empty means nothing extra runs. |
tmux_agent.providers |
object |
{} |
— |
Per-provider overrides, keyed by registered provider name. |
tmux_agent.providers.<key> |
object |
not set |
— |
Overrides for one registered agent-CLI provider. |
tmux_agent.providers.<key>.enabled |
boolean |
true |
— |
When false, hide this provider from both tmux Agent surfaces. |
tmux_agent.providers.<key>.key |
string |
not set |
— |
Override the single-key menu shortcut. Empty uses automatic assignment. |
tmux_agent.providers.<key>.model |
string |
"" |
— |
Pin a model for this provider, e.g. "gemini-3.7-flash-high". Empty leaves the CLI's default. |
tmux_agent.providers.<key>.effort |
string |
"" |
"", "off", "none", "minimal", "low", "medium", "high", "xhigh", "max" |
Per-provider reasoning effort. Empty inherits the section default; "off" disables effort flags. |
tmux_agent.providers.<key>.args |
array |
[] |
— |
Extra CLI args appended verbatim to the resolved launch command. |
tmux_agent.providers.<key>.args[] |
string |
not set |
— |
— |
tmux_agent.providers.<key>.env |
object |
{} |
— |
Environment variables set in the new tmux window. |
tmux_agent.providers.<key>.env.<key> |
string |
not set |
— |
— |
tmux_agent.providers.<key>.bypass_permissions |
boolean |
not set |
— |
Override the section-level approval-bypass default for this provider. Omit to inherit. |
_[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.