Skip to content

Automation and work tracking configuration

Beads, goals, gates, SDD, and related automation 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.

bead

Config key Type Default Allowed values Description
bead object {…} (5 keys; values below) — Configuration for the bead/issue-tracking subsystem
bead.big_epic_phase_threshold integer 5 — Minimum authored phase count that selects llm_provider.big_epic_lander_model for an epic without an explicit land model.
bead.attachments object {…} (8 keys; values below) — Bead note attachment policy: extra sensitive-path glob patterns, additive with the built-in policy.
bead.attachments.sensitive_patterns array [] — Extra glob patterns treated as sensitive by the bead note attachment authoring service. A note that references a matching path fails unless -S/--allow-sensitive is passed.
bead.attachments.sensitive_patterns[] string not set — —
bead.attachments.git_max_bytes integer 52428800 — Largest single attachment the git tier accepts, in bytes (50 MiB). Missing, malformed, or above 95 MiB fails open to the default.
bead.attachments.public_max_bytes integer 26214400 — Largest single attachment the public tier accepts, in bytes (25 MiB). Missing, malformed, or above 95 MiB fails open to the default.
bead.attachments.require_upload boolean false — When true, attachment bytes upload before the bead event is written; any upload failure aborts with nothing written and nothing queued.
bead.attachments.auto_fetch_max_bytes integer 26214400 — Largest single attachment fetched automatically by read/show, in bytes (25 MiB). Missing or malformed values fail open to the default; -d/--download lifts the cap for one invocation and attachment path always fetches.
bead.attachments.background_upload_min_bytes integer 67108864 — Objects at or above this size upload in the background (64 MiB). Missing or malformed values fail open to the default.
bead.attachments.local_cache_max_bytes integer 10737418240 — Local attachment cache budget in bytes (10 GiB). sase bead attachment prune evicts cached objects confirmed present in a shared store to fit under this budget. Missing or malformed values fail open to the default.
bead.attachments.large_store object | null null — Optional rclone large-object tier for objects above git_max_bytes. Null disables the tier.
bead.attachments.large_store.remote string not set — Rclone destination such as athena-sftp:attachments, a cloud remote, or a local path.
bead.attachments.large_store.max_bytes integer 2147483648 — Largest single attachment the large tier accepts, in bytes (2 GiB).
bead.show object {images} (values below) — Bead show image previews for sase bead show.
bead.show.images string "auto" "auto", "cells", "kitty", "never" Image previews for sase bead show: auto, cells, kitty, or never. read, JSON, and piped show never draw.
bead.task_triage object {min_plus_ones, stale_after_days, stale_cleanup_min_beads} (values below) — Volume controls for task-bead triage gates: the +1 bar a ready task bead needs before it earns a TaskTriage gate, and the staleness sweep for the sub-threshold remainder.
bead.task_triage.min_plus_ones integer 1 — +1 reports a ready task bead needs before bead_task_triage raises its TaskTriage gate. Applies to untyped legacy beads and to task types that declare no triage.min_plus_ones of their own; a typed bead's own bar always takes precedence. 0 restores the pre-threshold behavior of gating every such ready task bead.
bead.task_triage.stale_after_days integer 7 — Days after creation at which a still-sub-threshold ready task bead is considered stale and eligible for the cleanup gate.
bead.task_triage.stale_cleanup_min_beads integer 10 — Stale beads required before bead_stale_cleanup raises its gate. Below this count the job does nothing.
bead.push_after_commit boolean true — When true, run git push after sase bead work commits bead state (event streams; the issues.jsonl export is never committed). Push failures only warn; the local commit is preserved.
bead.task_types array not set — Project-declared task-type catalog entries: an override of an installed task type (via 'use') or a brand-new project-local task type.
bead.task_types[] object not set — One bead.task_types entry: either 'use' (override an installed task type's spec) or a full new task-type spec.
bead.task_types[].use string not set — Installed task type id to use as the base spec, qualified as <plugin>@<id> ('builtin' or an installed distribution name). Sibling keys deep-merge over the referenced spec.
bead.task_types[].schema_version integer not set 1 Task-type spec wire schema version; currently always 1.
bead.task_types[].task_type string not set — Immutable snake_case slug identifying this task type.
bead.task_types[].label string not set — Chip and picker label.
bead.task_types[].summary string not set — One-line summary inlined into every agent's core memory.
bead.task_types[].when_to_use string not set — Agent-facing guidance on when to file this task type, inlined into every agent's core memory.
bead.task_types[].create_refusal string not set — Optional copy shown after 'cannot be created by agents' when agent_creatable is false. Specs that omit it keep the when_to_use fallback.
bead.task_types[].glyph string not set — Optional single-terminal-cell glyph shown in chips and CLI cells.
bead.task_types[].accent_color string not set — Optional #RRGGBB accent color; a type without one is assigned a stable hash-derived color.
bead.task_types[].agent_creatable boolean true — Whether agents may file this task type through 'sase bead create'.
bead.task_types[].default_size string not set — Optional default --size for this task type; unset keeps sizing an intentional choice.
bead.task_types[].fields array not set — Declared field values this task type accepts.
bead.task_types[].fields[] object not set — —
bead.task_types[].fields[].name string not set — Snake_case field name, referenced by body_template placeholders.
bead.task_types[].fields[].label string not set — Optional human-readable field label.
bead.task_types[].fields[].type string not set "string", "enum", "integer", "date" —
bead.task_types[].fields[].required boolean false — —
bead.task_types[].fields[].role array not set — Non-empty subset of {data, template}; defaults to both.
bead.task_types[].fields[].role[] string not set "data", "template" —
bead.task_types[].fields[].help string not set — Optional field-level help text.
bead.task_types[].fields[].pattern string not set — Regex validator; string fields only.
bead.task_types[].fields[].max_length integer not set — Maximum character length; string fields only.
bead.task_types[].fields[].values array not set — Allowed values; required and non-empty for enum fields.
bead.task_types[].fields[].values[] string not set — —
bead.task_types[].fields[].minimum integer not set — Minimum value; integer fields only.
bead.task_types[].fields[].maximum integer not set — Maximum value; integer fields only.
bead.task_types[].body_template string not set — Optional Jinja2 template rendered below the bead description from field values with the 'template' role.
bead.task_types[].triage object not set — —
bead.task_types[].triage.min_plus_ones integer not set — Per-type +1 corroboration bar; 0 (the spec default) gates every ready task bead of this type.

gate

Config key Type Default Allowed values Description
gate object {turn} (values below) — Configuration for durable command-backed gates
gate.turn object {reclaim_grace_seconds} (values below) — Settings for processless gate-turn session members
gate.turn.reclaim_grace_seconds integer 3600 — Seconds after a turn gate's own deadline before reclaim force-settles the pending turn as lost.

goals

Config key Type Default Allowed values Description
goals object {} — Goal ledger resolution and publication policy (epic sase-1bu).
goals.visibility string "shared" "shared", "local" Goal ledger visibility: 'shared' publishes through the hosting sidecar's hidden clone, 'local' keeps the ledger machine-local and never publishes it.
goals.host_role string "beads" — Sidecar role whose repository hosts goals/.
goals.fetch_ttl_seconds number 60 — Background freshness fetch triggered by sase goal list.
goals.push_timeout_seconds number 20 — Bound on synchronous publish for goal writes.

sdd

Config key Type Default Allowed values Description
sdd object {bead_refresh, repo, bead_push_log_retention, push_after_commit} (values below) — Configuration for Structured Design Documents
sdd.bead_push_log_retention object {} — Age-plus-count retention for bead_push_logs sync logs, applied from the sidecar_auto_sync scheduler chop
sdd.bead_push_log_retention.max_age_days number 30 — Delete sync logs older than this many days once past the keep count. Non-positive disables the age predicate.
sdd.bead_push_log_retention.keep_count integer 200 — Newest sync logs always kept. Non-positive disables the count predicate.
sdd.bead_push_log_retention.min_interval_seconds number 3600 — Minimum seconds between retention passes.
sdd.bead_refresh object {} — Remote freshness policy for bead commands using sidecar stores
sdd.bead_refresh.mode string "background" "background", "blocking", "off" Selects remote sidecar bead-store refresh behavior: background starts a TTL-gated sync after commands, blocking pulls before commands, and off disables command-triggered refresh.
sdd.bead_refresh.ttl_seconds number 120 — Minimum age in seconds since the last successful remote integration before another background refresh worker is launched.
sdd.push_after_commit boolean | string "async" "async" Controls git push after SDD commits in separate_repo storage. true pushes synchronously, false skips push, and async starts a detached background push.
sdd.repo object {name} (values below) — Sidecar SDD repository options for providers that support separate_repo storage
sdd.repo.name string "" — Optional sidecar SDD repo override. Accepts a repo name or owner/repo; empty uses the provider convention.

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