The tool table in this skill — ripgrep instead of grep, fd instead of find, ast-grep for structural patterns — no longer depends on being read at the right moment. The plugin ships the reminder itself: hooks/hooks.json registers a PreToolUse hook on Bash, so installing the plugin installs it (@CybotTM in #70). The retro behind this measured the gap it closes: Bash carried 63% of all tool calls in one session while the dedicated Grep and Glob tools went unused.
Three rules, all warn-only, because a shell search is never wrong enough to block: a find invocation, a recursive grep, and a plain grep as the first command. Each speaks once per session. The first firing carries the information and either changes the next command or has a deliberate reason not to; repeats change nothing and only cost the reader attention while scrolling. Those three rules fired 23 times in a single session on the machine this came from, which is what prompted the cap.
Three deliberate silences, each a false positive first. A pipe into grep filters another command's output rather than searching a tree, so ripgrep would not replace it. Structured files belong to the data-tools gate, which denies field extraction from them, so one command never collects messages from two plugins. And prose about commands — a pull-request body, a commit message, an echo, a field value — is stripped before the scan, while an option naming a file is left alone.
The dedup state is keyed by a hash of the session identity, so an identifier carrying a path separator cannot steer that file out of the temp directory.
Upgrading requires nothing beyond updating the plugin. If a local ~/.claude/hooks/ script already nudges about grep or find, drop those rules from it — otherwise one command collects two messages.