{"version":"2.1.314","anchor":"hook-matchers-monitorbash-family-name-matching","canonical_anchor":"hook-matchers-monitorbash-family-name-matching","heading":"Hook matching: vetted project hooks and Bash\/Monitor name matching","tier":"notice","area":"Hooks","scope":"both","heads_up":true,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.314\/e\/hook-matchers-monitorbash-family-name-matching","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.314","markdown":"### Hook matching: vetted project hooks and Bash\/Monitor name matching\n\nProject-settings hooks can be swapped for a vetted copy or dropped, and hook matchers can now match Bash calls through the Monitor name\n\n**Unclear.** Which Bash commands count as matching a Monitor matcher is not spelled out.\n\n**What**\n\nHooks are your own commands that Claude Code runs at set moments, such as before a tool runs. A matcher decides which tool calls a hook applies to. Two changes affect which hooks run:\n\n- Command hooks from a project's settings now go through a `copyThatApplies` step when one is registered. The hook is replaced by what it returns, or dropped when it returns nothing. `asStandIn` is no longer set for project-settings hooks.\n\n- A tool-name matcher can now match through related names: a Bash command can match a matcher named Monitor. Hooks record this with `throughFamilyOnly` and `matcherMetThroughOtherName`.\n\n- A hook whose `if` condition names Monitor is skipped when its matcher matched the call only through Bash, with the log line \"Skipping hook: its if condition ... names Monitor, and its matcher met the call only through Bash\".\n\n**Why**\n\nHooks defined in a repository's project settings may no longer run as written, and hooks aimed at Bash or Monitor may fire on calls they did not catch before. If a hook stops or starts firing, these are places to check.\n\n- Area: Hooks\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 3\/5\n- Scope: both\n- Heads-up: yes"}