Claude Code 总在乱来?给它装个「操作拦截器」——Hook 开发入门
Claude Code 用起来顺手,但有时候它会忽略你的安全边界、乱调工具——装上这个 Hook 技能,就能给 AI 套上「自动化保险丝」,把危险操作直接熔断在执行之前。
为什么你的 AI 总在乱来?
用 Claude Code 写代码,有没有遇到这种情况:让它重构一个函数,结果它把半个项目都改掉了;让它跑测试,结果直接 rm -rf node_modules 删了整个依赖目录;甚至有时候误触了什么敏感命令,数据直接 GG。
这些问题本质上是:AI 没有「校验动作」的反馈回路,它执行操作前没经过你点头。
Hook 开发就是来解决这个的——给 Claude Code 装一个「操作拦截器」,让它在执行危险命令前先问你,或者直接 Block 掉。
Hook 开发是什么?
这是 Anthropic 官方 anthropics/skills 技能库里的一个子技能,专门教你怎么在 Claude Code 里写插件钩子。
支持的事件类型:
- PreToolUse:工具调用之前触发——最常用的拦截点
- PostToolUse:工具执行完成后触发——适合做审计日志
- Stop / SubagentStop:会话中断时触发
- SessionStart / SessionEnd:会话开关时触发
- UserPromptSubmit:用户提交消息时触发
- PreCompact:上下文压缩前触发
- Notification:通知事件
简单说,你可以覆盖任何一个关键节点,决定 AI 在这个节点上做什么。
实际用法
场景一:拦截危险命令
比如你不希望 AI 执行任何删除操作,写一个 PreToolUse Hook:
def on_pre_tool_use(tool_name, tool_input):
if "rm" in tool_name.lower() or "delete" in tool_name.lower():
return {"block": True, "reason": "危险操作已拦截"}
return {"allow": True}
AI 试图删文件时,直接熔断,不执行。
场景二:强制人工审批
对于写文件、跑命令这类操作,设置必须经过你确认才能执行:
def on_pre_tool_use(tool_name, tool_input):
dangerous = ["Bash", "Write", "Edit"]
if tool_name in dangerous:
confirm = input(f"允许执行 {tool_name}? (y/n)")
if confirm.lower() != "y":
return {"block": True}
return {"allow": True}
场景三:操作审计日志
用 PostToolUse Hook 记录每一次工具调用的输入输出,方便事后复盘:
def on_post_tool_use(tool_name, tool_input, tool_output):
with open("audit_log.jsonl", "a") as f:
f.write(json.dumps({
"tool": tool_name,
"input": tool_input,
"timestamp": datetime.now().isoformat()
}))
适用人群
- 安全意识强的开发者:不想让 AI 裸奔执行危险操作
- 团队负责人:需要审计 AI 在团队成员会话里的操作记录
- AI 极客:想深度定制 Claude Code 的行为逻辑
怎么安装
在 Claude Code 里直接安装官方技能包:
/plugin marketplace add anthropics/skills
/plugin install example-skills@anthropic-agent-skills
或者直接参考 skills/hook-development/SKILL.md 的说明手动配置。
GitHub 链接:github.com/anthropics/skills(Hook 开发技能位于 skills/hook-development/ 目录下)
评论区
0 条评论
登录后可评论。