首页 教程 常见问题

钩子配置指南

Claude Code 钩子系统的详细配置指南——从基础到高级用法。

钩子基础

钩子是在 Claude Code 执行某些操作前后自动运行的 Shell 脚本。它们让你插入自定义逻辑到 Claude 的工作流程中。

配置方式

项目级配置

.claude/settings.json 中配置:

{
  "permissions": {
    "hooks": {
      "pre-command": "echo '即将运行: $COMMAND'",
      "post-command": "echo '完成,状态: $STATUS'",
      "post-turn": "date >> ~/.claude/sessions.log"
    }
  }
}

用户级配置

~/.claude/settings.json 中配置,对所有项目生效。

所有可用钩子

钩子触发时机可用变量
pre-command运行命令之前$COMMAND
post-command运行命令之后$COMMAND, $STATUS
pre-tool-use使用工具之前$TOOL
post-tool-use使用工具之后$TOOL, $OUTPUT
pre-turnClaude 回复之前
post-turnClaude 回复之后
notification发送通知时$MESSAGE
user-message-submit用户发送消息之前$MESSAGE

实战示例

示例 1:自动代码格式化

Claude 每次编辑文件后自动运行格式化工具:

{
  "permissions": {
    "hooks": {
      "post-tool-use": "if [ "$TOOL" = "Edit" ]; then black . --quiet; fi"
    }
  }
}

示例 2:安全审计日志

记录 Claude 运行的所有命令:

{
  "permissions": {
    "hooks": {
      "post-command": "echo $(date +%T) "$COMMAND" (exit: $STATUS) >> claude-audit.log"
    }
  }
}

示例 3:拦截危险操作

阻止 Claude 运行特定命令:

{
  "permissions": {
    "hooks": {
      "pre-command": "if echo "$COMMAND" | grep -qE 'rm -rf /|chmod 777'; then echo '禁止危险操作'; exit 1; fi"
    }
  }
}

示例 4:自动通知

Claude 完成工作后发送通知:

{
  "permissions": {
    "hooks": {
      "post-turn": "notify-send 'Claude Code' '一轮对话完成'"
    }
  }
}

注意事项

下一步