Skip to content

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

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, or to:all for everyone)
  • Labels: to:po (the recipient project's tag) + broadcast
  • Body:
    from:human · to:po:* · type:question · ref:<Riff#|PR#|—> · status:sent
    <your message>
    

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 : …, label to:po. To hand work over, use type:handoff and set the task's assignee to 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.