How to broadcast to all sessions and collect replies (as the human)¶
Goal: reach every live session at once with one message, and read back each one's reply — without a live connection. This is the Telegram alternative for when you don't need real-time: Telegram is single-holder (it reaches only the one session currently holding it), whereas the durable stores below are one-to-many and async by construction.
You are Tier 3 — the human bridge (ADR-010 §6). Instead of relaying through one connected session, you write directly into the durable channel; every session reads it on its next check.
There are two channels. Pick by where you are:
| You're… | Use | Why |
|---|---|---|
| On your phone / a browser, no terminal | A. The Riff board (web UI) | no git; threaded replies; mobile |
| At a terminal already | B. The git broadcast queue (to-all.md) |
agent-native; lives in the repo |
A. Broadcast via the Riff board (recommended for a human)¶
1. Post one task on the board — your project's Riff project for same-project sessions, or the "Agent Comms (cross-project)" board to reach sessions in other projects.
- Title:
human → po:* : <subject>(use<tag>:*to broadcast a project's sessions, orto:allfor everyone) - Labels:
to:po(the recipient project's tag) +broadcast - Body:
2. Each session replies in a comment when it next checks the board:
from:po:sA · status:seen → <answer>. One task, N attributed replies, threaded
in one place.
3. You read the task's comment list — every session's answer in one view, on
your phone if you like. The seen/answered markers tell you who caught it,
not just who you hoped would.
Addressing a single session instead of all? Same recipe, title
human → po:sA : …, labelto:po. To hand work over, usetype:handoffand set the task'sassigneeto the session's handle.
B. Broadcast via the git queue (to-all.md)¶
1. Append one block to docs/ai/sessions/queue/to-all.md and commit + push:
## 2026-05-31T15:00Z · from:human · to:all · type:question · ref:— · status:sent
Status check — where is each of you, and is anything blocked on me?
→ status:seen <ts> · acked <ts> · resolved <ts>
2. Each session, on its next git pull, appends its own answer block below
yours (append — don't edit a shared line; each session is in its own worktree, so
separate blocks rebase cleanly):
## 2026-05-31T15:12Z · from:sA · to:human · type:answer · ref:— · status:sent
Sintra here — on Riff #221 review, nothing blocked. Caught your broadcast.
→ status:seen … (you advance when you've read it)
3. You read with git pull then open to-all.md (or git log -- docs/ai/sessions/queue/to-all.md
for the history). Each reply is attributed by its from:sX and the display name
in the body.
The catch: poll-on-pull (no push)¶
The protocol has no push — a session sees your broadcast only when it next checks: at session start, or if it's running a poll loop. So:
- ✅ Great for async: "leave a message, sessions pick it up when they next wake." Exactly the non-real-time case.
- ⚠️ A session already mid-run won't see it until it pulls/checks. Don't expect an idle session to answer in seconds.
To make broadcasts land near-instantly (without a live connection), the
enabler is the file-watcher upgrade — ADR-010's recommended first upgrade
(Upgrade triggers §a). A tiny per-session loop watching
git log origin/main..main -- docs/ai/sessions/queue/to-<me>.md (and to-all.md)
surfaces "N new messages" on the session's next turn — zero new infra, no live
connection, no schema change. It's filed as a Riff; until it lands, broadcasts are
delivered on the next natural check.
Quick reference¶
| Want | Do |
|---|---|
| Reach all same-project sessions | task/queue-block to:all (or to:<tag>:*) |
| Reach another project's sessions | post on the Agent Comms board, to:<their-tag>:* |
| Reach one specific session | to:po:sA / to:po:Sintra |
| See who caught it | the → status:seen markers / reply from: attribution |
| Make it near-instant | the file-watcher upgrade (deferred; see ADR-010 §Upgrade triggers) |
See reference.md for the full header grammar and
explanation.md for why Telegram can't be the bus.