toolkit/packages/skills/tmux-message/SKILL.md
Reliable peer-to-peer message delivery to other Claude Code instances via tmux send-keys. Use as a fallback when claude-peers MCP send_message fails to surface in the receiver's inbox (delivered server-side but receiver never picks it up — observed behaviour). Also use when sending a directive to a known Claude Code TUI session by tmux session name or fuzzy hint, or when injecting a multi-line directive into a peer's prompt and submitting it. Trigger phrases — "claude-peers fallback", "tmux send-keys", "send to peer via tmux", "inject directive", "deliver to nanoclaw/hermes peer", "peer message". Tmux-only — won't reach peers running outside tmux.
npx skillsauth add stevengonsalvez/agents-in-a-box tmux-messageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Deliver a message to another Claude Code TUI session running in tmux. Use the bundled scripts/send.sh — it handles session resolution, pre-flight safety checks, paste-buffer delivery, and post-flight verification.
send_message returned success but the receiver never acted on the message (silent failure mode observed in this fleet).Do NOT use for — peers outside tmux, shell-only sessions (no Claude Code TUI), or one-shot commands you would just paste yourself.
# Send file content
~/.claude/skills/tmux-message/scripts/send.sh <session-or-hint> <message-file>
# Send via stdin
echo "ping from hermes peer" | ~/.claude/skills/tmux-message/scripts/send.sh nanoclaw -
<session-or-hint> accepts either an exact tmux session name OR a unique substring. tmux ls is grepped — if zero or multiple matches, the script aborts and lists them.
Compose the message in a file. Always prefix with an origin marker so the receiver knows where it came from:
[from <my-peer-id-or-cwd>]
<directive body>
Run send.sh. It will:
capture-pane and check for: idle ❯ prompt (good), activity spinner (warn), permission prompt (abort)load-buffer → paste-buffer → EnterInspect the receiver afterwards if needed:
tmux capture-pane -t <session> -p | tail -20
The script aborts in these cases (override carefully):
Do you want to allow/approve/run) — paste would be captured by the prompt handler instead of routed as input. Always abort. No override.✻, ✢, ⚒, Frosting…, etc.) with no idle prompt visible — queueing into the current input buffer is risky. Override with TMUX_MESSAGE_FORCE=1 only when you understand the receiver state.see /tmp/handoff-X.md.❯ and warns.Remote Control active line in status bar — indicates /remote-control skill is running on the receiver. Delivery still works.:0.0 (window:pane) to the session name in the first arg.[from X] prefix you include — no read receipts./tmp/tmux-message-*.txt are NOT auto-cleaned; that's intentional for replay/debugging. Sweep periodically.documentation
Report reflect drain spend over a time window — tokens split by cached (cache_read), uncached writes (cache_creation), and io (input+output), with a $ estimate, grouped by day / outcome / model / transcript. Reads the drainer's cost log and surfaces outlier runs and cache-reuse health (the 41.5M-token failure mode = low cache reuse + high cache writes). Use to answer "what is reflection costing me" for the last day / week.
development
Show fleet status — every claude session running on the host, merged across ainb + claude-peers broker + background jobs. Use when you need to enumerate sessions before composing an action, see which sessions have a peer registered (broker-routable) vs tmux-only, check the `summary` of each session, or pipe the list into jq for filtering. Default output: text table. Pass --format json for LLM consumption.
testing
Ordered multi-step prompts to fleet targets, ack-gated between steps via JSONL assistant-turn-end detection. Use for cycles like disconnect→reconnect→verify, or any flow where step N+1 requires step N to have completed first. The skill BLOCKS until each target's transcript shows the next assistant turn finishing OR per-step timeout fires (default 300s).
development
Center control panel — enumerate every claude session that is blocked waiting on something: a user answer (AskUserQuestion fired), an API error retry, an idle assistant turn-end with no follow-up, or an explicit WAITING: marker. Returns rich JSON with signal kind + context per session. Use this when you've stepped away from the fleet and want one place to see everything that wants your attention and answer it.