教程

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 完全实战指南:自动化你的编码工作流Claude Code Hooks 完整实战指南:6 种 Hook 事件类型(PreToolUse/PostToolUse/PreCompact/PermissionDenied/Stop/SubagentStop);8 个完整配置示例(文件修改后自动 lint+格式化/TypeScript 类型检查/git commit 前强制测试/危险命令阻断/Auto Mode 拒绝通知/MCP 工具调用/PreCompact 快照/条件 hooks);Hook 脚本环境变量说明;以及 5 个最佳实践(|| true 防误报/输出简洁/脚本快速/exit 1 明确阻断/逻辑放独立脚本)。2026/5/6教程Claude Code Hooks 深度实战:5 个真实案例教你用自动化消灭重复工作Claude Code Hooks 完整实战指南:配置文件结构(.claude/hooks/)、四种触发时机(post_write/pre_commit/session_start/session_end),以及 5 个完整案例:自动 Lint+格式化、修改后运行相关测试、TypeScript 类型检查、提交前安全扫描、Session 开始加载工作状态。含 on_error 策略选择。2026/4/22教程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 自定义 Agents 完整指南:创建专用 AI 编程助手Claude Code 自定义 Agents 完整指南:Agent 定义文件格式(Frontmatter 字段:name/description/tools/permissionMode/model/effort/context);4 种调用方式(/agents 界面/--agent CLI/对话提及/Print 模式自动化);4 个实战 Agent 配置(安全审查员/数据库优化顾问/无障碍合规检查/TypeScript 类型安全/CI 失败分析师);skillOverrides 控制可见性;context: fork 独立上下文;以及在 GitHub Actions 里使用 Agent 的 CI 配置示例。2026/5/7