herdr の入れ子判定は環境変数を見ているだけ。 本当に herdr のペイン内かどうかは見ていない。
| 変数 | 例 | 意味 |
|---|---|---|
HERDR_ENV | 1 | herdr 配下のシェルという印 |
HERDR_WORKSPACE_ID | w2G | 所属ワークスペース |
HERDR_PANE_ID | w2G:p1 | 所属ペイン |
HERDR_TAB_ID | w2G:t1 | 所属タブ |
HERDR_SOCKET_PATH | ~/.config/herdr/herdr.sock | サーバとの接続先 |
HERDR_ENV=1 が立っているシェルから herdr を起動すると、入れ子とみなして拒否する。変数が「本物のペイン由来か、死んだペインの残骸か」は区別されない。 ここが誤検知の入口。
実際に確認した食い違い(2026-08-06):
HERDR_WORKSPACE_ID=w2Gherdr workspace list の実在ワークスペース → w31 w32 w34 w36 w3Aw2G はもう存在しない。サーバ再起動や herdr server live-handoff で ID が振り直された後も、古いシェル(およびそこから起動した子プロセス)が旧 ID の env を持ち続けたと考えられる。この状態のシェルは、見た目は素のターミナルなのに herdr からは「入れ子」と判定される。
紛らわしい別ケースが2つあるので、切り分けが要る。どちらも env が正しく、拒否も正しい動作になる。
Ctrl+Q → b)は素の Ghostty と見分けがつかないCmd+P)も浮いた単独ターミナルに見えるが、中身は herdr のペインenv の HERDR_WORKSPACE_ID が herdr workspace list に載っているなら本物のペイン内、載っていないなら残骸。この1手で上の2ケースと env 残留を分けられる。