Blog

Watching Every Process on Every Box You Own (Demo Walkthrough)

Akshay Sarode
Direct answer

The fleet view is one screen with one row per running agent across every paired machine. Status, runtime, last 80 chars of output, host, command. Click to attach. Long-press to kill. The phone version is the same fleet view, smaller, plus haptic approvals.

This is a walkthrough of what the dashboard actually looks like when you have a real workload. Five minutes. No marketing slide.

Setup for the demo

Four machines paired:

Seven agents running:

  1. Claude Code on the laptop, working on this blog post
  2. Claude Code on gpu-rig, refactoring the model training code
  3. A python script on the Pi scraping a job board
  4. Aider on the mini, fixing a CSS issue in a side project
  5. Playwright on the mini, doing a daily site-monitoring run
  6. Codex on the laptop, running a small build task
  7. A long-running data prep job on the GPU rig

What the fleet view shows

Top of screen: brand mark, search, account menu. Below: a list. Each row:

ColumnExample
Status dot● running · ● exited · ● crashed-out
Agent namecc-blog · ag-7f3a
Hostakshays-mbp
Commandclaude --resume blog-post (truncated)
Runtime1h 14m
Last output… looking at src/components/Mark.tsx
Sandbox chipsworkspace_rw · network · subprocess

Click any row → full PTY view in xterm.js, with the last 64KB of scrollback restored.

What the side panel shows

The right rail is the inspector. Clicking an agent row populates it:

What the phone shows

Same fleet view, denser. Tap an agent → attach to its PTY (yes, you can type from your phone — autocomplete and gesture support, not graceful but workable). Pull-down on a row reveals quick actions: kill, restart, copy ID.

The push-notification surface is the actual phone use case. When agent #7 (the data prep on the GPU rig) hits a row that needs a permission ("can I write to /mnt/big-storage?"), the phone buzzes. Long-press → Approve. The permission is granted in 200ms; the agent continues. I never had to be at my desk.

What the CLI shows

celistrad ctl is a readline REPL with tab completion. It's the same API surface as the dashboard:

$ celistrad ctl
> list
ag-7f3a · cc-blog · running · 1h 14m · akshays-mbp
ag-9b22 · cc-train · running · 47m · gpu-rig
ag-3e51 · scrape · running · 6h 32m · pi-5
ag-c184 · aider-css · exited · 12m · mac-mini-tv (exit 0)
ag-d701 · playwright · running · 4m · mac-mini-tv
ag-1a09 · codex-build · running · 22m · akshays-mbp
ag-5f7d · data-prep · running · 53m · gpu-rig

> attach ag-7f3a
[attaching to cc-blog on akshays-mbp]
...

Why each piece is there

Fleet view. Eliminates the "which machine is that running on?" tab-flip. Sort by runtime (recently started), filter by host, filter by status.

Inspector rail. The 80% of inspecting an agent that doesn't require attaching the PTY. Reading capabilities, recent audit entries, restart count — all without losing your focus on the fleet view.

PTY in browser. Because attaching shouldn't require a different tool. The xterm.js + WebSocket + 64KB replay ring is enough to feel like a real terminal.

CLI. Because some of us live in terminals and don't want to leave. Same shape as the dashboard, scriptable.

Phone. Because permissions arrive when you're not at your desk and waiting for them is wasted time.

What's not there (yet)

Per-machine resource graphs (CPU, GPU, RAM). They're useful but they're a different product — Glances or a separate metrics layer. We'd rather get fleet supervision right than half-build a metrics tool.

Multi-user collab. The "share an agent with a colleague's dashboard" feature is half-built; sharing makes the auth model more complex and we're being slow about it.

Try it

Free for 1 paired node — download the daemon, sign in, click Pair. The fleet view is the first thing you see after pairing.

FAQ

How does the fleet view stay live?

Server-Sent Events from each daemon to the dashboard. Latency is whatever the connection is — sub-millisecond on LAN, 50–200ms over the tunnel.

What if I have 100 agents?

Virtualized list — smooth at 1000+. Filter by host or status to focus.

Does it work in dark mode and light mode?

Both, with a toggle. The brand is naturally dark; the light theme uses the same palette inverted.

Can I customize the columns?

The default columns are fixed for now (we wanted to ship one good layout instead of a bad customizer). Future versions will allow column reorder + show/hide.