Claude Code 插件开发核心:Hook 开发完全指南
Claude Code 插件开发最核心的能力是什么?很多人第一反应是 Tools、MCP 服务器——但真正让插件变成”会自己跑的工作流”的,是 Hooks。
今天推荐一个我最近深度用过的 Skill:hook-development,来自 Anthropics 官方 Claude Code Skills 仓库,专门教你怎么写 Hook。
它解决了什么问题?
当你用 Claude Code 开发插件时,基本的 commands / agents / skills 你可能已经熟悉了。但如果你想让插件在特定事件发生时自动做一些事——比如:
- 每次执行危险命令前弹个确认
- 工具调用完成后自动记录日志
- Session 结束时自动清理临时文件
- 用户提交 Prompt 之前做内容审查
这些场景靠 Skills 本身是做不到的,得靠 Hooks。
Hooks 能做什么?
Claude Code 支持的 Hook 类型很完整:
- PreToolUse / PostToolUse:工具执行前后拦截
- Stop / SubagentStop:Agent 停止时触发
- SessionStart / SessionEnd:会话生命周期
- UserPromptSubmit:用户 Prompt 提交前
- PreCompact:压缩会话前
- Notification:各种通知事件
hook-development 这个 Skill 把每种 Hook 的触发时机、传入参数、返回值、适用场景全部梳理清楚,还配了大量代码示例。看完基本就能上手写自己的第一个 Hook 了。
实际用法
触发条件很明确,当用户说这些词时直接调用:
“create a hook”、”add a PreToolUse/PostToolUse/Stop hook”、”validate tool use”、”implement prompt-based hooks”、”set up event-driven automation”、”block dangerous commands”
用起来也简单,假设你要在执行危险命令前加个确认:
// 在你的 plugin.json 里注册 hook
{
"hooks": {
"PreToolUse": {
"handler": "hooks/pre-tool-use.ts"
}
}
}
// hooks/pre-tool-use.ts
import { HookRegistry } from '@anthropic-ai/claude-code';
export const preToolUse: HookRegistry['PreToolUse'] = async ({ tool, input }) => {
const dangerous = ['rm', 'sudo', 'chmod', 'kill'];
if (dangerous.some(cmd => tool.name.includes(cmd))) {
const confirmed = await confirm(`执行 ${tool.name}?`);
if (!confirmed) throw new Error('Hook cancelled');
}
return { tool, input };
};
这就是一个真实可用的危险命令拦截 Hook。类似的,你还可以做:
– 敏感信息扫描(API Key、Token 传输前检测)
– 调用日志自动写入 Notion 或 Slack
– 代码风格不符合规范时自动中止并提示
为什么值得学?
Hook 是 Claude Code 插件体系里最接近”自动化”本质的能力。很多 Skill 解决的是单次任务,而 Hook 解决的是流程控制——让你的 Agent 在正确的时机做正确的事,而不是每次都靠人工干预。
学完这个 Skill,你对 Claude Code 插件开发的理解会上一个台阶,从”会用工具”变成”会设计事件驱动的自动化”。
GitHub 仓库是开源的,地址:
https://github.com/anthropics/skills/tree/main/skills/hook-development
GitHub: https://github.com/anthropics/skills/tree/main/skills/hook-development
评论区
登录后可评论。