游乐游手机版
首页/AI教程/文章详情

Claude Code生命周期Hooks使用教程

时间:2026-06-04 16:59
ClaudeCode生命周期Hooks提供Shell命令、HTTP请求、LLM提示和Agent验证四种类型,分别作用于Setup、SessionStart、UserPromptSubmit、SessionEnd四个事件。配置位于用户或项目级settings json,可灵活控制超时时间、stdout注入开关及异步执行模式,从而实现自定义工作流等重要特性。

Claude Code Hooks 机制概述

Hooks 本质上是在 Claude Code 中自定义的脚本或命令,能够在特定生命周期节点自动触发执行。该机制支持 4 种类型,覆盖 4 个生命周期事件,帮助开发者轻松实现项目初始化、上下文注入、输入预处理及清理等自动化任务。

Claude Code 生命周期 Hooks 使用指南

四种 Hook 类型详解

Hook 类型 type 字段值 功能说明
Shell 命令 "command" 最直接的方式,执行 Shell 命令,标准输出即为返回结果
HTTP 请求 "http" 向指定 URL 发送 POST 请求,Hook 输入以 JSON 格式放入请求体
LLM 提示 "prompt" 让大语言模型评估一段 Prompt,返回结构化结果
Agent 验证 "agent" 利用 Agent 执行验证任务,例如检查测试是否全部通过

四个生命周期事件详解

Setup 事件

在 Claude Code 启动时仅执行一次,适用于项目初始化操作,比如自动安装依赖或创建目录结构。

{"hooks": {"Setup": [{"matcher": "","hooks": [{ "type": "command", "command": "npm install", "timeout": 60 }]}]}}
触发时机为进程启动后、REPL 渲染之前。Hook Input 包含以下字段:

字段名 类型 说明
hook_event_name "Setup"
trigger "init" | "maintenance" 触发来源
session_id string 当前会话 ID
cwd string 工作目录路径
transcript_path string 会话日志文件路径

注意:Setup 事件的 stdout 内容不会传递给模型,仅用于执行初始化动作。

SessionStart 事件

每次会话开始时都会触发,包括新启动、通过 /resume 恢复会话以及使用 /clear 清空后。它的 stdout 内容会作为系统消息(system message)注入到模型上下文中。

{"hooks": {"SessionStart": [{"matcher": "","hooks": [{ "type": "command", "command": "cat .claude/session-context.md", "timeout": 10 }]}]}}
触发场景包括以下几种:

source 值 触发场景
startup 进程首次启动
resume 通过 --resume/resume 恢复会话
clear 执行 /clear
compact 上下文压缩完成后

Hook Input 字段如下:

字段名 类型 说明
hook_event_name "SessionStart"
source "startup" | "resume" | "clear" | "compact" 触发来源
agent_type string (optional) Agent 类型
model string (optional) 当前使用的模型

这里的 stdout 会注入为系统消息,模型能够读取到。

UserPromptSubmit 事件

在用户每次提交消息之前执行,可对用户输入进行预处理,例如追加安全检查或补充上下文信息。

{"hooks": {"UserPromptSubmit": [{"matcher": "","hooks": [{"type": "command","command": "node scripts/validate-input.js","timeout": 10,"statusMessage": "Validating input..."}]}]}}
Hook Input 字段:

字段名 类型 说明
hook_event_name "UserPromptSubmit"
prompt string 用户输入的原始文本

同样,它的 stdout 会作为系统消息注入,模型能够看见。

SessionEnd 事件

会话结束时触发,例如进程退出或执行 /clear。主要用于清理资源和记录日志。

{"hooks": {"SessionEnd": [{"matcher": "","hooks": [{ "type": "command", "command": "node scripts/cleanup.js", "timeout": 5 }]}]}}
Hook Input 字段:

字段名 类型 说明
hook_event_name "SessionEnd"
reason "clear" | "resume" | "logout" | "prompt_input_exit" | "other" 结束原因

此事件的 stdout 不会注入给模型,静默执行。默认超时时间为 1.5 秒,可通过环境变量 CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS 进行自定义配置。

Hook 命令通用字段

所有类型的 Hook 都支持以下通用字段:

字段名 类型 必填 说明
type "command" | "http" | "prompt" | "agent" Hook 类型
command / prompt / url string 具体的命令、Prompt 或 URL(根据 type 不同而设置)
timeout number 超时时间,单位秒
statusMessage string 执行时 spinner 显示的自定义消息
once boolean 仅执行一次后自动移除
if string 条件过滤,使用权限规则语法(如 "Bash(git *)"
async boolean 后台异步执行,不阻塞主流程(仅适用于 command 类型)
asyncRewake boolean 后台执行,当 exit code 为 2 时唤醒模型(仅 command 类型,隐含 async)

HTTP 类型专属字段

字段名 类型 说明
url string POST 请求的目标 URL(Hook 输入以 JSON 形式发送到请求体)
headers object 自定义请求头,支持 $VAR 环境变量引用
allowedEnvVars string[] 允许在 header 值中插值的环境变量白名单

Prompt 类型专属字段

字段名 类型 说明
prompt string 供 LLM 评估的 Prompt,使用 $ARGUMENTS 占位符引用 Hook 输入的 JSON
model string 使用的模型(默认使用小模型)

配置位置说明

Hooks 配置存放在 settings.json 中,支持用户级和项目级两个层级:

用户级配置(全局生效)

配置文件位于 ~/.claude/settings.json

{"hooks": {"SessionStart": [{"matcher": "","hooks": [{ "type": "command", "command": "echo 'Hello from global hook'", "timeout": 5 }]}]}}

项目级配置(仅当前项目)

配置文件位于项目根目录下的 .claude/settings.json

{"hooks": {"Setup": [{"matcher": "","hooks": [{ "type": "command", "command": "npm install", "timeout": 120 }]}],"SessionStart": [{"matcher": "","hooks": [{ "type": "command", "command": "cat .claude/instructions.md", "timeout": 5 }]}],"UserPromptSubmit": [{"matcher": "","hooks": [{"type": "command","command": "scripts/lint-check.sh","timeout": 15,"if": "Write"}]}],"SessionEnd": [{"matcher": "","hooks": [{ "type": "command", "command": "scripts/cleanup.sh", "timeout": 5 }]}]}}

实用示例展示

示例 1:每次启动加载项目文档

这是一个常见场景——让 Claude Code 启动时自动读取项目文档,确保模型对项目背景有充分了解。

{"hooks": {"SessionStart": [{"matcher": "","hooks": [{"type": "command","command": "cat .claude/project-guide.md","timeout": 5,"statusMessage": "Loading project guide..."}]}]}}

示例 2:提交前自动执行代码规范检查

在用户每次提交前,自动运行代码规范检查脚本,提前发现并修复问题。

{"hooks": {"UserPromptSubmit": [{"matcher": "","hooks": [{"type": "command","command": "node scripts/check-code-style.js "$CLAUD_PROMPT"","timeout": 10}]}]}}

示例 3:通过 HTTP webhook 发送通知

会话结束时,通过 HTTP 请求通知外部系统,例如将会话摘要推送到团队协作平台。

{"hooks": {"SessionEnd": [{"matcher": "","hooks": [{"type": "http","url": "https://api.example.com/claude-end","timeout": 5,"headers": {"Authorization": "Bearer $MY_API_TOKEN"},"allowedEnvVars": ["MY_API_TOKEN"]}]}]}}

示例 4:项目初始化时自动安装依赖

新项目首次启动时,自动检测并安装依赖,省去手动操作步骤。

{"hooks": {"Setup": [{"matcher": "","hooks": [{"type": "command","command": "test -f package.json && npm install || echo 'No package.json found'","timeout": 120,"statusMessage": "Installing dependencies..."}]}]}}

注意事项与避坑指南

最后总结几个容易忽略的关键点:

  1. 超时控制timeout 字段单位为秒。Setup 和 SessionStart 默认无严格限制,但 SessionEnd 默认只有 1.5 秒,且存在 5 秒的 failsafe 兜底机制。
  2. stdout 注入差异:SessionStart 和 UserPromptSubmit 的 stdout 会作为系统消息发送给模型;而 Setup 和 SessionEnd 不会,设计意图明确,避免不必要的信息干扰模型。
  3. 异步执行选项:设置 async: true 的命令 Hook 将在后台运行,不阻塞主流程。asyncRewake: true 更高级,当 exit code 为 2 时还能唤醒模型处理错误。
  4. 条件过滤if 字段使用权限规则语法(如 "Bash(git *)""Write"),仅在匹配条件时才执行,避免无关操作触发 Hook。
  5. once 一次性执行:设置为 true 的 Hook 执行一次后自动从配置中移除,适合只需运行一次的场景。
  6. 安全注意事项:HTTP Hook 的 header 中如需引用环境变量,必须在 allowedEnvVars 中显式声明,否则不会生效。
来源:https://juejin.cn/post/7646996673108951092
上一篇Claude Code技能MCP插件安装目录与权限解析 下一篇AI热点监控项目感悟:Agent不能仅依赖聊天记录
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
面向人工智能的Python高效学习专项教程
AI教程 · 2026-06-15

面向人工智能的Python高效学习专项教程

learn-python-the-smart-way-v2:面向人工智能的 Python 专项教程 在众多编程语言中,Python凭借其简洁的语法与强大的功能,已成为人工智能领域的核心工具。今天介绍的这款开源项目——learn-python-the-smart-way-v2,值得每一位希望进入AI领

向往AI开源教程项目文档最新完整版使用指南
AI教程 · 2026-06-15

向往AI开源教程项目文档最新完整版使用指南

向往AI开源教程项目提供覆盖机器学习、深度学习、自然语言处理等核心领域的JupyterNotebook与Python代码资源。环境配置简单,每个教程附详细注释、应用案例及调试建议,适合初学者系统学习和进阶者参考。

FPGA/MATLAB/Simulink联合开发入门与进阶X例教程4目录
AI教程 · 2026-06-15

FPGA/MATLAB/Simulink联合开发入门与进阶X例教程4目录

0 关于本教程的阅读与使用方式 本教程内容较为丰富,覆盖了多个技术领域。为方便读者按需学习,您可以根据自身实际需求,单独订阅任何感兴趣的章节。每个完整案例均配有详细的说明与可执行代码,这种配置在业内同类教程中较为罕见。 学习过程中遇到疑问或技术问题,可在对应课程页面下方留言。博主会在晚间集中回复,

Stable Diffusion动漫转真人AI绘画教程与SD操作指南
AI教程 · 2026-06-15

Stable Diffusion动漫转真人AI绘画教程与SD操作指南

动漫角色转真人风格的核心在于选用写实大模型并配合ControlNet的深度与分块控制。设置正向提示词强调摄影真实感,负向提示词排除二次元元素。通过微调权重平衡结构还原与模型发挥空间,即可实现风格转换。

Stable Diffusion提示词攻略,AI绘画必收藏
AI教程 · 2026-06-15

Stable Diffusion提示词攻略,AI绘画必收藏

提示词写法对StableDiffusion出图效果影响显著。基础规则包括逗号分隔、权重从前到后递减、Token控制在75以内、使用词组而非自然语言。可通过小括号增强、中括号降低或直接指定权重,进阶语法有下划线连接、交替采样和比例采样。预设样式与插件可提升效率。