The Doors Bar
The doors bar is row five of the Floor: a 34px strip that keeps the project’s vitals one click away, whatever is on the stage. Left to right it holds the five project doors, then the account-scope Usage cell, the machine-scope sync cell, and the app version. Every cell divides by a 1px rule.
Doors and drawers
Section titled “Doors and drawers”Each door’s closed face is a label and one exact value — never rounded, never summarised. Clicking a door opens its drawer: a panel that rises from the bar to just below the roster, covering the stage without a scrim — the rows above stay live behind it. Only one door is open at a time. A drawer closes on its own arrow (which inverts to ▼ while open), on a click anywhere outside, or on Escape.
A drawer’s header carries a title, a summary line, and at most one filled action. Below it, rows: a tag, the primary text with an optional note, a right-aligned value, a state pip, and up to two actions. A door’s face goes warm only when a person is genuinely blocking — never for emphasis.
The five doors
Section titled “The five doors”Roadmap
Section titled “Roadmap”- Face: open milestones · total (e.g.
6 · 2), or—when the project has no plan on disk. - Drawer: the authored plan, phase by phase — each milestone a row tagged
P1,P2, … with its progress percentage (ordonewhen shipped), a status word for the two states you act on differently (Shipped, In flight), and a “Put an agent on it” action where a milestone is dispatchable. Rows with a matched spec open that spec’s detail. A filter strip (All / Not done / In flight / Done / No spec yet, each with its exact count of the whole plan) and a sort strip (Phase / Priority / Progress) narrow and order the list — reads only, nothing on disk changes. Empty state: “No roadmap yet — run /mm:plan in Claude Code to generate .mm/product/roadmap.md.”
The drawer and the roadmap-board stage occupant derive their rows through the same code, so the two surfaces cannot disagree about where a milestone stands.
Artifacts
Section titled “Artifacts”- Face: the exact count of everything in
.mm— specs, issues, notes, docs, ideas, all of it. - Drawer: the full
.mmlist in one place, with its own per-kind filter strip, a search box in the header, and per-row verbs — open an artifact’s detail, put an agent on it, archive it, close an issue, mark an in-review spec done. Empty state: “Nothing in .mm yet.”
Review
Section titled “Review”- Face: how many specs are awaiting review.
- Drawer: “N awaiting review” — the queue between building and done: specs whose tasks are all complete (or explicitly parked in review) but which hold no passing verdict. Each row shows its verdict tag (or
unverified), why it is here (“no verdict on file” / “verdict on file does not pass”), its task count, and two verbs: Review (runs the reviewer) and Mark done. Because every row here is by definition unverified, Mark done takes a deliberate second click that says so: “Without verdict?” — marking an unverified spec done is a recorded human override. Empty state: “Nothing awaiting review — a spec lands here when its tasks are all complete.”
- Face: the working tree’s exact signed delta, e.g.
+4037 / −1642. - Drawer: the active project’s repo — the working tree, this branch’s commits, its pull request, and its Actions runs, with the branch and commit verbs that move them. The summary line is the repo’s own state sentence (branch, divergence, working-tree size).
Activity
Section titled “Activity”- Face: the count of sessions that need you.
- Drawer: “N sessions · M need you” — the project’s live sessions, needs-input first, each with its status tag, activity line, task progress, and an Open action that brings the session’s card to the stage. This is the one door an outstanding sync conflict warms. Empty state: “No sessions in this project yet — state an ask in the command bar to start one.”
The Activity drawer also hosts the project reviews list below its session rows: past /mm:review reports with their date and overall health, expandable in place, plus a sweep trigger that launches security and accessibility review sessions when those agents are available.
The Usage cell
Section titled “The Usage cell”Account scope, to the right of the doors. It shows the tightest remaining figure across your connected providers, exactly:
- an exact figure, marked
est.when the ceiling is estimated; —when nothing is known yet;0 leftwhen any provider is exhausted — the count brightens to catch the eye, but the cell never goes warm, because no person is blocking.
There is deliberately no usage figure on the roster’s agent cards: it is the same account-wide number, and it would repeat identically on every card.
The sync cell
Section titled “The sync cell”Machine scope. It reports the sync channel’s state and never opens:
| State | What it shows |
|---|---|
live | Lit pip and the last-ack time (e.g. 14:32). |
degraded | Retry cadence and queued writes (e.g. retry 5s · 2 queued). |
offline | The outbox depth (e.g. 3 queued). |
conflict | The conflicted file count (e.g. 2 files). |
Figures are exact, never percentages. A conflict’s warm mark goes to the Activity door — the cell reports the state without taking the signal hue. Resolving a conflict happens in the Reconcile occupant on the stage.