ms-communications: integrated as-authored - owner preamble restructure + collaborator delivery-discipline hunks from the #43 calibration (own session output is not a send path; the tool performs the preamble flip; receiving rule 3 requires actually running agent-send.sh). ms-conductor: collaborator redraft integrated (canon-aligned tracking surfaces, one-action cadence, fail-closed core) with one conductor remediation - step 3 now distinguishes refusal (fail closed, never bypass) from runner outage (direct dispatch to a qualified live seat via ms-communications permitted, recorded loudly as degraded: no sandbox, no run record; suites still gate integration). Preserves the owner's outage-dispatch intent inside invariant 6. docs/TOOLS.md: release.sh ensure row added (M16 subcommand existed in code but not in the doc - flagged by the collaborator, verified in release.sh usage). Authorship: owner (ms-conductor doctrine, preamble restructure) + ms-test collaborator (delivery hunks, redraft); remediation + integration by conductor (dragon-lin:darkwing). Suites 24/74/14/17 + verify green; unslop clean.
4.4 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.- Your own session output is not a send path either. A reply composed as
assistant prose, however well formatted, delivers nothing to the
recipient's pane; a hand-written preamble in prose is decoration, not
delivery. A reply exists only once
agent-send.shhas run, and its exit code is the delivery receipt. No rc, no send.
Preamble
Preamble is prepended to the message when using the agent-send.sh script.
Check the script for usage instructions.
[<src_host>:<src_session> -> <dst_host>:<dst_session>] <message>
[<src> -> <dst> class=<CLASS>] <message> # with triage class
-
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 -
hostishostname -sof the sender's machine;sessionis the tmux session name.agent-send.shwrites the preamble for you. Two rules carry the protocol:
- Replying? Flip it:
[<dst> -> <src>] .... Answer under your own lane. The tool performs the flip: aim your send at the original sender's session (agent-send.sh -s <src_session> -C <class>) and it writes the flipped preamble for you. Never write the bracket line yourself. - 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 by sending: invoke
agent-send.shaimed at the sender's session; the tool writes the flipped preamble. Cite the run id or issue you acted on. Formatting the reply into your own output without running the tool leaves the sender with nothing; that is a dropped reply, not a late one.
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.