Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Dashboard

castellan dashboard is the ratatui operator UI over the in-tree multiplexer — agents, pressure, pane topology, and the evolution archive in one view.

What / why

Live stigmergy control tower: field heat from deposits, plan_verify / bio / cost chips, dual-bus honesty — without embedding a PTY grid (Enter still hands off to herd attach). Headless observers use the same ObservabilitySnapshot via castellan statusline refresh or ~/.config/castellan/statusline.json.

Launch

castellan multiplexer ensure
castellan dashboard

Defaults:

SettingDefaultOverride
Socket~/.config/castellan/castellan.sock--socket <PATH>
Episodes.castellan/episodes--episodes <PATH>
Archive.castellan/topology_archive.json--archive <PATH>

Anatomy

The dashboard renders four coordinated views over one DashboardState, refreshed on demand:

PaneShowsSource
Agent listPane id, agent name, status (idle/working/blocked/done/unknown)agent.list over the multiplexer socket
Pressure stripEpisode vitals and live deposit heat (live_pressure)Episodes + EventBus deposit / wake intensity
Genome tickerActive genome id, generation, lineage depth.castellan/topology_archive.json
Footer chipssocket/events/panes, plan_verify, bio, Φ, costDual-bus honesty + castellan-events
Live eventsRecent Castellan events (last_events, cap 16)Socket EventBus — castellan run / ACP via events.emit when healthy
AttachExternal PTY for selected paneEnter → herd attach (no in-TUI multi-pane grid)

Keybindings

KeyAction
j / k or / Select agent up/down
EnterAttach to selected pane (Ctrl+Q to detach)
vToggle vitals strip
rRefresh agents + layout snapshot
q / EscQuit

Recipes

Daily-driver stack:

castellan multiplexer ensure
castellan dashboard

Point at a named session (multi-project):

castellan herd session list
castellan dashboard --socket ~/.config/castellan/<session>.sock

Headless history (telemetry DB, no TUI):

castellan dashboard --history --limit 20
# same as:
castellan telemetry --limit 20

Headless live snapshot (no ratatui):

castellan statusline refresh --json | jq '{schema_version, bus, live_pressure, plan_verify, bio}'

Read a previously written file:

jq '{schema_version, connected, agents, vitals}' ~/.config/castellan/statusline.json

Headless observability

TUI and statusline refresh write the same ObservabilitySnapshot — schema in Statusline. MCP castellan_multiplexer_status adds freshness (stale, age_secs).

Honest gap: Full multiplexer chrome in the ratatui dashboard is still deferred; the current surface is agents, pressure, and pane tree.

Failure paths

SymptomCauseFix
“connection refused” on launchNo multiplexer server runningcastellan multiplexer ensure before castellan dashboard
Agent list emptyNo panes spawned yetStart an agent pane first (castellan herd attach or spawn via socket API)
Vitals strip blankNo episode has run yetcastellan run --goal "..." --plugin gridworld at least once
last_events empty while a run is activeMux socket unhealthy, or run used --no-mux / private-only pathcastellan multiplexer ensure; confirm doctor mux_default mentions socket EventBus; drop --no-mux
Genome ticker blankArchive missing or emptycastellan evolve --episodes 10 to populate .castellan/topology_archive.json
Attach hangs on Ctrl+QTerminal emulator swallowing the escape sequenceDetach with q from the agent list view instead

CI smoke

Dashboard client code is tested against a mock Unix socket:

cargo test -p castellan-dashboard --test integration

Included in ./scripts/verify.sh.