Claude Hooks 进阶指南:从原理到实战配置

Claude 进阶使用_hooks

什么是 hooks

hooks的英文翻译是勾子,他就是在程序运行到指定节点会触发的一个节点,你可以在这个节点做一些事情,就是这样。比如:

你先想象一下,你家门口装了一个门铃。正常情况下,你要有人按门铃,你才知道外面有人。但是如果装了一个人体感应器呢?只要有人走到门口,它就自动亮灯、录像、发通知,你根本不用去按任何按钮。Claude 的 Hooks,本质上就是这种"感应器"。

hooks 都有哪些

作者在官方文档选了几个比较常用的,简单说明一下想要更多更具体的一定要去看官方文档。

Hook(触发时机)什么时候触发常见用途举个例子
PreToolUseClaude 准备调用工具之前拦截、检查、限制操作在执行rm -rf、修改生产环境文件之前先确认;禁止编辑某些目录
PostToolUseClaude 调用工具完成之后自动执行后续任务修改代码后自动运行eslintprettier、单元测试
UserPromptSubmit用户刚发送消息时对用户输入做预处理自动补充项目规范、团队约定、代码风格到 Prompt 中
StopClaude 完成回答准备结束时收尾工作自动生成工作总结、保存日志、记录本次修改内容
NotificationClaude 需要通知用户时自定义通知方式任务完成后发送系统通知、播放提示音、推送到 Slack

hooks 怎么配置

文档中已经说明了只要在setting.json中配置就可以了,并给出了案例

下面这段意思是 claude 准备使用命令rm *的时候会执行项目目录下.claude/hooks/block-rm.sh的脚本

{ "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "if": "Bash(rm *)", "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-rm.sh", "args": [] } ] } ] } }

我们写一个简单的,就是在 claude 停止工作的时候给一个提示,把下面的代码放进项目的setting.json,注意这个提示的命令是 mac 的原生命令windows不可用

{ "hooks": { "Stop": [ { "hooks": [ { "type": "command", "command": "osascript -e 'beep' -e 'display dialog \"Claude 已完成任务!\" buttons {\"确定\"} default button \"确定\"'" } ] } ] } }

效果展示!!!!当然了,也可以在需要授权的时候让他进行提示