Skip to content

Interactive fleet TUI (fleet view/fleet dashboard): drive the fleet, not just watch it #59

Description

@outofcoffee

Problem

outfit fleet metrics --watch is a live redraw dashboard, not a TUI: it clears the screen and repaints on an interval, reusing the technique from remote metrics --watch. It is read-only — no keyboard input, no selection, no actions. To act on what you are looking at you drop out of it and run outfit fleet start <node>.

That is backwards for the case that matters most. The dashboard is exactly where you would want to bring a fleet up from, and it is the one place you currently cannot: it shows you three dead nodes and offers nothing to do about them.

(The related availability requirement is already satisfied — every fleet surface works with the entire fleet down, rendering each node as unreachable with its reason and exiting 0. Only fleet.yaml is required, since that is the definition of the fleet. The gap is interactivity, not availability.)

Proposal

A genuine interactive TUI, as its own subcommand — suggested name outfit fleet view or outfit fleet dashboard — leaving fleet metrics --watch as the simple non-interactive redraw for background/piped use.

  • Node list with selection (arrow keys / j/k).
  • Actions on the selected node: start, stop — the daemon calls the CLI already makes, driven from the keyboard.
  • Live state and metrics per node, refreshed continuously.
  • Usable from cold: open it against a fleet where nothing is up, and start nodes from within it.
  • Clean exit (q / Ctrl+C).

Things to decide

  • Refresh cadence. The 60s --watch interval is right for a background watch and far too slow for a dashboard you are actively driving. A foreground TUI wants a few seconds, and probably an explicit refresh key.
  • TUI library. Bubble Tea is the obvious choice, but it would be outfit's first substantial non-AWS runtime dependency — the repo leans hard on "no runtime dependencies". Worth deciding deliberately: adopt a library, or hand-roll the minimum against raw terminal escapes (the existing watch mode already does clear-and-redraw with ANSI codes).
  • Naming. fleet view (short, and "view" implies read-and-act on a live thing) vs fleet dashboard (explicit, longer to type). Whichever is chosen, fleet metrics --watch should stay as-is.
  • Scope creep to watch for: log tailing per node, deploy-config push from the UI, multi-node selection. All plausible later; none needed for the first version.

Notes

  • Its own OpenSpec change: this is a new capability (an interactive surface), not a change to the fleet-client contract. The existing fan-out, node abstraction, typed outcomes, and metrics renderers are all reusable as-is.
  • Distinct from the deferred web UI (Web UI dashboard for fleet #50): that is a different presentation layer over the same daemon API; this is the terminal one.
  • Related: the fleet change (fleet-client, fleet-config) and daemon-api.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions