Claude Code Hooks:完整指南 (2026)

Author Avatar
Andrew
AI Perks Team
7,589
Claude Code Hooks:完整指南 (2026)

快速摘要:Claude Code 钩子是在 AI 编码会话的特定生命周期点执行的自动化脚本,允许开发人员运行自定义命令、验证操作、格式化代码、发送通知和强制执行项目规则。这些钩子通过 SessionStart、PreToolUse 和 PostToolUse 等事件与 Claude 的工作流集成,支持基于命令、基于 HTTP 和基于提示的执行模式,并具有可配置的超时和退出代码行为。

Claude Code 的钩子系统将 AI 编码助手从一个有用的工具转变为一个完全自动化的开发环境。大多数开发人员没有意识到通过钩子可用的控制程度。

事情是这样的——钩子不仅仅是编辑文件后运行脚本。它们在 Claude 的整个决策过程中提供了拦截点。在它执行命令之前。在工具调用失败之后。当它需要权限时。甚至在处理用户提示之前。

本指南涵盖了官方文档提供的所有内容,以及社区讨论中揭示的在生产环境中实际有效的实用模式。

Claude Code 钩子实际做什么

根据官方 Claude Code 文档,钩子是用户定义的 shell 命令、HTTP 端点或提示注入,在 Claude Code 的生命周期中的特定点执行。它们通过 stdin 接收结构化 JSON 输入,并通过退出代码或 HTTP 响应控制工作流。

自动化比大多数指南建议的要深入。钩子可以完全阻止工具执行,将其他上下文注入 Claude 的推理中,触发外部服务,并强制执行 Claude 必须遵守的验证规则。

存在三种核心钩子类型:

  • 命令钩子:通过 stdout、stderr 和退出代码进行通信的 shell 脚本
  • HTTP 钩子:接收 POST 请求并返回 JSON 响应的远程端点
  • 提示钩子:在特定事件中注入到 Claude 上下文中的动态指令

每种类型服务于不同的自动化模式。命令钩子处理本地验证和格式化。HTTP 钩子与外部服务和数据库集成。提示钩子在没有外部进程的情况下修改 Claude 的行为。

钩子生命周期和事件系统

官方文档定义了在 Claude Code 执行流程中触发的多个钩子事件(SessionStart、UserPromptSubmit、PreToolUse、PermissionRequest、PostToolUse、PostToolUseFailure、Notification 等)。了解每个事件何时触发决定了什么样的自动化成为可能。

Claude Code hook events and their execution flow during a typical session
事件触发时间可阻止 
SessionStart会话开始或恢复时
UserPromptSubmit提交提示后,Claude 处理之前
PreToolUse工具调用执行之前
PermissionRequest出现权限对话框时
PostToolUse工具调用成功之后
PostToolUseFailure工具调用失败之后
NotificationClaude Code 发送通知时
SubmitMessageClaude 向用户提交消息时
ContextCompaction上下文窗口接近限制时

阻止能力最重要。PreToolUse 钩子可以在危险操作执行之前阻止它们。退出代码 1 阻止操作。退出代码 0 允许操作。退出代码 2 会提示 Claude 重新考虑。

但是等等。PostToolUse 钩子无法撤销操作,因为工具已经执行。此限制决定了验证逻辑的结构方式。关键检查属于 PreToolUse。清理和格式化属于 PostToolUse。

设置 Claude Code 时浏览 AI 工具的优惠

如果您正在使用 Claude Code 钩子,您可能还会在工作流周围选择其他 AI 工具。Get AI Perks 将 AI 和云工具的初创公司积分和软件折扣集中在一个地方。该平台包含 200 多项优惠,并为每项优惠提供优惠条件和领取指南。

寻找 Claude 或其他 AI 工具的优惠?

访问 Get AI Perks 以:

  • 浏览 Claude 和其他 AI 工具的优惠
  • 申请前比较优惠条件
  • 在您的工具堆栈中查找初创公司折扣

👉 访问 Get AI Perks 探索当前的 AI 软件优惠。

配置和文件结构

钩子定义在项目内的 .claude/settings.json 文件中。配置架构支持全局钩子和工具特定的匹配器,用于过滤钩子何时执行。

基本命令钩子结构:

{
  "hooks": [
    {
      "event": "PostToolUse",
      "command": "prettier --write",
      "args": ["${file}"]
    }
  ]
}

${file} 变量会扩展为来自工具输入的实际文件路径。根据官方文档,钩子支持命令和 args 字段中的这些变量扩展。

钩子位置层次结构

Claude Code 在多个位置查找钩子定义,并具有明确的优先级顺序:

  1. 项目级别:当前工作区中的 .claude/settings.json
  2. 用户级别:所有会话的 ~/.claude/settings.json
  3. 插件提供:与已安装插件捆绑的钩子

项目钩子会覆盖同一事件的用户钩子。这允许项目特定的格式规则,同时维护全局通知处理程序。

用于选择性执行的匹配器模式

匹配器系统将钩子过滤到特定的工具或条件。没有匹配器,钩子会在每次出现其事件时触发。

{
  "hooks": [
    {
      "event": "PreToolUse",
      "matcher": {
        "toolName": "edit_file",
        "pathPattern": "src/**/*.ts"
      },
      "command": "./scripts/validate-typescript.sh"
    }
  ]
}

pathPattern 字段接受 glob 语法。toolName 字段与 Claude 的内置工具(如 edit_file、execute_command、read_file 和 create_directory)进行匹配。

社区讨论表明,匹配器组合使用 AND 逻辑。所有指定的匹配器都必须匹配才能触发钩子。

命令钩子:Shell 脚本集成

命令钩子执行 shell 命令或脚本,并带有结构化 JSON 输入。它们代表了本地自动化的最常见钩子类型。

官方文档规定,命令钩子通过 stdin 接收 JSON,结构如下:

{
  "event": "PreToolUse",
  "toolName": "edit_file",
  "toolInput": {
    "path": "src/app.ts",
    "content": "..."
  },
  "sessionId": "abc123",
  "turnId": "turn-456"
}脚本解析此输入以做出决策。一个 Python 验证钩子可能看起来像:#!/usr/bin/env python3
import sys
import json

input_data = json.load(sys.stdin)
tool_input = input_data.get('toolInput', {})
file_path = tool_input.get('path', "")

if file_path.startswith('protected/'):
    print("Cannot edit protected files", file=sys.stderr)
    sys.exit(1)

sys.exit(0)

退出代码 0 允许操作。退出代码 1 会阻止操作,并将 stderr 消息显示给 Claude。退出代码 2 会根据事件触发特殊行为。

退出代码 2 的行为

根据官方钩子参考文档,退出代码 2 具有事件特定的含义(PreToolUse:阻止并提示重新考虑;UserPromptSubmit:提供上下文而不阻止;PermissionRequest:阻止权限):

  • PreToolUse:阻止工具,并提示 Claude 重新考虑,将 stderr 消息作为上下文
  • UserPromptSubmit:将 stderr 输出作为附加上下文提供,而不阻止
  • PermissionRequest:阻止授予权限

这创建了硬阻止和允许之间的中间地带。Claude 收到关于为什么操作可能存在问题的反馈,并可以调整其方法。

异步命令钩子

async: true 标志在后台运行钩子,不会阻止 Claude 的工作流。这对于部署通知或指标收集等慢操作很重要。

{
  "event": "PostToolUse",
  "matcher": {
    "toolName": "execute_command"
  },
  "command": "./scripts/log-to-analytics.sh",
  "async": true,
  "timeout": 30
}

当异步钩子触发时,Claude Code 会启动进程并立即继续。timeout 字段设置最大执行时间(以秒为单位)。如果未指定,异步钩子使用 10 分钟的默认超时。

坦率地说:异步钩子不能阻止操作,因为它们在 Claude 继续之后运行。它们适用于日志记录、通知和清理——而不是验证。

HTTP 钩子:外部服务集成

HTTP 钩子将 JSON 有效负载 POST 到远程端点,并解析响应以进行决策控制。它们支持与验证服务、数据库和第三方工具的集成。

基本 HTTP 钩子配置:

{
  "event": "PreToolUse",
  "url": "api.example.com/validate",
  "headers": {
    "Authorization": "Bearer ${API_TOKEN}"
  },
  "timeout": 5
}

有效负载结构与命令钩子输入匹配,但作为 HTTP POST 正文到达。响应决定了 Claude 的下一步操作。

HTTP 响应处理

根据官方文档,HTTP 钩子根据状态码和正文内容解释响应:

状态码效果消息来源 
200允许操作响应正文(可选)
400阻止操作显示给 Claude 的响应正文
500钩子错误,允许操作已记录但未显示给 Claude
其他允许操作钩子失败不会阻止工作流

响应正文可以包含一个 message 字段,Claude 会将其视为上下文。这使验证服务能够解释为什么操作被阻止。

环境变量插值

HTTP 钩子支持 url、headers 和其他字符串字段中的 ${VAR} 语法。变量会从 Claude Code 运行的环境中扩展。

根据官方 MCP 文档,环境变量扩展包括默认回退语法:${VAR:-default} 如果 VAR 设置了,则扩展为 VAR,否则使用默认值。

安全限制:根据 GitHub issue #28044,HTTP 钩子只能访问在 allowedEnvVars 配置字段中显式列出的环境变量。这可以防止意外的凭证泄露。

提示钩子:上下文注入

提示钩子在特定事件中将动态指令注入 Claude 的上下文。它们在没有外部进程或 API 调用的情况下修改行为。

{
  "event": "SessionStart",
  "prompt": "You are working on a TypeScript project. Always use strict null checks and prefer async/await over promises."
}

注入的文本成为该会话 Claude 系统指令的一部分。提示钩子还可以使用模板变量,这些变量会根据事件数据进行扩展。

动态提示生成

根据官方文档,提示钩子支持可以生成动态提示的命令字段:

{
  "event": "ContextCompaction",
  "type": "prompt",
  "command": "./scripts/generate-context-summary.sh"
}

命令通过 stdin 接收标准的 JSON 输入,并将提示文本输出到 stdout。这使得基于项目状态的上下文感知指令生成成为可能。

基于代理的钩子

代理钩子指定一个子代理来处理事件,而不是直接注入提示。子代理接收关于事件的上下文,并且可以执行多步推理。

{
  "event": "PostToolUseFailure",
  "agent": "debugger",
  "agentPrompt": "A tool call failed. Analyze the error and suggest fixes."
}

命名的子代理必须在项目配置中定义。代理钩子支持简单的提示注入无法提供的复杂决策逻辑。

实用的钩子模式

社区讨论和官方示例揭示了在生产环境中可靠工作的特定自动化模式。

编辑后自动格式化代码

最常见的模式是在 Claude 编辑文件后自动格式化代码:

{
  "event": "PostToolUse",
  "matcher": {
    "toolName": "edit_file",
    "pathPattern": "**/*.{js,ts,jsx,tsx}"
  },
  "command": "prettier",
  "args": ["--write", "${toolInput.path}"]
}

${toolInput.path} 变量会扩展为编辑后的文件路径。PostToolUse 确保在成功编辑后进行格式化,但不会阻止 Claude 的工作流。

阻止受保护文件修改

PreToolUse 钩子强制执行文件保护规则:

{
  "event": "PreToolUse",
  "matcher": {
    "toolName": "edit_file"
  },
  "command": "./scripts/check-protected.sh"
}

该脚本根据受保护的模式验证目标路径,并以代码 1 退出以阻止禁止的编辑。

当 Claude 需要输入时收到通知

根据官方工作流指南,Notification 钩子可以触发桌面警报或向外部服务发送消息:

{
  "event": "Notification",
  "command": "osascript",
  "args": ["-e", "display notification \"${message}\" with title \"Claude Code\""]
}

每当 Claude Code 发送通知时,此操作都会触发,包括在等待用户输入或任务完成后。

压缩后重新注入上下文

ContextCompaction 钩子在对话窗口填满时恢复重要上下文:

{
  "event": "ContextCompaction",
  "type": "prompt",
  "command": "cat .claude/critical-context.md"
}

命令输出在压缩移除较旧的消息后被注入回 Claude 的上下文中。这可以防止丢失关键的项目特定指令。

审核配置更改

跟踪 Claude 何时修改配置文件:

{
  "event": "PostToolUse",
  "matcher": {
    "toolName": "edit_file",
    "pathPattern": "**/{package.json,.env,*.config.*}"
  },
  "command": "git",
  "args": ["add", "${toolInput.path}"],
  "async": true
}

异步执行可防止在 Git 操作完成时阻塞 Claude。这会在不手动暂存的情况下创建配置更改的审计跟踪。

JSON 输出和决策控制

命令钩子可以输出结构化 JSON,以提供超越简单退出代码的详细反馈。根据官方参考,JSON 输出支持 Claude 用于决策的多字段响应。

{
  "allowed": false,
  "message": "This file is protected by team policy",
  "suggestion": "Create a new file in src/features/ instead"
}

allowed 字段控制操作是否继续。message 会显示给 Claude 作为上下文。suggestion 字段提供替代方法。

钩子要输出 JSON,它们必须:

  1. 将有效的 JSON 写入 stdout
  2. 退出代码为 0(允许)或 1(阻止)
  3. 至少包含 allowed 布尔字段

Claude Code 解析 JSON 并使用它来增强反馈循环。退出代码仍然决定主要决策,但 JSON 提供了更丰富的上下文。

钩子输入字段参考

所有钩子都通过 stdin 接收一个 JSON 对象,其中包含通用字段和事件特定的数据。了解完整的模式可以实现更复杂的钩子逻辑。

Hook input JSON schema showing common fields and event-specific extensions

通用输入字段

每个钩子都接收这些基本字段:

  • event:钩子事件名称(例如,“PreToolUse”)
  • sessionId:当前 Claude 会话的唯一标识符
  • turnId:当前对话轮次的标识符
  • timestamp:事件触发时的 ISO 8601 时间戳

工具事件字段

PreToolUse、PostToolUse 和 PostToolUseFailure 事件包括:

  • toolName:正在调用的工具的名称(edit_file、execute_command 等)
  • toolInput:包含工具输入参数的对象
  • toolResponse:工具输出数据(仅 PostToolUse)
  • error:错误详情,包括消息和代码(仅 PostToolUseFailure)

toolInput 的结构因工具而异。对于 edit_file,它包含 path 和 content。对于 execute_command,它包含 command 和 args。

权限事件字段

PermissionRequest 事件包括:

  • permissionType:请求的权限类型(file_write、command_execute 等)
  • requestedAction:需要权限的具体操作
  • resourcePath:受影响的文件路径或资源标识符

MCP 工具钩子

根据官方钩子参考,钩子可以使用 mcpTool 匹配器字段与模型上下文协议 (MCP) 工具进行匹配。这使得在 Claude 使用 MCP 服务器提供的外部工具时可以执行钩子。

{
  "event": "PreToolUse",
  "matcher": {
    "mcpTool": "database/query"
  },
  "command": "./scripts/validate-sql.sh"
}

mcpTool 值与格式为 server-name/tool-name 的工具名称匹配。这允许对数据库查询、API 调用或其他外部操作进行验证逻辑。

GitHub 功能请求表明对更深入的 MCP 集成兴趣日益浓厚,包括可以检查 MCP 服务器通知并响应外部事件的钩子。

安全注意事项

钩子以与 Claude Code 本身相同的权限执行。这给多用户环境和共享配置带来了安全隐患。

命令执行沙箱

根据 GitHub issue #28044,HTTP 钩子通过一个沙箱代理路由,该代理限制网络访问并过滤环境变量。命令钩子没有这种限制——它们具有完整的 shell 访问权限。

文档推荐以下做法:

  • 切勿在钩子命令中存储凭证
  • 使用环境变量存储敏感数据
  • 验证来自 ${...} 扩展的所有输入
  • 为外部服务实现超时限制
  • 对非关键操作使用异步钩子,以防止因故障而阻塞

钩子执行隔离

~/.claude/settings.json 中的用户级钩子适用于所有项目。这在处理不同信任边界时会产生风险。项目级钩子会覆盖用户钩子,但不能完全禁用它们。

Claude Code 中的 /hooks 菜单显示当前会话的所有活动钩子。在处理敏感项目之前查看此列表有助于识别潜在的安全问题。

调试和故障排除

钩子故障并不总是清晰地出现在 Claude 的对话中。官方文档提供了一些调试方法。

钩子执行日志

Claude Code 将钩子执行记录到会话调试输出中。根据故障排除指南,启用调试日志会显示:

  • 每个事件匹配了哪些钩子
  • 发送到每个钩子的 JSON 输入
  • 钩子进程的 stdout 和 stderr 输出
  • 退出代码和执行时间
  • HTTP 响应代码和 HTTP 钩子的正文

在启动 Claude Code 之前,通过设置 CLAUDE_DEBUG=1 来启用调试日志记录。

独立测试钩子

可以通过手动构建 JSON 输入在 Claude Code 外部测试命令钩子:

echo '{"event":"PreToolUse","toolName":"edit_file","toolInput":{"path":"test.txt"}}' | ./scripts/my-hook.sh

这可以在不触发实际 Claude 操作的情况下验证钩子逻辑。退出代码和 stdout/stderr 输出应与预期行为匹配。

常见钩子故障

社区讨论确定了以下常见问题:

  • 超时错误:默认 10 分钟超时对于慢操作来说太短——使用 timeout 字段增加
  • 路径扩展失败:对于不包含文件上下文的事件,${file} 等变量未定义
  • 权限错误:钩子脚本缺少执行权限——运行 chmod +x script.sh
  • JSON 解析错误:钩子输出的 JSON 格式不正确——返回前使用 jq 验证
  • 环境变量不可用:环境变量未传播到钩子进程——检查 Claude Code 的环境

钩子性能影响

同步钩子会阻塞 Claude 的工作流直到完成。默认的 10 分钟超时可防止无限挂起,但即使是短时间的延迟也会在多个操作中累积。

从业者报告称,简单的验证钩子对性能影响可以忽略不计。文件格式化钩子会产生明显但可接受的性能影响。外部 API 调用可能会导致工作流摩擦。繁重计算操作受益于异步执行。

钩子批处理

多个钩子可以匹配同一个事件。根据参考文档,钩子按定义顺序依次执行。如果任何钩子阻止了操作,剩余的钩子将不会执行。

这对性能很重要。五个同步钩子每个 200 毫秒会为每个事件增加一秒。将相关的验证合并到单个钩子中可减少开销。

高级模式

除了基本自动化之外,钩子还支持复杂的自定义工作流。

有状态钩子链

钩子可以通过文件或数据库在执行之间维护状态。PostToolUse 钩子可以记录成功的操作,PreToolUse 钩子随后可以根据这些操作进行验证:

#!/bin/bash
# Record successful edits
echo "${toolInput.path}" >> .claude/edit-history.txt

一个配套的 PreToolUse 钩子可以检查此历史记录以防止重复操作或强制执行排序约束。

条件钩子激活

环境变量在运行时控制钩子行为。设置 CLAUDE_SKIP_HOOKS=1 会在紧急情况下禁用钩子。

钩子本身可以检查环境标志:

#!/bin/bash
if [ "$STRICT_MODE" = "1" ]; then
  # Apply strict validation
  exit 1
fi
exit 0

这使得开发模式与生产模式的行为无需更改配置即可实现。

多阶段验证

PreToolUse 钩子可以实现多级验证,其中退出代码 2 允许 Claude 在发出警告的情况下继续:

  1. 硬失败(退出代码 1):阻止危险操作
  2. 软警告(退出代码 2):提醒 Claude 重新考虑
  3. 带上下文通过(退出代码 0 + JSON):提供额外信息

这创建了一个比二进制允许/拒绝更细致的验证谱。

与 CI/CD 集成

根据官方平台集成文档,Claude Code 在 CI/CD 环境中运行,用于自动代码审查和问题分类。钩子扩展了这种自动化。

GitHub Actions 工作流可以定义钩子,在自动化会话期间强制执行团队策略:

-- name: Run Claude Code with strict hooks
  env:
    STRICT_MODE: 1
  run: |
    claude "Review this PR and suggest improvements"

STRICT_MODE 标志激活钩子脚本中的条件验证逻辑。这确保自动化会话遵循比交互式开发更严格的规则。

审计日志生成

CI 环境中的 PostToolUse 钩子会生成所有 Claude 操作的详细审计日志:

{
  "event": "PostToolUse",
  "command": "./scripts/log-to-database.sh",
  "async": true
}

后台日志记录不会影响性能,但会提供完整的操作历史记录,用于合规性和调试。

`/hooks` 菜单

Claude Code 提供了一个 `/hooks` 命令,可显示当前会话的所有活动钩子。根据官方文档,此菜单显示:

  • 钩子事件类型
  • 匹配器模式
  • 命令或 URL 端点
  • 钩子是否异步运行
  • 配置来源(项目、用户或插件)

选择一个钩子会显示其完整配置,并允许在当前会话中临时禁用它。

禁用或移除钩子

可以通过在钩子定义中添加 "enabled": false 来禁用钩子而无需删除配置。这会保留配置,但阻止其执行。

要永久删除钩子,请将其条目从相应的 settings.json 文件中删除。更改将在下一个会话重新启动时生效,或在运行 /reload 时生效。

技能和代理中的钩子

根据官方文档,在技能或子代理配置中定义的钩子仅在该技能或代理执行时应用。这使得特定工作流的专用自动化成为可能。

调试子代理可能包含记录所有工具调用的钩子:

{
  "name": "debugger",
  "hooks": [
    {
      "event": "PostToolUse",
      "command": "./scripts/log-debug.sh",
      "async": true
    }
  ]
}

这些钩子仅在调试代理会话期间触发,而不是在正常的 Claude Code 操作期间。

按路径引用脚本

钩子命令支持相对路径和绝对路径。相对路径从 Claude Code 运行的项目根目录解析。

社区讨论的最佳实践:

  • 将钩子脚本存储在 .claude/hooks/ 目录中
  • 使用描述性名称:validate-typescript.sh 而不是 hook1.sh
  • 使脚本可执行:chmod +x .claude/hooks/*.sh
  • 包含 shebang 行:#!/usr/bin/env bash 或 #!/usr/bin/env python3
  • 在 bash 脚本中使用 set -e 添加错误处理

未来的钩子功能

GitHub 功能请求揭示了计划和请求的钩子增强:

  • 内联脚本钩子:直接在 settings.json 中定义钩子逻辑,无需外部文件
  • MCP 工具集成:从钩子调用 MCP 服务器工具,而不是 shell 命令
  • 多代理协作:在不同机器上的 Claude 实例之间协调的钩子
  • 增强的类型检查:钩子输入/输出模式的 TypeScript 类型定义

根据 GitHub issue #4274,关于集成钩子类型(MCP 工具、内联脚本、API 调用)的请求旨在简化配置并改善开发者体验。

常见问题解答

钩子可以阻止 Claude 执行危险命令吗?

是的。PreToolUse 钩子可以通过退出代码 1 来阻止任何工具执行。这包括文件编辑、命令执行和 MCP 工具调用。钩子接收完整的工具输入,并可以在允许操作之前根据任何标准进行验证。

如何调试一个不工作的钩子?

在启动 Claude Code 之前,使用 CLAUDE_DEBUG=1 启用调试日志记录。检查会话日志以获取钩子执行详细信息,包括匹配的钩子、发送的 JSON 输入、stdout/stderr 输出和退出代码。通过将示例 JSON 管道传输到钩子脚本来独立测试钩子。

钩子是否适用于所有 Claude Code 平台?

钩子在 CLI、桌面应用程序和 VS Code 扩展中均可使用。根据官方文档,只要 Claude Code 在能够访问文件系统的环境中运行,钩子就会执行。由于沙箱限制,基于浏览器的 Claude 和移动应用程序不支持钩子。

钩子可以修改 Claude 的响应或行为吗?

提示钩子会注入影响 Claude 行为的指令。代理钩子将事件处理委托给专门的子代理。但是,钩子不能直接修改 Claude 生成的文本或推理过程——它们通过提供上下文和阻止操作来工作。

异步钩子和同步钩子之间有什么区别?

同步钩子会阻塞 Claude 的工作流直到完成或超时。异步钩子在后台运行,不会阻塞。同步钩子可以通过退出代码阻止操作。异步钩子不能阻止,因为 Claude 在钩子完成之前继续。使用异步钩子进行日志记录和通知,同步钩子用于验证。

如何与团队共享钩子?

将 .claude/settings.json 文件提交到版本控制。项目级钩子适用于克隆存储库的所有团队成员。对于组织范围的策略,团队可以维护一个共享的用户级别设置文件,成员将其复制到 ~/.claude/settings.json。

HTTP 钩子可以调用防火墙后面的内部 API 吗?

是的,如果 Claude Code 在具有对这些 API 的网络访问权限的环境中运行。HTTP 钩子从运行 Claude Code 的机器发出标准 POST 请求。公司防火墙和 VPN 正常适用。文档中提到的沙箱代理控制环境变量的暴露,而不是网络路由。

钩子会增加 Claude Code 的 token 使用量吗?

提示钩子会将文本注入 Claude 的上下文中,这会消耗 token。命令钩子和 HTTP 钩子不直接影响 token 使用量,但它们的输出(错误消息、建议)会成为对话上下文的一部分。退出代码 2(带解释性消息)比退出代码 1(简单阻止)添加了更多上下文。

结论

Claude Code 钩子将 AI 助手从一个强大的工具转变为一个完全自动化的开发平台。事件系统提供了贯穿 Claude 工作流的拦截点——从会话初始化到上下文压缩。

命令钩子处理本地验证和格式化。HTTP 钩子集成外部服务和数据库。提示钩子通过上下文注入修改行为。这些共同实现了强制执行团队策略、维护代码质量和集成现有开发基础设施的自动化模式。

匹配器系统将钩子过滤到特定的工具和文件模式。退出代码和 JSON 输出控制决策流。异步执行可防止慢操作阻塞。完整的配置架构支持从简单的自动格式化到复杂的​​多阶段验证的所有内容。

从简单的 PostToolUse 钩子开始进行代码格式化。随着策略的出现添加 PreToolUse 验证。通过提示钩子尝试修改行为。构建 HTTP 集成以进行全团队强制执行。

请参阅官方 Claude Code 文档,了解完整的钩子参考和更新的配置架构,因为新功能会不断发布。

AI Perks

AI Perks 提供 AI 工具、云服务和 API 的独家折扣、积分和优惠,帮助初创企业和开发者节省开支。

AI Perks Cards

This content is for informational purposes only and may contain inaccuracies. Credit programs, amounts, and eligibility requirements change frequently. Always verify details directly with the provider.