📊 页面导航

适用角色与上手难度

角色推荐度上手难度
🛠️ 开发★★★★★★★★★☆
🧪 测试★★★☆☆★★★★★
📦 产品★★☆☆☆★★★★★

🎯 学习产出: 掌握 Claude Code 的 Hooks 系统,能自定义事件触发的自动化行为

🚀 AI 能力提升: 自动化工作流、技能扩展

Hooks

预计阅读时间: 4 分钟

Hooks 允许你在 Claude Code 执行特定操作的前后自动运行脚本。这可以用来强制执行代码规范、自动格式化、发送通知等。

工作原理

Claude Code 有以下 Hook 事件:

事件触发时机
SessionStart会话开始时
UserPromptSubmit用户提交提示词时
PreToolUse工具调用之前
PostToolUse工具调用之后
NotificationClaude Code 发送通知时
Stop对话结束时
SessionEnd会话结束时

Hooks 的实际应用:Claude-Mem

Claude-Mem 是一个利用 Hooks 实现全自动记忆的典型案例。它注册了 5 个生命周期 Hook:

Hook 事件Claude-Mem 的用途
SessionStart从数据库检索相关上下文,注入新会话
UserPromptSubmit记录用户意图
PostToolUse将工具调用结果压缩为观察记录并存储
Stop记录会话结束状态
SessionEnd生成会话级摘要

Claude-Mem 通过这些 Hooks 实现了零干预的跨会话记忆——用户无需手动"记住"任何东西,系统在后台自动工作。

Info

Claude-Mem 是理解 Hooks 实战用法的好案例。完整介绍请参考 Claude-Mem 持久记忆

配置 Hooks

.claude/settings.json 中配置:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "echo 'About to run a bash command'"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit",
        "hooks": [
          {
            "type": "command",
            "command": "npx prettier --write $CLAUDE_FILE_PATH"
          }
        ]
      }
    ]
  }
}

实用示例

自动格式化代码

每次 Claude Code 编辑文件后自动运行 Prettier:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "npx prettier --write $CLAUDE_FILE_PATH"
          }
        ]
      }
    ]
  }
}

运行测试前检查

在运行测试命令前自动检查语法:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "if echo '$CLAUDE_COMMAND' | grep -q 'npm test'; then npx tsc --noEmit; fi"
          }
        ]
      }
    ]
  }
}

Git 提交前 lint

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "if echo '$CLAUDE_COMMAND' | grep -q 'git commit'; then npm run lint; fi"
          }
        ]
      }
    ]
  }
}

Hook 环境变量

Hook 脚本可以访问以下环境变量:

变量说明
CLAUDE_FILE_PATH当前操作的文件路径
CLAUDE_COMMAND当前执行的命令

注意事项

  • Hook 脚本应该是快速的,避免阻塞 Claude Code
  • Hook 失败不会阻止 Claude Code 继续执行(除非配置了阻止)
  • 建议只在必要时使用 Hook,过多的 Hook 会降低响应速度

下一步