核心主题

使用 hooks 自动化工作流 - Claude Code Docs

我帮你把这篇官方 Hooks 文档彻底拆解 + 重写成“小白能看懂版”,但不会丢任何关键点。你可以当成一份“实战入门指南”。


🧠 一句话先讲明白 Hooks 是啥

👉 Hooks 本质就是:

在 AI 做事的“关键时刻”,强制执行你写的脚本

不是建议,是强制执行


🧩 为什么需要 Hooks?(核心理解)

你之前可能用过:

  • CLAUDE.md(规则提示)
  • Prompt(告诉 AI 怎么做)

👉 这些有个问题:

❗ AI可以不听


而 Hooks:

一定执行(强制)

比如:

  • 不允许改 .env
  • 自动格式化代码
  • 自动记录日志

👉 Hooks = 规则 → 变成程序


⚙️ Hooks 能干嘛?(官方用途翻译)

官方说的几个场景,我给你翻译成人话:

1️⃣ 通知

👉 AI卡住时提醒你
(比如:需要你点确认)


2️⃣ 自动格式化代码

👉 写完代码自动执行:

  • prettier(前端)
  • php-cs-fixer(PHP)

3️⃣ 日志记录

👉 AI干了什么全记录


4️⃣ 代码规范检查

👉 AI写的代码不符合规范 → 自动提示


5️⃣ 权限控制(最重要)

👉 比如:

  • 禁止改 .env
  • 禁止操作生产目录

🧠 Hooks 的核心机制(一定要懂)

👉 Hooks = “在某个时间点触发”

官方定义了一堆“触发点”(事件) (Claude API Docs)


📍 最重要的 5 个事件(你先记这几个)

1. PreToolUse(最关键)

👉 在 AI 执行操作之前

✔ 可以:

  • 拦截
  • 阻止

👉 用途:

  • 防止危险操作

2. PostToolUse

👉 操作执行完之后

✔ 用途:

  • 自动格式化代码
  • 记录日志

3. UserPromptSubmit

👉 你刚输入问题时

✔ 用途:

  • 校验 prompt
  • 加上下文

4. Notification

👉 AI需要你操作时

✔ 用途:

  • 弹通知

5. Stop

👉 AI完成任务时

✔ 用途:

  • 收尾操作

📌 官方完整事件还有:

  • SessionStart / End(会话开始结束)
  • SubagentStop(子任务结束)
  • PreCompact(压缩上下文前) (Claude API Docs)

👉 小白先不用全记


⚙️ Hooks 是怎么运行的?

👉 本质流程:

AI要做事

触发 Hook

执行你写的 shell / python 脚本

决定:
   - 允许
   - 阻止
   - 修改行为

📦 Hooks 配置长什么样?

最核心结构是这个:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "你的脚本"
          }
        ]
      }
    ]
  }
}

🧠 三个关键字段(必须理解)

1️⃣ Event(什么时候触发)

比如:

  • PreToolUse
  • PostToolUse

2️⃣ matcher(匹配什么操作)

比如:

"matcher": "Write"

👉 只在“写文件”时触发


支持:

  • Edit|Write(多个)
  • *(全部)
  • 正则

3️⃣ command(执行什么)

👉 本质就是:

执行一个 shell 命令

比如:

python check.py

🚨 Hooks 最重要能力:可以“阻止 AI”

这是最关键的点。


👉 通过 exit code 控制

返回值意义
0正常
2❗阻止操作
其他报错但继续

示例:禁止改 .env

if ".env" in path:
    exit(2)

👉 结果:

AI 想改 → 直接被拦住 ❌


🧠 更高级玩法(JSON 控制)

Hooks 可以返回 JSON 控制行为 (Claude API Docs)

比如:

{
  "continue": false,
  "stopReason": "禁止操作"
}

👉 作用:

  • 直接让 AI 停下来

🔌 Hooks + MCP(重点)

MCP 工具名字长这样:

mcp__filesystem__read_file

👉 规则:

"matcher": "mcp__filesystem__.*"

👉 你可以做到:

  • 监控所有文件操作
  • 限制某些 MCP 工具

⚠️ 安全问题(官方重点强调)

👉 Hooks 非常危险(真的)

因为:

❗它会自动执行系统命令


可能风险:

  • 删除文件
  • 泄露数据
  • 执行恶意脚本

官方建议:

  1. 不信任输入

  2. 用绝对路径

  3. 避免操作:

    • .env
    • .git
  4. 检查路径(防止 ../) (Claude API Docs)


⚙️ 运行机制(你要知道的细节)

1️⃣ Hooks 是并行执行的

👉 多个 hook 会同时跑 (Claude API Docs)


2️⃣ 有超时(默认60秒)

👉 超时会被杀掉 (Claude API Docs)


3️⃣ 输入输出

  • 输入:JSON(stdin)
  • 输出:
    • stdout(正常)
    • stderr(错误)

4️⃣ 环境变量

最重要:

$CLAUDE_PROJECT_DIR

👉 当前项目路径


🧪 一个完整小白案例(你能直接用)

👉 自动禁止改敏感文件

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "python protect.py"
          }
        ]
      }
    ]
  }
}

protect.py:

import json, sys

data = json.load(sys.stdin)
path = data.get("tool_input", {}).get("file_path", "")

if ".env" in path:
    print("禁止修改.env", file=sys.stderr)
    sys.exit(2)

sys.exit(0)

🧠 最终理解(帮你建立模型)

你可以这样理解:

工具本质
Prompt建议
CLAUDE.md规则
Hooks❗强制执行

🚀 给你的建议(结合你)

你是:

  • PHP + 运维 + 自动化

👉 强烈建议你先做 3 个 Hook:

必做:

  1. 禁止改 .env
  2. 自动记录所有 shell 命令
  3. 自动格式化 PHP 代码

🧩 一句话总结

👉 Hooks 就是:

给 AI 加“刹车 + 自动化 + 权限系统”


如果你想,我可以帮你:

👉 给你一套 “PHP开发者 Hooks 模板(直接可用)”
包括:

  • Laravel 专用
  • 生产环境保护
  • 自动部署流程

这套东西会直接把你提升到“AI工程化”阶段。

On this page