29 tasks · 7 phases · 19 files · 2026-09-15

Mira hosts the meeting

An option on the Mac and the phone to hand a meeting to Mira: it runs start to finish without waiting on you, she answers for you as marked assumptions, and she concludes it. You can drop in or take the chair back at any time.

15Built
6Yours to test
2Apps
0Runtime checks
The gist

Revised after the first live hand-over. A meeting can be hosted. You choose it when you convene, or hand a live meeting over. Every place the meeting would give the floor back to you gives it to Mira instead. She answers what was put to you in the room, each line marked Assumed for Sarah and logged in the brief. She keeps an agenda of what the meeting has to settle and steers the room through it. She cannot close before a normal meeting's worth of turns counted from the hand-over, and after that only when every item is settled. A ceiling bounds the run. Then the meeting concludes itself and a Workbench card says so.

The problem

Rookery sittings hand the floor back to you after every round, and Mira's job there is to put questions back to you. Development meetings run their turns alone but stop at the end and wait for Conclude. Mira's Room has a "Run it without me" path for standups, which is invisible from the meeting screens and the phone, and it cannot be joined or handed over.

Approach

Found live · fixed

The second run felt rushed, and nothing reviewed before closing

Reopening the already-hosted Peregrine meeting began no new run, so Mira's budget read as spent and she closed after one stretch of about fifteen minutes. A reopened or baseline-less hosted meeting now begins a fresh run. Every hosted close now waits on two closing reviews. Mira outlines the conflicts to decide and the unanswered items and gaps, every expert or seat adds what it sees, she folds it all into the agenda, and the room works through it. Then the same review runs again, and a close is honored only after the second.

Found live · fixed

The first hand-over concluded without Mira speaking

The Peregrine standup was handed over about 128 expert turns in. Hosting counted the whole transcript against a 36-turn ceiling, so the first decision point concluded it. Mira's check-ins were also capped at four per meeting, a cap the resumed meeting had already used. The rebuild counts from the hand-over, guarantees a normal meeting's worth of turns before Mira may close, gives her an agenda she keeps and steers by, and shows the conclusion on the meeting screen.

One flag, and the loops change only where they hand back the floor

StandupMeeting.hostedByMira persists with the meeting. The development loop's natural end and the Rookery's yieldFloor() are the only places that branch on it, so every existing path still ends at one of those points: your messages, directives, drift checks, and resume. A forked hosted loop was rejected because it would duplicate the pacing, passing, and phase logic.

Mira decides through a control line

Her hosting turn ends in NEXT: ROUND, NEXT: CUE … or NEXT: CLOSE, which is parsed and then stripped before the room sees the turn. The alternative, a second classifier call, would add a turn and a separate place to go wrong.

Three stops

The run ends when Mira closes, when the ceiling is reached (twice the opening budget for standups, three times for the Rookery), or when a decision point arrives with nothing new said since the last one.

Conclusion runs outside the loop's task

concludeMeeting() cancels the conversation task, which would be the caller, so hosting schedules the conclusion in a fresh task.

Decisions made for you

Judgment call

Spec reviews cannot be hosted

Ideation owns their conclusion flow, and an automatic conclusion would skip it. Reversible in StandupMeeting.canBeHostedByMira.

Judgment call

Different defaults when Mira's decision can't be parsed

A standup closes, because it has already used its budget. A Rookery sitting runs another round, because closing on a formatting slip would lose the work, and the ceiling still stops it.

Judgment call

Cancelling the Workbench card hands the chair back

It does not conclude or discard the meeting. The card settles as ready with "You took the chair."

Naming

"Mira hosts" in a room that already has a host

The Rookery's convene screen also has "Ask the host who sits", which refers to a different role. The copy stayed "Mira hosts" to match your request and the phone.

The work

Phase 1 — Service

7 tasksHosting flag, decision turns, ceiling, auto-conclude.
  • Add hostedByMira to StandupMeeting with defensive decoding and a canBeHostedByMira rule
  • Add StandupMeetingService+Hosting.swift with setMiraHosting, the hosting ceiling, the Workbench card, and auto-conclude
  • Route the development loop's natural end and user-response wait through hostedStandupNaturalEnd()
  • Add the hosting clause to lead prompts and the lead hosting decision prompt with its control line
  • Route the Rookery opening round and yieldFloor() into runHostedRookery() while hosted
  • Add Mira's hosted Rookery prompt (assumptions, brief, next step) and strip the control line from room text
  • Thread hostedByMira through startMeeting and startRookery

Phase 2 — Mac interface

2 tasksConvene choice and live control.
  • Add a "Who runs it" choice to RookeryRoomView and MeetingRoomView, hidden for one-seat meetings
  • Add a hosting banner and a Let Mira host / Take the chair control to the live meeting view

Phase 3 — Wire and phone

4 tasksAdditive protocol change; no version bump.
  • Add hostedByMira and canHost to the wire contract and the host command
  • Handle host and the convene flag in RemoteMeetingController, and map hosting state in RemoteMeetingMapper
  • Add the hosting choice to ConveneMeetingView and the hosting banner and control to LiveMeetingView
  • Show "Mira is hosting" on the live meeting card in MeetingsHomeView

Phase 4 — Hand-over fixes

5 tasksFrom the first live hand-over.
  • Measure the hosted floor and ceiling from the hand-over (hostingBaselineContributions), with a normal meeting's budget as the floor Mira cannot close before
  • Give Mira a kickoff turn on hand-over that writes the "Hosting agenda" and directs the first open item
  • Lift the lead check-in cap while hosted and have every hosted lead turn keep the agenda and steer to open items
  • Replace the single decision prompt with steer, decide, and closing turns, and close only when every agenda item is settled
  • Show a concluded banner and the handoff sheet when a meeting concludes outside the view's own button

Phase 5 — Verification

2 tasksCompile checks only.
  • Build the Mac app with scripts/verify-build-product.sh
  • Build Code Raven Mobile for the simulator

Manual Testing

6 tasksRuntime behavior; nothing here has run yet.
  • Convene a hosted Rookery sitting on the Mac and leave it: openers get answered as assumptions, rounds continue, it concludes with a record and a Workbench cardyours
  • Convene a hosted development meeting and leave it: Mira extends or closes, and it concludes on its ownyours
  • Pop in to a hosted meeting with a message: the room answers, then keeps going without youyours
  • Cancel a hosted meeting's Workbench card: the meeting stays open and the chair is yoursyours
  • Take the chair mid-run, then hand it back with Let Mira hostyours
  • From the phone: convene a hosted meeting, watch the banner, toggle hosting from the live viewyours

Risks & edge cases

Cost

An unattended meeting spends turns nobody is reading

The ceiling bounds it. Only Mira's close decision ends it sooner.

Quality

Assumptions compound

Later rounds build on what Mira assumed. Each assumption is marked in the room and the brief, but a wrong early one shapes everything after it.

Edge case

A hung CLI turn never reaches a decision point

Hosting can't conclude a meeting that is stuck mid-turn. Meetings behave this way today too, and the delegated runner's wall-clock limit was not reused.

Duplication

Two unattended-meeting paths

MiraDelegatedMeetingRunner still polls and concludes on its own. It starts unhosted meetings, so no meeting is concluded twice. Moving it onto hosting is a follow-up.

Out of scope

Consultations, view evaluations and off-sites. Spec reviews. Image upload on the phone. The Personal StandupSetupSheet path.

Final review

The design is small: one flag, two branch points, one decision prompt per loop, and it reuses the existing loops, the conclusion path, the Workbench card, and the phone's live state push. It is weakest in behavior nobody has observed yet. How often Mira chooses CLOSE, and whether her assumed answers are good enough to build on, can only be learned from real meetings. If the first hosted meetings run to the ceiling every time, the close criteria in the two prompts are the first thing to tighten.

78/100

The structure is sound and both apps compile. The remaining doubt is behavioral: Mira's close judgment and the quality of her assumptions haven't run yet.