エージェント
Herdr は複数のコーディングエージェントを同時に動かすために作られています。各エージェントは、シェル、ログ、プロンプト、実行中プロセスをそのまま保った実際のターミナルペインの中にいます。Herdr はどのペインにエージェントがいるかを追跡し、その状態をタブとワークスペースに集約し、すべてのターミナルを手作業で見回る代わりに、注意が必要なペインへ直接ジャンプできるようにします。
スクリプトや別のエージェントから連携させる方法は、エージェント自動化 を参照してください。
対応エージェント
Section titled “対応エージェント”エージェントが Herdr 対応になる方法は 2 つあります。Herdr がそのエージェントに対応するか、エージェント自身が Herdr に対応するかです。どちらでも、各エージェントの idle、working、blocked 状態が表示され、完了時や対応が必要なときに通知され、スクリプトから待機できます。
それ以外のエージェントも Herdr のペインで普通に動きます。単に通常のターミナルとして表示されるだけです。
Herdr が対応するエージェント
Section titled “Herdr が対応するエージェント”Herdr はこれらのエージェントを認識し、画面の表示から状態を読み取ります。Herdr サーバーの再起動後に同じセッションへ戻るには、herdr integration install <name> でエージェントのインテグレーションをインストールしてください。各インテグレーションがインストールする内容はインテグレーションを参照してください。
| エージェント | インテグレーション | 備考 |
|---|---|---|
| Claude Code | claude | |
| Codex | codex | |
| GitHub Copilot CLI | copilot | |
| Cursor Agent CLI | cursor | |
| OpenCode | opencode | 状態も報告 |
| Pi | pi | 状態も報告 |
| OMP | omp | 状態にはインテグレーションが必要 |
| Droid | droid | |
| Devin CLI | devin | |
| Kimi Code CLI | kimi | 状態も報告 |
| Kilo Code CLI | kilo | 状態も報告 |
| Hermes Agent | hermes | |
| Qoder CLI | qodercli | |
| Qwen Code | qwen | |
| Letta Code | letta | CLI からのみインストール |
| MastraCode | mastracode | 状態にはインテグレーションが必要 |
| Grok CLI | grok | |
| Antigravity CLI | antigravity-cli | |
| Amp | なし | 状態のみ |
| Kiro CLI | なし | 状態のみ |
| Maki | なし | 状態のみ |
| Gemini CLI | なし | 状態のみ、テストは限定的 |
| Cline | なし | 状態のみ、テストは限定的 |
Herdr に対応するエージェント
Section titled “Herdr に対応するエージェント”これらのエージェントは自分の状態を Herdr に報告します。インストールするものはありません。Herdr のペインで実行するだけです。
resume コマンドも報告するエージェントは、Herdr サーバーの再起動後に同じセッションで戻ります。
コーディングエージェントを開発している場合は、エージェントに Herdr 対応を追加するでこの一覧に加わる方法を確認できます。Herdr の CLI かソケットを数回呼ぶだけで、Herdr 側の変更は不要です。
状態の仕組み
Section titled “状態の仕組み”Herdr が対応するエージェントでは、Herdr は各ペインでエージェントのプロセスを見つけ、スクロールした位置ではなくペインのライブな下部を読みます。検出マニフェストのルールが、その画面が idle、working、blocked のどれかを判定します。インテグレーションが状態も報告している場合、Herdr は画面を読む代わりにその報告を使います。
Herdr に対応するエージェントでは、エージェント自身の報告が状態を決めます。
VM とサンドボックスラッパー
Section titled “VM とサンドボックスラッパー”Linux と macOS では、ホストから見えるラッパーが実際のエージェントプロセスを Herdr から隠すことがあります。ラッパーのコマンドに HERDR_AGENT=<agent> を設定して、どの既存エージェントのスクリーンマニフェストを使うべきか Herdr に伝えてください。たとえば、Linux では HERDR_AGENT=claude fence -- claude、macOS では HERDR_AGENT=claude nono run --profile claude-code -- claude を実行します。このヒントはそのフォアグラウンドプロセスにスコープされます。VM やコンテナの内部だけで設定しても Herdr からは見えません。また、継承されるすべてのフォアグラウンドプロセスをそのエージェントとして扱いたいのでない限り、グローバルな export は避けてください。
一部の制限された Linux ランタイムでは、ターミナルのフォアグラウンドプロセスグループが公開されません。ネイティブ検出が利用できない場合に直接の子プロセスグループ推論を有効にするには、Herdr サーバーを HERDR_PROCESS_DETECTION=child-groups 付きで起動します。ネイティブ検出が引き続き優先され、デフォルトの native モードではこの推論を行いません。このオプトインモードはベストエフォートで、新しいバックグラウンドジョブをフォアグラウンドと誤認する可能性があります。この変数はサーバーが読み取るため再起動が必要です。アタッチするクライアントではなく、リモートサーバーの環境に設定してください。
blocked 状態
Section titled “blocked 状態”スクリーンマニフェスト方式のエージェントでは、blocked の検出は意図的に厳格です。Herdr が blocked と判定するのは、ライブの下部バッファスナップショットが既知の承認・質問・許可 UI にマッチしたときだけです。Codex 以外の既知エージェントでどのマニフェストルールにもマッチしない場合、Herdr は idle にフォールバックし、explain の出力ではそのフォールバックに default_known_agent_idle_fallback というラベルを付けます。Codex は、タイトルとコンポーザーがアクティブなターン中と応答後で同じに見える場合があるため、unknown にフォールバックします。
それら Codex 以外のエージェントでは、見慣れない新しいプロンプトが、Herdr がその画面の形を学習するまで、最初は blocked ではなく idle と表示されることがあります。誤分類の影響は表示上の状態と wait だけです。これによって Herdr が入力を送ったり破壊的な操作をしたりすることはありません。
Codex では、表示中のスピナーや稼働中のアクティビティタイマーから working を、表示中の承認プロンプトから blocked を判定できます。Codex のターミナルタイトルにスピナーが表示されていない場合、Herdr は idle と報告します。Codex が unknown のままになるのは、Codex がターミナルタイトルを設定していない場合など、どのルールにもマッチしないときだけです。その場合、idle または完了を待つ処理はタイムアウトすることがあります。管理対象の起動では、初期コンポーザーをプロンプト受付可能になったかの判定にのみ使います。この観測によってターン状態は変わりません。
検出マニフェスト
Section titled “検出マニフェスト”バンドルされたマニフェストは Herdr の内部にあります。Herdr は herdr.dev でリモートマニフェストの更新も確認し、有効なエージェント別ルール更新を Herdr の再起動なしで自動適用します。リモートマニフェストは Herdr の state ディレクトリに保存されます。バックグラウンドのリモートマニフェスト確認を無効にするには [update] manifest_check = false を設定します。
ローカルオーバーライドは、プラットフォームの設定ディレクトリからリモートまたはバンドルのマニフェストを置き換えられます:
~/.config/herdr/agent-detection/<agent>.tomlローカルオーバーライドが常に優先されます。ローカルオーバーライドがない場合、Herdr はキャッシュされたリモートマニフェストと実行中バイナリにバンドルされたマニフェストのうち、新しくて互換性のある方を使います。デバッグビルドでは、同じ設定ヘルパーが herdr-dev のような開発用ディレクトリを使うことがあります。無効なオーバーライドファイルは警告付きで無視され、Herdr はそのエージェントについてキャッシュされたリモートまたはバンドルのマニフェストにフォールバックします。
リモートマニフェストは、Herdr がすでに識別方法を知っているエージェントの検出ルールにパッチを当てるものです。完全に新しいエージェントの追加には、プロセス検出、ラベル、インテグレーション挙動のために Herdr バイナリのアップデートが引き続き必要です。
実行中のサーバーは起動時にアクティブなマニフェストをメモリに読み込みます。リモートマニフェストの自動更新は、新しいルールが書き込まれた後にそのメモリ内キャッシュをリロードします。herdr server update-agent-manifests を実行すると、リモートマニフェストの更新を即座に取得して実行中のサーバーをリロードします。ローカルオーバーライドを手で編集した後は、Herdr を再起動するか herdr server reload-agent-manifests を実行して、実行中のサーバーにファイルを適用してください。
ペインの状態表示がおかしいときは herdr agent explain を使ってください:
herdr agent explain <target>herdr agent explain --file screen.txt --agent codex --jsonライブの explain は実行中のサーバーが評価するので、アクティブなマニフェストキャッシュを反映します。explain の出力には次が表示されます: エージェント、最終状態、完全なライフサイクル権威によってスクリーン検出がスキップされたかどうか、マニフェストのソースとバージョン、キャッシュされたリモートバージョン、ローカルオーバーライドによるシャドーイング、リモート更新の状況、マッチしたルール、可視の証拠フラグ、評価されたルールのマッチャーとリージョンの証拠、トランスクリプトビューアーでの更新スキップ理由、そしてどのルールにもマッチしなかったときの idle フォールバック理由です。
Herdr は外側のターミナル環境として tmux の中で動かせます。エージェント検出は、Herdr のペイン内で起動された tmux セッションの中までは調べません。シェルフレームワークが Herdr 内で自動的に tmux に入る場合、Herdr はペインのプロセスとして背後のエージェントではなく tmux を見ることになります。
TMUX が未設定のときにシェルが自動的に tmux に接続する場合、シェルの起動条件を更新して Herdr のペインを除外してください。Herdr のペイン内から外側の tmux セッションに再接続すると、ターミナルのサイズが再帰的に縮小し、画面がちらつくことがあります。既存の条件に、tmux を実行する前に HERDR_ENV の確認を追加します:
if [[ -z ${TMUX:-} && ${HERDR_ENV:-} != 1 ]]; then tmux new-session -A -s my-sessionfi状態のロールアップ
Section titled “状態のロールアップ”サイドバーは状態を上位へ集約します。
blocked なエージェントは、そのペイン、タブ、ワークスペースを blocked に見せます。working なエージェントはワークスペースをアクティブに見せます。done なエージェントは、あなたが確認するまで表示され続けます。
これが Herdr の中心的なワークフローです: 複数のエージェントを起動し、並行して働かせ、サイドバーでどのプロジェクトが判断を必要としているか、どれがまだ実行中か、どれがレビュー待ちかを把握します。
カスタムエージェントラベル
Section titled “カスタムエージェントラベル”表示用にエージェントターゲットの名前を変えられます:
herdr agent rename w1:p1 reviewerherdr agent rename reviewer --clearターゲットには一意なライブエージェント名、または現在そのエージェントをホストしているペイン ID を使います。ターミナル ID とエージェント kind のラベルだけでは指定できません。
カスタムステータスラベル
Section titled “カスタムステータスラベル”インテグレーションは、ライフサイクル状態を意味的な状態としてのみ報告します。表示のカスタマイズは、ペインメタデータのトークンとして別に追加します。
herdr pane report-agent w1:p1 \ --source custom:indexer \ --agent docs-bot \ --state working
herdr pane report-metadata w1:p1 \ --source custom:indexer-display \ --token summary=indexingstate は wait、通知、ロールアップを制御します。summary トークンは表示専用で、エージェントサイドバー行では $summary として使えます。
エージェントサイドバー行では、terminal_title または terminal_title_stripped も任意で使えます。どちらもデフォルト行には含まれません。前者は安全性のために正規化された最新の OSC 0/2 ターミナルタイトルを表示し、後者は先頭にある認識済みのアクティビティまたはスピナーのグリフ 1 つと、それに続く空白を除去します。これらの値は Herdr サーバーが所有し、コールドリスタートをまたいで保持されません。また、メタデータのタイトルや意味的なエージェント状態から独立しています。そのため、除去後のテキストが同じなら、スピナーのアニメーションで生のタイトルが変わってもペイン更新は発行されません。
エージェントに直接アタッチする
Section titled “エージェントに直接アタッチする”完全な Herdr UI ではなく、ひとつのエージェントターミナルに現在のターミナルをアタッチします:
herdr agent attach reviewerctrl+b q でデタッチします。リテラルの ctrl+b は ctrl+b ctrl+b で送ります。
マウスホイールまたは通常の page up/page down でスクロールします。通常の入力をすると最下部に戻ります。
別のダイレクトアタッチクライアントがすでに入力を所有している場合は --takeover を使います:
herdr agent attach reviewer --takeoverエージェントではないターミナルで同じダイレクトアタッチ挙動が欲しいときは herdr terminal attach <terminal_id> を使ってください。