Agent automation: Recipes
エージェント連携の公式レシピとベストプラクティスです。
これまでのレッスンで、Herdr をコマンドから操作する個々の部品を学びました:
herdr pane split で場所を作るherdr agent start でエージェントを立ち上げるherdr agent prompt でタスクを渡すherdr agent wait で完了を待つherdr agent read で結果を集約する今回は、これらを組み合わせて「Coder エージェント」と「Reviewer エージェント」の2つを同時に起動し、パイプラインで自動連携させるオーケストレーション・スクリプトを作成・実行します。
Orchestrator が司令塔となり、ターミナル上の Pane レイアウトを自在に構築して子エージェントたちに協調作業をさせます。
scripts/orchestrator.shワークスペースの scripts/orchestrator.sh に完成版スクリプトを用意しました:
#!/usr/bin/env bash
# 1. 右側に Coder 用 Pane を分割
split_coder=$(herdr pane split --current --direction right --no-focus)
coder_pane=$(printf '%s\n' "$split_coder" | jq -r '.result.pane.pane_id')
herdr agent start coder --kind agy --pane "$coder_pane"
# 2. Coder の下に Reviewer 用 Pane を分割
split_reviewer=$(herdr pane split "$coder_pane" --direction down --no-focus)
reviewer_pane=$(printf '%s\n' "$split_reviewer" | jq -r '.result.pane.pane_id')
herdr agent start reviewer --kind agy --pane "$reviewer_pane"
# 3. Coder にタスク依頼 & 完了待機
herdr agent prompt coder "fib.py を作成して" --wait --timeout 120000
# 4. Reviewer にレビュー依頼 & 完了待機
herdr agent prompt reviewer "fib.py をレビューして" --wait --timeout 120000
# 5. 結果を集約して表示
reviewer_output=$(herdr agent read reviewer --source recent-unwrapped --lines 30)
echo "$reviewer_output"
現在の Herdr ターミナルからスクリプトを実行します:
$ ./scripts/orchestrator.sh
(opencode を使いたい場合は ./scripts/orchestrator.sh opencode で実行できます)
coder エージェントが起動するreviewer エージェントが起動するcoder がコードを書き始めるcoder が書き終えると、reviewer が動き出すエージェントを終了させたい場合は、それぞれの Pane に ctrl+c や exit を送るか、手動で Pane を閉じることができます:
# エージェントに終了キーを送信
$ herdr agent send-keys coder ctrl+c
$ herdr agent send-keys reviewer ctrl+c
| パターン | 用途 | 実装のコツ |
|---|---|---|
| パイプライン型 (今回の例) |
実装 → レビュー → テストの直列リレー | agent prompt --wait で順次バトンタッチする |
| ファンアウト型 (並行実行) |
複数モジュールの並行実装、複数テストの並行実行 | agent prompt を各エージェントに投げた後、ループでそれぞれの agent wait を待つ |
| エージェント自身が親になる型 | AI エージェントが自律的にヘルパーを召喚する | AI に herdr コマンドを実行するツール権限を与えるだけで実現可能 |
各エージェントに agent prompt(--wait なし)を順に送った後、それぞれに対して agent wait を実行して全員の完了を待ちます。
はい。agent read はバックグラウンド(未フォーカスの done 状態)のターミナルからも直接テキストを読み取れます。