using-tmux-for-interactive-commands
Original:🇺🇸 English
Translated
1 scriptsChecked / no sensitive code detected
Use when you need to run interactive CLI tools (vim, git rebase -i, Python REPL, etc.) that require real-time input/output - provides tmux-based approach for controlling interactive sessions through detached sessions and send-keys
13installs
Sourceovachiever/droid-tings
Added on
NPX Install
npx skill4agent add ovachiever/droid-tings using-tmux-for-interactive-commandsTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Using tmux for Interactive Commands
Overview
Interactive CLI tools (vim, interactive git rebase, REPLs, etc.) cannot be controlled through standard bash because they require a real terminal. tmux provides detached sessions that can be controlled programmatically via and .
send-keyscapture-paneWhen to Use
Use tmux when:
- Running vim, nano, or other text editors programmatically
- Controlling interactive REPLs (Python, Node, etc.)
- Handling interactive git commands (,
git rebase -i)git add -p - Working with full-screen terminal apps (htop, etc.)
- Commands that require terminal control codes or readline
Don't use for:
- Simple non-interactive commands (use regular Bash tool)
- Commands that accept input via stdin redirection
- One-shot commands that don't need interaction
Quick Reference
| Task | Command |
|---|---|
| Start session | |
| Send input | |
| Capture output | |
| Stop session | |
| List sessions | |
Core Pattern
Before (Won't Work)
bash
# This hangs because vim expects interactive terminal
bash -c "vim file.txt"After (Works)
bash
# Create detached tmux session
tmux new-session -d -s edit_session vim file.txt
# Send commands (Enter, Escape are tmux key names)
tmux send-keys -t edit_session 'i' 'Hello World' Escape ':wq' Enter
# Capture what's on screen
tmux capture-pane -t edit_session -p
# Clean up
tmux kill-session -t edit_sessionImplementation
Basic Workflow
- Create detached session with the interactive command
- Wait briefly for initialization (100-500ms depending on command)
- Send input using (can send special keys like Enter, Escape)
send-keys - Capture output using to see current screen state
capture-pane -p - Repeat steps 3-4 as needed
- Terminate session when done
Special Keys
Common tmux key names:
- - Return/newline
Enter - - ESC key
Escape - - Ctrl+C
C-c - - Ctrl+X
C-x - ,
Up,Down,Left- Arrow keysRight - - Space bar
Space - - Backspace
BSpace
Working Directory
Specify working directory when creating session:
bash
tmux new-session -d -s git_session -c /path/to/repo git rebase -i HEAD~3Helper Wrapper
For easier use, see :
/home/jesse/git/interactive-command/tmux-wrapper.shbash
# Start session
/path/to/tmux-wrapper.sh start <session-name> <command> [args...]
# Send input
/path/to/tmux-wrapper.sh send <session-name> 'text' Enter
# Capture current state
/path/to/tmux-wrapper.sh capture <session-name>
# Stop
/path/to/tmux-wrapper.sh stop <session-name>Common Patterns
Python REPL
bash
tmux new-session -d -s python python3 -i
tmux send-keys -t python 'import math' Enter
tmux send-keys -t python 'print(math.pi)' Enter
tmux capture-pane -t python -p # See output
tmux kill-session -t pythonVim Editing
bash
tmux new-session -d -s vim vim /tmp/file.txt
sleep 0.3 # Wait for vim to start
tmux send-keys -t vim 'i' 'New content' Escape ':wq' Enter
# File is now savedInteractive Git Rebase
bash
tmux new-session -d -s rebase -c /repo/path git rebase -i HEAD~3
sleep 0.5
tmux capture-pane -t rebase -p # See rebase editor
# Send commands to modify rebase instructions
tmux send-keys -t rebase 'Down' 'Home' 'squash' Escape
tmux send-keys -t rebase ':wq' EnterCommon Mistakes
Not Waiting After Session Start
Problem: Capturing immediately after shows blank screen
new-sessionFix: Add brief sleep (100-500ms) before first capture
bash
tmux new-session -d -s sess command
sleep 0.3 # Let command initialize
tmux capture-pane -t sess -pForgetting Enter Key
Problem: Commands typed but not executed
Fix: Explicitly send Enter
bash
tmux send-keys -t sess 'print("hello")' Enter # Note: Enter is separate argumentUsing Wrong Key Names
Problem: doesn't work
tmux send-keys -t sess '\n'Fix: Use tmux key names: , not
Enter\nbash
tmux send-keys -t sess 'text' Enter # ✓
tmux send-keys -t sess 'text\n' # ✗Not Cleaning Up Sessions
Problem: Orphaned tmux sessions accumulate
Fix: Always kill sessions when done
bash
tmux kill-session -t session_name
# Or check for existing: tmux has-session -t name 2>/dev/nullReal-World Impact
- Enables programmatic control of vim/nano for file editing
- Allows automation of interactive git workflows (rebase, add -p)
- Makes REPL-based testing/debugging possible
- Unblocks any tool that requires terminal interaction
- No need to build custom PTY management - tmux handles it all