Skip to content
K

Roster & Stage

Rows three and four of the Floor are where agents live. The roster shows every agent running in the active project, one card each. The stage below it shows exactly one thing at a time — usually the session of whichever card you selected.

The roster is scoped to one project. Each running agent gets one card, and the cards page rather than scroll: a page holds up to five cards (fewer on a narrow window, where cards widen instead of clipping), and a pager on the right edge shows arrows and the page readout (e.g. 1/3). Nothing hides behind a scroll gesture.

Cards sort in a fixed order that is not configurable: needs-you first, then running, then done, then idle — and within a band, most recently changed first. If needs-you agents are on another page, the roster’s left rail shows their count; clicking it returns to page one, where the sort puts them.

  • State glyph and agent name, with the model it was dispatched on — or a SELF-QUEUED outline tag for an agent queued by the system with no model yet.
  • State word — needs-you, running, done, or idle.
  • Session title.
  • Activity line — one sentence in the agent’s own voice about what it is doing right now. A paused agent always reads “Paused — you have the shell”.
  • Footer — a context meter with its exact figure, the exact task count (e.g. 3/8), and the worktree.

Clicking a card puts that agent’s session on the stage. A card can also carry a close control in its corner — it arms and restates (“Close <name>?”) before it commits, so a mis-aimed click never kills an agent.

The rail’s eye toggle collapses the roster to a thin bar that states the counts in words: Total 03 · Running 02 · Needs you 01. Counts of live things are always zero-padded and exact.

The stage is the only row that flexes, and it hosts exactly one occupant at a time. The eleven occupants:

OccupantWhat it is
Stage sessionA live agent session — the four-column view below.
SettingsThe settings takeover.
Artifact browserOne filterable index over every artifact you can read, grouped by project; opening a row shows its detail with the list kept as a left column.
Entity detailThe read view for a spec, issue, task, doc, or note — read-only except a header dispatch action, with prior work and the verification verdict folded in.
ReconcileThe sync-conflict takeover: a labelled split diff and three resolutions. Never auto-merged.
First runThe launch and setup flow.
Roadmap boardThe plan as a list — phase bands group rows, and every row carries a dispatch verb (Run, View, Shape, Delete). Nothing is dragged.
WelcomeWhat an empty roster shows (below).
Team dashboardTwo regions — an Activity feed with spec deep links, and the shared Projects list. Presence is neutral-only, refresh is manual.
Plugin pageA page contributed by an installed plugin.
Comms inboxEmail, Slack, and meeting triage, with meeting-to-issue/spec conversion.

Switching occupants is instantaneous — a state swap, not a page transition.

When an agent is on stage, the session view runs four columns left to right.

A 46px rail (expanding to 376px with a detail panel) showing the fan-out inside the session — the sub-agents the agent spawned via its Task tool, coded 01, 02, … in spawn order. Select a tile and the panel shows that sub-agent’s task as the parent phrased it, its model, state, spawn time, context usage, and a line-by-line feed of what it did: spawned, searched, read, edited, ran, noted, returned. This column looks inside the session; the roster above is the only way to change which session is on stage.

The conversation, read from Monday Morning’s owned transcript — the app’s own durable record of the session, not just the harness’s live stream. While the agent works, its current activity line shows beneath the turns. If the rendered turns are not provably the whole conversation, the transcript says so with a partial-record notice — absence of the notice means the record is known complete, never merely unchecked.

Above the transcript, the session header carries the agent’s name and state, the model chip (which doubles as the picker), an effort chip when the harness offers effort levels, Hand off →, and — when the agent is live on another machine — Resume here, labelled in full (e.g. “Live on studio-mbp · last event 3m ago”). A freshly handed-off agent shows a banner stating plainly that no transcript crossed; its first action is reading the spec and recorded lines.

Below the transcript: the NEXT strip, shown when a blocked agent offers structured next steps (e.g. “order.json wins” vs “frontmatter wins”) you can run with one click, and the reply bar for continuing the conversation — with the same capability-gated slash-command picker as the command bar.

What the agent’s work actually produced, in three tabs:

  • Preview — a URL bar (e.g. localhost:5173), reload, and a live embedded view of your running app; when no live URL is loaded, the latest agent-taken screenshot renders instead, with its provenance (age, dimensions, environment) beneath — a capture older than a minute reads as stale. An unreachable server is stated as information (“No response”), never an alarm. The panel’s settings swap into the body — base URL, viewport (desktop / tablet / mobile), stored auth, and capture cadence (on-step / on-request / periodic) — without opening a dialog.
  • Diff — the changed files with per-file addition/deletion counts and their hunks.
  • Terminal — the session’s streamed terminal output.

The Inspector collapses to a slim rail; its rotated tab labels remain clickable, so reaching Diff from collapsed is one click, and the freed width goes back to the transcript.

A fixed 292px column, and the only surface in the product where an artifact is written by hand. Two regions, separated by a rule:

  • Record — the attached spec (title and task meter, or “No spec attached to this session”), the recorded count (“3 recorded” or a warm “nothing recorded” — and with no spec, “No spec — nothing can outlive this session”), and proposal cards the agent has surfaced. Recording or dismissing a proposal is executed as the agent’s own mm_record call, so every recorded line carries provenance.
  • Merge — the spec’s task checklist, and the worktree block: branch name, exact diff counts (+120 −34 · 9 files), and the MERGE INTO MASTER button, which confirms by restating exactly what it will do (CONFIRM MERGE · 9 FILES).

Whenever the roster is empty — first launch or after closing your last agent — the stage shows the welcome pane. It is not a one-time tour: “No agents are running. This is what an empty roster looks like. Add an agent and it shows up here.”

Three actions do real work:

  • Add your first agent — puts a real task from this project into the ask; edit it or dispatch as-is.
  • Connect a provider — sign in to a model account in settings; agents run on it.
  • Open the roadmap — what this project plans to build, phase by phase.

Only one carries the filled treatment at a time: with no provider connected, the fill moves to Connect a provider and Add your first agent sits dormant (“Needs a connected provider first — start there.”) — the same refuse-honestly rule the Dispatch button follows. Coach marks point out the ask, the roster, and the doors, and “What makes this different?” opens the three product claims.