The watch dashboard
Tour the Textual TUI for live actor status, logs, diffs, and embedded sessions.
actor watch opens a live dashboard for everything you have in flight. It’s a Textual app that runs in your terminal — most workflows keep it open in one pane while the orchestrator runs in another.
actor watch
Layout
The dashboard is a master-detail split:
- Left: a flat list of all actors, sorted with running first, then by creation time. Parent metadata is not rendered as nesting or indentation.
- Right: a tabbed detail panel for whichever actor is selected.
- Header / footer: aggregate counts (
4 actors: 2 running, 1 done, 1 error) and key hints.
Status icons
Each row in the tree starts with one of:
●running○done✗error◌idle■stopped
The selected actor is shown with reverse video so it’s easy to spot.
Detail tabs
Four tabs, each switchable by a single letter (case-insensitive, regardless of which pane has focus):
- L — Logs. The agent’s session output, color-coded by role. Auto-scrolls for running actors. Press
fto toggle follow mode,vto toggle verbose (tool calls, thinking, timestamps). - D — Diff.
git diffagainst the actor’s base branch, syntax-highlighted. If the actor changed multiple files, a file list appears at the top. - R — Runs. A table of every run for this actor — index, status, exit code, prompt, started-at, duration.
- I — Info. Metadata: agent kind, worktree path, source repo, base branch, session ID, created-at, stored config.
When an actor transitions from running to done or error, the dashboard auto-switches you to the Diff tab if you’re viewing that actor — so the result of the work lands in front of you without an extra keystroke.
Navigation
Three navigation schemes work everywhere — pick whichever matches your muscle memory:
| Action | Vim | Arrow | Emacs |
|---|---|---|---|
| Previous actor | k | up | Ctrl+P |
| Next actor | j | down | Ctrl+N |
| Focus actor list | h | left | — |
| Focus detail | l | right | — |
Plus the global keys: Ctrl+P opens Textual’s built-in command palette (filter by status, jump to actor by name, toggle log verbosity), / is search, and q quits.
Interactive sessions
You don’t have to leave the dashboard to talk to a sub-actor. Select one in the actor list and press Enter: the detail pane swaps to an embedded terminal running claude --resume <session_id> (or codex resume <session_id>) inside the actor’s worktree. You’re typing directly into a live Claude or Codex session.
A few things to know:
- The actor must not currently be running, and it must already have a session (i.e. it’s been run at least once).
- Ctrl+Z leaves the embedded widget but keeps the subprocess alive — you can navigate around the dashboard, look at other actors, then come back. Selecting a different actor while a session is parked just shows that actor’s logs.
- Quitting watch (
q) sends SIGTERM to all live subprocesses and marks their runs asSTOPPED. - Each interactive session is recorded as a Run with prompt
*interactive*, so it shows up in the Runs tab andactor showalongside normal runs.
SSH-friendly mode
The dashboard plays a brief splash animation on startup. Over a slow connection it can stutter; disable it with:
actor watch --no-animation
Diagnostics
If an embedded interactive session does something weird — keys not registering, ANSI sequences mis-rendering, the widget appearing to hang — press Ctrl+Shift+D to dump the I/O ring buffer for the active session to stderr. The buffer holds the recent stream of bytes read from and written to the PTY plus the events the widget handled, which is usually enough to figure out where the loop went sideways. Useful when filing a bug.