Hook 为什么不触发?

一个悄无声息、从不运行的 Hook,是最常见的 Agent 配置谜题之一。下面教你用 Berth 把它揪出来。

1. 事件名对吗?

Hook 在特定生命周期事件上触发(例如工具调用前的 PreToolUse、调用后的 PostToolUse)。若事件名对不上任何真实事件,Hook 永远不会运行。Berth 会显示每个 Hook 被设定为何时触发。

2. 是不是被全局关掉了?

disableAllHooks 设置会一次性关闭所有 Hook。Berth 的健康检查会把它标出来——这是第一个要排除的因素。

3. matcher 是不是太窄?

很多 Hook 用 matcher 来锁定特定工具。若 matcher 匹配不到你正在用的工具,就什么都不会发生。对照会话的工具时间线里的工具名,检查 matcher。

4. 命令文件存在吗?

Hook 指向一个命令或脚本。若路径错误或文件缺失,Hook 无法运行。Berth 会在健康检查里校验 Hook 的入口路径。

参考来源

  1. 01
    Claude Code — Hooks 指南

    一手来源;hook 事件与生命周期。

    https://code.claude.com/docs/en/hooks-guide

  2. 02
    Claude Code — Settings

    一手来源;settings.json,含 disableAllHooks。

    https://code.claude.com/docs/en/settings