複数のマシンで AI エージェントを同時に走らせています。やりたかったことはひとつで、いちばん上に最優先のものが来ていて、目線のスキャンが常にそこから始まる状態です。カンバンの一番上から下へ順に片付けていくような感覚で、ターミナルのサイドバーを使いたかった。
ところが herdr の並び順は、設定では2つしか選べません。
spaces… マシンごとに束ねる(既定)priority… 状態による自動順
どちらも「自分で決めた順」にはなりません。spaces のときは手元のマシンの束が必ず先頭に来るので、遠くのマシンのエージェントを一番上に置くこともできません。マシンの一覧のほうも、並べ替える手段が見当たりませんでした。
結論を先に書くと、両方できました。 しかも最後は自然文で動くところまで行けて、かなり快適です。順に書きます。
エージェントの並びを自分で決める
socket API を使います。2段構えです。
1. 各ペインに数字のラベルを付ける
{"method": "pane.report_metadata", "params": {"pane_id": "w27:p3", "source": "prio", "tokens": {"prio": "10"}}}
ttl_ms は省略できるので、付けた値は消えません。ラベルは文字列として辞書順で比較されるため、10個を超えるときは 01 02 … とゼロ埋めします。
2. そのラベルで並べるビューを設定する
{"method": "agent.view.set", "params": {"source": "prio", "label": "prio", "sort": [{"field": {"token": "prio"}, "order": "asc"}]}}
socket は ~/.config/herdr/herdr.sock です。改行区切りの JSON を1行投げると、1行返ってきます。
これでマシンの束も先頭固定も越えて、自分の決めた順に並びます。ソースを読むと、ビューの並べ替えが指定されている場合はその順に並べて即座に返す作りになっていて、既定の2択はそこまで到達しません。
引っかかる点が2つあります。
ビューは「いま選んでいるマシン」のものが使われます。 手元のマシンにだけ置くと、遠くのマシンを選んだ瞬間に並びが元へ戻ります。接続している全マシンに同じビューを置く必要があります。
ラベルもビューもサーバーがメモリに持ちます。 設定ファイルではないので、サーバーを立て直すと消えます。消えたら入れ直せるように、値を変えるたびファイルへ控えておき、1コマンドで復元できるようにしました。
マシンの一覧を自分で決める
こちらは仕組みが別物でした。並びは状態ファイルの配列順そのもの(~/.local/state/herdr/client/endpoints.json の ssh 配列)で、配列を動かすだけで再起動なしに一覧と画面の両方へ反映されます。要素の順番がそのまま表示順になっている、素直な作りです。
API ではなくファイルを書き換えるので、壊さない仕掛けを先に入れておきます。
- 書く前に1世代バックアップを残す
- 書いたあと要素の集合と数が変わっていないことを検査し、変わっていたら中止する(並べ替え専用と割り切り、登録や削除は別のコマンドに分ける)
- 一時ファイルへ書いてから差し替える(途中の状態を読ませない)
自然文で動かせるようにする
ここまでを薄いコマンドに包んでおくと、ターミナルで動かしている AI エージェントに向かって
<話題>を上から2つ目に移動
<マシン名>を enable
<マシン名>を machines の4番目に配置
と書くだけで済みます。一覧を見てIDを調べ、数字を決めて、JSON を組み立てる——という手順が全部要らなくなります。ここがいちばん快適になった部分です。
そのために必要な前提が3つあります。
1. API を直接叩かせず、コマンドに包む。 エージェントに socket へ JSON を投げさせると、毎回リクエストを組み立てることになり、失敗の種類も増えます。<コマンド> up <名前> 2 のような1行に包んでおけば、言われたことを1回実行すれば済みます。
2. 名前で指せるようにする。 pane_id(w27:p5 のような値)でしか指定できないと、人もエージェントも毎回一覧を引いてIDを探す必要があります。タイトルの部分一致で引けるようにし、曖昧なときは候補を出して止めるのが肝心です。短い語で指すと複数に当たることがあり、そのとき黙ってどちらかを動かされるより、候補を並べて止まってくれたほうが安全です。
3. 手順を、エージェントが読める場所に置く。 コマンドの --help と、エージェント用の手順書の両方に同じことを書きました。人間が覚えておく必要がなくなるのが大きくて、「どう動かすんだっけ」を思い出す代わりに、やりたいことをそのまま書けます。
ファイルを書き換える操作を言葉で頼むなら、前節の3つ(バックアップ・集合の検査・原子的な差し替え)を先に入れてからにしてください。 それが無い状態で「4番目に置いて」と頼むのは勧めません。
どのマシンで実行するか
コマンドは「サイドバーを見ているマシン」で動かします。
- マシンの一覧の並びは、そのマシン自身の状態ファイルにあります。接続先のマシン側を覗いてみると保存済みマシンは0件でした。つまりそこで並べ替えても、動かす対象がありません。
- エージェントの並びはビューで決まり、使われるのは「いま選んでいるマシン」のビューです。画面を描いているのは手元のクライアントなので、手元で実行します。
ビューを配るほうは、手元から全マシンへ送れます。 各マシンにコマンドを配る必要はありません(socket へ ssh で投げているだけなので)。例外は、接続先のマシンの herdr に入って作業するときです。そのとき見えているサイドバーはそのマシンのものなので、そのマシンにコマンドが要ります。
API の探し方
agent.view.set も tab.move も、herdr <noun> --help には出てきません。API のスキーマにはメソッドが102個あり、CLI はその一部だけを表に出しています。
herdr api schema --json
これをファイルに落として move|reorder|swap|sort|order|view で検索すると、やりたいことが既にあるかどうかが早く分かります。実際この順番で探さなかったために、できることを「できない」と判断しかけました。
やってみた結果
いちばん上に最優先のものがあり、目線がそこから始まる。並べ替えは一言で済む。崩れても1コマンドで戻る。この3つが揃うと、サイドバーが本当にカンバンとして機能します。
朝いちばんに開いて、上から順に見ていくだけでよくなりました。
追記(2026年10月20日):印を付けるだけで並ぶようにした
3日使ってみて、もう一段楽にしました。4つあります。
1. タブ名で指せるようにした。 サイドバーで目に入るのはタブ名(🔴morning など)ですが、ペインのタイトルは「Claude Code」のままのことが多く、「morning を上へ」と頼んでも見つかりませんでした。タブ名でも部分一致で引けるようにし、一覧にもタブ名の列を出しています。見ている名前と、指す名前と、一覧の名前を揃えたわけです。
2. 名前の先頭の印で並べるようにした。 順番を数字で決めるのをやめ、タブ名の先頭に付けた絵文字で決めます。
- 🔴 → 🟡 → 🟢 → 🚪 → 印なし の順
- 同じ印の中は、いまの並びを保つ
数字を振るより、タブ名を見ただけで優先度が分かるほうが続きます。
3. 毎分、自動で並び直すようにした。 macOS の launchd から1分ごとに並べ替えを呼んでいます。並びがもう正しければ何も書かずに終わるので、負荷はほとんどありません。タブの印を🟡から🔴へ付け替えれば、1分以内に一番上へ上がります。「並べ替えて」と頼む必要すらなくなりました。
ただし副作用があります。手で並べた順が、印の違う群をまたぐと1分以内に戻されます。 黙って戻ると「壊れた」と感じるので、自動並べ替えが動いているときに手で動かすと、その旨を表示するようにしました。同じ印の中で決めた順は保たれます。
4. マシンの enable / disable を略号で打てるようにした。 本体のコマンドは32桁のプロファイル ID しか受け付けません。マシンの一覧と同じく略号(YW など)で引けるようにしたので、「<マシン名>を disable」と書くだけで済みます。
ちなみに、disabled にしたマシンもサイドバーの行には残ります。「SC を3番目に」と頼んだとき、AI が disabled の行を数えずに「もう3番目です」と答えたことがありました。人が数えているのは画面に見えている行なので、指示の「何番目」は画面の行で数えるのが正解です。
小学校の理科の先生が、授業の準備にかける手間を減らすアプリを作っています。











