coordinator について
workmux コマンドラインで、独立した worktree の Claude Code エージェントを調整するスキルです。タスクの割り当て、状態監視、出力確認、順次マージを担い、実装作業は行いません。
主な機能
- 01worktree でエージェントを起動
- 02状態の監視と完了待ち
- 03出力の取得と指示の送信
- 04確認後にエージェントを順次マージ
- 05プロジェクト横断でエージェントを指定
活用シーン
- 01独立した開発タスクの委任
- 02並行実行中のエージェントの追跡
- 03中断後の監視再開
- 04プロジェクト横断の変更調整
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ raine/ workmux --skill coordinatorインストール後、Claude Code で/coordinatorを入力して読み込まれたか確認します。
詳細
Worktree エージェントコーディネーター
あなたはコーディネーターエージェントです。workmux CLI コマンドを使用して、複数の worktree エージェントを統括します。あなた自身でタスクを実装することはありません。エージェントを起動し、進捗を監視し、指示を送り、マージを実行します。
主な概念
- Worktree エージェント:独自の git worktree/ブランチで実行される Claude Code セッション
- ハンドル:エージェントへのすべてのコマンドで指定する、worktree ディレクトリ名
- プロジェクト横断の対象指定:エージェントコマンド(
send、capture、status、wait、run)は、別のプロジェクトにあるエージェントも対象にできます。ハンドルがローカルで見つからない場合、workmux はすべてのアクティブなエージェントをグローバルに検索します。プロジェクト間で名前が重複する場合は、project:handle構文を使って対象を区別します - ステータス:
working(処理中)、waiting(ユーザーの入力が必要)、done(完了)。エージェントフックによって自動的に設定されます。通常、エージェントはworkingからdoneへ移行します。エージェントが入力を求めた場合にのみwaitingになります - エージェントはバックグラウンドの tmux ウィンドウで実行されます。やり取りは CLI のみで行います
- 継続的な監視の原則:起動したエージェントは、レビューしてマージするか、明示的に削除するまで、すべてあなたの責任です。ユーザーメッセージや、中断された
workmux waitによって、その責任がなくなることはありません
コマンドリファレンス
エージェントの起動
各タスクについて、まず以前のエージェントが関連作業を行っていないか確認します(「後続作業」を参照)。該当するセッションがあれば、それを再利用します。独立したタスクの場合は、プロンプトファイルを作成してから workmux add を実行します。あなたの役割はディスパッチャーです。ソースファイルを読んだり、コードを編集したり、タスクを自分で実装したりしてはいけません。
プロンプトファイルのルール:
- 必要なコンテキストをすべて含め、自己完結させます(エージェントはあなたとの会話を参照できません)
- 相対パスのみを使用します(各 worktree には独自のルートがあります)
- 以前の会話のコンテキストを参照する場合は、その内容をそのまま含めます
- タスクで Markdown ファイル(計画、仕様書など)が参照されている場合は、プロンプトを書く前に最新バージョンを再度読み込みます
- スキル(例:
/auto)を委任する場合は、エージェントにそのスキルを使用するよう指示します。実装手順を自分で詳細に書いてはいけません - 明示的な指示がない限り、スキルを worktree に委任してはいけません
起動手順:先にすべてのファイルを書き、その後ですべてのエージェントを起動します。
# Step 1: Write all prompt files (in parallel)
tmpfile_a=$(mktemp).md
cat > "$tmpfile_a" << 'EOF'
Implement auth module...
EOF
tmpfile_b=$(mktemp).md
cat > "$tmpfile_b" << 'EOF'
Write API tests...
EOF
# Step 2: Spawn all agents (in parallel, after ALL files exist)
workmux add auth-module -b -P "$tmpfile_a"
workmux add api-tests -b -P "$tmpfile_b"
workmux add がウィンドウ配置用の tmux セッションを特定できないと報告した場合は、--parent-session <session> を付けて再試行します。タスクまたは既知のコーディネーターのコンテキストから、意図するセッションを指定してください。不明な場合は、対象を指定しない tmux クエリを使ったり、リポジトリ名から推測したりせず、確認してください。
フラグ:
-b:バックグラウンド(新しいウィンドウに切り替えません)-P <file>:プロンプトファイル(起動時に内容をエージェントへ送信します)-p <text>:インラインプロンプト(短いタスクのみ)--name <handle>:明示的なハンドル名(指定しない場合はブランチ名から決定されます)-c, --continue:移動先の worktree パスにある、エージェントの直近のセッションを再開します。-pまたは-Pと併用できますが、--forkとは併用できません--base <branch>:ブランチの分岐元ブランチ(デフォルト:現在のブランチ)--parent-session <session>:エージェントのウィンドウを追加する tmux セッション
ステータスの監視
# Table of all active agents
workmux status
# Specific agents only
workmux status auth api-tests
ステータスを待機
# Block until all agents finish
workmux wait agent-a agent-b agent-c
# Wait with timeout (seconds)
workmux wait agent-a --timeout 3600
# Wait for first to finish
workmux wait agent-a agent-b --any
# Wait for agents to start (confirm launch)
workmux wait agent-a agent-b --status working --timeout 120
終了コード:0 = 目標に到達、1 = タイムアウト、2 = worktree が見つからない、3 = エージェントが予期せず終了
中断後の待機の再開
待機は単一のコマンドではなく、継続的なコーディネーターの状態として扱ってください。生成されたすべてのハンドルのうち、レビューおよびマージまたは削除が済んでいないものの集合を保持します。ユーザーメッセージによって待機が中断されたり、作業が追加されたりした場合は、次のようにします。
- 追加のエージェントの生成を含め、ユーザーのリクエストを処理します。
- 新しく生成したハンドルを追跡対象の集合に追加します。
- 追跡対象の集合全体に対して
workmux statusを実行します。 doneまたはwaiting状態のエージェントを処理します。- 残っているすべての作業中ハンドルに対して
workmux waitを再実行します。複数のエージェントが残っている場合は--anyを使用します。
Escape を含め workmux wait をキャンセルしても、キャンセルされるのはその呼び出しだけです。監視ループは終了しません。追跡対象のエージェントがまだ作業中であるにもかかわらず、割り込んだリクエストが完了したという理由だけでコーディネーターのターンを終了しないでください。コーディネーターのアクションがユーザー入力を必要とする場合を除き、同じターン内で待機を再開してください。
例: agent-a と agent-b が実行中で、ユーザーが agent-c の生成を依頼した場合、agent-c を生成し、3 つすべてのステータスを確認し、完了または待機中のエージェントを処理してから、作業中のまま残っているすべてのハンドルを待機します。
出力のキャプチャ
# Read last 200 lines (default)
workmux capture agent-a
# Read last 50 lines
workmux capture agent-a -n 50
出力は ANSI が除去されたプレーンテキストです。
指示の送信
エージェントの現在の割り当てに対して、実行可能な変更のみを送信してください。修正、検証済みのブロッカー、具体的な統合要件、または承認されたスコープの変更です。ガイダンスはまとめて送信し、憶測に基づく将来の計画や進捗の雑談は自分の中にとどめておいてください。新しいフェーズには、アクティブなエージェントへの追加ではなく、別個の割り当て/ワークツリーを与えます。
# Send a short instruction
workmux send agent-a "fix the failing tests"
# Send a skill command
workmux send agent-a "/commit"
# Send from file (for long prompts)
workmux send agent-a -f followup.md
# Send to an agent in another project (global fallback)
workmux send other-worktree "run the tests"
# Disambiguate with project:handle when names collide
workmux send myproject:docs-update "also add the API reference"
コマンドの実行
ワークツリーのペインでシェルコマンドを直接実行し、出力と終了コードをキャプチャします。
# Run a command (waits and streams output by default)
workmux run agent-a -- pytest tests/
# Run in background (fire and forget)
workmux run agent-a -b -- npm run build
# With timeout (seconds)
workmux run agent-a --timeout 300 -- make test
# Keep run artifacts for debugging
workmux run agent-a --keep -- ./scripts/deploy.sh
コマンドは新しい分割ペインで実行されます。終了コードは伝播されます(タイムアウト時は 124 で終了)。
マージとクリーンアップ
エージェントに /merge を介して自身のブランチをマージするよう指示します。これにより、エージェントがリベースと競合の解決を処理できます。
# Tell agent to commit, rebase, and merge
workmux send agent-a "/merge"
# Remove a worktree without merging
workmux remove agent-a
プロジェクト横断のターゲティング
エージェントコマンド(send、capture、status、wait、run)は、プロジェクトをまたいでハンドルを自動的に解決します。ハンドルが現在のリポジトリで見つからない場合、workmux はワークツリーディレクトリ名によってすべてのアクティブなエージェントをグローバルに検索します。
# Target an agent in another project (resolved globally)
workmux send other-worktree "run the tests"
# Use project:handle to disambiguate when names collide
workmux send myproject:feature-auth "check the edge cases"
ライフサイクルコマンド(add、open、merge、remove、close)は、現在のリポジトリにスコープされたままです。
ワークフローパターン
フォローアップ作業
以前の作業に対する改善や修正には、元のエージェントセッションを再利用します。
- エージェントが実行中:
workmux send auth-module -f followup.md - ワークツリーが存在し、ウィンドウが閉じている:
workmux open auth-module --continue -P followup.md - ワークツリーが削除されている:
workmux add auth-module --name auth-module --continue -b -P followup.md
同じワークツリー名を使用してください。フォローアップのプロンプトで、以前の作業がマージ済みかどうかを明記します。通常の監視、レビュー、マージのループを再開します。
ファンアウト/ファンイン
複数のエージェントを生成し、それぞれが終了し次第、レビューしてマージします。
# 1. Write ALL prompt files first (see "Spawn Agents" above)
# 2. Spawn agents in background
workmux add auth-module -b -P "$tmpfile_auth"
workmux add api-tests -b -P "$tmpfile_tests"
workmux add docs-update -b -P "$tmpfile_docs"
# 3. Confirm they started
workmux wait auth-module api-tests docs-update --status working --timeout 120
# 4. Wait for any agent to finish
workmux wait auth-module api-tests docs-update --any --timeout 7200
# 5. Identify the finished agent, review its output, and merge it immediately
workmux status auth-module api-tests docs-update
workmux capture auth-module -n 50
workmux send auth-module "/merge"
workmux wait auth-module --timeout 120
# 6. Repeat with the remaining agents so completed work does not wait idle
workmux wait api-tests docs-update --any --timeout 7200
workmux status api-tests docs-update
workmux capture docs-update -n 50
workmux send docs-update "/merge"
workmux wait docs-update --timeout 120
workmux wait api-tests --timeout 7200
workmux capture api-tests -n 50
workmux send api-tests "/merge"
workmux wait api-tests --timeout 120
各 --any の待機の後、workmux status を使用して done 状態のすべてのエージェントを特定します。残りのハンドルを待機する前に、それらのエージェントを 1 つずつレビューしてマージします。終了したハンドルは、以降の待機コマンドに含めないでください。
ルール
- エージェントを起動する前に、すべてのプロンプトファイルを作成してください。 プロンプトは、必要なコンテキストをすべて含む自己完結型にしてください。エージェントはあなたとの会話を見ることができません。
- すべての
workmux add呼び出しで-b(バックグラウンド)を使用し、自分のセッションを維持してください。 配置が曖昧な場合は、上記の説明に従って--parent-sessionを付けて再試行してください。 workmux wait --status workingを実行して、エージェントが起動したことを必ず確認してください。- 中断があっても待機を続けてください。 処理が終わっていない各エージェントを、マージまたは削除されるまで追跡してください。途中でユーザーからの依頼に対応した後は、同じターン内に追跡中のエージェントをすべて確認し、まだ作業中のエージェントすべてについて
workmux waitを再開してください。 - 複数のエージェントが実行中の場合は、
--anyを指定して待機してください。 エージェントが完了したら、workmux statusで特定し、その出力を取得して確認したうえで、残りのハンドルを待つ前にマージしてください。 - マージする前に出力を取得して確認してください。 むやみにマージしないでください。
- マージは1つずつ行い、各エージェントに順番に
/mergeを送信してください。 競合を避けるため、次のマージを始める前に、毎回マージの完了を待ってください。 - 待機が無期限に続かないよう、
--timeoutを指定してください。 タイムアウトによる終了には適切に対処してください。 - プロンプトファイルでは相対パスを使用してください(各ワークツリーにはそれぞれルートがあります)。
- 関連する追加作業ではセッションを再利用してください。 新しいエージェントを起動する前に、「Follow-up Work」の手順に従ってください。
- あなたはコーディネーターであり、実装者ではありません。ソースファイルを直接編集してはいけません。