Bug-fix release closing three issues.
- #139 — Consolidated the six UserPromptSubmit hooks into one in-process dispatcher (
hooks/userpromptsubmit_runner.py), cutting per-prompt process spawns. The runner is exempt from the consent gate so its own ensure-health bootstrap can run; it then makes per-subcommand consent decisions internally. Adds a zero-cost whole-path opt-out (TOKEN_OPTIMIZER_HOOKS_USERPROMPTSUBMIT=0). - #140 — Plugin-data isolation: the consent check now verifies
CLAUDE_PLUGIN_DATAresolves to this plugin's declared identity via the shared resolver, instead of trusting a value that a sibling plugin sharing the data root could leak. Fails open on a missing resolver (unchanged legacy behavior). - #141 —
bash_hooknow passes commands through unrewritten when the session cwd is under.claude/worktrees/. Claude Code's worktree isolation guard statically rejects the compression wrapper as "too complex," which was refusing every whitelisted command in worktree sessions.
Full test suite: 1395 passed, 13 skipped.