Screens
The five operator-board views from the full build-out canvas, specified normatively in
SPEC-0013. All views share the top bar + nav rail chrome
and the /events SSE live-update stream.
1 · Board (/)
"The Board — many lines in · each verified · patched through"
The landing view: a live operator's-eye picture of ingress.
- Header row — Zilla Slab title + mono tagline; right-aligned trust legend pills (● signed ● token ● open ● queue).
- Stat band — Throughput tile (events/min + 24-bucket activity chart, "last 36s → now"), and a stacked column of three tiles: in flight · being worked, awaiting claim (tints red when nonzero), verified sources %.
- Incoming lines feed — newest-first, ~8 rows visible. A row is born ringing (pulsing amber
dot,
verifying…), becomespatched → todo(claimable), thenclaimed · <agent>, thendone ✓. Pending rows offer a Claim button.
2 · Todos (/todos)
"Durable queue — claim under a lease · complete with an ack · dedup by idempotency key · at-least-once"
The queue ledger, filterable and searchable.
- Reaper pill —
lease reaper active · re-surfaces abandoned workwith pulsing dot. - Filter pills — All / Pending / Claimed / Done / Failed, each
Label · count; search box (search id · source · event). - Table — id · source·event (+
dedup ×N) · trust · status (+ lease/retry sub-line) · agent · age · action. Contextual actions: Claim / Complete / Retry. Reaper re-surfaces flash the row and raise a toast (td_8f2a · lease expired, re-surfaced to queue). - Row click opens the detail drawer:
- claimed → lease card (countdown, progress bar, Extend / Release, reaper explainer);
- failed → retry card (
retry with backoff · attempt N,↻ {n}s); - metadata grid (trust / agent / attempts / age), idempotency key + dedup line, payload as
escaped pretty JSON, lifecycle timeline (
received · verified at boundary→todo created · durably stored→claimed under lease→completed · ack sent, with failed variants); - footer: Claim under lease / Complete · ack + Fail / Retry now /
✓ completed · acked to source.
3 · Endpoints (/endpoints)
"Vended MCP endpoints — humans are the accountable principals · each endpoint is a scoped, revocable capability · revoke = kill the endpoint"
- Endpoint cards — agent name + persona, status pill, scoped-queue chips, allowed-verb chips,
masked cred + last-seen, Edit / Revoke. Revoked cards dim with
endpoint killed · <when>. - + Vend endpoint modal — agent name, bound persona picker, queue chips, verb chips; submit
disabled until name + ≥1 queue + ≥1 verb. On mint: success screen with the MCP endpoint URL
(
https://<host>/mcp/<slug>), the credential shown once (red callout: "Copy the credential now — it is shown once. The endpoint is the capability; revoking kills it."), and ready-to-paste HTTP.mcp.jsonwiring (SPEC-0014).
4 · Personas (/personas)
"Personas · A2A Agent Cards — one agent, many least-privilege faces · a human-authored prompt plus a verb subset · advertised as an A2A Agent Card"
- Persona cards — name, backing agent, published/draft pill, italic quoted system prompt,
"advertised skills" verb chips, well-known URL (
/.well-known/agent-card/<slug>), Edit + Publish/Unpublish. - New/Edit modal — name (live URL preview), backing-agent chips, prompt textarea, verb-subset chips (bounded by the vended verbs), Published toggle (hint: "agent card discoverable at the well-known URL" / "not advertised · visible only here"); Delete pinned left in edit mode.
Ships with SPEC-0009; hidden from the rail until enabled.
5 · Friends (/friends)
"Friends · agent-to-agent — agents discover each other over A2A · no one talks by default · links are mutual and non-transitive — both operators must approve"
- View toggle — Cards / Ledger; filter pills All / Incoming / Outgoing / Active / Blocked.
- Cards —
local-agent ⇄ remote-agent(arrow direction encodes status), handle + board host, status pill, request note (incoming), intents chips (status.query,todo.handoff,artifact.fetch,event.subscribe) ornone negotiated, meta line, actions: Approve/Decline · Withdraw · Revoke · Unblock. - Ledger — grouped sections with dot headers (Incoming requests / Outgoing · pending / Active friendships / Blocked) and dense rows.
- Add friend modal — amber callout ("The link stays pending until the remote operator approves
it too. Non-transitive — your other friends' agents get nothing."), local-agent chips, remote
handle input (
@jordan/deploy-watcher→ live resolutiondeploy-watcher @ jordan.sb.local), intent chips, message textarea, Send request →.
Ships with SPEC-0010; hidden from the rail until enabled.
Cross-view behaviors
- Live everywhere — every count, row, stage, and tile updates over SSE; a reload always renders authoritative PostgreSQL state.
- Toasts — background transitions (agent claims/completes, reaper re-surfaces, vend/revoke, friendship changes) announce themselves bottom-center.
- Overlays — one drawer/modal at a time; scrim click, ×, and Escape close; focus is trapped and returned.