---
name: send
description: |
  Send a message to another SPT agent. Use when the user says "send to", "message",
  "tell <agent>", or when you need to reach or reply to another agent yourself.
argument-hint: "<target>"
allowed-tools: [Bash]
---

<!-- [doc->REQ-DIST-SKELETON-THIN] [doc->REQ-SKILL-ARG-HINT] -->

# /sptc:send

Deliver a message to another agent (**body read from stdin**). The operative reach is delivered by the
adapter, not baked here (thin skeleton — the prose rides `spt adapter update`): a perched session
already carries send/reply in its **SessionStart brief** (the `messaging-perch` block). In short:

- **Send:** `printf '%s' "<body>" | spt send <target>` — `SENT` = live, `QUEUED` = spooled (success, do
  not retry).
- **Reply:** `printf '%s' "<body>" | spt send <sender>` (sender = the `from` on the `<EVENT>` you got).
- No perch yet? `/sptc:ready` (or `/sptc:live`) first — that is the only way a reply can reach you.
- **`spt ring` is for perchless sessions ONLY.** It sends and blocks for the reply, which is what a
  session with no listener needs and what a perched one never does: if you have a perch — spt-hosted
  or harness-hosted — always `spt send` and let the reply arrive on your perch. (Ring is safe on
  spt-core v0.46.0+; older cores read a down ready marker as "no perch", then adopted and deleted the
  perch directory — ready file, `info.json`, spool — silently.)

## Shortform — best for fan-out to many agents

<!-- [doc->REQ-TAG-PEER-MESSAGING] -->

A perched agent can message peers by embedding a tag in its **own turn output** — no `spt send`, no
Bash tool:

- **Peer message:** `@<t1,t2,t3 body @>` — `@<` opens; the comma-separated target list runs to the
  first space (no spaces inside the list); the body runs to the first `@>`. The adapter sends `body`
  to each target and confirms back into your context (which delivered, which had no perch). Multiple
  `@<…@>` blocks in one output all fire. A bare `@@id` does nothing (only the explicit block sends).
  A tag in your turn's **final** output dispatches as the turn ends and confirms on your **next**
  turn (marked as the previous turn's result) — no confirmation yet does not mean unsent; never
  resend a turn-end tag.

**Use the tag as the fastest method for sending short messages and replies to one or more agents**
(comma-separate the ids for several targets). Longer messages should leverage the
`printf … | spt send <target>` CLI above when you have the Bash tool.

To commune, use `/sptc:commune` (or write `.claude/<id>-commune.md`) — the reliable path.

Full guidance: `spt how-to send`.
