finding-duplicate-func…
Use when auditing a codebase for semantic duplication - functions that do the same thing but have different names or implementations. Especially useful for…
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
$ npx -y skills add obra/superpowers-lab --skill using-tmux-for-interactive-commands --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/using-tmux-for-interactive-commandsContext preview
The summary Claude sees to decide when to auto-load this skill.
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
name: using-tmux-for-interactive-commands description: 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
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 `send-keys` and `capture-pane`.
**Use tmux when:**
**Don't use for:**
| 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` | | Stop session | `tmux kill-session -t <name>` | | List sessions | `tmux list-sessions` |
# This hangs because vim expects interactive terminal bash -c "vim file.txt"
# 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_session
1. **Create detached session** with the interactive command 2. **Wait briefly** for initialization (100-500ms depending on command) 3. **Send input** using `send-keys` (can send special keys like Enter, Escape) 4. **Capture output** using `capture-pane -p` to see current screen state 5. **Repeat** steps 3-4 as needed 6. **Terminate** session when done
Common tmux key names:
Specify working directory when creating session:
tmux new-session -d -s git_session -c /path/to/repo git rebase -i HEAD~3
For easier use, see `/home/jesse/git/interactive-command/tmux-wrapper.sh`:
# 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>
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 python
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 saved
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' Enter
**Problem:** Capturing immediately after `new-session` shows blank screen
**Fix:** Add brief sleep (100-500ms) before first capture
tmux new-session -d -s sess command sleep 0.3 # Let command initialize tmux capture-pane -t sess -p
**Problem:** Commands typed but not executed
**Fix:** Explicitly send Enter
tmux send-keys -t sess 'print("hello")' Enter # Note: Enter is separate argument**Problem:** `tmux send-keys -t sess '\n'` doesn't work
**Fix:** Use tmux key names: `Enter`, not `\n`
tmux send-keys -t sess 'text' Enter # ✓ tmux send-keys -t sess 'text\n' # ✗
**Problem:** Orphaned tmux sessions accumulate
**Fix:** Always kill sessions when done
tmux kill-session -t session_name # Or check for existing: tmux has-session -t name 2>/dev/null
Experimental skills for Claude Code Superpowers - new techniques and tools under active development.
Repo: obra/superpowers-lab
Use when auditing a codebase for semantic duplication - functions that do the same thing but have different names or implementations. Especially useful for…
Use MCP servers on-demand via the mcp CLI tool - discover tools, resources, and prompts without polluting context with pre-loaded MCP integrations
Create, manage, or connect to a headless Windows 11 VM running in Docker with SSH access. Use when the user wants to spin up, stop, restart, or SSH into a…