SASE Admin Center¶
Navigation, sections, and editor behavior in the SASE Admin Center.
SASE Admin Center (interactive editor)¶
Press # in the sase tui TUI to open SASE Admin Center. The first press always
starts on its lightweight home page, where the working sections—Config, Logs,
Machines, Procs, Projects, Statistics, Tools, and Updates—are
introduced without loading their data. Config's nested catalog is alphabetized: All,
Flags, Holds, Launch, Memory, Snippets, and Macros, labeled 01
through 07. While home is visible, press # again to resume the last section that was
successfully active in this sase's TUI process. Before the first section visit, the
repeated key leaves home unchanged and constructs no pane. Press 1–8 or click the
numbered tab strip to enter a section: 1 Config, 2 Logs, 3 Machines, 4 Procs,
5 Projects, 6 Statistics, 7 Tools, and 8 Updates. From home, Tab enters Config
and Shift+Tab enters Updates; within a working section they wrap across the same tabs.
Pane-local [ / ] keys switch sub-tabs or views where the active pane provides them,
including Config's nested catalog.
Inside a working section, the same opener key takes on a second meaning: it jumps to the section you were in immediately before the current one, and pressing it again toggles back—exactly two sections remembered, like a two-slot alternate rather than an unbounded history stack. A color-coded footer along the bottom of each working section names the jump target (or explains that none exists yet) and is itself clickable.
Each pane is constructed only on first entry and is then reused until the Admin Center
closes, preserving filters, selection, and scroll state while avoiding unrelated config,
project, machine, log, statistics, proc, update, and macro work on open. Direct commands
such as Open logs panel, Open procs panel, Open statistics, and update
actions still open their requested pane immediately and make that successfully mounted
section the next resume target. Closing and reopening with one # still returns to
home; only a second press while home is visible resumes. The top-level resume target and
alternate are persisted machine-locally and survive sase's TUI process restarts. Entry
bookmarks for Config, Logs, Machines, Projects, Procs, Tools, and Updates last only for
the current sase's TUI process. They restore by stable identity, along with minimal
scope or sub-tab context when needed, but reset when sase's TUI restarts. Filters,
marks, scroll positions, loaded data, pane instances, Statistics controls, and other
pane-local state are never carried between modal lifetimes.
Config tab¶
The Config tab answers four questions for every field — what value is effective, why (its provenance), where an edit will go, and whether it validates:
The nested Config catalog is alphabetized: 01 All, 02 Flags, 03 Holds, 04
Launch, 05 Memory, 06 Snippets, and 07 Macros. With the bundled prefix,
press 0 and then 1-7 to open those children. Remap the prefix with
ace.keymaps.config.select_subtab without changing the visible default badges.
Holds lists the active agent holds with their selectors
and expiry. j / k move, d releases the highlighted hold immediately, and r
reloads the list. See agent hold limits for the TTL settings.
Flags is a keyboard-first control surface for every code-owned SASE feature flag. It
does not edit ~/.config/sase/sase.yml, overlays, project-local sase.yml, or chezmoi
source. Enable and disable write a SASE-owned machine-state file under SASE_HOME
(normally ~/.sase/feature_flags.json) and then restart sase's TUI and the service host
so new processes see the saved value. See feature_flags for
precedence, corruption behavior, and the CLI equivalent, and the
Config Flags pane for layout, keys, confirmation, and
self-disable recovery.
- Browse / inspect (read-only): a source rail lists each config layer with
loaded/missing/invalid/read-only badges; the field tree is generated from the schema
(
/filters,:jumps to a dotted path,mshows only modified fields,rrefreshes). In the tree,j/kmove through visible rows and wrap at the ends, while Down / Up use clamped navigation.'paints entry hints over the currently visible rows, and a hint key moves the cursor exactly asj/kwould, detail panel and selection bookmark included. Hints label nodes in place, so entering and leaving jump mode preserves whatever you collapsed; collapsed children are not hinted and cannot be jumped to. While hints are up they own the keyboard:Esc— or any key that is neither a hint nor the first character of one — leaves jump mode without moving the cursor, so reach for/,m,r, or:after exiting rather than during a jump (in a tree large enough for those letters to be hints, they jump instead). A rebuild of the tree that changes which fields are listed drops the hints and the jump-back history with them.'stays typable while the filter or path input holds focus. The detail pane shows the type, default, effective value, and the full provenance stack with the winning layer marked. Structured values (object maps and arrays of objects, such asaxe.routinesorrepos) render as a multi-line, syntax-highlighted YAML block instead of a one-line JSON blob, while scalars and short flat lists keep their compact inline form. - Edit (
↵oreon a field): a typed editor is generated from the schema — a toggle for booleans, an option cycle for enums, validated inputs for numbers and strings, a line editor for string lists, and a raw-YAML escape hatch for complex shapes. Pick the write scope (ctrl+tcycles user base / overlays / a selected local file;ctrl+ncreates a new overlay), or reset a field to its default (ctrl+r, which deletes the key from the chosen scope). A banner states the list-merge consequence (replace vs. append) for the chosen scope. - Preview / write (
ctrl+s): before anything is written you see the exact per-file text diff, the resulting effective merged value, and schema validation of the candidate config. The write is source-preserving (comments, key order, and quoting are kept) and is remapped to the chezmoi source tree whenuse_chezmoiis enabled.
For a chezmoi-remapped write, sase's TUI first applies the changed target; an apply
failure leaves the source edit in place and keeps the editor open. After a successful
write and any targeted apply, sase's TUI checks the file that was actually changed. If
that file is dirty inside a git repository, it offers to commit and push the change
as a tracked proc. Confirming stages that config file, commits the repository's current
index, pulls with rebase, and pushes; pre-existing staged changes are therefore included
in the same commit. The repository is discovered from the written file, so a remapped
edit uses the chezmoi source repository. When use_chezmoi is enabled, a successful
push is followed by a full chezmoi apply. Each failure stops the sequence at that
step, without undoing the written config change. Skipping the offer—or editing a file
outside git—also leaves the successful write in place. The
Launch Control uses the same workflow for persistent alias
edits, while its fixed Ctrl+E binding previews and writes
llm_provider.default_effort specifically to the user-base layer. Ctrl+E is local to
Launch Control modal (including bucket rows), not a configurable leader-key entry.
Choosing Provider default writes the empty schema sentinel; a currently active temporary
effort override remains effective until expiry or clear.
The Config tab edits the canonical repos.linked
mapping; its editor has no one-key migration action. Hand-edited config can still use the
linked_repos and sibling_repos aliases. See
Configuration migration notes.
SASE Admin Center never writes without showing the diff and validation first, and never edits a built-in or plugin default (those layers are read-only).
Logs tab¶
The Logs tab lists each log source and a colorized tail of the selected file. After a
launch or job failure, sase's TUI toasts a leader chord (,L by default) that opens
this tab on that failure's source, highlights the matching header line, and scrolls the
detail pane to it. The jump target is session-scoped: it is the most recent error toast
in this sase's TUI process, not a durable pointer, and it degrades to the ordinary tail
with an in-pane notice if the entry has rotated out of the log.
Machines tab¶
The Machines tab is the controller's local fleet inventory. It always includes the local
controller and adds every enrolled remote alias, with columns for enrollment state,
health, capacity, last observation, and endpoint. The local row shows configured runner
capacity; every remote row shows not reported because the status response does not
include capacity. Opening or reloading the tab reads local inventory only; it never
contacts every gateway implicitly. A remote therefore starts with state not checked
and health unknown until you press s for one bounded, authenticated hello.
Use / to filter, j / k to move, U to reload inventory, and Enter to close
Admin Center and open Agents filtered to machine:<alias> (machine:local for the
local row, whose Alias column instead shows the configured machine name). c shows the
persistent enrollment flow. For a selected remote, r, R, and x show repair,
rename, and removal guidance, while y copies the displayed command; these guidance
actions do not mutate machine state by themselves. See the
Remote Dispatch Runbook for enrollment and credential handling.
Projects tab¶
The Projects tab is an inventory and lifecycle surface with three clickable sub-tabs:
Projects · Repos · Workspaces. [ / ] cycle those sub-tabs, while Tab /
Shift+Tab switch the Admin Center's main tabs.
- Projects lists true projects—projects backed by their own main ProjectSpec,
excluding
homeand internal linked-repo backing records. Enabled and disabled rows appear together with VCS kind, claim, workspace, repo, and warning counts. Pressnto open the New Project wizard, or choose Projects: New project… from the command palette.a/denable or disable,i/Iinitialize the marked or highlighted set or every enabled project,r/wcross-navigate to the selected project's inventories, and the established mark, alias, edit, force, and confirmed-delete actions remain available. - Repos lists primary, sidecar, linked, and opened external repos for enabled
projects by default. It reports checkout presence, source/config metadata,
auto_clone, environment names, and SDD storage mode. - Workspaces joins registry entries with active claims, PID liveness, pins,
last-used timestamps, TTL staleness, and checkout presence. Missing checkouts point to
sase workspace repair.
On Repos and Workspaces, p opens a shared project picker. Choosing a disabled project
explicitly reveals its rows; Esc clears the project scope, / text-filters within it,
and R refreshes the off-thread cached inventory.
Statistics tab¶
The Statistics tab aggregates durable agent run and activity records over a selectable time range. Its eight numbered views are 01 Overview, 02 Runners, 03 Projects, 04 Providers, 05 Activity, 06 Macros, 07 Plans & Questions, and 08 Perf. The Runners view uses today's effective global limit—including a temporary override—as present-day context, never as historical configuration. The Projects view can group by project, by Patch, or as a project-to-Patch drilldown. Macros can group by usage, model, project, or co-usage. Perf combines TUI startup and responsiveness logs with telemetry latency and reliability; its grouping cycles through subsystem, provider, and workflow. A pane-wide project filter lets you apply the same scope to the run-backed views, but Perf is global and marks the project chip not applied.
The pane loads only while visible, refreshes every 30 seconds, and performs its queries
off the UI thread. Use [ / ] to change views or press 0 followed by 1–8 to
select the view displayed as 01 through 08. Use t/T or c to choose a preset or
custom range, g to change the Projects, Macros, or Perf grouping, p/P to cycle the
project filter forward or backward, and r to refresh immediately. Keyed scope chips
keep the effective range, grouping, and project visible; the Group chip appears only
in those three groupable views and names the selected dimension there. Project scopes
use configured display names while retaining canonical keys internally. First open seeds
the current project when ace.current_project.seed_filters is on; p / P can always
cycle away from that seed. The cycle order is All projects, followed by projects
ranked by run count in the most recently loaded unfiltered result, and then wraps: p
moves forward and P backward. Return to All after changing the range to rebuild
that list for the new range. If a selected project produces an empty result, either
project-cycle key clears directly to All projects. Every populated view includes a
compact metric legend, ? opens the complete glossary and current scope, and
empty/error states show the effective keys for widening, clearing, or retrying. The
Overview Agents Run, Success Rate, and Commits tiles open Projects, while Plans Proposed
and Questions open Plans & Questions. The plan and question tiles remain all-project
values even when a project is selected; see
Telemetry: Admin Center Statistics tab for
the view contents, range syntax, and project-filter caveats, and
Reading the Admin Center Perf view
for Perf data sources and retention.
Tools tab¶
Press 7 in Admin Center to inspect recorded command runs, grouped failure signatures,
and the configured tool catalog. The pane has Runs, Failures, and Catalog
views, with project filters and links to output and diagnostics. See the
Tools tab guide and Named Tools and ToolRuns.
Updates tab¶
The Updates tab keeps SASE, its plugins, and its supported agent CLIs current without leaving the TUI, as one master/detail inventory rather than separate tabs per source. Every SASE core package, plugin, and registered agent CLI is a row, grouped into SASE, Plugins · Built-in, Plugins · Community, and Agent CLIs sections. The list always shows every row (installed or not), with updatable rows first in each section.
- SASE rows show the installed and latest versions of
saseandsase-core; the highlighted row's detail includes its incoming commits. - Plugins rows bring the full
sase pluginexperience into the TUI: filter the catalog, inspect a plugin, and install, update, uninstall, or switch install mode. A plugin that declares commands shows a❯ sase <name>chip on the row and in the detail panel. Install, update, and uninstall confirmations can preview declarations that would be added or removed, when the metadata is known. Update comparisons cover single-plugin managed updates; collision warnings appear on single-plugin install confirmations. The completion toast labels net command-name additionsnew commandand removalsremoved. See Where a command shows up. - Agent CLIs rows are a provider-colored master/detail browser for Claude Code,
Codex CLI, OpenCode, Qwen Code, Antigravity, Muse Code, and Grok Build. Rows show
installed → latest versions, install method,
↑availability, and update marks. Missing CLIs that SASE can install showlatest v…with an[npm]or[script]badge (others show[manual]) and install withi(orSpace/Imarks for a bulk set, mixed with plugin marks in one combined flow). Details show the resolved executable, exact automatic or manual update command, skip reason, canonical vendor docs URL, and the last result; missing CLIs instead show the install route, exact command or script URL, target, and the↓ i install now · Space mark · * mark all missingcall to action. Every install previews first — exact command, target, and PATH status, plus the full SHA-256 for a script — runs without a shell (a script CLI runs the previewed bytes; an npm CLI runsnpm install -g <package>), and stays visible afterwards (row, detail, toast, and history), including "installed but not on PATH" with the exactexportline.Htoggles the agent-CLI run history between the highlighted CLI and every CLI.
The always-visible header above the list shows either the all-current banner or a digest (update counts per source, cache age, install mode, and an offline badge) plus a line per failed source; it never renders "all current" while any enabled source is unknown or failed.
Opening the tab never refreshes from the network. The first open in an ACE session
builds the inventory from local caches the automatic update check maintains (plugin
catalog, latest-version caches, editable checkouts' last-fetched upstream refs), without
PyPI/GitHub/npm or git fetch. Later opens reuse the in-memory inventory instantly;
when the automatic check has published newer results, the open re-reads those caches
instead. r refreshes everything from the network, and checked … ago is the age of
the last network check.
The Plugins rows stay visually consistent with the CLI by reusing the same catalog
loader and Rich renderables. They are split into Built-in and Community
(third-party, shown with a warning) sections; status glyphs match the CLI exactly: ●
installed, ○ available, ↑ update available. Editable / dev installs (both core
packages and plugins) carry a lowercase dev marker and are compared against their git
upstream instead of PyPI. Update actions route editable packages through the
dev-update planner and managed packages through the
uv path. Blocked editable states appear as dim reasons such as dev · local changes,
dev · diverged, dev · detached HEAD, dev · no upstream, or dev · offline.
sase's TUI computes one composite SASE/plugin/agent-CLI snapshot after first paint. The
existing ten-minute session tick only revalidates that cached snapshot and locally
probes provider names already present in it. A full inventory/network recompute is
eligible on the longer ace.updates.recompute_interval_minutes cadence (one hour by
default), while npm latest-version lookups retain their separate six-hour cache. Source
failures remain independent, so a provider lookup failure does not erase known
SASE/plugin results and vice versa.
The persistent updates: top-bar group is the top bar's only dark chip (a deep moss
surface), so it never blends with its neighbors: lime ⬆ N for SASE/plugin updates,
with a bright lime core tag when sase-core-rs requires a Rust rebuild, and a sage
CLI ⬆ N segment for supported agent CLIs. While SASE is updating, a green ⚙ gear
inset leads the badge. Mixed states join the SASE and CLI segments, and the tooltip
spells out both counts plus any manual-only CLI updates. Clicking the badge opens this
tab without mutating anything, or the Procs tab on the running update while one runs.
The global ,U action opens the Update panel from already-fetched SASE and provider
snapshots (no Admin Center, no live inventory load). The providers row lists each
captured provider with its installed-to-latest version transition and marks manual-only
providers by name, and the Everything row summarizes both legs on one line. When the
SASE leg needs a sase-core-rs Rust rebuild, the SASE and Everything rows carry the
same core tag as the top-bar badge. Lowercase e / s / p (or ⏎ / mouse on the
highlighted row) choose Everything, SASE, or providers and still require the final
y/n confirmation. Capital E / S / P plan the same scopes and skip only that
confirmation after a runnable preview succeeds; failed or already-current previews still
do not mutate. Global ,E is equivalent to ,U then capital E: it submits the same
Everything preview from cached snapshots and only the runnable preview continues to the
tracked update proc. The providers leg still captures provider names from the latest
completed automatic snapshot and never adds a newly discovered provider to that
invocation. Safe commands run sequentially; Homebrew, non-writable npm, and
unknown-provenance installs remain visible with manual guidance. The pane-wide u
remains SASE/core/plugins-only, pane-wide A remains the deliberate action for the
current agent-CLI inventory, and pane-wide a runs a tracked agents-sidecar publication
sync: it publishes and reconciles this machine's own agent hoods for every enabled
project and is not part of the comprehensive update. See
Agent Hood Synchronization for that command's
behavior.
Admin Center mutations preview first, and long confirmation panes scroll with
Ctrl+D / Ctrl+U. The Update panel's capital shortcuts are the documented exception:
they skip only the final y/n after that same preview succeeds. Plugin and core
actions show the exact uv command or editable-checkout plan. When commit previews are
enabled and a comparable range is available, confirmations for core and installed-plugin
updates load incoming commits by repository in the background; install, uninstall,
and mode-switch confirmations do not claim a commit range. An Everything confirmation
from ,U groups SASE and Agent CLI work into labeled sections with update/current/
skipped glyphs, counts, and commands (home paths display as ~/). The tracked proc runs
Agent CLI commands first and the SASE/core/plugin leg second, reporting independent
partial failures. A previews every exact agent-CLI command and every skip with its
reason and docs URL; it uses the marked subset from anywhere in the pane, otherwise it
targets every safely updatable installed CLI. Agent-CLI commands execute sequentially as
one tracked proc and refresh the browser without restarting sase's TUI; new agent
launches naturally use the updated binaries. Space (or its alias I) marks any
markable row — installable plugins, installable agent CLIs, and updatable agent CLIs —
in one shared mark set whose aggregate line counts plugin installs, CLI installs, and
CLI updates separately; Esc clears every mark, of any kind and regardless of the
active filter, before closing. All slow work runs off the event loop. Core/plugin code
changes retain the existing automatic sase's TUI and service host restart behavior after
the other legs finish. The Tools pane bindings are listed in the generated
TUI keymap reference.
From home, Tab enters Config and Shift+Tab enters Updates; within a working section
they switch tabs. 1–8 select a section directly. Pressing # from home resumes the
last section; within a section it toggles between the current and previous section.
Esc clears every mark before closing, and q closes the Admin Center.
The Admin Center opener uses the effective ace.keymaps.app.open_config_center binding
(number_sign / # by default), which is shown in the generated keymap reference and
the landing-page hint. Section navigation is pane-local and cannot be configured.
Related¶
- TUI keymaps — generated keymap defaults.
- Configuration reference — generated configuration keys.
_[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.