← /teach Study Portal (herdr) に戻る /teach lesson

Lesson 02: プロンプト送信・完了待機・出力取得

Herdr Agent Automation · 所要時間: 5〜10分
リンク: ← Lesson 01 | クイックリファレンス
📖 この回の一次情報源

Agent automation: Choose the control surface
agent prompt, agent wait, agent read のライフサイクルと引数の詳細仕様です。

何を学ぶか

Lesson 01 では別 Pane にエージェントを起動しました。このレッスンでは、そのエージェントに対して:

  1. タスク(プロンプト)を投げる (agent prompt)
  2. エージェントの作業完了を待機する (agent wait または --wait)
  3. エージェントの出力をプログラムで読み取る (agent read)
  4. 確認ダイアログ(blocked 状態)に対処する (agent send-keys)

エージェントのライフサイクル状態

Herdr はターミナル描画を解析し、エージェントの状態を常に以下のいずれかに分類します:

状態意味アクション
working 推論・コード生成・ツール実行中 完了を待つ (agent wait)
idle 入力待ち(現在フォーカスされている) 次のプロンプト送信可能
done バックグラウンドで作業完了(未フォーカス) 結果読み取り可能 (agent read)
blocked 承認や質問のモーダルで停止中 キー送信で応答 (agent send-keys)
💡 idle と done の違い

エージェントがバックグラウンドで作業を終えると、ステータスは done になります。人間がそのタブを開くか、agent focus されると idle に遷移します。どちらも「作業完了・待機中」を意味します。

ハンズオン: やってみよう

Lesson 01 で起動した helper エージェントに対して実行します(まだ起動していない場合は Lesson 01 の手順で起動してください)。

プロンプトを送り、完了まで待つ (--wait)

$ herdr agent prompt helper "現在のディレクトリの一覧を確認して、何があるか1行で教えて" --wait --timeout 60000

ポイント:

エージェントの出力を取得する

$ herdr agent read helper --source recent-unwrapped --lines 30

ターミナルに出力された直近30行(改行を整形したテキスト)が標準出力に得られます!スクリプトで変数に格納してパースすることも可能です:

$ output=$(herdr agent read helper --source recent-unwrapped --lines 50)
$ echo "取得した結果:"
$ echo "$output"

プロンプト送信と明示的な wait を分けるパターン

複数のエージェントを同時に動かしたい時は、--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 になった場合の対処

エージェントがツールの実行許可を求めてきた場合、状態は blocked になります。その場合は agent send-keys でキーを送って承認または拒否できます:

# Enter を送って承認する例
$ herdr agent send-keys helper enter

# Esc を送ってキャンセルする例
$ herdr agent send-keys helper esc

オーケストレーションの全体フロー

ここまでの知識で、オーケストレーターの完全なライフサイクルが完成しました:

1. pane split 2. agent start 3. agent prompt 4. agent wait 5. agent read

クイズ

理解度チェック。答えを考えてから開いてください。

Q1: agent prompt--wait を付けない場合、コマンドはいつ戻るか?

プロンプト文字列とEnterキーをターミナルに送信した直後に即座に戻ります。複数エージェントを並行して動かしたい場合に有効です。

Q2: エージェントがファイルの書き込み許可を求めて止まっている時の状態は?

blocked です。この時 agent wait helper --until blocked で検知し、agent send-keys helper enter などで応答できます。

Q3: エージェントの出力を読む時、recent-unwrapped とは何をしてくれるか?

ターミナルの直近の行を取得しつつ、ターミナル幅で自動折り返しされた行を元の1行に結合(アンラップ)して返してくれます。