Which tools to react to. OMIT IT for an event that carries no tool at all
(Stop, SubagentStop, SessionEnd), exactly as inject and the prompt/stop
gates already do — hookRouting then emits no matcher.
🔴 IT USED TO BE REQUIRED, WHICH MADE EVERY TOOL-LESS REACT DEAD. runReact
gates on tool_name; a Stop event carries none, so the name defaulted to
"", matched nothing, and the hook returned nothing() forever. MEASURED
2026-08-12 against the real runtime: a Stop react printed nothing and
exited 0 — indistinguishable from a hook that decided to stay quiet, which
is the whole reason advisory hooks die unnoticed. Three of the seven hooks
this feature was built for are Stop nudges.
Which tools to react to. OMIT IT for an event that carries no tool at all (
Stop,SubagentStop,SessionEnd), exactly as inject and the prompt/stop gates already do —hookRoutingthen emits no matcher.🔴 IT USED TO BE REQUIRED, WHICH MADE EVERY TOOL-LESS REACT DEAD.
runReactgates ontool_name; aStopevent carries none, so the name defaulted to"", matched nothing, and the hook returnednothing()forever. MEASURED 2026-08-12 against the real runtime: aStopreact printed nothing and exited 0 — indistinguishable from a hook that decided to stay quiet, which is the whole reason advisory hooks die unnoticed. Three of the seven hooks this feature was built for areStopnudges.