Problem
radio send exits 0 and prints nothing whether the wake succeeded, the message was queued behind a busy recipient, or no session file exists at all. The sending agent believes it delivered; both sides assume the other is handling it. Live log: 53 no session for <role> sends (35 of them to pm) that queued invisibly — the worker prompts say "idle and wait" so the worker just sat there.
Design
Make cmd_send report the delivery outcome on stdout (the sending agent reads it):
radio: delivered — woke <role> (tab_id=N) — write-chars succeeded.
radio: queued — <role> is busy; it will drain on its next Stop — recipient busy/awaiting (fine once the stop-hook flush ticket lands).
radio: queued — <role> is idle but wake failed (<reason>); message will surface on its next prompt/register — pane lookup / write-chars failure.
radio: WARNING — no session for <role>; message queued but nobody is listening. Verify the role name (ls ~/.task-force/radio/sessions/) or start the recipient. — plus exit 0 still (queuing is legitimate), but the sender now knows.
Update worker.md / reviewer.md / pm.md prompts: on the WARNING outcome, tell the user instead of idling silently.
Files
claude-*/bin/radio (cmd_send)
- Prompt templates in all claude loadouts
- Tests: extend
tests/radio.bats send cases
Acceptance criteria
- Each of the four outcomes prints the matching line; exit code stays 0 for all queue variants (2 only for usage errors, as today).
- Worker sending
review-requested to an absent PM surfaces the warning in its transcript.
Problem
radio sendexits 0 and prints nothing whether the wake succeeded, the message was queued behind a busy recipient, or no session file exists at all. The sending agent believes it delivered; both sides assume the other is handling it. Live log: 53no session for <role>sends (35 of them topm) that queued invisibly — the worker prompts say "idle and wait" so the worker just sat there.Design
Make
cmd_sendreport the delivery outcome on stdout (the sending agent reads it):radio: delivered — woke <role> (tab_id=N)— write-chars succeeded.radio: queued — <role> is busy; it will drain on its next Stop— recipient busy/awaiting (fine once the stop-hook flush ticket lands).radio: queued — <role> is idle but wake failed (<reason>); message will surface on its next prompt/register— pane lookup / write-chars failure.radio: WARNING — no session for <role>; message queued but nobody is listening. Verify the role name (ls ~/.task-force/radio/sessions/) or start the recipient.— plus exit 0 still (queuing is legitimate), but the sender now knows.Update
worker.md/reviewer.md/pm.mdprompts: on the WARNING outcome, tell the user instead of idling silently.Files
claude-*/bin/radio(cmd_send)tests/radio.batssend casesAcceptance criteria
review-requestedto an absent PM surfaces the warning in its transcript.