## What — 撒かれる5つの変数 **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` を起動すると、入れ子とみなして拒否する。**変数が「本物のペイン由来か、死んだペインの残骸か」は区別されない。** ここが誤検知の入口。 ## How — 実際に見た食い違いと、紛らわしいケース 実際に確認した食い違い(2026-08-06): - あるシェルの env → `HERDR_WORKSPACE_ID=w2G` - `herdr workspace list` の実在ワークスペース → `w31` `w32` `w34` `w36` `w3A` `w2G` はもう存在しない。サーバ再起動や `herdr server live-handoff` で ID が振り直された後も、古いシェル(およびそこから起動した子プロセス)が旧 ID の env を持ち続けたと考えられる。この状態のシェルは、見た目は素のターミナルなのに herdr からは「入れ子」と判定される。 紛らわしい別ケースが2つあるので、切り分けが要る。どちらも env が正しく、拒否も正しい動作になる。 - **サイドバーを畳んだ herdr**(`Ctrl+Q` → `b`)は素の Ghostty と見分けがつかない - **popup スクラッチシェル**(`Cmd+P`)も浮いた単独ターミナルに見えるが、中身は herdr のペイン > [!success] 見分け方 > env の `HERDR_WORKSPACE_ID` が `herdr workspace list` に載っているなら本物のペイン内、載っていないなら残骸。この1手で上の2ケースと env 残留を分けられる。 ## 関連 - [[開発環境]]