钩子构建器
搭建事件钩子,并抓出那些根本不会触发的匹配式。
钩子命令常常指向内部脚本和路径。一切都在浏览器里生成,不会上传。
检查这些工具能执行什么
关于 钩子构建器
钩子会在会话的固定节点执行 shell 命令:写完文件之后、某个工具运行之前、一轮结束时。它是整套配置里唯一不必每次征询就执行代码的部分,所以把它那些无声的失败揪出来很值。写了不存在的工具名的匹配式,永远不会触发,也永远不会抱怨。去取参数的命令会拿到一个空字符串,因为事件是以 JSON 从标准输入送来的,而不是作为参数。而且只有部分事件真的能拦下即将发生的动作。这个构建器把这三点都覆盖了,并说明哪些事件能拦、哪些只能旁观。
功能特性
- 逐一列出每个事件及其触发时机
- 把匹配式与真实工具名对照,连大小写差异也能抓到
- 在没有工具的事件上设了匹配式时发出警告
- 命令去取它永远收不到的参数时发出警告
- 说明哪些事件能拦下动作,以及怎么拦
- 常用匹配式一键填入
- 多个钩子按事件与匹配式正确归组输出
- 在破坏性命令无人值守地运行前把它标出来
如何使用 钩子构建器
- 选择你想介入的事件
- 如果事件与具体工具相关,补上匹配式
- 写好命令,从标准输入读取负载
- 读完警告,把输出并入 settings.json
示例
输入
prettier --write "$1"
输出
Warning: $1 will be empty — a hook is not given arguments
事件以 JSON 从管道送来;用 jq 读取。
常见错误与故障排除
- 钩子从来不运行。 — 多半是匹配式。工具名首字母大写且区分大小写——是 Write 不是 write——写了不存在的名字就无声地对不上任何东西。
- 命令运行了却没收到输入。 — 钩子的输入是以 JSON 从标准输入送来的。用类似 jq -r '.tool_input.file_path' 的方式读取,而不要指望参数。
- 我的钩子拦不下工具调用。 — 只有部分事件能拦,而且只能靠以状态码 2 退出。其他任何情况都被当作"继续",而 PostToolUse 这类事件本来就在事后触发。
- 会话卡在我的钩子上。 — 设一个超时。等待网络调用或锁的钩子,会在等待期间把整个会话都拖住。
常见问题
- 格式化工具该用哪个事件?
- PostToolUse,并对写入类工具设置匹配式,这样文件已经存在时才运行。写入之前格式化,没有东西可格式化。
- 钩子怎么拿到事件?
- 以 JSON 从标准输入拿到:工具名、它的输入,以及周边上下文。没有任何东西作为命令行参数传入,所以围绕 $1 写的命令什么都收不到。
- 钩子能阻止工具运行吗?
- 在它运行之前可以:以状态码 2 退出即可拦下。哪些事件允许这样做,会在你选择时显示——因为想从一个事后触发的事件去拦截,是既常见又令人困惑的错误。
- 钩子会不问就运行吗?
- 会——这正是它的用途,也是添加任何钩子前都该细读的理由。会删文件的钩子在这里会被标出来,但一般规则是:这个文件里的一切都会无人值守地运行。
- 一个事件上能有多个钩子吗?
- 可以。事件与匹配式相同的钩子会在输出里归为一组,这正是配置文件期待的形状。
相关工具
更多AI 与智能体工具
查看全部AI 与智能体工具 · 全部工具