教程

Claude Code Hooks 完全指南:自动化工作流的利器

Claude Code Hooks 是在工具执行生命周期特定节点触发自定义脚本的机制。本文涵盖全部 17 种 Hook 事件,配置格式、实战案例(阻止危险命令、自动 lint、任务通知),以及异步 Hook 用法和最佳实践,助你构建强大的自动化工作流。

2026/2/274分钟 阅读ClaudeEagle

Hooks 是 Claude Code 中一个强大但常被忽视的功能。通过在特定生命周期事件触发自定义脚本,你可以实现安全检查、自动格式化、通知发送等各种自动化工作流。

什么是 Hooks?

Hooks 是用户定义的 Shell 命令或 LLM Prompt,在 Claude Code 生命周期的特定节点自动执行。当事件触发时,Claude Code 将 JSON 格式的上下文传递给 Hook 处理器,处理器可以检查输入、采取行动,并可选地返回决策。

Hook 生命周期事件

事件触发时机
SessionStart会话开始或恢复时
UserPromptSubmit你提交 Prompt,Claude 处理前
PreToolUse工具调用执行前,可以阻止
PermissionRequest出现权限对话框时
PostToolUse工具调用成功后
PostToolUseFailure工具调用失败后
NotificationClaude Code 发送通知时
SubagentStart子 Agent 被创建时
SubagentStop子 Agent 完成时
StopClaude 完成响应时
TeammateIdleAgent 团队成员即将空闲时
TaskCompleted任务被标记完成时
ConfigChange会话中配置文件变更时
WorktreeCreate通过 --worktree 创建工作树时
WorktreeRemove工作树被移除时
PreCompact上下文压缩前
SessionEnd会话终止时

Hook 配置格式

.claude/settings.json 中配置 Hooks:

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/block-rm.sh"
          }
        ]
      }
    ]
  }
}

实战案例 1:阻止危险命令

以下示例展示如何使用 PreToolUse Hook 阻止 rm -rf 等破坏性命令:

Hook 脚本 .claude/hooks/block-rm.sh

bash
#!/bin/bash
COMMAND=$(cat | jq -r '.tool_input.command')

if echo "$COMMAND" | grep -q 'rm -rf'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Destructive command blocked by hook"
    }
  }'
else
  exit 0
fi

工作流程:

  1. Claude Code 决定执行 Bash "rm -rf /tmp/build"
  2. PreToolUse 事件触发,匹配 Bash
  3. 运行 hook 脚本,检测到 rm -rf
  4. Hook 返回 deny 决策
  5. Claude Code 阻止该命令

实战案例 2:文件保存后自动 lint

bash
#!/bin/bash
# PostToolUse hook - 文件保存后自动运行 lint
TOOL=$(cat | jq -r '.tool')
if [ "$TOOL" = "Write" ] || [ "$TOOL" = "Edit" ]; then
  npm run lint --silent 2>/dev/null
fi

实战案例 3:会话开始时加载项目状态

bash
#!/bin/bash
# SessionStart hook
echo "=== 项目状态 ==="
git status --short 2>/dev/null
echo "未完成 TODO 数量: $(grep -r 'TODO' src/ 2>/dev/null | wc -l)"

实战案例 4:任务完成后发送通知

bash
#!/bin/bash
# Stop hook - Claude 完成响应后发送系统通知
# macOS:
osascript -e 'display notification "Claude Code 已完成任务" with title "Claude Code"' 2>/dev/null
# Linux:
# notify-send "Claude Code" "任务已完成"

异步 Hooks

对于不需要阻止工具执行的 Hook,使用异步模式避免影响响应速度:

json
{
  "hooks": {
    "PostToolUse": [
      {
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/log-usage.sh",
            "async": true
          }
        ]
      }
    ]
  }
}

退出码含义

退出码含义
0成功,允许操作继续
0失败,具体行为取决于事件类型
JSON 输出返回结构化决策(如 permissionDecision)

最佳实践

  1. 保持脚本简洁:Hook 在工具调用关键路径上执行,避免耗时操作
  2. 异步非关键任务:日志、通知等设为 async: true
  3. 测试充分:Hook 错误可能中断工作流,确保脚本健壮
  4. 使用版本控制:将 .claude/hooks/ 纳入 git,与团队共享安全策略
  5. 最小权限原则:只在必要时使用 deny 决策

总结

Claude Code Hooks 提供了强大的扩展机制,让你能够在 AI 助手的工作流中插入自定义逻辑。无论是安全防护、代码质量检查还是工作流自动化,Hooks 都是实现这些需求的理想工具。


来源Claude Code 官方文档 - Hooks Reference 原文作者:Anthropic Team

相关文章推荐

教程Claude Code Hooks 实战指南:5 大自动化场景、三种 Hook 类型与故障排查Claude Code Hooks 实战指南:/hooks 交互菜单四步创建桌面通知 Hook、5 大常用自动化场景(等待通知/编辑后 Prettier 格式化/退出码 2 阻止受保护文件/PostCompact 重注入上下文/ConfigChange 审计日志)、四种 Hook 类型(command/prompt-based/agent-based/HTTP Webhook)、输入/输出机制(stdin JSON/stdout 注入上下文/退出码 0 继续/2 阻止/非零警告)、结构化 JSON 输出、Matcher 过滤器语法(Edit|Write/Bash(git *)/*/空字符串)、四级存储位置,以及五大故障排查方法和调试技巧。2026/3/8教程Claude Code Hooks 完全指南:五大自动化场景、三类 Hook 类型与 JSON 输入输出规范Claude Code Hooks 完整指南:30 秒创建第一个 Hook(/hooks 交互菜单)、五大常用场景(通知/自动格式化/保护文件/压缩后注入上下文/审计配置变更)、六个生命周期事件(PreToolUse/PostToolUse/Notification/PostCompact/SessionStart/Stop)、四类 Hook 类型(Command/Prompt/Agent/HTTP)、JSON 输入输出规范(decision/reason/output/updatedInput)、Matcher 过滤语法,以及五大故障排查方法。2026/3/6教程Claude Code Hooks 实战指南:自动格式化、桌面通知与文件保护Claude Code Hooks 实战指南:5 大场景(桌面通知、自动格式化、文件保护、压缩后注入上下文、配置审计)的完整配置,Hook 输入/输出 JSON 格式,事件类型(PreToolUse/PostToolUse/Notification/PostCompact),以及提示型和 Agent 型 Hook。2026/3/2教程Claude Code 自定义斜杠命令完全指南:用 /命令 封装常用工作流Claude Code 自定义斜杠命令(slash commands)完整教程:命令文件创建位置(.claude/commands/)、Markdown 格式规范、$ARGUMENTS 参数传递、项目级命令 vs 用户全局命令的区别、实用命令示例(/review、/test、/deploy-check、/refactor、/standup)、命令组合调用,以及如何在团队中共享和版本管理自定义命令。2026/3/18教程Claude Code Skills 自定义命令:打造你的团队专属 AI 工作流Claude Code Skills 自定义命令完整教程:Skills vs CLAUDE.md 使用场景对比、内置 Skills 速览(/batch/simplify/loop)、SKILL.md 文件格式与 Frontmatter 配置、四大实用 Skills 示例(代码审查/部署检查/功能开发/团队 OnBoarding)、传参方式、子代理执行与 Git 团队共享。2026/3/14教程Claude Code + GitHub Actions:自动化代码审查与 CI/CD 集成完全指南Claude Code GitHub Actions 完整配置指南:5 分钟快速安装(GitHub App + API Key Secret + Workflow 文件)、四大使用场景(按需 PR 审查/Issue 自动实现/快速修复/自动 Changelog)、每 PR 自动触发审查配置、高级参数(模型/轮数/工具限制/AWS Bedrock)与安全最佳实践。2026/3/13