首页 教程 常见问题

钩子系统

在 Claude Code 操作前后自动运行 Shell 命令,实现自动化工作流。

什么是钩子(Hooks)

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

可用的钩子

钩子名称触发时机
pre-commandClaude 运行任何命令之前
post-command命令执行之后
pre-tool-useClaude 使用任何工具之前
post-tool-use工具使用之后
pre-turnClaude 开始回复你之前
post-turnClaude 完成回复之后
notificationClaude 发送通知时
user-message-submit你发送消息之前

配置钩子

在 .claude/settings.json 中配置

{
  "permissions": {
    "hooks": {
      "pre-command": "echo '即将运行命令: $COMMAND'",
      "post-command": "echo '命令完成: $STATUS'",
      "pre-tool-use": "echo 'Claude 即将使用工具: $TOOL'",
      "post-turn": "logger 'Claude 回复完成'"
    }
  }
}

环境变量

不同的钩子提供不同的环境变量:

常见用途

1. 代码格式化

每次 Claude 编辑文件后自动格式化:

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

2. Lint 检查

在 Claude 提交前自动运行 lint:

{
  "permissions": {
    "hooks": {
      "pre-command": "if echo "$COMMAND" | grep -q 'commit'; then ruff check . || exit 1; fi"
    }
  }
}

3. 日志记录

记录每次 Claude 的操作:

{
  "permissions": {
    "hooks": {
      "post-turn": "date +%Y-%m-%dT%H:%M:%S | xargs -I{} echo '{}' ' - Claude session ended'"
    }
  }
}

4. 安全审计

在 Claude 运行危险命令前拦截:

{
  "permissions": {
    "hooks": {
      "pre-command": "if echo "$COMMAND" | grep -q 'rm -rf'; then echo '禁止删除操作'; exit 1; fi"
    }
  }
}

注意事项

下一步