Skip to content
雲里
里雾

Claude Code Hooks 用法

claude code 开发 更新于 2026/3/25

Claude Code Hooks 是在 Agent 生命周期特定点自动执行的确定性脚本,用于自动化工作流、安全门控和环境管理。与 CLAUDE.md 的”建议性”指令不同,Hook 保证每次都执行。

概述

Hook 的配置遵循三层嵌套:事件名(何时触发)→ 匹配器(过滤条件)→ 处理器(执行什么)。支持 20+ 种事件类型,覆盖会话、工具、代理三个级别。

用法

配置位置

位置作用域
~/.claude/settings.json所有项目
.claude/settings.json当前项目(可提交 Git)
.claude/settings.local.json当前项目(不提交)
Plugin hooks/hooks.json插件范围
Skill/Agent frontmatter特定 Skill/Agent 活跃期间

基本配置结构

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/check.sh"
          }
        ]
      }
    ]
  }
}

核心事件

事件时机能否阻断
PreToolUse工具执行前是(exit 2)
PostToolUse工具成功后是(decision: block)
PermissionRequest权限弹窗时是(allow/deny)
StopClaude 完成回复是(阻止结束)
SessionStart会话开始/恢复
Notification需要注意力
FileChanged监控的文件变更
SubagentStart/StopSubAgent 生命周期

处理器类型

类型说明适用
commandShell 命令(stdin 接收 JSON)最常用
httpPOST 请求集成外部服务
prompt单轮 LLM 评估需要语义判断
agent启动 SubAgent 验证复杂验证

退出码

效果
0成功,处理 JSON 输出
2阻断操作
其他非阻断错误

常用示例

阻止危险命令

#!/bin/bash
COMMAND=$(jq -r '.tool_input.command' < /dev/stdin)
if echo "$COMMAND" | grep -q 'rm -rf'; then
  echo "Blocked dangerous command" >&2
  exit 2
fi
exit 0

编辑后自动格式化

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Edit|Write",
      "hooks": [{"type": "command", "command": "npx prettier --write \"$TOOL_INPUT_FILE\""}]
    }]
  }
}

桌面通知

{
  "hooks": {
    "Notification": [{
      "matcher": "idle_prompt",
      "hooks": [{"type": "command", "command": "osascript -e 'display notification \"Claude 完成了\" with title \"Claude Code\"'"}]
    }]
  }
}

注意事项

版本说明

本页面基于 2026 年 3 月 Claude Code 文档。事件类型和配置格式可能随版本变化。

参见

参考