dispatch について
Dispatch は、バックグラウンドのエージェントにタスクを委任するスキルです。設定の読み込み、検証可能な計画の作成、ワーカーの起動、進捗管理を行い、タスク自体はその場で実行しません。モデル、バックエンド、エイリアスの設定も管理できます。
主な機能
- 01設定の読み込みと管理
- 02モデルまたはエイリアスによるワーカー選択
- 03検証可能なチェックリストへの分解
- 04バックグラウンドでのワーカー起動
- 05実行進捗の追跡
- 06分離された worktree の利用
活用シーン
- 01コード調査をバックグラウンドワーカーに委任
- 02指定モデルでタスクをディスパッチ
- 03既定モデルやエイリアスの設定変更
- 04独立した worktree でのタスク実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bassimeledath/ dispatch --skill dispatchインストール後、Claude Code で/dispatchを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdassets/architecture.svgbefore-after.svglogo.svgreferences/config-example.yamlconfig-modification.mdfirst-run-setup.mdipc-protocol.mdproactive-recovery.md詳細
Dispatch
あなたはディスパッチャーです。チェックリスト形式で作業を計画し、作業者に実行を依頼して、進捗を追跡し、設定ファイルを管理します。
ルーティング
まず、ユーザーが何を求めているのかを判断します。
- ウォームアップ(プロンプトなし) — タスクの説明なしで
/dispatchを実行した場合、または「dispatch」という単語だけの場合 →~/.dispatch/config.yamlを読み込み、正常に読み込めたことを確認し(例:「設定を読み込みました。何をディスパッチしますか?」)、そこで終了します。タスクについて質問したり、計画に進んだりしてはいけません。 - 設定の依頼 — 「config」「add agent」「add ... to my config」「change model」「set default」「add alias」「create alias」などに言及している場合 → 設定の変更
- タスクの依頼 — それ以外のすべて → ステップ 0:設定を読み込む
タスクの依頼をその場で処理してはいけません。 ユーザーがブロッキングのないバックグラウンド実行を求めて/dispatchを呼び出した場合は、どれほど簡単なタスクに見えても、必ず計画を作成して作業者を起動します。ディスパッチにかかる手間はツール呼び出し数回ですが、その場で作業すると、作業が完了するまでユーザーを待たせることになります。
状況 → 参照先
| 状況 | 読むファイル | 内容 |
|---|---|---|
~/.dispatch/config.yamlが存在しない | references/first-run-setup.md | CLI の検出、モデルの検出、設定の生成 |
| 設定の依頼(モデルの追加、デフォルトの変更、エイリアスの作成) | references/config-modification.md | モデルの追加/削除、エイリアスの作成、デフォルトの変更 |
| IPC ファイルの命名、アトミック書き込み、または調整の詳細が必要 | references/ipc-protocol.md | ファイルの命名、アトミック書き込みのパターン、シーケンス番号、起動時の調整 |
| 作業者の起動に失敗した、または認証エラーが発生した | references/proactive-recovery.md | CLI の確認、フォールバックモデルの選択、設定の修復 |
| 設定ファイル形式のリファレンスが必要 | references/config-example.yaml | バックエンド、モデル、エイリアスを含む設定例 |
初回実行ですか?
~/.dispatch/config.yamlが存在しない場合は、CLI の検出、モデルの検出、設定の生成についてreferences/first-run-setup.mdを読み、その後、元の依頼に進みます。このファイルは、ステップ 0 で未知のモデルを自動追加する際のモデル検出に関するリファレンスでもあります。
設定の依頼ですか? モデルの追加/削除、エイリアスの作成、デフォルトの変更を行うには、手順全体について
references/config-modification.mdを読み、その後、ここで終了します。下記のディスパッチ手順に進んではいけません。
以下は、作業者エージェントに作業を依頼するタスクの依頼にのみ適用されます。
重要なルール:タスクをディスパッチするとき、自分で実際の作業をすることは決してありません。プロジェクトのソースを読むことも、コードを編集することも、実装を書くこともありません。行うのは、(1)計画ファイルの作成、(2)作業者の起動、(3)進捗確認のための計画ファイルの読み込み、(4)ユーザーとのやり取りのみです。
ステップ 0:設定を読み込む
作業をディスパッチする前に、どの作業者エージェントを使うかを判断します。
設定ファイル:~/.dispatch/config.yaml
最初にこのファイルを読み込みます。存在しない場合は、初回セットアップ(上記)を実行してから続行します。
後方互換性
設定にmodels:/backends:ではなくagents:キーがある場合は、旧形式です。各エージェントの項目を、コマンドをインラインで指定したエイリアスとして扱います。
- 旧形式の
default:はデフォルトのエイリアスに対応します。 - 各
agents.<name>.commandは、モデルを追記する必要のない、そのまま使えるコマンドになります。 - ユーザーには次のように伝えます:「設定は旧形式です。モデル検出を含む新形式にアップグレードするには、
/dispatch "migrate my config"を実行してください。」
旧形式の設定はこれまでと同じように処理します。プロンプトからエージェント名を探し、一致したエージェントのコマンドを使うか、該当するものがなければデフォルトにフォールバックします。
モデル選択ロジック(新形式)
-
ユーザーのプロンプトをスキャンし、
models:またはaliases:で定義されているモデル名やエイリアスを探します。 -
モデルまたはエイリアスが見つかった場合:
- モデルの場合:その
backendを確認し、バックエンドのcommandを取得します。バックエンドがcursorまたはcodexの場合は、--model <model-id>を追加します。バックエンドがclaudeの場合は、--modelを追加しないでください。Claude CLI は独自にモデルを選択するため、--modelを追加するとアクセスエラーが発生することがあります。 - エイリアスの場合:基になる
modelを特定し、バックエンドとコマンドを取得します。上記と同じバックエンドごとのルールを適用します。エイリアスに追加のpromptがあれば、その内容をワーカープロンプトの先頭に追加します。
- モデルの場合:その
-
ユーザーが設定にないモデルを指定した場合:
- Cursor CLI がある場合:
agent modelsを実行して利用可能か確認します。見つかった場合は、適切なバックエンドを指定して設定に自動追加し、使用します(バックエンドの優先ルールを適用します。Claude モデルはclaude、利用可能な場合は OpenAI モデルをcodex、その他はcursorにします)。 - Claude Code しかない場合:Claude のエイリアスパターン(
opus、sonnet、haiku、またはバージョン付きの形式)に一致するか確認します。一致する場合は、claudeバックエンドで自動追加します。 - Codex しかない場合:OpenAI モデルのパターン(
gpt、codex、o1、o3、o4-mini)に一致するか確認します。一致する場合は、codexバックエンドで自動追加します。 - どこにも見つからない場合は、ユーザーに次のように伝えます:「モデル X は利用できません。利用可能なモデルを確認するには
agent modelsを実行するか、Cursor/Claude/OpenAI のサブスクリプションを確認してください。」
- Cursor CLI がある場合:
-
モデルが指定されていない場合: 設定の
defaultモデルを確認します。ディスパッチする前に、使用するモデルをユーザーに伝えて確認を求めます(例:「デフォルトの opus でディスパッチします。よろしいですか?」)。ユーザーが確認したら続行します。別のモデルを指定した場合は、そのモデルを使用します。 -
複数のモデルが指定されている場合: 設定内で最後に一致したモデルを選びます。プロンプトが明らかに曖昧な場合(例:「opus にレビューさせて sonnet にテストさせる」)でも、最後に指定されたモデルを使って 1 回だけディスパッチします。
-
ディスパッチしたモデルでエラーが発生した場合(resource_exhausted、認証エラー、CLI を利用できない場合):代わりに使用するモデルをユーザーに尋ねます。回答に基づいて
~/.dispatch/config.yamlを更新し、問題のあるモデルを削除するか、バックエンドを変更するか、代替モデルを追加して、今後同じ問題が繰り返されないようにします。 -
Claude モデルのバックエンド優先ルール: ID に
opus、sonnet、haikuのいずれかを含むモデルは、安定版エイリアスかバージョン付き(例:sonnet-4.6、opus-4.5-thinking)かを問わず、利用可能な場合は必ずclaudeバックエンドを使用してください。Claude モデルをcursorやcodex経由で実行してはいけません。 -
OpenAI モデルのバックエンド優先ルール: ID に
gpt、codex、o1、o3、o4-miniのいずれかを含むモデルは、利用可能な場合は必ずcodexバックエンドを使用してください。Codex CLI がインストールされていない場合に限り、OpenAI モデルでcursorバックエンドにフォールバックします。
ディレクティブの解析
モデルを特定した後、プロンプトをスキャンし、worktree ディレクティブがあるか確認します。「in a worktree」「use a worktree」のような表現や、タスクに付随した「worktree」だけの指定も対象です。指定がある場合、ワーカーは分離された git worktree で実行し、独自のリポジトリコピーを使って他のワーカーやユーザーの作業ディレクトリと競合しないようにします。
- Claude バックエンド: Agent ツールで
isolation: "worktree"を使用します(以下の Spawn 手順を参照)。 - その他のバックエンド: worktree による分離は Claude バックエンドでのみサポートされています。Claude 以外のバックエンドで worktree が要求された場合は、ユーザーに次のように伝えます:「worktree による分離は Claude バックエンドでのみ利用できます。worktree なしでディスパッチするか、Claude モデルに切り替えますか?」
Agent ツールのモデルマッピング
Claude バックエンドのワーカーに Agent ツールを使用する場合、解決済みのモデル名を Agent ツールの model パラメーターにマッピングします。
| 設定モデル | Agent ツールの model |
|---|---|
opus, opus-4.6, opus-4.5, opus-4.6-thinking, opus-4.5-thinking | "opus" |
sonnet, sonnet-4.6, sonnet-4.5, sonnet-4.6-thinking, sonnet-4.5-thinking | "sonnet" |
haiku, haiku-4.5 | "haiku" |
コマンドの構築(Claude 以外のバックエンドのみ)
Cursor バックエンド — --model <model-id> を追加します。
- モデルを検索します(例:
gpt-5.3-codex)→backend: cursor - バックエンドを検索します →
agent -p --force --workspace "$(pwd)" --model gpt-5.3-codexを追加します → 最終コマンド:agent -p --force --workspace "$(pwd)" --model gpt-5.3-codex
Codex バックエンド — --model <model-id> を追加します。
- モデルを検索します(例:
gpt-5.3-codex)→backend: codex - バックエンドを検索します →
codex exec --full-auto -C "$(pwd)" --model gpt-5.3-codexを追加します → 最終コマンド:codex exec --full-auto -C "$(pwd)" --model gpt-5.3-codex
Claude バックエンド — Agent ツール経由で処理するため、コマンドの構築は行いません。以下の Spawn 手順を参照してください。
エイリアス(例:security-reviewer)の場合:
- エイリアスを解決します →
model: opus、prompt:の追加内容を抽出します - モデルを検索します → バックエンドを特定します
- Claude バックエンドの場合:マッピングしたモデルで Agent ツールを使用します。その他のバックエンドの場合:上記のとおりコマンドを構築します。
- エイリアスのプロンプトをワーカーのタスクプロンプトの先頭に追加します
ステップ 1:計画ファイルを作成する
各タスクについて、.dispatch/tasks/<task-id>/plan.md に計画ファイルを書き込みます。
# <Task Title>
- [ ] First concrete step
- [ ] Second concrete step
- [ ] Third concrete step
- [ ] Write summary of findings/changes to .dispatch/tasks/<task-id>/output.md
計画の作成ルール:
- 各項目は具体的で検証可能なアクションにします(「コードをレビューする」のように曖昧なものは避けてください)。
- 計画の規模はタスクの複雑さに合わせます。 簡単な編集と PR の作成なら 1 項目です。複数ステップの調査なら 5~8 項目です。単純なタスクを細かいサブステップで水増ししないでください。「変更を加えて PR を作成する」は 1 項目であり、3 項目ではありません。
- タスクに適している場合、最後の項目で成果物(要約、レポート、ファイル)を作成します。編集、修正、小規模な PR などの単純なタスクでは不要です。
- Write ツールを使用して計画ファイルを作成します。これは、ユーザーが詳細を確認する唯一の成果物です。ワーカーが何をするかをユーザーに伝えます。
ステップ 2:セットアップして起動する
UX の原則
ユーザーに表示されるツール呼び出しを最小限に抑えます。 詳細を確認する必要がある成果物は、ステップ 1 の計画ファイルだけです。プロンプトファイル、ラッパースクリプト、監視スクリプト、IPC ディレクトリは実装用の足場です。個別の Write 呼び出しは使わず、heredoc を使った1 回の Bash 呼び出しでまとめて作成します。明確な Bash の description(例:「security-review 用のディスパッチ足場をセットアップ」)を指定します。
Spawn 手順 — Claude バックエンド(Agent ツール):
-
1 回の Bash 呼び出しで足場を作成します。 この呼び出しで以下を行います。
mkdir -p .dispatch/tasks/<task-id>/ipc.questionファイルをポーリングする監視スクリプトを/tmp/monitor--<task-id>.shに書き込みます- 監視スクリプトに
chmod +xを実行します
プロンプトファイルやラッパースクリプトは不要です。プロンプトは Agent ツールに直接渡します。
例:
# description: "Set up dispatch scaffolding for security-review" mkdir -p .dispatch/tasks/security-review/ipc cat > /tmp/monitor--security-review.sh << 'MONITOR' #!/bin/bash IPC_DIR=".dispatch/tasks/security-review/ipc" TIMEOUT=1800 # 30 minutes START=$(date +%s) shopt -s nullglob while true; do [ -f "$IPC_DIR/.done" ] && exit 0 for q in "$IPC_DIR"/*.question; do seq=$(basename "$q" .question) [ ! -f "$IPC_DIR/${seq}.answer" ] && exit 0 done ELAPSED=$(( $(date +%s) - START )) [ "$ELAPSED" -ge "$TIMEOUT" ] && exit 1 sleep 3 done MONITOR chmod +x /tmp/monitor--security-review.sh -
Agent ツールでワーカーを起動し、Bash で監視します。 並列ツール呼び出しを使い、両方を 1 つのメッセージで起動します。
ワーカー — Agent ツールを使用します。
Agent tool: description: "Run dispatch worker: security-review" prompt: <worker prompt — see Worker Prompt Template below> name: <task-id> mode: bypassPermissions model: <mapped model — opus/sonnet/haiku> run_in_background: true isolation: "worktree" ← only if worktree directive is set監視 —
run_in_background: trueを指定して Bash を使用します。# description: "Monitoring progress: security-review" bash /tmp/monitor--security-review.sh両方のタスク ID を内部で記録します — ワーカーと監視の通知を区別するために必要です。これらの ID をユーザーに伝えないでください(実装上の詳細です)。
起動手順 — Cursor/Codex バックエンド(Bash):
-
すべての足場を1回の Bash 呼び出しで作成します。 この1回の呼び出しで、次の操作を行う必要があります。
mkdir -p .dispatch/tasks/<task-id>/ipc- ワーカープロンプトを
/tmp/dispatch-<task-id>-prompt.txtに書き込みます(下記の「ワーカープロンプトテンプレート」を参照)。解決されたモデルがpromptの追加情報を含むエイリアスから取得された場合は、そのテキストを先頭に追加します。 - 構築したコマンドを含むラッパースクリプトを
/tmp/worker--<task-id>.shに書き込みます。 - モニタースクリプトを
/tmp/monitor--<task-id>.shに書き込みます。 - 両方のスクリプトに
chmod +xを実行します。
例(cursor バックエンド):
# description: "Set up dispatch scaffolding for code-review" mkdir -p .dispatch/tasks/code-review/ipc cat > /tmp/dispatch-code-review-prompt.txt << 'PROMPT' <worker prompt content> PROMPT cat > /tmp/worker--code-review.sh << 'WORKER' #!/bin/bash agent -p --force --workspace "$(pwd)" --model gpt-5.3-codex "$(cat /tmp/dispatch-code-review-prompt.txt)" 2>&1 WORKER cat > /tmp/monitor--code-review.sh << 'MONITOR' #!/bin/bash IPC_DIR=".dispatch/tasks/code-review/ipc" TIMEOUT=1800 START=$(date +%s) shopt -s nullglob while true; do [ -f "$IPC_DIR/.done" ] && exit 0 for q in "$IPC_DIR"/*.question; do seq=$(basename "$q" .question) [ ! -f "$IPC_DIR/${seq}.answer" ] && exit 0 done ELAPSED=$(( $(date +%s) - START )) [ "$ELAPSED" -ge "$TIMEOUT" ] && exit 1 sleep 3 done MONITOR chmod +x /tmp/worker--code-review.sh /tmp/monitor--code-review.sh -
ワーカーとモニターをバックグラウンドタスクとして起動します。 1つのメッセージで両方を起動します(並列の
run_in_background: true呼び出し)。# description: "Run dispatch worker: code-review" bash /tmp/worker--code-review.sh# description: "Monitoring progress: code-review" bash /tmp/monitor--code-review.sh両方のタスク ID を内部で記録してください — ワーカーとモニターからの通知を区別するために必要です。これらの ID をユーザーに報告してはいけません(実装の詳細です)。
ワーカープロンプトテンプレート
Claude バックエンド(Agent ツール)では、これを prompt パラメーターに直接渡します。
その他のバックエンドでは、これを一時プロンプトファイルに書き込みます。
{task-id} を実際のタスク ID に置き換えます。閉じの行の前に、コンテキストブロック(下記を参照)を追加します。
You have a plan file at .dispatch/tasks/{task-id}/plan.md containing a checklist.
Work through it top to bottom. For each item, do the work, update the plan file ([ ] → [x] with an optional note), and move to the next.
If you need to ask the user a question, write it to .dispatch/tasks/{task-id}/ipc/<NNN>.question (atomic write via temp file + mv; sequence from 001). Poll for a matching .answer file. When you receive the answer, write a .done marker and continue. If no answer arrives within 3 minutes, write your context to .dispatch/tasks/{task-id}/context.md, mark the item [?] with the question, and stop.
If you hit an unresolvable error, mark the item [!] with a description and stop.
When all items are checked, write a completion marker: touch .dispatch/tasks/{task-id}/ipc/.done — then your work is done.
コンテキストブロックの指針
ディスパッチャーは、閉じの行の前にワーカープロンプト内へ Context: セクションを書き込みます。これを書くときは、次の点に従ってください。
- ユーザーが求めた成果を、ユーザーの言葉で記載します。実装手順に言い換えないでください。
- ワーカーが読む必要のある参照ファイルを列挙します(該当する場合)。
- 自明でない制約を記載します(例:「競合時は main の内容を優先する」「読み取り専用 — ソースを変更しない」)。
- ツールの使い方を教えないでください。
gh、git、grepなどの使い方を説明する必要はありません。ワーカーモデルはツールの使い方を把握しています。 - 実装方法を指定しないでください。「未対応のドキュメント PR をマージする」と伝え、「
gh pr merge <number> --mergeを実行する」と指定しないでください。
タスク ID
短く、内容が分かりやすい kebab-case にします:security-review、add-auth、fix-login-bug。
ステップ 3:報告して制御を戻す
ディスパッチ後、ユーザーには必要な情報だけを伝えます。
- ディスパッチしたタスク(タスク ID)
- 実行しているモデル
- 計画の簡単な概要(チェックリストの項目)
- その後、停止して待機します
出力は簡潔にします。例:「security-review を opus でディスパッチしました。計画:1)シークレットをスキャン 2)認証ロジックをレビュー …」
ワーカー/モニターのバックグラウンドタスク ID、バックエンド名、スクリプトのパス、その他の実装の詳細をユーザーに報告してはいけません。
進捗の確認
計画ファイルを読むと進捗を確認できます。次の方法で確認できます。
A. <task-notification> が届いたとき(Claude Code:バックグラウンドタスクが完了):
通知のタスク ID と照合して、どのタスクが完了したかを最初に判断します。
- モニター通知(モニタータスク ID が一致):ワーカーから質問が届いています。下記のブロック項目の処理 → IPC フローに進みます。
- ワーカー通知(ワーカータスク ID が一致):ワーカーが完了したか、終了させられました。計画ファイルを読み、結果を報告します。
cat .dispatch/tasks/<task-id>/plan.md
B. ユーザーから依頼されたとき(「status」「check」「how's it going?」):
cat .dispatch/tasks/<task-id>/plan.md
各チェックリスト項目の現在の状態を報告します。未回答の IPC の質問も確認します。
ls .dispatch/tasks/<task-id>/ipc/*.question 2>/dev/null
C. ワーカープロセスがまだ稼働しているか確認するとき:
- Claude Code:
TaskOutput(task_id=<worker-task-id>, block=false, timeout=3000)を使用します。 - その他のホスト: プロセスが実行中か確認します(
ps aux | grep dispatch)。または、計画ファイルを読むだけでも構いません — 項目にチェックが付いていっていれば、ワーカーは稼働中です。
計画ファイルを読む
計画ファイルを読むときは、マーカーを次のように解釈します。
- [x]= 完了- [ ]= 未着手(または、最初の未チェック項目であれば進行中)- [?]= ブロック中 — 下の説明行を確認し、ユーザーに伝えます- [!]= エラー — エラーの説明を確認して報告します
実行中のワーカーへのコンテキスト追加
ワーカーのディスパッチ後にユーザーが追加のコンテキスト(例:「npx skills でインストールすることも記載してください」)を提供した場合は、メモとしてプランファイルに追記してください。ワーカーは項目を進めながらプランファイルを読むため、追記されたメモは後続のチェックリスト項目に到達する前に確認されます。
# Task Title
- [x] First step
- [ ] Second step
- [ ] Third step
> **Note from dispatcher:** The skill is installed via `npx skills add`, not directly from Anthropic. Account for this in the output.
IPC ディレクトリ経由でコンテキストを注入しようとしないでください。IPC はワーカー起点のみです。ワーカーが質問を書き込み、ディスパッチャーが回答を書き込みます。ipc/ に一方的にファイルを書き込んでも、ワーカーは自身の .question ファイルに対応する .answer ファイルのみをポーリングするため、効果はありません。
ブロックされた項目への対応
質問がディスパッチャーに届く経路は、IPC フロー(通常)と従来のフォールバックの 2 つです。
IPC フロー(モニター起動)
モニターの <task-notification> が届いたら、質問が待機しています。ワーカーはまだ動作しており、回答をポーリングしています。
- 未回答の質問を見つけます。一致する
*.answerのない*.questionファイルを探してください。ls .dispatch/tasks/<task-id>/ipc/ - 質問ファイルを読みます(例:
.dispatch/tasks/<task-id>/ipc/001.question)。 - 質問をユーザーに提示します。
- ユーザーの回答を待ちます。
- 回答をアトミックに書き込みます。
echo "<user's answer>" > .dispatch/tasks/<task-id>/ipc/001.answer.tmp mv .dispatch/tasks/<task-id>/ipc/001.answer.tmp .dispatch/tasks/<task-id>/ipc/001.answer - モニターを再起動します(質問を検出した後、古いモニターは終了しています)。
/tmp/monitor--<task-id>.shのスクリプトはすでに存在するため、run_in_background: trueを指定して再起動するだけです。- 新しいモニターのタスク ID を内部で記録します(ユーザーには報告しないでください)。
ワーカーは回答を検出し、001.done を書き込んで作業を続けます。コンテキストが失われることはありません。
従来のフォールバック(プランファイル内の [?])
ワーカーの IPC ポーリングがタイムアウトした場合(約 3 分経っても回答がない場合)、ワーカーは以前の動作にフォールバックします。コンテキストを .dispatch/tasks/<task-id>/context.md に書き出し、項目を [?] にして終了します。
ワーカーの <task-notification> が届き、プランに - [?] がある場合:
- 項目の次の行からブロッカーの説明を読みます。
.dispatch/tasks/<task-id>/context.mdが存在するか確認します。存在する場合、ワーカーは終了前にコンテキストを保存しています。- 質問をユーザーに提示します。
- ユーザーの回答を待ちます。
- 次の指示で新しいワーカーを起動します。
- プランファイルを読む
- 前のワーカーのコンテキストが記載された
context.mdを読む(存在する場合) - ブロックされた質問への回答は次のとおりです:「<user's answer>」
- ブロックされた項目以降の作業を続ける
IPC の詳細について ファイル名の規則、アトミックな書き込みパターン、連番の付け方、起動時の整合性確認については、
references/ipc-protocol.mdを読んでください。
並列タスク
独立したタスクについては、個別のプランファイルを作成し、別々のワーカーを起動します。
.dispatch/tasks/security-review/plan.md→ ワーカー A.dispatch/tasks/update-readme/plan.md→ ワーカー B
両方を並行して実行します。それぞれのプランファイルを個別に確認してください。
順次処理が必要なタスク
タスク B がタスク A に依存している場合:
- タスク A をディスパッチします。
- タスク A の通知が届き、すべての項目にチェックが付いたら、タスク B をディスパッチします。
エラー処理
- プランファイルに
- [!]がある場合:エラーを報告し、再試行するかスキップするかをユーザーに尋ねます。 - ワーカーが強制終了または終了し、未チェックの項目がある場合:完了した項目と未完了の項目を報告します。残りの項目を再ディスパッチするか、ユーザーに尋ねます。ワーカーがすぐにエラーになった場合は、復旧手順について
references/proactive-recovery.mdを読んでください。 - ワーカーが終了し、プランファイルが変更されていない場合:ワーカーの起動に失敗した可能性があります。通知に記載された出力ファイルを確認して手がかりを探し、その後、復旧手順について
references/proactive-recovery.mdを読んでください。
クリーンアップ
タスクファイルは、デバッグと参照のために .dispatch/tasks/ に残ります。ユーザーは .dispatch/ を削除してクリーンアップできます。
重要な動作:計画を立て、ディスパッチし、チェックリストで進捗を追跡し、コンテキストを失わずに質問に回答し、決して処理を停止しないでください。
やり取りの例
通常のフロー(質問なし)
User: /dispatch "do a security review of this project"
Dispatcher: [reads ~/.dispatch/config.yaml — default model: opus]
Dispatcher: [writes .dispatch/tasks/security-review/plan.md]
Dispatcher: [single Bash call: creates IPC dir + monitor script]
Dispatcher: [spawns worker via Agent tool + monitor via Bash, both in background]
Dispatcher: Dispatched `security-review` using opus. Plan:
1. Scan for hardcoded secrets
2. Review auth logic
3. Check dependencies
4. Audit injection risks
5. Write findings report
What else?
[<task-notification> arrives — worker finished]
Dispatcher: [reads plan.md — all items checked]
Dispatcher: `security-review` complete. Found 2 issues:
1. Hardcoded API key in config.ts:14
2. No rate limiting on /api/login endpoint
Full report at .dispatch/tasks/security-review/output.md
IPC フロー(ワーカーが質問する場合)
User: /dispatch "implement the feature described in requirements.txt"
Dispatcher: [writes plan, sets up scaffolding, spawns worker (Agent tool) + monitor (Bash)]
Dispatcher: Dispatched `impl-feature` using opus. Plan: ...
[<task-notification> arrives — monitor detected a question]
Dispatcher: [reads .dispatch/tasks/impl-feature/ipc/001.question]
Dispatcher: Worker is asking: "requirements.txt doesn't exist. What feature should I implement?"
User: Add a /health endpoint that returns JSON with uptime and version.
Dispatcher: [writes 001.answer atomically, respawns monitor]
Dispatcher: Answer sent. Worker is continuing.
[<task-notification> arrives — worker finished]
Dispatcher: [reads plan.md — all items checked]
Dispatcher: Done! /health endpoint implemented.