本記事の執筆にはAIを使用しています。
はじめに
AIコーディングエージェント向けのターミナルマルチプレクサ「herdr」を紹介します。
何ができるか、メリットとデメリット、基本的な使い方、主なキーバインドをまとめます。
「herdr」とは?
複数のコーディングエージェントをまとめて動かすためのターミナルマルチプレクサです。
Rust製の単一バイナリで、ライセンスはApache-2.0です。
tmuxと同じくペインを分割して使いますが、マウス操作とAIエージェントの状態表示に力を入れているのが特徴です。
環境
- macOS: Tahoe 26.4
- herdr: 0.8.0
何ができるか
herdrでできることは、大きく5つです。
ターミナルを分割して並べる
画面は「ワークスペース > タブ > ペイン」の3階層で管理します。
| 用語 | 説明 |
|---|---|
| ワークスペース | プロジェクト単位の入れ物。リポジトリごとに1つ作る |
| タブ | ワークスペース内のレイアウト。用途ごとに分ける |
| ペイン | 実際にプロセスが動くターミナル |
エージェントの状態を一覧で見る
ペインの中で動いているエージェントを検知し、サイドバーに状態を並べます。
状態は記号と色で表示されるので、一覧を眺めるだけでどれが止まっているかわかります。
| 状態 | 記号 | 色 | 意味 |
|---|---|---|---|
working |
● |
黄 | 実行中 |
blocked |
● |
赤 | 入力や承認を待っている |
done |
● |
青 | 終わったが未確認 |
idle |
○ |
緑 | 待機中 |
unknown |
· |
グレー | 状態が判別できない |
色は既定のテーマ(catppuccin)のもので、テーマを変えると変わります。
ペインの状態はタブとワークスペースにも伝わります。
blocked のエージェントが1つでもいると、そのタブとワークスペースも赤い ● になります。
Claude Code、Codex、Cursor Agent CLI、opencode、Geminiなど多くのエージェントに対応しています。
blocked になっているエージェントへサイドバーから直接ジャンプできるので、どれが自分の返事待ちなのかを探さずに済みます。
デタッチしても動き続ける
herdrはサーバーとクライアントに分かれています。
ペインを持っているのはサーバーなので、ターミナルを閉じてもプロセスは動き続けます。
別のターミナルから herdr を実行すれば、同じセッションに戻れます。
マウスで操作する
クリックでフォーカスを移動し、分割の境界をドラッグしてリサイズできます。
右クリックでコンテキストメニューが開き、ドラッグした範囲はそのままクリップボードへコピーされます。
CLIとSocket APIから操作する
herdr コマンドやローカルソケットのAPI経由で、ペインの作成やエージェントの起動を操作できます。
エージェント自身にherdrを操作させることもでき、そのためのスキルファイルは herdr --skill で出力できます。
プラグインとマーケットプレイスもあります。
デスクトップアプリと比べたメリット
エージェントをまとめて動かす手段としては、Claude Codeのデスクトップアプリのような選択肢もあります。
それらと比べたメリットを挙げます。
- ターミナルの中で完結する。GUIとターミナルを行き来しなくていい
- SSH先のマシンでも同じように使える(
herdr --remote <SSH先>) - Rust製の単一バイナリで軽い。Electron製のアプリのようにメモリを食わない
- エージェント以外のコマンドも同じ画面で動かせる。
lazygitやログの監視を隣のペインに置ける - エージェントを選ばない。Claude Code、Codex、Cursorなどを1つの画面に混ぜられる
- CLIとSocket APIから操作できるので自動化しやすい。エージェント自身に操作させることもできる
- キーバインドもテーマも設定ファイルで細かく変えられる
デスクトップアプリと比べたデメリット
- 画像やきれいな差分表示は苦手。ターミナルで描ける範囲に収まる(Kittyのグラフィック対応は実験的)
- 見た目や操作の作り込みは、デスクトップアプリのほうが上
- ターミナル側の設定に左右される。日本語入力まわりには実験的な設定がいくつかある
- マウスをherdrが握るため、ターミナル側のCmd+クリックなどが効かなくなる(
mouse_capture = falseで回避できる) - 通知はOSやターミナルに任せる形なので、設定が必要
- バージョンが0.xなので、破壊的な変更が入る可能性がある。Windows版はプレビューベータ
- サーバーを再起動すると、レイアウトは戻るがペインのプロセスは失われる
基本的な使い方
インストール
私はmiseを使ってインストールします。
$ mise use -g herdr
Homebrewやインストールスクリプトも使えます。
$ brew install herdr
$ curl -fsSL https://herdr.dev/install.sh | sh
インストールできたか確認します。
$ herdr --version
herdr 0.8.0
起動する
作業したいディレクトリで herdr を実行します。
$ cd ~/ghq/github.com/uhooi/dotfiles
$ herdr
初回はセッションが作られ、2回目以降は同じセッションにアタッチされます。
ソケットの管理は不要です。
なお、herdrのペインの中からherdrは起動できません。
試したところ、次のように怒られました。
$ herdr
error: nested herdr is disabled by default.
see configuration if you want to enable it.
エージェントを動かす
ペインの中でいつも通りエージェントを起動します。
$ claude
サイドバーにエージェントが並び、状態が表示されます。
prefix+v でペインを分割し、別のエージェントを起動すれば並行して動かせます。
デタッチして戻る
prefix+q でデタッチします。
ターミナルのウィンドウを閉じても構いません。
戻るときは herdr を実行するだけです。
完全に終了したいときはサーバーを止めます。
$ herdr server stop
セッションを分ける
ワークスペースとは別に、まるごと独立した「セッション」を作れます。
ペインも状態も完全に分かれるので、仕事用と趣味用を混ぜたくないときに便利です。
$ herdr --session work
一覧と切り替えはCLIから行います。
$ herdr session list
$ herdr session attach work
セッションを切り替えるキーバインドは、0.8.0の時点ではありません。
prefix+q でデタッチしてから、上記のコマンドで切り替えます。
プロジェクトごとに分けたいだけなら、prefix+w で切り替えられるワークスペースで足ります。
補完を設定する
bash elvish fish powershell zsh に対応しています。
$ herdr completion bash
出力される補完スクリプトを読み込みます。
私は .bashrc に次の設定を追加しました。
+ # herdr
+ if type 'herdr' > /dev/null 2>&1; then
+ eval "$(herdr completion bash)"
+ fi
herdrが入っていない環境でもエラーにならないよう、type で存在を確かめています。
更新する
インストールスクリプトで入れた場合は、herdr自身で更新できます。
$ herdr update
主なキーバインド
プレフィックスキーは ctrl+b です。
ctrl+b を押してから、次のキーを押します。
| キー | 説明 |
|---|---|
prefix+? |
キーバインドの一覧を表示する |
prefix+s |
設定を開く |
prefix+q |
デタッチする |
prefix+shift+r |
設定を再読み込みする |
ペインの操作です。
| キー | 説明 |
|---|---|
prefix+v |
右に分割する |
prefix+minus |
下に分割する |
prefix+x |
ペインを閉じる |
prefix+h prefix+j prefix+k prefix+l
|
左・下・上・右のペインへ移動する |
prefix+tab |
次のペインへ移動する |
prefix+shift+tab |
前のペインへ移動する |
prefix+z |
ペインを最大化する |
prefix+r |
リサイズモードに入る |
prefix+e |
スクロールバックをエディタで開く |
タブの操作です。
| キー | 説明 |
|---|---|
prefix+c |
新しいタブを作る |
prefix+n |
次のタブへ移動する |
prefix+p |
前のタブへ移動する |
prefix+1..9 |
指定した番号のタブへ移動する |
prefix+shift+x |
タブを閉じる |
ワークスペースの操作です。
| キー | 説明 |
|---|---|
prefix+w |
ワークスペースやペインを選ぶナビゲートモードに入る |
prefix+g |
移動先の一覧(ナビゲーター)を開く |
prefix+shift+n |
新しいワークスペースを作る |
prefix+shift+g |
新しいworktreeを作る |
prefix+shift+d |
ワークスペースを閉じる |
prefix+b |
サイドバーの表示を切り替える |
すべてのキーバインドは config.toml の [keys] で変更できます。
サイドバーの下段に並ぶエージェントは、既定ではキーで直接切り替えられません。
私はタブの切り替えキーを空にして、エージェントの移動に割り当て直しました。
[keys]
previous_tab = ""
next_tab = ""
switch_tab = ""
previous_agent = "prefix+p"
next_agent = "prefix+n"
focus_agent = "prefix+1..9"
タブを行き来するより、エージェントを行き来するほうが多いためです。
設定
設定ファイルは ~/.config/herdr/config.toml です。
既定の設定はコメント付きで出力できるので、これをコピーして書き換えるのが手軽です。
$ herdr --default-config > ~/.config/herdr/config.toml
設定を反映するには、prefix+shift+r を押すか次のコマンドを実行します。
$ herdr server reload-config
私が実際に設定している項目を紹介します。
サイドバーにClaude Codeのセッション名を表示する
Claude Codeは /rename で付けた名前をターミナルのタイトルに設定します。
サイドバーの行に terminal_title_stripped を足すと、その名前が並びます。
[ui]
agent_panel_sort = "spaces"
[ui.sidebar.agents.rows_by_agent]
claude = [["state_icon", "workspace", "tab"], ["terminal_title_stripped"], ["agent"]]
エージェントが増えると、どの行が何の作業なのかわからなくなります。
セッション名を出しておくと探さずに済みます。
agent_panel_sort はサイドバーの並び順です。
spaces はワークスペースごとにまとめ、priority は対応が必要なものを上に持ってきます。
通知を出す
既定では通知が切れているので、別のワークスペースのエージェントが blocked になっても気づけません。
delivery を system にすると、OSの通知として出ます。
[ui.toast]
delivery = "system"
delay_seconds = 1
delay_seconds は通知するまでの待ち時間です。
herdr内のトーストで済ませたいなら herdr、ターミナルに任せたいなら terminal を指定します。
テーマを変える
既定は catppuccin です。
私はWezTermの配色に合わせて tokyo-night にしました。
[theme]
name = "tokyo-night"
catppuccin terminal tokyo-night dracula nord gruvbox one-dark solarized kanagawa rose-pine vesper から選べます。
ターミナルの配色に合わせると馴染みます。
dotfilesで管理する
~/.config/herdr にはログやソケット、セッションがherdrによって作られます。
ディレクトリごとシンボリックリンクを貼らず、config.toml だけをリンクしましょう。
$ mkdir -p ~/.config/herdr
$ ln -fns {dotfilesのパス}/.config/herdr/config.toml ~/.config/herdr/config.toml
私の設定はdotfilesに置いています。
おわりに
複数のエージェントを動かしていると、どれが返事待ちなのかを見失いがちです。
herdrはそこを解決してくれるので、エージェントをよく使う人はぜひ試してみてください ![]()