Agent automation: Choose the control surface
agent prompt, agent wait, agent read のライフサイクルと引数の詳細仕様です。
Lesson 01 では別 Pane にエージェントを起動しました。このレッスンでは、そのエージェントに対して:
agent prompt)agent wait または --wait)agent read)blocked 状態)に対処する (agent send-keys)Herdr はターミナル描画を解析し、エージェントの状態を常に以下のいずれかに分類します:
| 状態 | 意味 | アクション |
|---|---|---|
working |
推論・コード生成・ツール実行中 | 完了を待つ (agent wait) |
idle |
入力待ち(現在フォーカスされている) | 次のプロンプト送信可能 |
done |
バックグラウンドで作業完了(未フォーカス) | 結果読み取り可能 (agent read) |
blocked |
承認や質問のモーダルで停止中 | キー送信で応答 (agent send-keys) |
エージェントがバックグラウンドで作業を終えると、ステータスは done になります。人間がそのタブを開くか、agent focus されると idle に遷移します。どちらも「作業完了・待機中」を意味します。
Lesson 01 で起動した helper エージェントに対して実行します(まだ起動していない場合は Lesson 01 の手順で起動してください)。
$ herdr agent prompt helper "現在のディレクトリの一覧を確認して、何があるか1行で教えて" --wait --timeout 60000
ポイント:
--wait を付けると、エージェントが working になり、その後 done / idle / blocked に戻るまでコマンドがブロックします。--timeout 60000 はミリ秒単位のタイムアウト(60秒)。$ herdr agent read helper --source recent-unwrapped --lines 30
ターミナルに出力された直近30行(改行を整形したテキスト)が標準出力に得られます!スクリプトで変数に格納してパースすることも可能です:
$ output=$(herdr agent read helper --source recent-unwrapped --lines 50)
$ echo "取得した結果:"
$ echo "$output"
複数のエージェントを同時に動かしたい時は、--wait なしで投げて、後から agent wait します:
# プロンプトを投げる(即座に戻る)
$ herdr agent prompt helper "Pythonで現在時刻を表示するスクリプト now.py を作成して"
# 完了を明示的に待つ(done または idle になるまで)
$ herdr agent wait helper --until done --until idle --timeout 60000
# 結果を読む
$ herdr agent read helper --lines 40
エージェントがツールの実行許可を求めてきた場合、状態は blocked になります。その場合は agent send-keys でキーを送って承認または拒否できます:
# Enter を送って承認する例
$ herdr agent send-keys helper enter
# Esc を送ってキャンセルする例
$ herdr agent send-keys helper esc
ここまでの知識で、オーケストレーターの完全なライフサイクルが完成しました:
理解度チェック。答えを考えてから開いてください。
agent prompt に --wait を付けない場合、コマンドはいつ戻るか?プロンプト文字列とEnterキーをターミナルに送信した直後に即座に戻ります。複数エージェントを並行して動かしたい場合に有効です。
blocked です。この時 agent wait helper --until blocked で検知し、agent send-keys helper enter などで応答できます。
recent-unwrapped とは何をしてくれるか?ターミナルの直近の行を取得しつつ、ターミナル幅で自動折り返しされた行を元の1行に結合(アンラップ)して返してくれます。