router-skill-predicate-gaplisted
Install: claude install-skill MrBinnacle/skills
# Router skill predicate gap
## Problem
A skill is documented as MANDATORY and wired into a `UserPromptSubmit` router hook, so the
rule looks enforced rather than remembered. It is not: **the hook runs, exits 0, and matches
nothing**, because its regex list omits the word users most often type for the thing it
guards. The wiring is present, the hook is healthy, the config is valid — and nothing
distinguishes "the predicate did not match" from "no prompt needed it."
## Use when
- A rule file says a skill is MANDATORY, and you cannot recall the reminder arriving.
- You are about to write, or repeat, the claim that a discipline is hook-enforced.
- A rule's `patterns` list was seeded from error signatures or example phrasings and never
re-read.
- The skill did fire once, and you have not checked *which* pattern matched.
## Root cause
Router patterns are seeded from the highest-precision triggers —
error strings, slash commands, distinctive nouns — because the ordinary word for the
artifact looks too broad to add safely. The predicate then matches specialist phrasing and
misses the common request: **model-pull wearing a hook's clothes**.
## Solution
### 1. Test the negative first, against the live hook
Do this before editing anything. Probe the suspect prompt **and a known-good fixture in the
same run** — the known-good is a positive control, and without it the run is
uninterpretable:
```sh
cd ~/.claude/hooks
for p in "write me a plan for issue 18" "<a phrase you know