Claude Code 插件开发核心:Hook 开发完全指南

Claude Code 插件开发最核心的能力是什么?很多人第一反应是 Tools、MCP 服务器——但真正让插件变成”会自己跑的工作流”的,是 Hooks

今天推荐一个我最近深度用过的 Skillhook-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

评论区

0 条评论

登录后可评论。

陈一铭 13 阅读