| name | using-tmux |
| description | Control interactive CLI tools that require a real terminal via tmux send-keys. Use for git rebase -i, git add -p, vim, nano, Python/Node REPLs, or any command that hangs waiting for terminal input. |
| compatibility | Requires tmux. Install with apt install tmux (Linux) or brew install tmux (macOS). |
| allowed-tools | Bash(tmux:*) |
Using tmux for Interactive Commands
Persona: Terminal automation expert - enables programmatic control of interactive applications.
When NOT to Use
- Simple non-interactive commands (use Bash directly)
- Commands that accept stdin redirection
- One-shot commands that exit immediately
Quick Reference
| Task |
Command |
| Start session |
tmux new-session -d -s NAME COMMAND |
| Send input |
tmux send-keys -t NAME 'text' Enter |
| Capture output |
tmux capture-pane -t NAME -p |
| Kill session |
tmux kill-session -t NAME |
| List sessions |
tmux list-sessions |
Core Pattern
# 1. Create detached session
tmux new-session -d -s mysession vim file.txt
# 2. Wait for init
sleep 0.3
# 3. Send keys (Enter, Escape are tmux key names, not \n)
tmux send-keys -t mysession 'iHello World' Escape ':wq' Enter
# 4. Capture output
tmux capture-pane -t mysession -p
# 5. Clean up
tmux kill-session -t mysession
Special Keys
| Key |
tmux Name |
| Return |
Enter |
| Escape |
Escape |
| Ctrl+C |
C-c |
| Ctrl+X |
C-x |
| Arrows |
Up, Down, Left, Right |
| Space |
Space |
| Backspace |
BSpace |
Common Patterns
Interactive Git Rebase
tmux new-session -d -s rebase -c /path/to/repo git rebase -i HEAD~3
sleep 0.5
tmux capture-pane -t rebase -p # See editor
tmux send-keys -t rebase 'cwsquash' Escape 'j' 'cwsquash' Escape ':wq' Enter
tmux capture-pane -t rebase -p # See result
tmux kill-session -t rebase
Git Add Patch Mode
tmux new-session -d -s patch -c /path/to/repo git add -p
sleep 0.3
tmux capture-pane -t patch -p # See hunk
tmux send-keys -t patch 'y' # Stage this hunk
tmux capture-pane -t patch -p # See next
tmux send-keys -t patch 'n' # Skip this one
tmux send-keys -t patch 'q' # Quit
tmux kill-session -t patch
Python REPL
tmux new-session -d -s py python3
sleep 0.2
tmux send-keys -t py 'import math' Enter
tmux send-keys -t py 'print(math.pi)' Enter
tmux capture-pane -t py -p
tmux send-keys -t py 'exit()' Enter
tmux kill-session -t py
Vim Edit
tmux new-session -d -s vim vim /tmp/test.txt
sleep 0.3
tmux send-keys -t vim 'i' 'New content here' Escape ':wq' Enter
tmux kill-session -t vim 2>/dev/null
Common Mistakes
| Mistake |
Fix |
| Blank output after new-session |
Add sleep 0.3 before capture |
| Commands typed but not executed |
Send Enter as separate argument |
Using \n for newline |
Use Enter (tmux key name) |
| Orphaned sessions |
Always kill-session when done |
Should NOT Attempt
- Using for non-interactive commands (wasteful overhead)
- Sending shell escape sequences (
\n, \t) instead of tmux key names
- Forgetting cleanup (orphaned sessions accumulate)
- Capturing immediately without sleep (blank output)
Failure Behavior
If tmux commands fail:
- Check if tmux is installed:
which tmux
- Check if session exists:
tmux has-session -t NAME
- List all sessions:
tmux list-sessions
- Kill stuck session:
tmux kill-session -t NAME
Escalation
| Situation |
Action |
| tmux not installed |
Ask user to install: apt install tmux |
| Complex multi-step interaction |
Break into smaller send-keys + capture cycles |
| Need to see full scrollback |
Use tmux capture-pane -t NAME -p -S -1000 |