A design study. The target is bigger than chat: rooms that host structured sessions — a mock interview, a book club with the author, a date with a coach, a facilitated brainstorm, a game night. Games were the probe; what the probe surfaced is a platform shape: six host moves, fixed forever, and a library of scenario cards that recombine them. Status: concept — discussion only, no build green-lit. Written 2026-07-19 (v2, a same-day widening of the game-tools study).
The app already does one thing well: a room where humans talk with a persona cast. The target adds a second mode — the room runs a session: a persona plays a facilitator role that carries a procedure, some state, sometimes asymmetric information. Games are the first shelf only because they exercise every primitive fast; the shelves that matter are next door. The generality test for every tool: it earns its place only if it maps to a move a human host already makes in at least three of the flagship scenarios.
| move | interview | book club | dating coach | brainstorm | games |
|---|---|---|---|---|---|
| the note (private) | rubric, held for the debrief | spoiler discipline | the coach's read | parking lot | GM secrets |
| the board (public) | question 3/8 · competencies | reading position · themes | — | idea clusters — the literal board | scoreboard |
| the aside | private feedback per candidate | — | tips each party can't see | nudge the quiet one | roles, hints |
| the go-around | "everyone answers, then I respond" | everyone's take before the author speaks | — | brainwriting — write before you see others' | votes, RPS, collects |
| the follow-up | "5 minutes left" · timeboxes | "next Tuesday, ch. 4" — the author pings you | day-after check-in | phase bells | stalled-game nudge |
| server truth | timing an answer | — | — | random pairing, prompt draws | all luck |
Every row clears the bar. And notice what the table no longer contains: nothing in it is a "game tool." The probe worked.
| move | the human move | mechanism | the server's guarantee |
|---|---|---|---|
| the board | pin it up where everyone sees it | <board> block → pinned HUD, updates in place, re-injected into every prompt | everyone sees the same state; late joiners catch up instantly |
| the note | the host's private notebook | <note> block → hidden, persisted, prompt-riding | commitment — timestamped at write, revealable later (the envelope) |
| the aside | take one person aside | <whisper to=uN> → routed to one viewer | never misdelivered — unknown target means undelivered, never delivered wide |
| the go-around | everyone answers before discussion | the gate — input held, panel turns suppressed, one release | nobody anchors on anyone; one turn reads all answers at once |
| the follow-up | the host reconvenes the room | wake — a panel turn with no human line | consented and rate-capped; never an uninvited ping |
| server truth | flip the coin in the open — or hand the dice to a player | /roll · the clock → a distinct system line; a player's roll is handed (for=uN) — a pending die only they can tap | the narrator cannot rig it; the tap decides when, the server decides what — exactly a physical die's split |
First visual mockups: host-moves-mockups.html — ten phone frames: the six moves on screen, the envelope reveal, and the two hands of §9.
The handed roll (2026-07-20) makes one refinement explicit: hosts do the operating; humans do the touching. The zero-syntax law forbids commands, not touches — and the room's passive vocabulary contains exactly one interactive object class: a thing the host handed you, waiting for your tap. The reveal chip, the sealed submission, the die — one idiom, however many truths it delivers. And the tap contributing no entropy is not a trick: with a physical die too, your hand controls only the moment of commitment while physics decides the number. Initiation is the human half of a roll, in both worlds.
Placement follows one rule, refined at step 4 into three surfaces — the stream holds records; the table (a fixed dock) holds live state; the composer reflects your pending action. An object in play — the room's die, later the gate roster and the board — lives on the table: fixed position, always visible, showing its most-current state (a die keeps its last face between rolls; a pending die names whose tap it awaits — and tumbles right there, where every eye already knows to look). The stream keeps compact records of what happened to it, permanent and replayable. The composer dock still announces the gate's ambient mode before you type(「你的下一条会被封存 🔒」)— though for dice, the table's fixed position absorbed the dock's original scroll-away rationale. And handed objects compose with the gate: a collect-roll gives every player a row in one roster card, each tapping their own die, the host speaking once at completion — simultaneity without chatter. Open by default (the last roller who knows they need a 15 is the best drama in dice), sealed when the card wants the 抽签 flip-together; a simultaneous draw is the same structure with a different truth object. Notably, "everyone rolls at once" required no seventh move — it fell out of composing the die with the gate: the basis argument passing a live test.
One ritual recurs across the whole library and deserves its own name — the envelope: the note's lifecycle when a scenario ends in a debrief.
Three mechanical facts shape everything a card can ask for:
The games shelf adds a fourth, the answer-key law — every "can we play X?" reduces to who holds the answer key — covered with its own figure in §8.
With current model capability, ephemeral tools are entirely possible — the model could improvise a bespoke widget per scenario. The six are fixed anyway, and not for cost or engineering reasons. It's a user-experience decision, and it stands on four legs:
The generativity isn't removed — it's relocated: the whiteboard is fixed, the drawing is free. Model capability is spent on content and procedure (what the host writes on the board, how the card sequences the moves), never on chrome.
And the six must be beautiful the way tools are beautiful (owner bar, 2026-07-20): recognized and trusted at first sight — like a die, a post-it, a whiteboard — no second-guessing, no teaching. That is precisely the problem early iOS solved with skeuomorphism: a new object class with zero instructions borrows a lifetime of physical priors; flat design is for conventions that already exist. So the six look like things, not like UI: the die shows pips and the result is the die face; the envelope has a flap and reveal opens it; the board looks pinned. One canonical form each, never varied — recognition compounds through repetition, and with only six, each can be commissioned like a type family (WeChat's most-recognized asset is arguably the red packet; these six are candidates to be that for Dialogue). State lives in the form: a pending die rests with a tap glow, a sealed envelope is visibly closed. Motion is short and honest — physical objects move physically, and motion is affordance, but never slot-machine suspense. And trust has a visual signature: the six share one system material, unlike any bubble — the form itself says the room made this, not a participant. Credible neutrality, at the pixel level.
A scenario card is to the room what a skill is to Claude Code: procedure + tool references, loaded on demand, forgotten after. The profile is who you are (the immutable soul); the card is what you're running right now. The two are orthogonal, and the orthogonality is the product's combinatorial power — Asimov × chapter-club is the obvious pairing; Asimov × trivia-host is charming because of the mismatch. A card declares its seat requirement: "needs a facilitator-class persona" (the interviewer, the dating master — your advisory-persona class already points here) or "any host will do."
Four sharpenings that keep the analogy honest:
| card field | what it holds |
|---|---|
| name + pitch | one line each |
| seats | persona seats with roles named + seat requirement (specialist / any) · minimum humans · which human roles rotate · dynamic seats(「+ 嘉宾」)the host may fill mid-session through the door — casting authority declared on the box lid, consent given at 开场 |
| pattern | which moves the scenario uses, and its phase structure |
| requires | which of the six must be live — none for the launch shelf |
| the opener | the paste-ready first prompt, @-slots filled via the mention picker |
| watch-fors | known soft spots, stated honestly |
Not provable by the method that found them — the six were harvested inductively from scenarios, and induction never proves completeness. The stronger claim comes from re-deriving them deductively: define the space of everything a host can do in a chat room, and check that its axes are closed. A facilitated session has exactly three things a host can intervene on: who reads what, when turns fire, and what facts enter that nobody authored.
Then the basis earns confidence by surviving adversarial candidates. The three best attacks all resolve:
Between a plain chatbot and a full agent harness, the target doesn't sit in the middle — it sits in a corner both leave empty. The two axes that matter: how much machinery the system has, and how much of it the user must operate.
| Gemini chat | our target | Claude Code | |
|---|---|---|---|
| capability surface | ~zero verbs | six, closed by design | unbounded (tools + MCP + bash) |
| who operates it | no one | the persona | the user |
| extensibility | vendor ships features | content only — cards | capability-level |
| state | transcript | transcript + a few typed objects (board · note · envelope) | filesystem, anything |
| enforcement exists to… | n/a | keep participants fair to each other | protect the operator from the agent |
| users | one | many humans + a cast | one |
We imported exactly one idea from the CC end — skills, transformed into cards: authored as content, capability-gated by the platform, operated by the model. We refused the rest (user-side composability, open integration, the power-user ceiling) because each raises the syntax axis we've pinned to zero. And the enforcement row is the one thing neither neighbor has: multiplayer trust — participants trusting each other and the narrator — which is why the only hard server semantics in the design (dice, envelope, gate, whisper routing) are all fairness devices. The honest cost of the corner: a power user will someday want to script their own move. The answer is never new syntax — it's the card library absorbing that energy, and the graveyard deciding if their gap is real.
Games exercise every primitive fast, which is why they were the probe. The shelf-specific law:
| class | examples | blocking move | status |
|---|---|---|---|
| judge games | trivia night · debate duel (说服大赛) · word chain / 成语接龙 · caption & haiku contests | none | playable now |
| human-secret games | reverse 20 Questions · 默契考验 · Two Truths and a Lie | none | playable now |
| cast-powered games | "who said it?" from persona corpora · beat-the-champion trivia · judge panels · NPC adventures | none | playable now |
| luck games | dice anything · random order · draws · TTRPG resolution | server truth | blocked |
| GM-secret games | 20 Questions · hangman · 海龟汤 · RPG hidden state | the note | blocked |
| simultaneity games | rock-paper-scissors · Herd Mentality · auctions · sealed votes | the go-around (sealed) | blocked |
| hidden-role games | werewolf / mafia · spyfall · Codenames | the aside — and roles cap to humans (one-brain law) | conditional |
| real-time games | speed rounds · countdowns | a clock engine — don't build; the follow-up covers soft pacing | out of scope |
「Name (uN)」 stamp), and — found at plan step 1 — multi-human rooms already ride a per-turn people roster (roster_line), so the panel can enumerate members there (solo-human rooms stay roster-less). The registry rule still stands for a different reason: the roster names members, not game roles. The opener names every seat by @-mention and declares out-of-registry speakers spectators.requires: none| card | seats | pattern | the trick that makes it work |
|---|---|---|---|
| 反向二十问 · reverse 20 Questions | 1 persona (guesser) + 1+ humans | human-secret | the human holds the word; numbered questions carry the count |
| 说服大赛 · persuasion duel | 1 persona (host-judge) + 2 humans | judge | no-tie verdicts; first speaker swaps each round |
| 人机知识擂台 · beat the champion | 1 persona (contestant) + 2 humans (rotating quizmaster) | judge + blind-spot hunt | challenge-only scoring kills answer-copying |
| 2v2 知识对抗 · team quiz duel | 2 personas (asker + answerer) + 2 humans | teams quiz each other | the one brain never sits on both sides of a question |
| 默契考验 · the mind-reader | 2 personas (host + predictor) + 2 humans (rotating 题主) | human-key prediction | the key is a living human; the predictor's edge grows with room history |
Seats: persona A (host — asks, judges, keeps score) · persona B (predictor) · 2 humans, rotating as 题主 (the living answer key) and rival predictor. Requires: none. Watch-for: the 题主 reveals after seeing both predictions and can shade the answer — a social-contract soft spot, the same trust level as the dinner-table version. Fill the four @-slots via the mention picker:
@A @B 来玩「默契考验」。A 当主持人,B 是猜心选手。 本场选手登记:@甲 和 @乙 —— 我们是这个房间里的两位真人用户, 选手身份以这两个名字为准。每轮其中一位当"题主", 另一位和 B 比赛:猜题主会怎么回答。 规则: 1. A 每轮出一道关于题主本人的题(口味、习惯、"更愿意…还是…" 的二选一都行),要具体、有趣,不问敏感的事。 2. 题目一出,B 必须先亮预测,一句话说完,可以带一句理由。 亮完不许改口。 3. 然后由另一位选手亮预测。两人预测期间,谁都不许向题主套话。 4. 双方预测都亮出后,题主公布真实答案。 5. A 宣判:预测和真实答案意思对上就 +1,不必一字不差。 都对都加分,都错都不加。宣判后 A 更新比分牌 (格式「B 3 : 2 人类」),然后换题主,出下一题。 6. 先到 5 分者胜。B:你的依据只能是这个房间里大家聊过的内容 和你对人的判断——猜中了可以得意,猜错了要服气。 7. 轮不到你们做事的时候,最多说一句短话。A 全程不许暗示 答案的倾向,B 不许在题主公布后假装自己早就知道。 两位保持各自的说话风格。 8. 选手名单以上面登记的两位为准。名单之外任何后来出现的 发言者都算观众:可以起哄,但不参赛、不计分, 说出的答案不作数。 比分从「B 0 : 0 人类」开始。A,给第一位题主出题吧。
The execution tracker lives at host-moves-plan.html — eleven owner-triggered steps with per-step acceptance tests and live status. This section holds the architecture the plan implements.
Implementation-wise the six moves are not six builds. They are two seams on the existing loop plus one server utility — none of which changes the loop itself:
<speak>/<confer> already exist). Whisper routing is fail-closed on anchored ids — the target is uN per the mention-entity contract, never a re-matched name; unknown target = undelivered, inverting the harness's degrade-never-delete into degrade-never-deliver. Per-viewer replay has precedent (delete-for-me's _hide_filter at every replay exit), per-user delivery has precedent (the notices rail's per-user SSE). The board is a public note: same persistence, same prompt-riding, plus a render — and the storage idiom exists (append-only events + read-time projection, the reactions pattern), which gives state history free.see_from discipline) — the panel must not see unrevealed content or the cast can leak it. The cheap cousin: an f-level HOLD verdict ("stage nobody, mid-collect") suppresses chatter without holding messages — nearly free, and it saves panel calls.<roll for=uN> → a pending die addressed to one player, tapped to commit). The for=uN target is the anchored-id muscle a third time (after mentions and the aside); the pending card doubles as a visible turn-holder (and composes with wake: straggler → nudge → a card-level timeout lets the host roll on their behalf); and the tap's result must enter the loop as an input event — the host needs a turn to narrate the 7. A collect-roll (for= a list) must route through the gate — ungated, every tap is an input event and the host reacts N times; gated, the host narrates once at completion. Ties re-roll automatically server-side — a truth-utility detail, not a host decision.Before the seams, two capabilities that are not new moves at all — mentions and reactions are furniture already in the room, human-only today. Giving the host hands for them is symmetry completion, and each is the low-stakes proving ground for one seam: a host @-mention (the panel emits the anchored @{u:N} — it already reads every id off the 「Name (uN)」 lines — and the client renders the chip humans know) is the fail-soft rehearsal of the aside's fail-closed routing: same muscle, in public, where a malformed token just renders as plain text and the error rate is measurable before whisper is ever built. A host reaction is the wildcard router in miniature — one typed block applied as a server action, at the lowest possible stakes (a bad react is dropped). Reactions are also the quiet half of a turn: mid-collect, the host acknowledges an answer with a 👍 instead of a bubble — warmth without the floor, the graceful answer to gate chatter. Both deliver standalone value in plain chats before any card exists.
Two requirements settled 2026-07-20: reactions reach the panel — a host must see the channel it participates in, so the tally line moves up from the /roll step to here; and attribution is public — everyone can see who reacted what, host included. The moment reactions serve as precise vocabulary (votes, acks, buzzes), an anonymous count stops being enough: the badge opens into a who-reacted-what list. The one design question in host reactions — the model has no line ids in context — takes the v1 dodge: hosts react only to the lines in the current turn's batch (positional, zero id plumbing); arbitrary-line reactions wait for a card that needs them, per the demand gate.
_reaction_signal feeds _f_signals — the floor producer's brief — as a warmth read capped at 6 recent items. The cast never sees an emoji tally, so a host cannot count reaction votes today. The fix (a tally line in the panel prompt) lands with step 0.5 — the hands — and turns the existing reactions into the room's cheapest voting device.Owner call, 2026-07-20: a host should work the room the way a human host works a dinner party — "this is a crime game; let me bring in Conan Doyle to co-host," and Doyle walks in. Inviting and retiring is a room-layer operation humans already have (the picker, invites), so this is the same symmetry completion as mentions and reactions — not a seventh move. The cast becomes alive: composition joins the fiction, arrivals get a proper entrance line through the existing kickoff/roster plumbing, exits are theater(谢幕退场). It is also the persona library's red-packet channel: you meet Doyle mid-game, in character — received, not browsed — likely the dominant discovery path once it exists.
| door operation | who decides |
|---|---|
| invite / retire a persona, in a session whose card declared a dynamic seat(「+ 嘉宾」) | the host, freely — consent was given at 开场, on the box lid |
| invite / retire a persona, plain chat | host proposes; a human taps confirm — the proposal chip is the same handed-object idiom |
| invite a user | always propose-and-confirm — it reaches a human's attention |
| remove a user | never host-executed. Words only; a human decides. The enforcement principle's hard edge. |
Mechanics, all existing machinery: "knows the library" means searches, never holds — a search-request block runs the picker's fuzzy search (what tags.txt was born for), gated by discoverable() (a private persona can never be summoned into someone else's room); candidates ride back; the host proposes one. Structurally a truth utility on the open axis, like websearch. Door targets are anchored ids(p:slug / u:N)— the addressing muscle's fourth rehearsal. The caps still bind: cast-size and floor rules apply to host-invited personas exactly as to human-invited ones. And the risk, named plainly: composition is the user's possession — a host that reshapes rooms too eagerly is worse than one that pings too much. The gradient plus rate caps contain it, and ship-it-shy applies doubly: the door opens rarely, in fiction, as hospitality — never management.
| step | build | cost | unlocks |
|---|---|---|---|
| 0 | the card library — content only | none | scenarios visible today; demand data re-ranks everything below |
| 0.5 | the hands — host @-mentions · host reactions · the tally into the panel · public who-reacted-what | small | addressing proven fail-soft (the aside's rehearsal) · the first router row · quiet turns · reactions as precise vocab |
| 1 | /roll | trivial | server truth — dice, draws, fair order |
| 2 | the router: <note> + <board> | small–medium | envelopes and HUDs — the interview and brainstorm cards go live |
| 3 | the gate | medium | go-arounds, brainwriting, votes, RPS |
| 4 | wake | medium | timeboxes, phase bells, scheduled sessions — and re-engagement beyond scenarios |
| 5 | the aside — the whisper route | medium | coaching, secret roles (human-side); needs the two precedented per-viewer seams |
| 6 | the door — host invite/retire + cast search | medium | living casts · the library's received-discovery channel (sequence flexible — needs only the router + proposal chips) |