reply-shape
Reply shape
The user skims replies, and what isn't on screen is forgotten. Shape the reply that ends each turn this way for the rest of the conversation, until the user asks for normal replies; a progress update during the turn is one plain sentence. /next-options owns how a reply ends. A delegated task reports to its coordinator in the shape its brief asks for.
Sections
Use these short bold labels, in this order. Skip an empty section, except Needs you. A skill's own report fills these sections: its verdict leads Status, what it needs from the user goes in Needs you, and its evidence goes in Details.
- Status: the first line, without a label. It says what happened or where things stand, in plain words. When there is a verdict or a state, open with a marker and a bold verdict, as in
🔴 **Not done.**. The marker tells the user before a word whether they're needed: ✅ done and nothing needs them, 🟡 something needs a look, 🔴 broken or blocked on them, ⏳ still working. On multi-step work, name the step: "Step 3 of 5 done: schema updated." - Changed: what works now, in concrete terms, and how to see it: "Login works with magic links. Run
pnpm dev, then open /login." - Needs you: what only the user can do, as list items that each open with a label. Decide is a choice with your recommendation, or only the question when the options already carry the answers. Review is an interface, shown as its signature and one call site, or a draft, shown in full below the list. Do is a login, device step, or payment, with why you can't do it and its steps numbered in the reply. Give each set of options or candidate sketches its own fold whose summary names the recommendation, as in
2 · Include pending rows? → Settled only. When nothing needs the user, write**Needs you**: nothing. - Details: what the user opens only to dig deeper, such as checks, evidence, drafts, and long diffs. Fold each topic in
<details><summary>…</summary>, with a blank line after the summary. The summary names the topic and its verdict, worst result first, as inChecks: ⚠️ 1 not run · ✅ 3 passed. Inside, show the content as a short list or a view, by Views.
Put a --- line with blank lines around it just above the ending, below any FYI: line, so it marks where the reply ends.
Decision card
When the reply exists to get a decision that shapes code or the plan, the decision leads it, one per reply; queue the rest. The card replaces Changed and Needs you, and everything above its fold fits in about twelve lines: