定义 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