Skip to content
tmux logo

tmux Skill

tmux

Remote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.

SKILL.md

Full skill instructions

tmux Skill

Use tmux only when you need an interactive TTY. Prefer the shell tool for non-interactive tasks.

When to use

  • Running interactive CLIs (python REPL, node REPL, etc.)
  • Long-running processes that need monitoring
  • Parallel task execution with multiple sessions
  • Any command that requires a persistent terminal

Quickstart (isolated socket)

SOCKET_DIR="${TMPDIR:-/​tmp}/​chatdock-tmux"
mkdir -p "$SOCKET_DIR"
SOCKET="$SOCKET_DIR/​chatdock.sock"
SESSION=chatdock-main

# Create a new session
tmux -S "$SOCKET" new -d -s "$SESSION" -n shell

# Send commands
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'echo Hello World' Enter

# Capture output
tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200

After starting a session, always provide monitor commands to the user:

To monitor:
  tmux -S "$SOCKET" attach -t "$SESSION"
  tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200

Socket convention

  • Default socket: $TMPDIR/​chatdock-tmux/​chatdock.sock
  • Use a consistent socket path for all ChatDock sessions

Targeting panes

Target format: session:window.pane (defaults to :0.0)

# List all sessions
tmux -S "$SOCKET" list-sessions

# List all panes
tmux -S "$SOCKET" list-panes -a

Sending input safely

# Literal text (preferred)
tmux -S "$SOCKET" send-keys -t target -l -- "$cmd"

# With Enter key
tmux -S "$SOCKET" send-keys -t target -- "ls -la" Enter

# Control keys
tmux -S "$SOCKET" send-keys -t target C-c   # Ctrl+C
tmux -S "$SOCKET" send-keys -t target C-d   # Ctrl+D

Watching output

# Capture recent history (last 200 lines)
tmux -S "$SOCKET" capture-pane -p -J -t target -S -200

# Watch for a specific pattern (poll every 0.5s)
while ! tmux -S "$SOCKET" capture-pane -p -t target | grep -q "pattern"; do
  sleep 0.5
done
echo "Pattern found!"

Running Python REPLs

For Python REPLs, set PYTHON_BASIC_REPL=1 to avoid readline issues:

tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- 'PYTHON_BASIC_REPL=1 python3 -q' Enter

Parallel execution (multiple agents)

SOCKET="${TMPDIR:-/​tmp}/​multi-agent.sock"

# Create multiple sessions
for i in 1 2 3; do
  tmux -S "$SOCKET" new-session -d -s "task-$i"
done

# Launch tasks
tmux -S "$SOCKET" send-keys -t task-1 "cd /​project1 && npm test" Enter
tmux -S "$SOCKET" send-keys -t task-2 "cd /​project2 && npm test" Enter
tmux -S "$SOCKET" send-keys -t task-3 "cd /​project3 && npm test" Enter

# Poll for completion
for sess in task-1 task-2 task-3; do
  if tmux -S "$SOCKET" capture-pane -p -t "$sess" -S -3 | grep -q "\\$"; then
    echo "$sess: DONE"
  else
    echo "$sess: Running..."
  fi
done

Cleanup

# Kill a specific session
tmux -S "$SOCKET" kill-session -t "$SESSION"

# Kill all sessions on socket
tmux -S "$SOCKET" kill-server

# Remove socket file
rm -f "$SOCKET"

Windows/​WSL Note

This skill requires macOS or Linux. On Windows, use WSL and install tmux inside WSL.