## 背景
[[エージェントマルチプレクサ]]の[[herdr]]に関する記事を最近見かけるようになったので、試してみることにした。ちょうど、[[cmux]]の通知に関するステータス周りをもう少しうまくできないか悩んでいたので。
### 環境
| 対象 | バージョン |
| --------- | ----- |
| [[herdr]] | 0.7.1 |
## インストール
```console
mise use -g herdr
```
## 設定
設定ファイルの場所は `~/.config/herdr/config.toml`。
> https://herdr.dev/docs/configuration
### [[キーマップの設定 (herdr)|キーマップの設定]]
`~/.config/herdr/config.toml`
```toml
[keys]
prefix = "ctrl+shift+/" # 無変換 -> s のcombination key
# ワークスペース
new_workspace = "prefix+n"
new_worktree = "prefix+t"
previous_workspace = "ctrl+cmd+k"
next_workspace = "ctrl+cmd+j"
rename_workspace = "cmd+shift+r"
# タブ
new_tab = "ctrl+t"
previous_tab = "ctrl+shift+tab"
next_tab = "ctrl+tab"
rename_tab = "ctrl+2"
# ペイン
split_vertical = "prefix+v"
split_horizontal = "prefix+s"
resize_mode = "prefix+e"
# エージェント
next_agent = "shift+cmd+j"
previous_agent = "shift+cmd+k"
# サイドバー
toggle_sidebar = "cmd+i"
# その他
settings = "prefix+shift+s"
```
> https://herdr.dev/docs/configuration/#keybindings
### [[設定のリロード (herdr)|設定のリロード]]
デフォルトは [[prefix (herdr)|prefix]] -> `shift+r` キーでリロードできる。
### [[kittyプロトコル]]を有効にする
`~/.config/herdr/config.toml`
```toml
[experimental]
kitty_graphics = true
```
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📝Ghosttyとherdrで画像が表示されない
</div>
<div class="link-card-v2-content">Ghostty上でherdrを起動した際、Yaziやchafaで画像を表示しようとしても何も表示されなかった事象である。herdrがデフォルト設定でkittyプロトコルに非対応だったため発生し、config.tomlでkitty_graphicsをtrueに設定して解消した</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" />
<a data-href="📝Ghosttyとherdrで画像が表示されない" class="internal-link"></a>
</div>
%%[[📝Ghosttyとherdrで画像が表示されない]]%%
### 通知をサウンドだけでなくトーストとして通知する
`~/.config/herdr/config.toml`
```toml
[ui.toast]
delivery = "terminal"
```
> https://herdr.dev/docs/configuration/#notifications
`herdr` と `terminal` は一長一短だが、今回は `terminal` にした。[[Ghostty]]へジャンプできれば、移動が必要な箇所は[[herdr]]のサイドバーから判断できるため。
| 選択肢 | メリット | デメリット |
| ---------- | ---------------------------------- | ------------------- |
| `herdr` | 対象のタブまで直接移動できる | [[herdr]]外で検知できない |
| `terminal` | [[herdr]]外で検知できる<br>ターミナルもアクティブになる | ターミナルより先の対象まで移動できない |
### [[新規作成したタブの名前入力をスキップ (herdr)|新規作成したタブの名前入力をスキップ]]
毎回Enterを押すのが面倒なので。
`~/.config/herdr/config.toml`
```toml
[ui]
prompt_new_tab_name = false
```
> https://herdr.dev/docs/configuration/#ui-and-sidebar
### [[サイドバーのアクティブワークスペースカラーを設定 (herdr)|サイドバーのアクティブワークスペースカラーを設定]]
`surface_dim` を設定する。
```toml
[theme.custom]
surface_dim = "#444477"
```
## トラブル
### `<C-a>` や `<C-e>`、`<C-k>` が効かない
[[zshrc]]で明示的に定義する。
```zsh
bindkey '^A' beginning-of-line
bindkey '^E' end-of-line
bindkey '^K' kill-line
```
他にも必要なものは適宜追加。
### `<C-S-j><C-S-k>` が[[Neovim]]で効かない
`f15` と `f16` だとうまくいかなそうなので `f5` と `f6` に変更する。
```diff
const likeCtrlShiftCommands = [
{
- j: toKey("f15", ["control", "command"]),
- k: toKey("f16", ["control", "command"]),
+ j: toKey("f5", ["control", "command"]),
+ k: toKey("f6", ["control", "command"]),
},
];
```
### 下線の表現が違う
左が[[herdr]]、右が[[Ghostty]]。
![[2026-06-28-10-50-35.webp]]
- 下線の色が文字と同一になっている
- 下線の色がundercurlが効いていない
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📝herdrではNeovimの下線が正しく表示されない
</div>
<div class="link-card-v2-content">Ghostty上のNeovimではTokyo Nightテーマ使用時にDiagnosticの波線がエラーは赤、警告は黄で表示されたが、herdr経由でNeovimを起動した場合は波線が文字色と同じ単なる下線になった事象が発生した。原因は不明で、現時点で解決方法は存在しない状況である。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" />
<a data-href="📝herdrではNeovimの下線が正しく表示されない" class="internal-link"></a>
</div>
%%[[📝herdrではNeovimの下線が正しく表示されない]]%%
### [[マウスカーソルで選択してもクリップボードにコピーしない (herdr)|マウスカーソルで選択してもクリップボードにコピーしない]]
v0.7.1 でそのようなオプションはない。
設定で `mouse_capture` を無効化できるが、マウス全般が無効化されてしまう。
```toml
[ui]
mouse_capture = false
```
回避策として **Shiftを押しながら選択** が可能。
### タブのタイトルが自動で変更できない
v0.7.1時点ではできなそう。
## 感想
[[エージェントマルチプレクサ]]なのに以下を達成しているのがすごい。
- [[Neovim]]の表示にノイズが乗らない
- [[kittyプロトコル]]で画像が表示できる
- カラーやレイアウトの崩壊がほとんどない
- 唯一あるのが [[📝herdrではNeovimの下線が正しく表示されない]] の問題
- だがクリティカルではないので許容できる (いずれ対応されるなら)
- 操作の引っかかりがほとんどない
- 公開されて1ヶ月ちょっとなのに不具合がほとんどない
- 大体、環境特有の問題が起きやすいのに......
- [[macOS]] + [[Ghostty]] だから比較的問題が発生しにくいのかも?
[[cmux]]と比較すると......
- 機能が必要十分かつミニマムで洗練されている
- いきなりのプルリクはauto closeしているので乱立もしなそう
- エージェントの状態把握精度が高い
- `spaces` と `agents` のサイドバーが秀逸
- [[cmux]]のサイドバーでモヤモヤしていたところをグサリと突かれる感じ
- systemレベルの通知から該当ペインへの直接移動はできない
- サイドバーが見やすいので恐らく平気
- ブラウザをはじめとしたリッチなビューは使えない
- なくてもそこまで困らないと思う
- タブごとにペインの分割レイアウトを定義できる
- [[cmux]]は[[ペイン (cmux)|ペイン]]の分割レイアウトの中にタブ([[サーフェイス (cmux)|サーフェイス]])があった
- 個人的には[[Ghostty]]同様に[[herdr]]の方が直感的で便利
気になる点は......
- メンテナンスコストが高い
- [[ターミナルマルチプレクサ]]同様に、[[ターミナル]]の上に存在するレイヤーなので
- とはいえ、今のところ[[Zellij]]よりは楽に感じる
今のところ[[AIコーディングエージェント]]を使った開発も気持ちよくできている。個人的には[[cmux]]よりも思想がマッチする感じがあるので、しばらく[[cmux]]の代わりに[[Ghostty]] + [[herdr]]で過ごしてみる。