Mira leads every meeting — the nameless Meeting Lead becomes Mira in name, color and voice, keeps every duty including the living document, and can no longer be excluded. One room, two benches — a MeetingRoomView for code projects is built on the same skeleton as The Rookery's room (question → who sits → the table → the bench → tell the room more), with the nineteen Rookery seats collapsed beneath as guests; Personal gets the development room collapsed beneath The Rookery. Mira chooses comes to the development bench, every chair opens the same profile, and one Rookery seat can be consulted rather than convened.
The problem
The Meetings tab for a code project stacks an intro bar, a Run-an-Expert launcher, meeting flags, conflicting signals, and five intent sections each with group cards, guided-topic pills, a Start Meeting button and a collapsible directory of mini cards carrying Consult / Chat / Run / report pips. Calling a meeting then opens an 845-line modal with its own expert grid. Sarah: “I feel kind of overwhelmed by the setup.”
The Rookery's room is one column and reads as a place. Between the two: the dev lead is a nameless facilitator while Mira leads the Rookery; the dev setup still offers to exclude the lead; only the Rookery can ask the host who should sit; each bench is invisible from the other's room; and profiles differ — an expanded three-line description in one, a brief and a tooltip in the other.
The in-meeting view with the living document is already shared by every format. Nothing there needs to change beyond labels.
Approach
Mira rides the Meeting Lead machinery, everywhere
The Rookery already proved the shape: same meeting_lead id, same DOCUMENT_UPDATE protocol, only the words are hers. MeetingLead.displayName / accentColor become Mira's for every format; the standard lead prompts take her identity and voice, keep every facilitation duty, and gain a closing “Mira's read” section in the living document. Stored transcripts keep their recorded names, so old meetings still say “Meeting Lead”.
Extract the room, don't duplicate it
RookeryRoomView's label, rule, who-sits card, table chair, chair card and context block become RoomChrome. Both rooms render from them, and every chair gains a hover “i” that opens the shared ExpertProfilePopover — the same gesture in both rooms.
A draft per room, keyed to the project
MeetingRoomDraft mirrors RookeryDraft but resets when it binds to a different project, so a question typed for Press Raven never appears under CodeRaven. The two drafts carry different things (presets and the Empty Chair versus prior meetings and intent groups); a shared generic would be mostly branches.
Guests resolve at the door
A Rookery seat in a dev meeting is resolved from the catalog by the draft and passed in the agents list — the kind-aware catalog invariant is untouched. buildAgentSystemPrompt gives a seat its charter and length ceiling instead of the generic role block, framed as a guest in the standard loop.
Mira chooses, on the dev bench
ExpertBenchRouter is RookeryRouter's shape with the development digest (every core expert with its description, grouped by bench, plus the pre-composed groups as known rooms). It returns two to four ids and a why-line, or one id flagged as a consultation. Fallback: keyword overlap against names and descriptions.
Consultation is a summons kind
SummonsKind.consultation is additive. The opening round for that kind asks the one seat to answer at depth with the ceiling lifted; later messages always reach the seat; Mira keeps the brief as in any sitting.
Decisions made for you
Mira may have a read in dev meetings
The old lead was forbidden an opinion; Mira in the Rookery “has takes when warranted.” Same person, same rule: one line, stated as hers, never taking an expert's lane. Reversible by deleting one sentence in buildLeadSystemPrompt.
Dev room offers “I choose” and “Mira chooses” only
The Rookery's “Everyone with standing” has no equivalent on a four-seat bench, and “Just ask who should sit” was dropped to keep the choice to two cards. Reversible by adding a case to MeetingRoomDraft.WhoSits.
Guided topics and group cards become the preset menu
The five intent sections leave the page; their rooms and topics live under “Start from a preset”, grouped by each intent group's question. Topics that opened the Suggested Meeting composer still do. Run an Expert moves to the sidebar — it is not a meeting action.
Mira's selection considers the dev bench only
She does not propose Rookery guests for a dev question; Sarah adds a guest by hand. Keeps the digest short and the why-line legible.
Personal's reverse collapse is the dev room, not guests in a sitting
A core expert cannot sit inside a Rookery sitting — that loop is seat-shaped (room order, ceilings, tensions). Personal shows the same development room code projects get, collapsed beneath The Rookery, minus the guest bench.
Rookery consultation is chosen on the table
When exactly one seat is chosen the table offers “a sitting” or “a consultation”. Consult from a chair, a profile, or the directory lands there with consultation selected. No fourth who-sits card.
The work
Phase 1 — Mira leads every meeting
4 tasksIdentity only; every duty stays.- Make
MeetingLeadresolve to Mira for every format (name,cmMiraaccent, role caption) - Give the standard lead prompts Mira's voice and identity while keeping the facilitation duties and the living document
- Add "Mira's read" as the closing section of the standard living-document template
- Rename the lead's mention token, bottom-bar button, settings label, and living-guide entry to Mira
Phase 2 — The lead is never optional
3 tasksMechanical; eight callers.- Remove the Meeting Lead toggle from
StandupSetupSheetand drop the Bool from itsonStartsignature - Update every
StandupSetupSheetcaller (ProjectOverviewView ×3, TasksWidget, QuickTasksWidgetContent, QuickTasksSheet, JourneyArtifactCard, ExpertsView) - Remove the Meeting Lead toggle from
QuickTaskDetailSheet; meeting quick tasks always convene with Mira
Phase 3 — Shared room chrome and the expert profile
3 tasksThe Rookery renders unchanged, from shared parts.- Extract
RoomChrome(label, rule, choice card, table chair, chair card, context block) fromRookeryRoomViewintoViews/Experts/Room/ - Build
ExpertProfile+ExpertProfilePopoverreadingAgentInfoCatalogfor core experts and the seat charter for Rookery seats, with Seat and Consult actions - Rebuild
RookeryRoomViewon the shared chrome with the profile popover on every chair
Phase 4 — The meeting room for code projects
7 tasksThe page Sarah found overwhelming becomes the room.- Add
MeetingRoomDraft(question, details, who sits, chosen ids in order, Mira's selection, prior meetings, context refs, per-project reset) - Add
ExpertBenchRouter— Mira chooses 2–4 experts from the bench digest, with a keyword fallback - Build
MeetingRoomView: question → who sits (I choose / Mira chooses / presets) → the table → the bench (five benches) → tell the room more - Seat Rookery guests in a code project: collapsed Rookery bench under the seating chart, guest ids allowed in the draft
- Give guest seats their charter in
buildAgentSystemPromptand resolve guest agents for the meeting and transcript views - Route
MeetingSetupPayload(flags, Mira handoff, follow-ups) into the room draft instead of the sheet on the Meetings tab - Reshape
MeetingsTabContent: flags and signals above the room, run launcher into the sidebar, intent sections retired
Phase 5 — A consultation in The Rookery
3 tasksAdditive summons kind; old sittings decode unchanged.- Add
RookeryMeetingConfig.SummonsKind.consultationand a consultation branch inrunRookeryLoop(answer at depth, no opener ceremony, Mira keeps the brief) - Add
RookeryDraft.consult(seatId:)and a sitting-or-consultation choice on the table when one seat is chosen - Consult from a seat's chair card, profile popover, and the Experts directory lands in the room as a consultation
Phase 6 — Personal's collapsed development bench
1 tasksThe reverse of the guest bench.- Replace Personal's collapsed intent sections with the collapsed
MeetingRoomView(core experts only) beneath The Rookery
Manual Testing
5 tasksSarah's; the build cannot exercise a live meeting.- Call a dev meeting with "Mira chooses" and confirm the why-line and seats read rightuser
- Seat a Rookery guest in a dev meeting and confirm the seat speaks in its own voiceuser
- Consult one Rookery seat from Personal and confirm it answers directly rather than opening with its questionuser
- Open expert profiles from both rooms and judge whether they read as who is availableuser
- Confirm Mira's name and color on lead bubbles in a fresh dev meeting; old transcripts keep "Meeting Lead"user
Risks & edge cases
Guest seats run in the weighted-random loop
A Rookery seat in a dev meeting gets 1–3 sentence turns, no room order, no standing tensions, no [silent]. Its charter and ceiling come through; its mechanics do not. The guest prompt says so, so the seat does not try to enforce them itself.
Two names for one role across time
New lead messages are recorded as “Mira”; old transcripts keep “Meeting Lead”. Summary prompts still work because the transcript carries names.
The room's height
Thirty-eight chairs in five benches is longer than nineteen. Benches collapse with counts and open by default; if it still reads as a wall, default the lower benches closed.
Two entry points build the same meeting
The sheet remains for the Project Overview, Tasks and Journey callers, unchanged except for the toggle. The room is the primary path on the Meetings tab.
The keyword fallback is crude
When Mira cannot be reached the fallback seats the three experts whose names and descriptions overlap the question most, and its why-line says so.
Out of scope
Reworking the in-meeting view's register (it is already the shared room; only labels change). Letting a core expert sit inside a Rookery sitting. Mira proposing Rookery guests for dev questions. Retiring StandupSetupSheet for the non-Meetings-tab callers. Rookery-style presets for the dev bench beyond the existing pre-composed groups and guided topics.
Final review
The plan reuses the two mechanisms that already work — the Meeting Lead machinery Mira already rides and the room skeleton Sarah already liked — and extends each across the boundary rather than inventing a third thing. Its weakest part is the dev bench's size: a chair design that suits nineteen seats may still be heavy at thirty-eight, and only seeing it will settle that. The guest-seat prompt is a hybrid (Rookery voice, dev loop) and may read oddly in a first meeting; the fix, if needed, is prompt text, not structure.
The uncertainty is almost entirely visual — whether the dev room reads as a room at first look — plus one judgment call (Mira allowed a read) that Sarah may reverse.