最近はgit worktreeを使ってコーディングエージェントを並列稼働させることが増えてきました。といっても2、3並列程度なのですが、それでもどこにどのエージェントを起動しているか、そしてそれらのエージェントが今どのような状態にあるかを瞬時に知りたくなってきます。tmuxを現状愛用していますが、tmuxでコーディングエージェントネイティブな環境に対応しようとするとかなりのカスタマイズを必要としそうでした。
Herdrはこの問題を結構いい感じに解決してくれるツールです。とてもよかったので紹介したいと思いました。
Herdrとは
コーディングエージェントネイティブなターミナルマルチプレクサです。感覚としては、tmuxにエージェント機能を入れたという具合です。実際キーバインドはデフォルトだとtmuxとまったく同じですし、登場する概念もtmuxの枠組みで比較的簡単に理解することができました。Herdr上では常にサイドバーでエージェントの動き具合を確認することができます。この機能自体はcmuxを彷彿とさせます。
cmuxを利用するとGhosttyに切り替える必要が出てくるなど、自分がこれまで設定した資産をcmux(Ghostty)向けにカスタマイズしなければなりません。この移行は結構手間で、私もそれが理由でcmuxに移動していませんでした。
Herdrはちょうど間をとったような立ち位置で、tmuxに近しい操作感でありつつも、cmuxのようなエージェントと統合された環境を手に入れることができます。これまで培ってきたターミナルエミュレータに対する資産もそのまま活かせます。私もWezTermから移行せずに、ついにコーディングエージェントネイティブな環境を構築することができました。

Herdrのもつ機能
Claude CodeやOpen Codeなどの状態をサイドバーで確認することができます。エージェントの動作状態はブロック(ユーザーのフィードバック待ち)、ワーキング(動作中)、アイドル(待機中)あたりが表示されています。デフォルトの設定では、ブロックに入ったりタスクが終了したタイミングでちょっとしたサウンドが鳴ります。状態はリアルタイムで反映されます。
Herdrはクライアントとサーバーに分かれて起動します。tmuxと同じようにセッションの概念を持つので、クライアントを仮に落としたとしてもサーバー上のセッションを落とさなければ、そのセッション内で動いているエージェントは動き続けます。私はまだ試せていませんが、このセッションにはリモートマシンからsshで接続することもできるようです。
プラグインの機構を持っており、自分でHerdrの機能を拡張させることもできます。Herdrのプラグインはこのページに公開されていて、たとえばファイルビューワーを作ったりとか、macOS自体の通知機能を使ったエージェントの状態通知を実装している人がいるなど、これから発展していきそうな雰囲気を感じます。
最後におもしろい機能として、HerdrのSkillをコーディングエージェントにインストールしておくことで、コーディングエージェントからHerdrを「見る」ことができるようになります。たとえば隣のタブで起動しているClaude Codeに、現在実行中のOpen Codeからアクセスして内容を確認するという動作をさせることができます。
画面の構成概念
tmuxもそうですが、使いこなすためには登場する概念を理解しておく必要があります。Herdrの画面の構成概念は、Workspace > Tab > Paneとなっています。Workspaceからはさらにgit worktreeを切ることができ、Workspaceの下にworktreeが切った分だけぶらさがります。内部的な整理をよく理解しているわけではありませんが、操作している限り、worktreeもWorkspaceのひとつとしてカウントされていそうです。内部的には親子関係を持つのかもしれませんが、使っている限りでは新しいWorkspaceが一つ生えるイメージです。
私は今のところ、1 Workspaceあたり1つのリポジトリを読み込ませておき、先にHerdr上でworktreeを切ってからClaude CodeなりOpen Codeを起動するようにしています。私のエージェントの設定では、実装のタイミングでworktreeを中で自動で切るように設定されているものが多く、Herdrと繋ぎ込んでworktreeを切るように今後設定を調整したいとは思っています。たぶんできるはず。
先ほどのスクリーンショットで説明すると、次の画像のような画面構成になっています。

ちょっとしたカスタマイズ
Neovimのsidekick.nvimを利用している際、任意のファイルを開いた状態で特定のショートカットキーを叩くと、ファイルパスをそのまま横に開いたコーディングエージェントに送信して書いてくれる機能を多用していました。あるいは複数行選択してその部分をエージェントに渡し、解説を読むといった使い方をよくしていました。これが便利で、私にとっては開発時に欠かせない機能でした。
ファイルビューワーを使う手もありますが、できればファイルビューワーなどは使わず、Neovimからいい感じにそのままHerdr経由で横に開いているエージェントにsidekickを利用していたときのように渡したいものです。

これはHerderの提供するpane send-textという命令を使うと実現できるようでした。Neovim側からファイルパスや行選択情報をsend-text経由で送信すれば良いようです。どのコーディングエージェントに送信するかが問題になりますが、私は常に1タブ1コーディングエージェントという開き方をすることから、タブ内のペーンを走査して最も最初に見つかったコーディングエージェントに送ってもらうことにしました。
下記はNeovimを設定しておいた例です(Claude Codeが)。<Leader>zfでファイルパス送信、<Leader>zlでファイルパス+行範囲を送信というキーマップにしています。もし使われる場合はお好みのキーマップに変更してみてください。わたしはAstroNvimユーザーなので多少それ周りのdiffも含まれていますが、大元の考え方は他のdistributionやそもそも素で使っている方であってもそう変わらないはずです。
今後利用中に取り組みたいこと
tmuxinatorとの統合
私は長らくtmuxinatorを使って、tmuxが起動する瞬間にさまざまなウィンドウやペーンを自動で用意させていました。軽く調べてみた限りでは、どうやらHerdrにtmuxinator相当の機能はないようでした。おそらくプラグインを使ってそうした機構を実装する必要がありそうで、専用のプラグインを用意したいと思っています。というのもなかなかの数のWorkspaceを開く関係で、都度Herdrをガチャガチャして開くのが大変だからです。Herdrを開いた瞬間にワークスペースや必要なタブ、ペーンが初期セットアップされているようにしたい。
[2026-07-04追記] 作り始めました。Rustで作れるので楽ちん。
まとめ
プラグインで遊べそうなのがとても楽しみ。コーディングエージェントネイティブなターミナル環境にしたいとずっと思っていたので目標を達成できてとても満足です。
参考文献
- Herdr: one terminal for the whole herd
- 「Herdr」を使い始めたら、もう他のターミナルには戻れなくなった: 日本語の非常によくまとまっている記事です。私もこの記事を読んでHerdrについて少し詳しくなりました。