Read the Dashboard
`kusaw ui` serves the Dashboard on `127.0.0.1`. Each area below matches a CLI command.
kusaw ui serves the Dashboard on 127.0.0.1. Each area below matches a CLI command.
| Area | CLI | Dashboard |
|---|---|---|
| Factory page | kusaw status | The factory in the sidebar, then Dashboard |
| Runs list | kusaw status | Runs, or Runs (all factories) |
| Run page | kusaw status <run> | A row on Runs, then the run page |
| Queue and pause | kusaw pause / kusaw resume / kusaw stop --all | Pause, Resume, Stop all |
| Settings | kusaw config set / kusaw telemetry status | Stuck after, and Telemetry → Settings |
kusaw serve has to be running for live updates. kusaw ui --open opens the Dashboard in a browser.
Factory page
Open the factory in the sidebar. Dashboard is the metrics page for that factory (/f/<name>/dashboard). The heading is Dashboard. The range picker defaults to Today.
KPI tiles on top, then two columns of chart cards (one column at 1024):
- Ran without you, Human interactions per run, Cost per run (median), Finished runs.
- Chart cards: human interactions, time per stage, throughput, success and failure by source, and outcomes. Each has axes, value labels (zeros included), and a Chart / Table switch.
- Cost by size and Costliest runs — numbers right-aligned; costliest uses the API's
pct_of_budgetandbudget_state. Includes the finally allowance. - Outcomes — last 30 days, whatever the range above. A run settles 3 days after delivery (
outcomes.settle_days).
Empty range: No finished runs in this range. plus the range sentence, Show 7 days, and Open Runs. Tiles show —, never 0.
Matching CLI: kusaw metrics --range today (or 7d, 30d).
Runs list
Runs lists that factory. Runs (all factories) lists every registered factory.
Tabs: All, Running, Complete, Failed, Blocked, Needs attention, Cancelled.
waiting_for_human is Blocked. succeeded is Complete. stopped and rejected are Cancelled.
Matching CLI: kusaw status.
Run page
The run page shows the title, the pipeline (steps, live activity as the run moves), logs, repo tabs (worktree, branch, commit, verification output), Findings, and SUMMARY. Files the run wrote live with the run; open the worktree or SUMMARY for the delivered commit and verification evidence.
Matching CLI: kusaw status <run>.
While a gate is open, the same page is Waiting for you. See Review and approve a run.
Queue and pause
The queue state is Running, Paused, or ■ Stopped all · paused.
- Pause — the active run continues; no new run starts.
kusaw pause - Resume — unpause the queue.
kusaw resumewith no run id - Stop all — stop every running or finalizing run and pause the queue.
kusaw stop --all
The Queue list is the waiting runs, with next on the one that runs when a slot is free.
Settings
On the factory chrome, Stuck after is monitor.stuck_after_minutes (1–240). The same key is what kusaw config set can change from the Dashboard path.
Telemetry has a Settings heading. Telemetry stays off until you turn it on. See Telemetry. Definition and Repos are the read-only kusaw.yaml views.
Theme on the sidebar is Light, Dark, and Follow system.
If it goes wrong
- Can't reach the Kusaw UI server. Retrying… —
kusaw uiis not running. Start it on loopback. - Metrics aren't available right now — serve or the metrics API is down. The page retries.
kusaw serveandkusaw uiboth need to be up for live data. - No finished runs in this range. — switch the range to 7 days, or open Runs.
- The end date must be on or after the start date. — fix the custom range.
- Live stream dropped — the page reconnects on its own. Runs may still be moving.
Review and approve a run
A run waits when the pipeline reaches a [gate](../glossary.md#gate). The run status is `waiting_for_human`. Approve continues the run; reject sends your note back as [feedback](../glossary.md#feedback). Delivery, when it happens, is a local commit. Kusaw never merges or pushes.
Rerun, requeue, resume or steer
[Resume](../glossary.md#resume), [restart](../glossary.md#restart), [requeue](../glossary.md#requeue), take over, stop, and dismiss do different jobs. Use the row that matches the situation.