| name | tmux-controller |
| description | Remote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output. Essential for managing long-running terminal processes.
|
| license | Sustainable Use License 1.0 |
| metadata | {"domain":"development","subdomain":"developer-tooling","tags":"tmux, terminal, session, automation, cli","author":"Yunseo Kim <dev@yunseo.kim>","lastUpdated":"12026-02-18","provenance":"adapted"} |
tmux Session Control
Control tmux sessions by sending keystrokes and reading output. Essential for managing long-running terminal sessions.
When to Use
USE this skill when:
- Monitoring AI assistant sessions in tmux
- Sending input to interactive terminal applications
- Scraping output from long-running processes in tmux
- Navigating tmux panes/windows programmatically
- Checking on background work in existing sessions
When NOT to Use
❌ DON'T use this skill when:
- Running one-off shell commands - use shell execution directly
- Starting new background processes - use background execution
- Non-interactive scripts - use direct shell execution
- The process isn't in tmux
- You need to create a new tmux session - use
tmux new-session
Example Sessions
| Session | Purpose |
|---|
shared | Primary interactive session |
worker-2 - worker-8 | Parallel worker sessions |
Common Commands
List Sessions
tmux list-sessions
tmux ls
Capture Output
tmux capture-pane -t shared -p | tail -20
tmux capture-pane -t shared -p -S -
tmux capture-pane -t shared:0.0 -p
Send Keys
tmux send-keys -t shared "hello"
tmux send-keys -t shared "y" Enter
tmux send-keys -t shared Enter
tmux send-keys -t shared Escape
tmux send-keys -t shared C-c
tmux send-keys -t shared C-d
tmux send-keys -t shared C-z
Window/Pane Navigation
tmux select-window -t shared:0
tmux select-pane -t shared:0.1
tmux list-windows -t shared
Session Management
tmux new-session -d -s newsession
tmux kill-session -t sessionname
tmux rename-session -t old new
Sending Input Safely
For interactive TUIs, split text and Enter into separate sends to avoid paste/multiline edge cases:
tmux send-keys -t shared -l -- "Please apply the patch in src/foo.ts"
sleep 0.1
tmux send-keys -t shared Enter
Interactive Session Patterns
Check if Session Needs Input
tmux capture-pane -t worker-3 -p | tail -10 | grep -E "❯|Yes.*No|proceed|permission"
Approve Interactive Prompt
tmux send-keys -t worker-3 'y' Enter
tmux send-keys -t worker-3 '2' Enter
Check All Sessions Status
for s in shared worker-2 worker-3 worker-4 worker-5 worker-6 worker-7 worker-8; do
echo "=== $s ==="
tmux capture-pane -t $s -p 2>/dev/null | tail -5
done
Send Task to Session
tmux send-keys -t worker-4 "Fix the bug in auth.js" Enter
Notes
- Use
capture-pane -p to print to stdout (essential for scripting)
-S - captures entire scrollback history
- Target format:
session:window.pane (e.g., shared:0.0)
- Sessions persist across SSH disconnects