工具大全
Claude 指南作者:Coocon2026年4月13日658 次阅读约 2 分钟阅读

Claude Code Hooks:自定义自动化工作流

什么是 Hooks

Hooks 是 Claude Code 提供的自动化扩展机制,允许你在特定事件发生时自动执行自定义脚本。通过 Hooks,你可以在 Claude 调用工具之前或之后插入自己的逻辑,比如自动格式化代码、阻止危险命令或发送通知。

Hooks 在你的本地机器上以确定性方式执行,不消耗 LLM 的 token,是构建可靠自动化工作流的理想方式。

Hook 事件类型

事件 触发时机
PreToolUse 工具调用执行之前
PostToolUse 工具调用执行之后
Notification Claude 发送通知时
Stop Claude 完成响应时

配置方法

Hooks 在 .claude/settings.json 中配置:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hook": {
          "type": "command",
          "command": "echo 'File is about to be modified'"
        }
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hook": {
          "type": "command",
          "command": "npx prettier --write $CLAUDE_FILE_PATH"
        }
      }
    ]
  }
}

matcher 字段支持正则表达式,用于匹配工具名称(如 EditWriteBash 等)。

实战示例

文件保存后自动 Lint

{
  "PostToolUse": [
    {
      "matcher": "Edit|Write",
      "hook": {
        "type": "command",
        "command": "npx eslint --fix $CLAUDE_FILE_PATH 2>/dev/null || true"
      }
    }
  ]
}

阻止危险命令

{
  "PreToolUse": [
    {
      "matcher": "Bash",
      "hook": {
        "type": "command",
        "command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm\\s+-rf\\s+/|DROP\\s+DATABASE'; then echo 'BLOCKED: Dangerous command detected' >&2; exit 1; fi"
      }
    }
  ]
}

当 hook 脚本以非零状态退出时,对应的工具调用将被阻止。

完成时发送通知

{
  "Stop": [
    {
      "matcher": "",
      "hook": {
        "type": "command",
        "command": "osascript -e 'display notification \"Claude 完成了任务\" with title \"Claude Code\"'"
      }
    }
  ]
}

最佳实践

  • 保持脚本快速:Hook 脚本会阻塞 Claude 的执行流程,避免长时间运行的任务
  • 妥善处理错误:使用 || true 防止非关键脚本失败阻塞工作流
  • 善用环境变量:Claude 会注入 $CLAUDE_FILE_PATH$CLAUDE_TOOL_INPUT 等上下文变量
  • 团队共享:将 hooks 配置放在项目级 .claude/settings.json 中,提交到仓库供团队共用

常见问题

Hooks 和 MCP 有什么区别?

Hooks 是确定性的本地脚本,在特定事件时自动触发,适合自动化检查和格式化。MCP 则是让 Claude 访问外部工具和数据源的协议,Claude 可以主动调用 MCP 提供的工具。两者互补,不冲突。

Hook 脚本执行失败会怎样?

如果 PreToolUse 的 hook 脚本以非零状态退出,对应的工具调用将被阻止。如果 PostToolUse 的脚本失败,Claude 会收到错误信息但会继续执行后续操作。

可以在 Hook 中使用哪些环境变量?

Claude Code 会自动注入上下文相关的环境变量,包括 CLAUDE_FILE_PATH(当前操作的文件路径)、CLAUDE_TOOL_INPUT(工具的输入参数)等。具体可用变量取决于触发的事件和工具类型。

相关文章

Claude Code 报错 temporarily unavailable, so auto mode cannot determine the safety of bash 怎么解决

Claude Code auto 模式弹出「temporarily unavailable, so auto mode cannot determine the safety of bash」?先说结论:不是你的命令危险,是安全判定器(一次额外的模型调用)暂时联不上。本文给出四步处理、模型名×工具名×原因的完整变体速查,以及只读操作为何不受影响的机制解释。

llmclaude-code+3
pitfalls2026年9月4日4 min
223

复现一条能打穿 Claude Code auto 模式的注入链:模型拒跑恶意二进制,却自写代码把自己坑了

embracethered 8 月底放出一条攻击链,让一句『总结这个网页』把 auto 模式的 Claude Code 拖到 60~80% 的代码执行成功率——而 Anthropic 委托第三方测出的数字是 0.00%。我在隔离环境里把这条链拆开逐段实测:诱导模型从 WebFetch 降级到 curl 的分流端点、以及最关键的一环——模型『拒绝运行陌生二进制、改自己写 Python 解码器』这个安全决定本身,反而踩中了同目录下的同名 struct.py 投毒。确定性部分(分流 + 同名模块投毒 + 缓解对照)在本机完整复现并给出真实证据;live 端我这台机器因判定器限流 fail-closed 而没能跑通完整 RCE,如实标注。文末给出真正有用的缓解手段。

claude-codeauto-模式+5
hands-on2026年8月31日9 min
261

抓包拆开 Claude Code auto 模式的判定器:11 万字系统提示词逐段解析

上一篇复测确认了 auto 模式在放行 Bash 前会调一次会话模型当判定器,但那个判定器收到的到底是什么,一直是黑盒。这次我用本地日志代理把判定请求整包抓了下来:一份 116,879 字符的系统提示词,开头写着 You are a security monitor for autonomous AI coding agents。本文逐段引用抓包原文,拆开它的威胁模型、两级规则(1 条 HARD BLOCK / 68 条 SOFT BLOCK / 17 条 ALLOW)和两阶段判定流程——第一阶段只评估危害、明确不看用户意图,第二阶段才叠加意图和豁免。附三张真实终端截图和抓包证据,所有数字均来自本次读出,未经估计。

claude-code提示词+5
hands-on2026年8月30日11 min
284
把家里的 Mac mini 变成 24 小时在线的 Claude Code 工作站:claudecodeui + SSH 反向隧道,手机浏览器随时接管

把家里的 Mac mini 变成 24 小时在线的 Claude Code 工作站:claudecodeui + SSH 反向隧道,手机浏览器随时接管

家里的 Mac mini 常年开机跑 Claude Code,人在外面怎么用浏览器接管会话?这是一套上线一周、每天在用的真实方案:claudecodeui 做 Web 界面(选型对比了官方 Web 版、ttyd、code-server),SSH 反向隧道把它推到 VPS,nginx 加 TLS 和登录限流反代成一个普通网址。附完整配置、真实运行数据(隧道五天零掉线、内存 170MB)、上线一周就踩到并自己修掉的 <synthetic> 占位符 bug,以及「为什么不用 Tailscale」的正反论证。

claude-codeclaude-code-lab+7
claude2026年8月29日10 min
357