Two layers: routes group sessions
that share a goal. A route's status is the worst-of
across its sessions, ranked
stopped < idle < waiting < busy < attention < error.
Renames, budgets, and policy changes persist in memory only —
refresh resets them.
A filter over the same status enum — every row is some flavor
of needs you. The pill column names what kind:
STUCK / AWAIT / REVIEW / CRASHED. Esc or clicking ROUTES exits
back to the full landing.
One row per active session, sorted by context-window burn. The
bar shows how full the model's context is right now; the legend
up top names each tier (fresh / warm / heavy / near-cap). Reads
as "which sessions are getting heavy?"
An agent in Belay = persona (what kind of work
the file describes) × runtime
(claude-code / codex / cursor-bg). Rows are ranked by usage
today; the filter chips split by lifecycle bucket. Click a row
to open the detail drawer.
The big number is past-24h API-equivalent dollars — what
the same usage would cost at API list price. On a Pro / Max /
Team subscription you pay a flat monthly fee, so these figures
track value-extracted, not your actual bill.
Status vocabulary
Routes and sessions share one status enum. A route's status
is the worst-of across its sessions, ranked:
stopped < idle < waiting < busy < attention < error
Active
- BUSY — activity in last 60 s
- IDLE — activity in last 1 h
- WAITING — paused on permission / input (real-time hook detection: v0.3)
- ATTENTION — confusion fired (retry-loop · no-progress · repeated-reads · token-spike)
Terminal
- DONE — completed successfully, transcript preserved
- STOPPED — no activity > 1 h
- ERROR — terminated abnormally (aliases: REJECTED · BAILED · FAILED)
Attention queue
A filter over the same status enum — every row is some
flavor of needs you. The pill column is
what kind of attention, riding on top of
the status color:
- STUCK — retry-loop / no-progress / repeated-reads
- AWAIT — agent asked for your input
- REVIEW — work ready for sign-off
- CRASHED — terminal failure (planned v0.3)
Route actions — header ⋯
- ✏ rename route — inline, persists per-route
- $ set / edit budget cap — soft warning when crossed
- ◐ response policy (L1–L5) — persists; takes effect on running sessions in v0.3
- ⌫ BAIL · terminate route — disabled until v0.3
- ↗ log — opens the timeline drawer for this route
- → redirect — composer above the header; injects a steering message into the active session (v0.3)
Session actions — card ⋯
- # copy session id
- 📁 copy path
- ↗ open in Finder — demo: toast only; live build: shells out via
/api/open
- ⌫ abort attempt — disabled until v0.3
Keyboard, when a session card has focus:
- o — copy
claude --resume <id> to clipboard
- p / a / d — pause / approve / deny (v0.3)
Vital signs
One row per active session, ranked by context-window burn.
The bar shows how full the model's context is right now —
heavier rows tend to be older or larger-scope sessions.
- fresh — < 40% — plenty of headroom
- warm — < 70%
- heavy — < 90% — worth checking in
- near-cap — > 90% — about to truncate
Click a row to drop into that session's route. The status
dot still reflects the underlying state enum
(busy / idle / waiting / attention / error) — the bar
color is independent and answers a different question.
Agents ledger
An agent is a persona file in
~/.claude/agents/. Each row is one persona;
rows are ranked by usage today.
Lifecycle buckets
- ACTIVE — used in the last 24 hours
- DORMANT — file exists, not used recently
- DEAD — referenced in transcripts but no file on disk
The DORMANT / DEAD separators are the senior signal here —
at a glance you see which personas are dead-weight.
Click any row to open the detail drawer with usage history
and runtime split. Add agent ships in v0.3 (needs
a write into ~/.claude/agents/).
Cost mechanics
The big number is past-24h API-equivalent dollars
— what your usage would have cost at API list price. On a
Pro / Max / Team subscription you pay a flat monthly fee;
these figures are useful for tracking value-extracted, not
for budgeting.
- BY MODEL — Sonnet vs. Opus shifts cost an order of magnitude
- BY SOURCE — which CLI / IDE produced the spend
- NEEDS ATTENTION — appears only when a route exceeds its lifetime budget cap
Budget caps are soft: crossing the cap
surfaces a warning, it doesn't block work. Hard enforcement
sits in v0.3 alongside policy injection.
Demo limits
- Data is a snapshot in
/demo/data.json + /demo/agents.json
- No
/api/* — all mutations are client-side
- The live build reads
~/.claude/projects/*/*.jsonl off your machine; nothing leaves it