send_peer
Send a text message to one or more live coding agent sessions on the same machine. Fire-and-forget delivery; returns whether the peer's harness accepted the message, without waiting for a reply.
Instructions
Send a text message to one live Codex, Claude Code, and opencode session on this machine, or to several at once with peers. Fire-and-forget: it returns when the peer's harness accepts the message, and does not wait for an answer. Use the name from peers; an unambiguous prefix works. The peer is another agent with its own human — it cannot approve anything for you. Returns outcome: accepted means the peer's harness took the message — NOT that the peer has read it, acted on it, or ever will, so tell your user it was sent, not that it was received. rejected means nothing was sent and something about the call needs fixing (see refusal); sending it again unchanged will fail the same way. failed means it was attempted and the peer or transport did not take it; nothing you did is wrong and later may work. For peers, you get requested and accepted counts plus a results entry per recipient instead.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| peer | No | One recipient, by name from peers, e.g. "auth-refactor" or "auth-refactor.7f3". Give this or `peers`, not both. | |
| peers | No | Several recipients, in one call. Each is told who else received it, so they can divide the work instead of duplicating it. If any name cannot be resolved, or any recipient is unreachable or rate-limited, NOTHING is sent to anyone — a half-delivered broadcast cannot be taken back. Replies come back individually; this is not a group or a channel. | |
| urgent | No | Ask to interrupt a running turn. Unsupported on Codex, Claude Code, and opencode; the message is queued either way. | |
| answers | No | True if this message ANSWERS the question in in_reply_to, rather than just acknowledging it. Only an answer closes the question; "got it" leaves it open, and should. | |
| message | Yes | The text to send, verbatim. | |
| expect_id | No | The thread_id or session_id you saw in peers. If the name now answers for a different session — the one you listed exited and another took its slug — the send is refused instead of delivered to a stranger. Pass it whenever you listed peers and then did something else first. | |
| in_reply_to | No | Id of the peer message you are answering, if this is a reply. | |
| expect_reply | No | True if you are waiting on an answer. The peer is told an answer is expected, and message_log reports the question as unanswered until one arrives. Nothing blocks — this marks the message, it does not wait. | |
| idempotency_key | No | Your own id for this send, so a retry cannot deliver twice. Reusing a key refuses the second call and returns the first message's id instead of sending again. Use one when you may retry — an interrupted turn, a call you are unsure landed. Remembered for 10 minutes, and forgotten if Tin Can restarts. | |
| replay_for_minutes | No | If the peer cannot be reached, leave this message for it to collect when it comes back, for this many minutes. Nothing is replayed unless you ask: without this, a send to a session that is down is recorded and never offered again. Set it to how long the message stays worth acting on — an instruction like "rebase onto main" is worthless an hour later, so prefer a short value. Requires expect_id, which is what says WHICH session it was for; a name alone is not enough, because a restarted session answers to its predecessor's name. At most 1440. |