## 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 残留を分けられる。
## 関連
- [[開発環境]]