3.6 KiB
3.6 KiB
name, description, disable-model-invocation
| name | description | disable-model-invocation |
|---|---|---|
| ms-communications | Use this skill whenever sending a message to, or receiving one from, another Mosaic agent. | false |
ms-communications
Agent-to-agent messaging: one channel, one addressing grammar, honest triage. Messages are transport. The durable record lives in run records, issues, and SESSIONS.md, never in a pane that scrolls away.
Channel
tools/tmux/agent-send.shis the only send path. It prepends the preamble, submits reliably (bracketed paste, Enter flush, draft detection), and ships itself over ssh for remote targets. Never rawtmux send-keys; that is how messages die as unsubmitted drafts.- Non-Fleet seats use the default docket.
- Fleet seats use the named socket:
-L mosaic-fleet(orMOSAIC_TMUX_SOCKET). Fleet traffic stays off the user's default tmux server. - Address durable fleet seats exactly:
=coder0, not a prefix that might match two sessions. - Tool spec and internals:
tools/tmux/README.md.
Preamble (required)
[<src_host>:<src_session> -> <dst_host>:<dst_session>] <message>
[<src> -> <dst> class=<CLASS>] <message> # with triage class
host is hostname -s of the sender's machine; session is the tmux session
name. agent-send.sh writes the preamble for you. Two rules carry the protocol:
- Replying? Flip it:
[<dst> -> <src>] .... Answer under your own lane. - A preamble-less cross-agent message is malformed. If you receive one, ask the sender to resend before acting on it.
Triage classes
| Class | Meaning | Recipient behavior |
|---|---|---|
| (absent) | fail-safe default | treat as actionable |
actionable |
decision, blocker, or gate | act, then reply |
human |
from a human operator | deliver; respond promptly |
reaction |
emoji or ack | note it; no reply expected |
terminal-log |
log-only noise | file it; never act |
digest |
machine-wake, coalescible | batch; wake and continue |
Class honestly. Never downgrade a question you want answered to terminal-log.
Etiquette
- Write for a context-wiped reader. Preamble plus body must carry the ask, the evidence (run id, issue number, path), and any deadline. The recipient has no "as I mentioned earlier".
- One topic per message. Two asks in one paste is how the second gets lost.
- Reply, even when the reply is "ACK, on it" or "cannot, reason follows". Silence is not an ack. A refusal with a reason is recoverable; a guess is not.
- No secrets. Messages land in scrollback, logs, and possibly comms daemons.
- Waiting on a condition? Arm
agent-watchon the condition, not a poll of a colleague's pane. Waiting on a seat? Message them (see ms-agent-watch).
Receiving
- Read the preamble first. Confirm you are the
dst. Note thesrc. - Triage by class (table above).
actionableor absent: act now, or reply why not. - Reply with the preamble flipped. Cite the run id or issue you acted on.
Delivery mechanics
- Exit codes:
0delivered or queued,1target not found,2still draft,3usage error,4ambiguous socket (the session name exists on more than one tmux server; disambiguate with-L). - A refusal is evidence. Diagnose it; do not route around it with raw send-keys.
- rc=2 from an
agent-watchdelivery means the text reached your pane as a draft. Go read the pane;auto-submit-drafts.shflushes stable drafts.
When not to message
- Waiting on yourself: do the next thing.
- Facts that must survive the exchange belong in the run record, the issue, or SESSIONS.md. A message that matters gets persisted where the record lives.