教程

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/225分钟 阅读ClaudeEagle

Claude Code Hooks 是最被低估的功能之一。它让你在 Claude Code 的关键时间点(写文件后、Session 开始前、提交前)自动执行命令,把重复的手动操作变成自动化。

这篇文章通过 5 个真实场景,从配置到实战完整演示 Hooks 的使用方式。


Hooks 基础:配置在哪里,何时触发

配置文件位置

.claude/ └── hooks/ ├── post-write.yaml # 文件写入后触发 ├── pre-commit.yaml # Git commit 前触发 ├── session-start.yaml # Session 开始时触发 └── session-end.yaml # Session 结束时触发

基本配置格式

yaml
# .claude/hooks/post-write.yaml

hooks:
  - name: "Hook 名称(描述性)"
    trigger: post_write          # 触发时机
    match: "*.ts,*.tsx"          # 匹配文件(支持 glob)
    command: "命令 {file}"        # 执行的命令({file} 替换为实际文件路径)
    timeout: 30                  # 超时秒数(默认 30)
    on_error: "warn"             # 错误处理:warn | fail | ignore

触发时机详解

触发时机何时执行典型用途
post_writeClaude Code 写入文件后自动 lint、格式化、类型检查
pre_commitgit commit 前运行测试、检查安全
session_startClaude Code Session 开始时加载上下文、检查环境
session_endSession 正常结束时保存状态、清理临时文件

实战案例 1:自动 Lint + 格式化

场景:Claude Code 每次写 TypeScript 文件后,自动运行 ESLint 修复和 Prettier 格式化,保证代码规范。

yaml
# .claude/hooks/post-write.yaml

hooks:
  - name: "TypeScript 自动 lint"
    trigger: post_write
    match: "*.ts,*.tsx"
    command: "npx eslint --fix {file}"
    timeout: 15
    on_error: "warn"  # lint 失败只警告,不中断工作流

  - name: "自动格式化"
    trigger: post_write
    match: "*.ts,*.tsx,*.js,*.jsx,*.css,*.json"
    command: "npx prettier --write {file}"
    timeout: 10
    on_error: "warn"

效果:Claude Code 的每次输出都是格式规范的代码,你 Review 的时候不会被格式问题分散注意力。


实战案例 2:写文件后自动运行相关测试

场景:Claude Code 修改了某个文件后,自动运行这个文件对应的测试,立即发现问题。

yaml
# .claude/hooks/post-write.yaml

hooks:
  - name: "修改后自动运行相关测试"
    trigger: post_write
    match: "src/**/*.ts"
    # 把文件路径转换为测试文件路径
    command: |
      TEST_FILE=$(echo {file} | sed 's/src\//src\//;s/\.ts/.test.ts/')
      if [ -f "$TEST_FILE" ]; then
        npx vitest run "$TEST_FILE" --reporter=verbose
      fi
    timeout: 60
    on_error: "warn"

更精简的版本(用 Jest 的 --testPathPattern):

yaml
hooks:
  - name: "自动运行相关测试"
    trigger: post_write
    match: "src/**/*.ts"
    command: "npx jest --testPathPattern={file} --passWithNoTests"
    timeout: 60
    on_error: "warn"

效果:Claude Code 改了代码,立刻知道测试有没有过。不用等你手动 npm test


实战案例 3:TypeScript 类型检查

场景:每次写完 .ts 文件后自动做类型检查,防止类型错误积累。

yaml
# .claude/hooks/post-write.yaml

hooks:
  - name: "TypeScript 类型检查"
    trigger: post_write
    match: "src/**/*.ts,src/**/*.tsx"
    command: "npx tsc --noEmit --skipLibCheck 2>&1 | head -20"
    timeout: 30
    on_error: "warn"

Session 结束时全量检查

yaml
# .claude/hooks/session-end.yaml

hooks:
  - name: "Session 结束全量类型检查"
    trigger: session_end
    command: "npx tsc --noEmit"
    timeout: 120
    on_error: "fail"  # 有类型错误时明确报告

实战案例 4:提交前安全检查

场景:git commit 前自动检查有无敏感信息(API Key、密码等)混入代码。

yaml
# .claude/hooks/pre-commit.yaml

hooks:
  - name: "提交前安全扫描"
    trigger: pre_commit
    command: |
      # 检查常见敏感信息模式
      if git diff --cached | grep -E '(api_key|secret|password|token)\s*=\s*["\x27][^"\x27]{8,}'; then
        echo "⚠️  发现疑似敏感信息,请检查后再提交"
        exit 1
      fi
      echo "✓ 安全扫描通过"
    timeout: 10
    on_error: "fail"  # 发现问题时阻止提交

  - name: "提交前运行测试"
    trigger: pre_commit
    command: "npm run test:unit -- --passWithNoTests"
    timeout: 120
    on_error: "fail"

实战案例 5:Session 开始时加载上下文

场景:每次 Claude Code Session 开始时,自动加载当天的工作状态(未完成的 PR、当前分支、最近的改动)。

yaml
# .claude/hooks/session-start.yaml

hooks:
  - name: "加载工作状态"
    trigger: session_start
    command: |
      echo "=== 当前工作状态 ==="
      echo "分支: $(git branch --show-current)"
      echo ""
      echo "最近改动:"
      git log --oneline -5
      echo ""
      echo "未暂存文件:"
      git status --short
      echo ""
      if [ -f ".claude/session-notes.md" ]; then
        echo "=== 会话笔记 ==="
        cat .claude/session-notes.md
      fi
    timeout: 10
    on_error: "ignore"

配合 Session 结束保存

yaml
# .claude/hooks/session-end.yaml

hooks:
  - name: "保存会话状态"
    trigger: session_end
    command: |
      cat > .claude/session-notes.md << EOF
      # 上次会话笔记($(date '+%Y-%m-%d %H:%M'))
      
      分支: $(git branch --show-current)
      最后改动: $(git log --oneline -1)
      未提交文件: $(git status --short | head -5)
      EOF
    timeout: 10
    on_error: "ignore"

Hooks 的错误处理策略

yaml
on_error: "warn"    # 命令失败 → 在 Claude Code 里显示警告,继续工作流
on_error: "fail"    # 命令失败 → 中断当前操作,让 Claude Code 知道出了问题
on_error: "ignore"  # 命令失败 → 静默忽略,继续(适合辅助性操作)

选择策略

  • 核心质量检查(测试、类型检查):fail,让 Claude Code 知道需要修复
  • 格式化/Lintwarn,不阻断工作流但提示需要关注
  • 状态加载/日志记录ignore,辅助功能失败不影响主流程

常见问题

Hook 没有触发?

  • 检查 match 模式是否正确匹配文件路径
  • 文件路径从项目根目录开始,确保 glob 模式正确

Hook 太慢影响工作流?

  • 设置合理的 timeout
  • 耗时操作考虑移到 session_end 而不是 post_write

想在 Hook 里知道是哪个文件?

  • post_write 触发时可用 {file} 变量
  • 其他触发时机没有文件变量(用 git 命令获取改动文件列表)

来源:Anthropic Claude Code 官方文档 - Hooks | aiorg.dev 最佳实践 | 整理:ClaudeEagle

相关文章推荐

教程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 Hooks 完全指南:自动化工作流的利器Claude Code Hooks 是在工具执行生命周期特定节点触发自定义脚本的机制。本文涵盖全部 17 种 Hook 事件,配置格式、实战案例(阻止危险命令、自动 lint、任务通知),以及异步 Hook 用法和最佳实践,助你构建强大的自动化工作流。2026/2/27教程Claude Code Hooks 完全指南:用确定性脚本守护每次代码变更的自动化护栏Claude Code Hooks 完整教程:与 CLAUDE.md 规则的本质区别(每次都执行 vs 建议性)、四种 Hook 类型(PreToolUse/PostToolUse/Stop/Notification)、自动 lint、测试自动运行、阻止危险操作、任务完成通知,以及前端项目完整 Hooks 配置示例。2026/4/18教程Claude Code Plan Mode 深度指南:用「先想再做」模式彻底消灭 AI 蝴蝶效应Claude Code Plan Mode 完整指南:蝴蝶效应是什么以及为什么危险、Plan Mode 工作原理、什么时候用什么时候不用的详细清单、采访模式大功能必用流程、Plan Mode + 新 Session 黄金组合,以及完整的限流功能实现案例演示。2026/4/18