教程 claude-code-in-action tutorial

定义 Hooks

原文链接:https://anthropic.skilljar.com/claude-code-in-action/303245

标签: 视频 + 讲义


了解 Hooks 的概念后,本节介绍如何定义你自己的 Hooks。Claude Code 的 Hooks 存储在项目根目录的 .claude 目录中,使用 JSON 格式配置。

Hooks 文件结构

Hooks 定义存放在 .claude/settings.json 文件中。一个基本的 Hook 定义如下:

json
{
  "hooks": {
    "BeforeModify": [
      {
        "name": "Run linter",
        "command": "npm run lint"
      }
    ]
  }
}

这个示例定义了一个在修改文件前运行的 Hook,会自动运行 npm run lint。

可用的 Hook 类型

Claude Code 支持多种 Hook 类型:

  • BeforeModify:Claude 即将修改文件之前
  • AfterModify:Claude 修改文件之后
  • BeforeAgentLoop:每次 Claude 思考之前
  • AfterAgentLoop:每次 Claude 思考之后
  • OnDiskFreeSpaceLow:磁盘空间不足时
  • OnError:发生错误时

配置选项

每个 Hook 可以配置以下属性:

属性 说明
name Hook 的描述名称
command 要执行的命令
description 更详细的说明
runOnlyWhen 条件表达式,只有满足时才执行
timeout 超时时间(毫秒)
continueOnError 失败时是否继续执行主流程

完整示例

json
{
  "hooks": {
    "AfterModify": [
      {
        "name": "Run tests",
        "command": "npm test",
        "description": "每次修改代码后运行测试",
        "timeout": 120000,
        "continueOnError": false
      }
    ],
    "BeforeModify": [
      {
        "name": "Check types",
        "command": "npm run typecheck",
        "description": "修改前检查 TypeScript 类型",
        "runOnlyWhen": "file匹配 src/**/*.ts"
      }
    ]
  }
}

下一节: 15 实现一个 Hook