99 lines
4.4 KiB
Markdown
99 lines
4.4 KiB
Markdown
---
|
|
name: ms-communications
|
|
description: Use this skill whenever sending a message to, or receiving one from, another Mosaic agent.
|
|
disable-model-invocation: 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.sh` is 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 raw `tmux 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.sh` has 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` (or `MOSAIC_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`
|
|
|
|
- `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:
|
|
|
|
1. 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.
|
|
2. 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
|
|
|
|
1. 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".
|
|
2. One topic per message. Two asks in one paste is how the second gets lost.
|
|
3. 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.
|
|
4. No secrets. Messages land in scrollback, logs, and possibly comms daemons.
|
|
5. Waiting on a condition? Arm `agent-watch` on the condition, not a poll of a
|
|
colleague's pane. Waiting on a seat? Message them (see ms-watch).
|
|
|
|
## Receiving
|
|
|
|
1. Read the preamble first. Confirm you are the `dst`. Note the `src`.
|
|
2. Triage by class (table above). `actionable` or absent: act now, or reply why not.
|
|
3. Reply by sending: invoke `agent-send.sh` aimed 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: `0` delivered or queued, `1` target not found, `2` still draft,
|
|
`3` usage error, `4` ambiguous 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-watch` delivery means the text reached your pane as a
|
|
draft. Go read the pane; `auto-submit-drafts.sh` flushes 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.
|