tmuxで複数のClaude Codeセッションを管理する方法
ターミナルでClaude Codeを起動して少しばかりの編集をするだけなら、すべてが整理されています。コマンドを実行し、タスクを与え、応答を待ち、閉じる。これだけで済めば問題ありません。問題は、4つや5つのプロジェクトを同時に開いているときに始まります。あるリポジトリではエージェントがテストをリファクタリングし、別のリポジトリではデータベースマイグレーションを書き、3つ目のリポジトリではビルドを実行しています。
30分もすれば、ターミナルは迷宮のような状態になります。どこでエージェントがコマンドの確認を待っているのか、どこでまだスクリプトを実行しているのか、どこでずっと前に完了してアイドル状態になっているのかがわからなくなります。tmuxウィンドウを手動で切り替えながらステータスを確認する必要があります。
devas.lifeブログの管理者を務める松山の卓さんは、Neovimやtmux向けの人気ユーティリティもいくつか手がけており、この問題に対する解決策を打ち出しました。彼の開発したtmux-claude-session-managerというプラグインは、エージェントが散らかったターミナルウィンドウを整理されたリストに変換し、素早い切り替えを可能にします。
このプラグインできること
本質的には、tmux内のClaude Code向けタスクマネージャーです。このツールはfzfインターフェース、tmuxの組み込みポップアップ機構、Claude Code自身の内部APIを結びつけています。
キーの組み合わせを押すと、すべての実行中セッションのリストが表示されたフローティングウィンドウが現れます。各プロセスのステータスがすぐに確認できます:
- working(エージェントがコマンドの生成または実行で忙しい状態)
- waiting(ユーザー入力または確認が必要)
- idle(セッションがアイドル状態)
- エージェントの最終アクティビティからの経過時間
注意が必要なエージェントは自動的にリストの上部に移動します。capture-paneによる画面ライブプレビューも一緒に表示されます。会話を切り替えなくても、どの質問アシスタントを困らせたかがすぐにわかります。
Enterを押すと、目的のウィンドウのコンテキストに直接移動し、ポップアップフレームでセッションが開きます。対話を終えた、またはエージェントが完了したら、キーの組み合わせを押してプロセスを削除すると、セッションがクリーンに閉じます。
内部の興味深い詳細
カスタムデーモンや重いbashフックでstderr出力をパースするようなことは一切ありません。著者はよりエレガントな道を選びました。
Claude Codeバージョン2.1.139以降は、組み込みのコマンドでエージェントの情報を公開できます。各実行中のコピーは、ローカルのスーパーバイザーに現在のステータスを報告します。プラグインはjqでこのJSONを読み取るだけです。
主な技術的課題は、プロセスをtmuxペインに紐づけることでした。例えばmacOSでは、ペインが子プログラムのPIDではなく親シェルのPIDを報告することがよくあります。プラグイン内では、スクリプトがチェーンに沿って識別子を紐づけています:プロセス -> tmuxペイン。
このバインディング 덕분에、プラグインはセッションではなくプロセスを追跡します。1つのプロジェクトで3つの異なるエージェントを起動した場合や、プラグインなしで隣接する通常ペインでClaudeを起動した場合でも、ツールは各プロセスを 찾아서 отдельную строкуとして表示します。ポーリング全体はわずか3つのシステムコールで済むため、インターフェースは遅延なく動作します。
もう一つの素晴らしいディテールとして、Claudeポップアップ内にいるときに選択メニュー( + )を開くと、プラグインはまず現在のポップアップをデタッチし、選択ウィンドウを外部ターミナル全体に展開します。縮小していく入れ子のマトリョーシカ人形のようなフレームにはなりません。
インストールと基本設定
ポップアップサポート付きのtmuxバージョン3.2以上、fzfのインストール、jqユーティリティ、最新のClaude Codeリリースが必要です。
TPMプラグインマネージャーを使用している場合、ファイルにこの行を追加します:
その後、 + を押してロードします。
デフォルトでは、プラグインは2つのキーの組み合わせを使用します:
- + で現在のディレクトリ内にポップアップウィンドウで新しいClaudeセッションを起動します(または既存のセッションに接続)
- + ですべてのアクティブなエージェントを含むfzfセレクターを開きます
リストウィンドウ内では、標準的な矢印キーとテキストフィルタリングが動作します。Enterで選択したセッションに切り替わり、でプロセスを強制終了します。
パラメータは簡単にオーバーライドできます。例えば、Claude自体の起動フラグを設定したり、ウィンドウサイズを変更したりできます:
モーダルコントロールのファン向けに、READMEにはvimスタイルのレイアウトとの統合の素晴らしい例があります。fzfを設定して、リストを / でナビゲーションモードで開くようにし、検索モードへの切り替えはまたはキーで実行できます:
インストールする価値はあるか
週に1回、数行のコードのためにClaude Codeを実行するだけなら、プラグインなしでも簡単に済みます。通常のターミナルタブで十分です。
このツールは、ターミナルでエージェントアプローチを積極的に活用し、異なるブランチやサブプロジェクト間でタスクを並列化している人に便利です。このプラグインは、適切なタブを見つける手間を省き、バックグラウンドタスクの監視を1つの明確な画面に統合します。セットアップは数分で済み、スクリプトのソースコードはコンパクトで透明性が高く、不要な魔法は一切ありません。
関連プロジェクト
