Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

using-tmux-for-interactive-commands

インタラクティブな入出力が必要なCLIツール(vim、git rebase -i、Python REPLなど)を実行する際に使用し、デタッチドセッションとsend-keysを活用したtmuxベースのアプローチでインタラクティブなセッションを制御できます。

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

SKILL.md 本文

インタラクティブコマンドに対する tmux の使用

概要

インタラクティブな CLI ツール (vim、インタラクティブな git rebase、REPL など) は、実際のターミナルが必要なため、標準的な bash では制御できません。tmux は、send-keyscapture-pane を通じてプログラム的に制御できるデタッチセッションを提供します。

使用時機

tmux を使用する場合:

  • vim、nano などのテキストエディタをプログラム的に実行する
  • インタラクティブな REPL (Python、Node など) を制御する
  • インタラクティブな git コマンド (git rebase -igit add -p) を処理する
  • フルスクリーンターミナルアプリ (htop など) と連携する
  • ターミナル制御コードや readline が必要なコマンド

使用しない場合:

  • シンプルな非インタラクティブコマンド (通常の Bash ツールを使用)
  • stdin リダイレクション経由で入力を受け付けるコマンド
  • インタラクションが必要ない 1 回限りのコマンド

クイックリファレンス

タスクコマンド
セッション開始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

コアパターン

以前 (動作しない)

# vim がインタラクティブターミナルを期待するため、ここでハングします
bash -c "vim file.txt"

現在 (動作する)

# デタッチされた tmux セッションを作成
tmux new-session -d -s edit_session vim file.txt

# コマンドを送信 (Enter、Escape は tmux のキー名)
tmux send-keys -t edit_session 'i' 'Hello World' Escape ':wq' Enter

# 画面上の内容をキャプチャ
tmux capture-pane -t edit_session -p

# クリーンアップ
tmux kill-session -t edit_session

実装

基本的なワークフロー

  1. デタッチセッションを作成 する (インタラクティブコマンドを含む)
  2. 初期化を待つ (100~500ms、コマンドによる)
  3. 入力を送信 する (send-keys を使用。Enter、Escape などの特殊キーも送信可能)
  4. 出力をキャプチャ する (capture-pane -p を使用して現在の画面状態を確認)
  5. ステップ 3~4 を繰り返す (必要に応じて)
  6. セッションを終了 する (完了時)

特殊キー

一般的な tmux キー名:

  • Enter - Return/改行
  • Escape - ESC キー
  • C-c - Ctrl+C
  • C-x - Ctrl+X
  • UpDownLeftRight - 矢印キー
  • 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 を参照:

# セッション開始
/path/to/tmux-wrapper.sh start <session-name> <command> [args...]

# 入力送信
/path/to/tmux-wrapper.sh send <session-name> 'text' Enter

# 現在の状態をキャプチャ
/path/to/tmux-wrapper.sh capture <session-name>

# 停止
/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  # 出力を確認
tmux kill-session -t python

Vim による編集

tmux new-session -d -s vim vim /tmp/file.txt
sleep 0.3  # vim の開始を待つ
tmux send-keys -t vim 'i' 'New content' Escape ':wq' Enter
# ファイルは保存されています

インタラクティブな Git リベース

tmux new-session -d -s rebase -c /repo/path git rebase -i HEAD~3
sleep 0.5
tmux capture-pane -t rebase -p  # リベースエディタを確認
# リベース指示を変更するコマンドを送信
tmux send-keys -t rebase 'Down' 'Home' 'squash' Escape
tmux send-keys -t rebase ':wq' Enter

よくある間違い

セッション開始後に待機しない

問題: new-session の直後にキャプチャすると、空白の画面が表示される

解決策: 最初のキャプチャ前に短い sleep を追加 (100~500ms)

tmux new-session -d -s sess command
sleep 0.3  # コマンドを初期化させる
tmux capture-pane -t sess -p

Enter キーを忘れる

問題: コマンドが入力されるが実行されない

解決策: 明示的に Enter を送信

tmux send-keys -t sess 'print("hello")' Enter  # 注: Enter は別の引数

間違ったキー名を使用する

問題: tmux send-keys -t sess '\n' は動作しない

解決策: tmux キー名を使用: \n ではなく Enter

tmux send-keys -t sess 'text' Enter  # ✓
tmux send-keys -t sess 'text\n'      # ✗

セッションをクリーンアップしない

問題: 孤立した tmux セッションが蓄積される

解決策: 完了時に常にセッションを終了

tmux kill-session -t session_name
# または存在確認: tmux has-session -t name 2>/dev/null

実際の効果

  • vim/nano のプログラム的な制御によるファイル編集を実現
  • インタラクティブな git ワークフロー (リベース、add -p) の自動化を可能にする
  • REPL ベースのテスト/デバッグを可能にする
  • ターミナルインタラクションが必要なツールのブロックを解除
  • カスタム PTY 管理を構築する必要がない - tmux がすべてを処理

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
obra
リポジトリ
obra/superpowers-lab
ライセンス
MIT
最終更新
不明

Source: https://github.com/obra/superpowers-lab / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: obra · obra/superpowers-lab · ライセンス: MIT