tmux-message
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.
Best use case
tmux-message is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
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.
Teams using tmux-message should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/tmux-message/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How tmux-message Compares
| Feature / Agent | tmux-message | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
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.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
SKILL.md Source
# tmux-message 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. ## When to use - claude-peers MCP `send_message` returned success but the receiver never acted on the message (silent failure mode observed in this fleet). - Sending a directive/handoff to a peer Claude Code session whose tmux session name is known (full or fuzzy). - Need to inject a multi-line message into another Claude Code TUI prompt and submit it as if the user typed it. Do NOT use for — peers outside tmux, shell-only sessions (no Claude Code TUI), or one-shot commands you would just paste yourself. ## Usage ```bash # 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. ## Workflow 1. **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> ``` 2. **Run send.sh**. It will: - Resolve the session (exact → fuzzy) - `capture-pane` and check for: idle `❯ ` prompt (good), activity spinner (warn), permission prompt (abort) - `load-buffer` → `paste-buffer` → `Enter` - Re-capture pane and report whether an activity indicator appeared (i.e. receiver submitted) 3. **Inspect** the receiver afterwards if needed: ```bash tmux capture-pane -t <session> -p | tail -20 ``` ## Safety gates The script aborts in these cases (override carefully): - **Permission prompt detected** (`Do you want to allow/approve/run`) — paste would be captured by the prompt handler instead of routed as input. Always abort. No override. - **Mid-tool-call activity** (`✻`, `✢`, `⚒`, `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. ## Edge cases - **Long messages (>5KB)** — paste-buffer may exceed tmux buffer limits on some versions. Prefer writing the body to a file the receiver can read; the message you send is then just `see /tmp/handoff-X.md`. - **Receiver at shell prompt (no Claude Code)** — paste still happens; Enter runs it as a shell command. Pre-flight catches absence of `❯ ` and warns. - **`Remote Control active` line in status bar** — indicates `/remote-control` skill is running on the receiver. Delivery still works. - **Multiple panes in the session** — script targets the active pane only. For multi-pane sessions, append `:0.0` (window:pane) to the session name in the first arg. ## Tradeoffs - Tmux-only. - Receiver sees the message as if the user typed it. Provenance only via the `[from X]` prefix you include — no read receipts. - Post-flight check confirms an activity indicator appeared but not that the receiver actually understood the directive. Treat as "delivered" not "actioned". - Message files at `/tmp/tmux-message-*.txt` are NOT auto-cleaned; that's intentional for replay/debugging. Sweep periodically.
Related Skills
tmux-status
Show status of all tmux sessions including dev environments, spawned agents, and running processes
tmux-monitor
Monitor and report status of all tmux sessions including dev environments, spawned agents, and running processes. Uses tmuxwatch for enhanced visibility.
tmux-verify
The outer "is this TUI feature ACTUALLY done?" proof loop for the ainb terminal app. Use when the user asks to "verify the TUI is actually done", "prove this TUI feature works", "validate per tmux-verify", "vhs verify each journey", "frame-truth check the UI", "is the diff actually shown correctly", or to define the acceptance contract for a TUI goal. Orchestrates 6 gates — (1) comprehensive tmux-ui-tripwire passes, (2) a vhs recording per user journey whose frames are READ with /media-processing to assert the EXACT user-visible outcome (not "screen shows something"), (3) one recording per journey, (4) fix-loop until acceptance + tripwire green, (5) a continuous /explain-to-me explainer (tests + commits + GIFs) hosted on /here-now, (6) final HTML-solid validation with the human as the last gate. References (does not reimplement) tmux-ui-tripwire, /media-processing, /explain-to-me, /here-now.
tmux-ui-tripwire
Write or debug tmux-driven end-to-end TUI tests ("tripwires") for the ainb terminal app. Use when the user asks to "write a tmux test", "add a tripwire", "verify the TUI in tmux", "test feature X by pressing key Y", "validate plugin Z renders", or when editing any file under `crates/ainb-core/tests/tripwire_*.rs`. Codifies the silent traps we hit during Phase 7 plugin testing — macOS AMFI SIGKILL of staged binaries (exit 137, no stderr), first-run wizard intercepting keystrokes, EnvFilter crate-name drift hiding logs, and substring-OR assertions that pass while the feature is broken. Use proactively before writing any new `tripwire_*.rs` test, and reference whenever an existing tripwire fails for non-obvious reasons.
workflow
Guide through structured delivery workflow with plan, implement, validate phases
webapp-testing
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
validate
Verify implementation against specifications
ui-ux-pro-max
UI/UX design intelligence. 67 styles, 96 palettes, 57 font pairings, 25 charts, 13 stacks (React, Next.js, Vue, Svelte, Astro, Nuxt, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui, Jetpack Compose). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient.
tui-style-guide
TUI style guide for consistent terminal interface design
token-usage
Show Claude Code token usage across sessions — daily, weekly, per-project, and per-session breakdowns. Parses {{HOME_TOOL_DIR}}/projects/**/*.jsonl for consumption data. Use when the user asks about token usage, costs, how many tokens were used, session statistics, or wants a usage report.
test-driven-development
Use when implementing any feature or bugfix, before writing implementation code. Enforces RED-GREEN-REFACTOR cycle with test-first approach.
test-ainb
Run tests for the ainb (agents-in-a-box) Rust workspace via a 5-layer strategy — unit, insta snapshot, mock-plugin compositing, real-plugin spawn, vhs recording. Wraps cargo + insta + vhs into one CLI. Use when Stevie says "/test-ainb", "test ainb", "run ainb tests", "snapshot <component>", "regenerate vhs tapes", or any phrasing about validating ainb test layers. The skill autodetects which ainb-tui worktree the cwd sits in and dispatches to scripts/run.sh.