最近、Claude Code、Codex などのコーディングエージェントを動かす環境として、Herdr を愛用しています。Herdr を使うと、ターミナル上で複数エージェントを複数プロジェクトに跨り、並行で起動・管理するのが非常に楽になります。
今回、物理デバイス Stream Deck Neo を Herdr と組み合わせて使ってみたところ、複数エージェントでの開発体験がさらに良くなり、作業効率が格段に上がりました。
本記事では、Herdr ✕ Stream Deck Neo により、日々の開発体験がどのように変わったのかを紹介します。
普段の使い方
私は普段、Claude Code、Codex、Pi Coding AgentなどのエージェントをCLIで動かしています。用途としては、
- Salesforce コード開発(Apex、LWCなど)
- Salesforce エージェント開発 (Agentforce Agent Script)
- Salesforce 設定まわり
- Node.js、Next.js、Python 等のアプリケーション開発
- ブラウザE2Eテスト
- 実装前の要件整理、設計、ブレスト等
- 調査(Slack MCP / Web検索 / Context7 等)
- 各種資料作成
など、プロジェクト・作業ごとにエージェントを分けて立ち上げてます。多いときは6〜8個ほどのエージェントが同時並行で稼働します。エージェントが増えるほど、ターミナルウィンドウ、タブ等も比例して増えるので、目的のエージェントを探すのは困難になり、各エージェントの状況を管理できなくなってきます。
エージェンティック開発時代の新定番 Herdr
そこで便利なのが Herdr です。複数のコーディングエージェントを同時稼働することを前提に作られたターミナルワークスペースマネージャーで、tmux のようなターミナルマルチプレクサをコーディングエージェント利用に合わせたものとイメージすると、分かりやすいと思います。
特徴(本記事と関係する箇所のみ抜粋)
-
セッション、ワークスペース、タブ、ペイン
- 一つのターミナル画面内に、ワークスペース > タブ > ペイン という階層構造で複数のターミナルスペースが立ち上がります。このまとまりをセッションという単位で複数保持できます。
-
エージェントタブ
- それぞれのターミナルスペースで Claude Code や Codex などのコーディングエージェントを起動すると、自動でエージェントを検出し、すべての起動中エージェントがエージェントタブにまとめて表示されます。作業中・確認待ち・完了といった状態も表示され、ステータス変更時は音やメッセージで教えてくれるような設定も可能
参考) 1セッションの画面イメージ
複数プロジェクトで複数エージェントが起動中
それでも出てきた悩み
複数エージェントの管理は Herdr で一気に楽になりましたが、実際に使っていくと、同時処理能力は Herdr >(大きな差)> 人間 であり、残念ながら、人間(私) の処理スペックが大きなボトルネック になっていることに気づきました。
課題1 - 確認待ち・完了に気づけない
エージェントに何かお願いをして作業をしてもらっている間に、私は並行して別アプリ(例:Chrome、Slack等)を開いて作業します。打ち合わせに入ることもあります。作業に没頭していると、ついエージェントの確認待ち、完了の状態に気づかず、数十分 〜 数時間を無駄にしていた。ということがありました
課題2 - エージェントの切替がもたつく
追加指示や指示の修正を思いついた時、目的のエージェントを開こうにも、同一プロジェクト内で複数エージェントを起動していた際などは特に、どのエージェントが目的のエージェントなのか分からなくなってしまい、エージェントを見つけるのに多少なりともタイムラグが発生しました
課題3 - 物理ディスプレイの限界
当たり前ですが、エージェントの状態を確認するには Herdr ターミナル画面を開き、ディスプレイに表示して確認する必要があります。エージェント作業中に他の作業に集中するときなどは、ターミナル画面は見えないところで稼働しています。今いくつのエージェントが稼働していて、どのような状態か?は人間の頭の中で管理しなければいけません。ですが別作業に没頭していると、いつのまにかそのことは忘れています
Stream Deck Neo を Herdr 専用の操作パネルに
そんな悩みを抱える中で辿り着いたのが、物理デバイスの存在です。その中でも Elgato の Stream Deck Neo は、8個のキーそれぞれが液晶パネルになっていて、細長いディスプレイやタッチボタンも備わった小型コントローラーでよさそうでした。
決してエージェント開発に特化した製品ではないのですが、Swift、Python、Node.jsなどの独自プログラムから操作できるAPIが公式に提供されてます。これがまた、かなりカスタマイズ性が高く、自分の用途に合わせて柔軟に専用アプリケーションが作れそうだと感じました。
API仕様詳細(公式ドキュメント)
1エージェント = 1ボタン
今回はこのデバイスを、Herdr のエージェント専用のステータス表示 & 切替ボタンとして動かすための独自アプリケーションを試作してみました。
各ボタンに起動中のエージェントを1個ずつ割り当て、エージェントを立ち上げたり終了したりすると、アクティブな物理キーも自動で増減します。もしアクティブなエージェントが8個を超えたら、左右のタッチボタンでページを切り替えられるという仕様です。
いつでも手元の Stream Deck Neo で、エージェントの稼働状態を確認
起動中のエージェントごとに、ワークスペース名 + コーディングエージェントのアイコンが、ボタン背景の液晶画面に表示されます。エージェントボタンは、Herdr のステータスと連動して色、点滅状態などが変化します。また、今開いているアクティブなエージェントは背景色、文字色が反転するようにしました。
待機中は、白黒
待機中、アイドル状態のときは、色をつけず白黒表示を基本にし、黒背景に白文字で表示します。
エージェント作業中は、黄色
まず、エージェントに何かをお願いし作業が始まると、文字色が黄色 に変わります。また、ローディングアイコンのような円が回転するアニメーションで、今エージェントが稼働中であることを表現しています。
※この写真だと黄色が見えづらいかもしれません
確認待ちは、赤く点滅
エージェントが「〜を実行していいですか?」と確認を求めてきたり、追加ヒアリングで人間の操作待ちになると、エージェントのボタンと、左右のタッチボタンが赤く点滅 し教えてくれます。他のアプリを開いて作業に集中していても、手元のデバイスが赤く点滅するので、すぐに気づくことができます。
作業が完了したら、緑に
作業が完了すると、エージェントのボタンは 緑色 & チェックマーク に変わります。確認待ちほど緊急性は高くないですが、作業完了は、追加指示が必要になる可能性も高いので、早く気づきたいものです。
別作業中でも一目瞭然、すぐ飛べる
もし別アプリで作業に没頭してたり、別Spaceでターミナル画面が完全に表示されていない状態であったとしても、各エージェントの状況、特に今、人間の関与が必要かどうかを瞬時に把握できます。ボタンひとつでターミナル画面が開き、目的のエージェントペインに一瞬で切り替わります。指示待ちのエージェントが複数あったとしても迷いません。
人間が何かをしなくてはいけない場合、Herdr (Stream Deck Neo)の方から、能動的に教えてくれます。また、稼働中のエージェントも手元のボタンで瞬時に切り替えて確認できます。
仕組み
どのような構成で動かしているかの概要です。Mac上に常駐する Python プログラム(子プロセスとしてSwiftプログラムを起動)が、Herdr Socket API、Stream Deck HID API を介して、Herdr、Stream Deck Neoのデバイスを連携させています。
構成
API
-
Herdr Socket API
- Herdr
- エージェントの状態変化の検知
- working・blocked・done・idleなどのステータス
- エージェントPaneの切替操作
- エージェントの状態変化の検知
- Herdr
-
Stream Deck HID API
- Stream Deck Neo
- ボタン押下の検知
- ボタン背景の液晶に表示する内容の変更、点滅等
- タッチボタンを点滅
- 表示パネルに表示する内容の変更
- Stream Deck Neo
本アプリケーションの作成方法
実はこのアプリケーション、さくっと Codex にお願いして作ってもらったものです。それぞれのAPI仕様も公式ドキュメントが充実してますので、「公式ドキュメントを見ながら作って」とお願いすれば、仕様を調査・確認しながら実装してくれます。
この専用アプリを作るためのサンプルプロンプトをいくつか紹介します。自分好みに育てたいならパターン1、まずは最短で完成系を試してみたい場合はパターン2から始めるのがおすすめです。
サンプルプロンプトの前提
前提となる環境は以下のとおりです。適宜、ご自身の環境に合わせてプロンプトを調整します。
前提環境
- Mac OS
- インストール済み
- Ghostty(ターミナルアプリ)
- Herdr ※現時点v0.9.5
- Python
- Xcode Command Line Tools
- USB接続
- Stream Deck Neo を接続した状態
- 動作確認のため起動しておくもの
- Ghostty
- herdrセッションのみ起動
- Herdrで、Claude Code, Codex, Pi をそれぞれ一つ以上起動
- (動作確認しながら作るため)
- Ghostty
パターン1:最小限からスタートし、自分好みに育てる
最初は、状態の表示とエージェントの選択だけをお願いしてみます。
USB接続したStream Deck Neoを、Macで使うHerdr専用の操作パネルにしてください。
Herdr Socket APIとElgatoの公開HID仕様の公式ドキュメントを調べ、USBを直接制御するアプリを実装してください。
まずは最大8件のエージェントについて、キーにspace名と作業中・確認待ち・完了などの状態を表示し、押すとHerdr内で対象を選択できるようにしてください。
状態の更新はイベント駆動とし、定期ポーリングは使わないでください。取得できない情報は無理に補わず、制約を教えてください。
実装・起動まで進め、実機操作が必要な確認事項を教えてください。
あとは、実機の表示を見ながら少しずつ思いついた要望を伝えていきます。例えば、
- 「キーは上からspace名、公式アイコンの順に。作業中は黄色、確認待ちは赤点滅、完了は緑のチェックにして。選択中もわかりやすくしたい」
- 「8件を超えたらページを自動で増やし、左右タッチで切り替えたい。長押しは0.7秒たった時点で、別のHerdrセッションに切り替えて」
- 「下部に選択中エージェントの最新メッセージを表示して。イベントで取得できる範囲で更新し、長文は横スクロールさせたい」
- 「別のアプリを見ている間に終わった作業も、完了表示を残して気づけるようにしたい」
- 「スリープや画面ロック中は消灯して、復帰したら表示を戻して」
パターン2:まずはさくっと完成形を試してみたい
私の環境で動いているコードをもとに、リバースプロンプトエンジニアリングしたプロンプトが以下になります。細かな仕様をまとめて渡すので、少ない会話のやり取りで近いものが出来上がると思います。
【目的】
Herdr導入済みのMacとUSB接続済みのElgato Stream Deck Neoで、Codex・Claude Code・Piなどの状態を見分け、対象へ移動できる操作パネルを作ってください。空の~/Projects/herdr-streamdeckから実装・セットアップまで完成させてください。
【構成・制約】
実環境と公式仕様を調査し、PythonでHerdr Socket API・状態管理・描画、Swift子プロセスで公開HID仕様によるUSB直接制御とmacOS通知を担当。標準入出力のJSON Linesで連携し、ElgatoアプリとのUSB競合を避けてください。
状態・本文・接続確認はイベント駆動とし、データの定期ポーリングは使わないでください。描画・操作判定・一時表示・失敗時再接続のタイマーは使用できます。情報取得は既存API・エージェント拡張・対象を特定できるログのOS変更通知で可能な範囲に限定し、取得できない情報は推測しないでください。配布機能・製品本体へのパッチは対象外です。
【機能】
1. 8キーに上からspace名→Herdr採用または製品公式アイコン→同じspace・同種エージェントの識別ドットを表示。キー上の文字はspace名のみ。Claude Codeはカニ型アイコン。キーで対象をHerdr内で選択し、ホストアプリを前面化。
2. 配色は以下の通常時/選択中の組み合わせ。
待機:黒地/白地
作業中:黒地に黄色/黄地に白
確認待ち:赤点滅/赤白点滅
完了:緑地に白チェック/白地に緑チェック
完了時はアイコンをチェックに置換。作業中は固定アイコンの周囲に控えめな回転アニメーション。
3. エージェント数に応じて8件ずつページを自動増減。左右短押しで前/次ページ、長押しは0.7秒到達時に前/次の稼働中ローカルHerdrセッションへ一度だけ切替。端では循環し、長押し後の解放・左右同時押しは無操作。接続先の増減に追従し、ページ位置は接続先ごとに保持。
4. 手動操作を優先し、自動ページ移動は新しい確認待ち→完了の順。左右LEDも選択中セッションの全ページを対象に、確認待ちの赤点滅→完了の緑点灯の順で優先。
5. 下部に選択中エージェントの最新公開メッセージ・時計・接続先を表示。長文は横スクロールし、接続先切替時はセッション名を一時的に強調。
6. 別アプリが前面なら選択表示を外し、未確認の完了を保持。スリープ・画面消灯・ロック・ユーザー切替中は消灯し、復帰時に最新状態を再表示。対象・接続先の切替後に古い取得結果を混ぜない。
【完成条件】
設定・実行環境・ログをソースと分離し、ログイン時自動起動と開始・停止・診断を用意してください。ページ増減、長押しの一回発火、セッション間の分離、USB再接続、消灯・復帰を検証し、不具合を修正してください。
最後に起動・再セットアップ手順、実施した検証結果、実機での未確認項目と環境による制約を簡潔に報告してください。
必要に応じて、色や点滅の速さといった細かい好みは、実機を見ながら追加指示で調整します。
注意点
ここで紹介した専用アプリに関する制限・注意事項です。
- ⚠️ Herdr 専用
- 標準の Stream Deck アプリと同時には使えません。完全にHerdr上のエージェントに特化した作りです
- ⚠️ ステータス変更は Herdr の挙動に依存
- エージェントと Herdr の相性によってステータスが Herdr 側にうまく反映されない場合は、Stream Deck にも反映されません
- ⚠️ セキュリティ
- セキュリティ対策は重要です。特に、コーディングエージェントが作ったコードは、必ず人間によるレビューが必要です。また、各ボタンにワークスペース名やエージェントの作業メッセージを表示する場合も、セキュリティ面の考慮は不可欠になります
さいごに
複数エージェントとの協働作業。どのエージェントが動いているか?どれが確認待ちか?そろそろ終わったかな?など、気にしながら作業を進めるのは意外と負担が大きいものです。
Stream Deck Neo によって、こうした状態管理を手元のデバイスに任せられるようになりました。人間の脳内メモリをエージェントの状態管理から解放し、本来の業務・タスクに使う。この小さな改善が日々の開発体験の向上に大きく貢献してくれています。
今回は Herdr との連携のみ試しましたが、複数デバイス、アプリ、アカウントを横断して、稼働するすべてのエージェントを手元の物理デバイスで管理できたらいいなと、夢も広がりました。
コーディングエージェントを使った開発環境はまだまだ進化の可能性を秘めていそうです。
参考リンク
- Herdr 公式サイト:https://herdr.dev/
- Herdr Socket API: https://herdr.dev/tui/docs/socket-api/
- Elgato Stream Deck Neo:https://www.elgato.com/us/en/p/stream-deck-neo
- Stream Deck HID API(Stream Deck Neo):https://docs.elgato.com/streamdeck/hid/stream-deck-neo






