Skip to content

Prototype the dashboard UI: fleet overview and instance detail #227

Closed

Description

@lbacik

Question

What should the fleet overview (many agents, current state at a glance) and the single-instance detail (tokens, context vs soft threshold and hard ceiling, phase, recent events) look like, and which signals deserve prominence? A throwaway mock to react to, built from the v1 scope listed in the map's Notes.

Output feeds the telemetry snapshot contract: which fields are essential, which can be dropped from v1, and what the fleet view needs that the field list lacks (e.g. instance identity, staleness, last finished attempt).

Part of map #222.

Activity

  1. self-assigned this
    on Oct 14, 2026
  2. lbacik commented on Oct 14, 2026

    @lbacik
    OwnerAuthor

    Resolution

    Decided by reacting to a throwaway UI prototype with three structurally different variants (ops table + detail drawer, attention-sorted budget lanes, inbox + instance cockpit) on a mocked fleet covering: soft threshold crossed with handoff in progress, recovery hold, consecutive infrastructure errors, unreachable instance with a stale snapshot, exited container, and an older agent without telemetry (version skew).

    Prototype (primary source): branch prototype/fleet-dashboard-ui, file prototype/fleet-dashboard-ui.html (open in a browser; ?variant=A|B|C). The variant chosen is A; the decisions below adjust it.

    Layout: variant A (ops table + detail drawer)

    Fleet overview is a dense table, one row per managed instance, with columns:

    1. instance (container name + target repository)
    2. status headline: one sentence of what the instance is doing or needs (e.g. "Recovery hold on token_estimate_degraded fires on the main thread when usage arrives after the tool result #233: push rejected", "Soft threshold crossed, handoff delivering on #318", "2/3 consecutive infrastructure errors", "Unreachable: docker exec timed out after 5 s", "Waiting for a ready issue"). Borrowed from variants B/C: without it the operator has to assemble the picture from several columns.
    3. reach (live / stale / unreachable / not running), with snapshot age when not live
    4. intake
    5. attempt (issue number + phase, or the recovery hold)
    6. budget (bar from 0 to the hard ceiling with a soft-threshold tick; hatched when partly estimated) + used / hard ceiling
    7. main context (+ number of running subagents)
    8. turns
    9. cache hit rate
    10. consecutive errors (count / max)

    Default sort: attention first (borrowed from variant B): unreachable / recovery hold / consecutive errors / handoff in progress, then approaching the soft threshold, then working, then idle, then offline. Not alphabetical.

    Instance detail is a right-hand drawer, sections in this order:

    1. current attempt (first: the section operators reach for most): budget used with measured/estimated split, soft threshold value + rule + crossed-at, hard ceiling, turns (+ continuation index), cache hit rate, budget bar, tokens by category (detail only, never in the table), main context vs window with peak, per-subagent contexts, provider rate-limit headroom shown as "unavailable in v1".
    2. control: repository, agent version, intake, active attempt (issue number, issue title, branch, phase, started), stop plan, handoff (phase + model deadline), recovery hold (reason + ready-to-copy next action), consecutive errors, last finished attempt (issue, outcome, tokens, finished at, PR).
    3. recent events: last N log events with level, event name and one-line text.

    Signals cut from v1

    • USD cost: dropped. It is a CLI estimate; the token budget is the real limit.
    • Charts / sparklines: dropped (variant A has none; history and trends stay in the map's fog).

    Signals kept

    • Per-figure provenance markers (measured / estimated / configured), following the provider-limits research. Unavailable figures render as "unavailable", never as zero.

    Requirements passed to "Define the telemetry snapshot contract" (#224)

    Fields the chosen UI needs that today's agentctl status does not carry:

    • schema_version and a snapshot timestamp (the dashboard also measures age on its side).
    • active_attempt.issue_title.
    • Current-attempt telemetry: budget used / measured / estimated, soft threshold value + rule + crossed-at, hard ceiling, tokens by category, main context, peak main context, context window (configured), subagent contexts, turns, continuation index, cache hit rate. No USD figure.
    • Provenance per figure (measured / estimated / configured) and an explicit "unavailable" for missing figures.
    • recent_events (bounded list: timestamp, level, event, one-line text).
    • last_finished attempt (issue, outcome, tokens, finished at, PR).
    • recovery.next_action as a ready-to-copy command.
    • Enough state to derive the status headline and attention rank dashboard-side (recovery, handoff phase, consecutive errors, intake, phase, budget vs soft threshold). The headline itself is computed by the dashboard, not sent by the agent.

    Dashboard-side only (not in the snapshot): container name/id, running/exited, exec ok/error, snapshot age, attention rank and status headline.

    No further fields were requested beyond the above. No new tickets or fog surfaced.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

wayfinder:prototypeDisposable prototype requiring human evaluation

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions