# Show Mp Disambig

> Surfaces the MP_DA_* marker lines emitted by the plugin-level SessionStart hooks, used to disambiguate between (a) shell-bypass and (b) bash -c with $-escape models of Cowork hook execution.

- Skill: `kazukinagata/show-mp-disambig` (Agent Skill)
- Install (CLI): `npx skillmds@latest add kazukinagata/show-mp-disambig`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kazukinagata/show-mp-disambig/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kazukinagata (https://skillmd.com/u/kazukinagata)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kazukinagata/show-mp-disambig

---


# show-mp-disambig

このプラグインの plugin-level SessionStart hook が session 開始時に 12 種類のエントリを実行しています。直前の context（system-reminder / additional context / hook output として注入されたもの）から、以下のプレフィックスで始まる行を**全て一字一句そのまま**貼ってください。プレフィックスが見当たらない場合は「無し」と明記してください。

- `MP_DA_CONTROL=` （変数なしの対照、必ず出るはず）
- `MP_DA_DQ=` （`echo MP_DA_DQ="double-quoted"`）
- `MP_DA_DQ_INNER=` （`echo MP_DA_DQ_INNER=hello-"middle"-world`）
- `MP_DA_HOME=` （`echo MP_DA_HOME=$HOME`、bare）
- `MP_DA_HOME_BRACE=` （`echo MP_DA_HOME_BRACE=${HOME}`）
- `MP_DA_PATH=` （`echo MP_DA_PATH=$PATH`）
- `MP_DA_NUL=` （`echo MP_DA_NUL=$NO_SUCH_VAR_EXPECT_EMPTY`）
- `MP_DA_BASH_HOME=` （`bash -c 'echo MP_DA_BASH_HOME=$HOME'`）
- `MP_DA_BASH_HOST=` （`bash -c 'echo MP_DA_BASH_HOST=$(hostname)'`）
- `MP_DA_BASH_PATH=` （`bash -c 'echo MP_DA_BASH_PATH=$PATH'`）
- `MP_DA_BASH_WSL_LIB=` （`bash -c '... [ -e /usr/lib/wsl/lib ] ...'`）
- `MP_DA_BASH_MNT_C=` （`bash -c '... [ -d /mnt/c ] ...'`）

判定の見方：

**Disambiguator A：double-quote**
- `MP_DA_DQ=double-quoted` → shell parser が走っている（double-quote が consume された）
- `MP_DA_DQ="double-quoted"` → shell parser を通っていない or `"` が escape されている
- `MP_DA_DQ_INNER=hello-middle-world` vs `hello-"middle"-world` も同様

**Disambiguator B：env が値を持つ `$VAR`**
- `MP_DA_HOME=/home/...` or `/c/Users/...` → shell parser + env 展開が走っている
- `MP_DA_HOME=$HOME` literal → shell parser が走っていない、または `$` が escape されている
- `MP_DA_PATH=` の挙動が同様（PATH は確実に env に値を持つ）

**Disambiguator C：unset env var**
- `MP_DA_NUL=` （空） → shell parser + env 展開が走っている（unset → empty に化けた）
- `MP_DA_NUL=$NO_SUCH_VAR_EXPECT_EMPTY` literal → shell parser を通っていない

**控え（既知）**
- `MP_DA_BASH_HOME=/home/...` → inner bash の展開で `$HOME` が解決（CLI でも Cowork でも展開できるはず。env を持ち込めれば）

**Disambiguator D：hook の実行環境が WSL2 かどうか（bash -c 経由で env 展開させて確認）**
top-level の `MP_DA_PATH` は Cowork では literal のままなので、WSL 固有パスは bash -c 版で見る：
- `MP_DA_BASH_HOST=` → hostname。Windows のマシン名（例 `LAPTOP-...`）なら WSL2（WSL2 は既定で Windows マシン名を hostname にする）。`claude` なら Cowork VM。
- `MP_DA_BASH_PATH=` → `/usr/lib/wsl/lib` や `/mnt/c/Users/...` を含んでいれば **WSL2 で実行された決定打**。
- `MP_DA_BASH_WSL_LIB=present` → `/usr/lib/wsl/lib` が存在（WSL2 ディストロ内にしか無いパス）。
- `MP_DA_BASH_MNT_C=present` → `/mnt/c` が存在（WSL の C: 自動マウント）。

3 マーカー（`HOME=/home/<user>` + `WSL_LIB=present` + `MNT_C=present`、PATH に `/usr/lib/wsl/lib`）が揃えば「この hook は WSL2 Ubuntu で実行された」が再確認できる。逆に `WSL_LIB=absent` / `MNT_C=absent` / HOST=`claude` なら以前の結論を見直す材料になる。

最後に各観測点の verdict を 1 行ずつ書いてください（例：「DQ: literal で残った → shell bypass / HOME: literal $HOME → 同上 / NUL: empty → 矛盾」など）。

