using-tmux-for-interactive-commands について
tmuxを使って、対話型コマンドラインツールを操作する方法をエージェントに示すスキルです。セッションの作成、キー入力、画面出力の取得、終了までの手順を扱い、エディターやREPL、対話型Gitコマンドに対応します。
主な機能
- 01デタッチモードのtmuxセッション作成
- 02テキストと特殊キーの送信
- 03ターミナル画面出力の取得
- 04セッションの作業ディレクトリ指定
- 05セッションの終了と後片付け
活用シーン
- 01コマンドラインエディターでのファイル編集
- 02対話型Git rebaseの自動化
- 03PythonやNodeのREPL操作
- 04ターミナル操作が必要な全画面アプリの実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ obra/ superpowers-lab --skill using-tmux-for-interactive-commandsインストール後、Claude Code で/using-tmux-for-interactive-commandsを入力して読み込まれたか確認します。
同梱ファイルtmux-wrapper.sh
詳細
対話型コマンドでの tmux の使用
概要
対話型 CLI ツール(vim、対話型 git rebase、REPL など)は実際のターミナルを必要とするため、標準の bash では操作できません。tmux は、send-keys と capture-pane を使ってプログラムから操作できるデタッチされたセッションを提供します。
使用する場面
次の場合は tmux を使用してください:
- vim、nano、その他のテキストエディターをプログラムから実行する場合
- 対話型 REPL(Python、Node など)を操作する場合
- 対話型 git コマンド(
git rebase -i、git add -p)を扱う場合 - 全画面表示のターミナルアプリ(htop など)を使用する場合
- ターミナル制御コードや readline を必要とするコマンドを実行する場合
次の場合は使用しないでください:
- 単純な非対話型コマンド(通常の Bash ツールを使用してください)
- 標準入力からのリダイレクトで入力を受け付けるコマンド
- 対話の必要がない一度きりのコマンド
クイックリファレンス
| タスク | コマンド |
|---|---|
| セッションを開始 | tmux new-session -d -s <name> <command> |
| 入力を送信 | tmux send-keys -t <name> 'text' Enter |
| 出力を取得 | tmux capture-pane -t <name> -p |
| セッションを停止 | tmux kill-session -t <name> |
| セッションを一覧表示 | 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
実装
基本的なワークフロー
- 対話型コマンドでデタッチされたセッションを作成します
- 初期化を少し待ちます(コマンドに応じて 100~500ms)
send-keysを使って入力を送信します(Enter、Escape などの特殊キーも送信できます)capture-pane -pを使って出力を取得し、現在の画面の状態を確認します- 必要に応じて手順 3~4 を繰り返します
- 完了したらセッションを終了します
特殊キー
よく使われる tmux のキー名:
Enter- Return/改行Escape- ESC キーC-c- Ctrl+CC-x- Ctrl+XUp、Down、Left、Right- 矢印キーSpace- スペースキーBSpace- バックスペース
作業ディレクトリ
セッションの作成時に作業ディレクトリを指定します:
tmux new-session -d -s git_session -c /path/to/repo git rebase -i HEAD~3
ヘルパーラッパー
より簡単に使用するには、/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>
よくあるパターン
Python REPL
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
Vim での編集
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
対話型 Git Rebase
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
よくある間違い
セッション開始後に待たない
問題: new-session の直後に出力を取得すると、画面が空白になります
解決策: 最初に出力を取得する前に、短いスリープ(100~500ms)を追加します
tmux new-session -d -s sess command
sleep 0.3 # Let command initialize
tmux capture-pane -t sess -p
Enter キーを忘れる
問題: コマンドを入力しても実行されません
解決策: Enter を明示的に送信します
tmux send-keys -t sess 'print("hello")' Enter # Note: Enter is separate argument
間違ったキー名を使用する
問題: tmux send-keys -t sess '\n' が動作しません
解決策: \n ではなく、Enter などの tmux のキー名を使用します
tmux send-keys -t sess 'text' Enter # ✓
tmux send-keys -t sess 'text\n' # ✗
セッションのクリーンアップを忘れる
問題: 不要な tmux セッションが蓄積します
解決策: 完了したら必ずセッションを終了します
tmux kill-session -t session_name
# Or check for existing: tmux has-session -t name 2>/dev/null
実際の効果
- ファイル編集用の vim/nano をプログラムから操作できます
- 対話型 git ワークフロー(rebase、add -p)を自動化できます
- REPL ベースのテストやデバッグが可能になります
- ターミナルとの対話を必要とするあらゆるツールを利用できるようになります
- カスタムの PTY 管理を構築する必要はありません。tmux がすべて処理します