在 Claude Code 中注入 Hook 附加上下文:system-reminder-hook-additional-context 模板与 Hooks 反馈通道实战解析
发布时间:2026/10/9 0:15:21 锦皓数字建站

文档提示工程人工智能【免费下载链接】claude-code-system-promptsAll parts of Claude Codes system prompt, 27 builtin tool descriptions, sub agent prompts (Plan/Explore/Task), utility prompts (CLAUDE.md, compact, statusline, magic docs, WebFetch, Bash cmd, security review, agent creation). Updated for each Claude Code version.项目地址https://gitcode.com/gh_mirrors/cl/claude-code-system-prompts点击查看免费下载本文以开源仓库 claude-code-system-prompts 中的 system-prompts/system-reminder-hook-additional-context.md 为骨架结合同目录下的 system-prompt-hooks-configuration.md 完整配置文档剖析 Claude Code Hooks 系统中附加上下文注入这一核心机制Hook 如何通过 JSON 输出把additionalContext写回模型上下文、系统提醒模板如何渲染多行内容以及四类 Hook 反馈提醒成功、附加上下文、阻塞错误、停止续写如何协同工作。读完本文你将掌握 Hook 的标准 JSON 输出协议、hookSpecificOutput的完整字段用法并能直接写出可运行的注入上下文与权限决策 Hook 配置。一、背景Claude Code Hooks 在生命周期中的位置Hooks 是 Claude Code 在自身生命周期关键节点上执行外部命令、注入或拦截行为的机制。正如 system-prompt-hooks-configuration.md 所定义的Hooks run commands at specific points in Claude Codes lifecycle.Hooks 在 Claude Code 生命周期的特定节点运行命令。一个完整的 Hook 配置在.claude/settings.json或对应作用域的 settings 文件中呈现为嵌套 JSON 结构其标准骨架如下{ hooks: { EVENT_NAME: [ { matcher: ToolName|OtherTool, hooks: [ { type: command, command: your-command-here, timeout: 60, statusMessage: Running... } ] } ] } }其中EVENT_NAME决定 Hook 在生命周期的哪个时点触发matcher用于筛选具体关联的工具hooks数组内可以并列多个具体 Hook 定义。当前仓库支持的 Hook 事件及对应 matcher 如下表来源于 system-prompt-hooks-configuration.md事件Matcher用途PermissionRequest工具名在权限提示之前运行PreToolUse工具名在工具调用之前运行可阻断PostToolUse工具名在工具成功调用之后运行PostToolUseFailure工具名在工具调用失败之后运行Notification通知类型在通知发生时运行Stop-在 Claude 停止时运行含 clear、resume、compactPreCompactmanual/auto在上下文压缩之前运行PostCompactmanual/auto在上下文压缩之后运行接收摘要UserPromptSubmit-在用户提交提示时运行SessionStart-在会话启动时运行常用的工具 matcher 包括Bash、Write、Edit、Read、Glob、Grep多个工具可用|分隔匹配。Hook 有三种类型仅工具类事件 PreToolUse / PostToolUse / PermissionRequest 支持全部三种Command Hook——运行一条 shell 命令{ type: command, command: prettier --write $FILE, timeout: 30 }Prompt Hook——让 LLM 评估条件{ type: prompt, prompt: Is this safe? $ARGUMENTS }Agent Hook——让带工具的 Agent 执行任务{ type: agent, prompt: Verify tests pass: $ARGUMENTS }Hook 运行时会通过 stdin 收到一份 JSON 输入其中包含session_id、tool_name、tool_input以及仅 PostToolUse 事件才有的tool_response{ session_id: abc123, tool_name: Write, tool_input: { file_path: /path/to/file.txt, content: ... }, tool_response: { success: true } }二、Hook 输出协议additionalContext 从何而来Hook 命令除了向 stdout 输出普通文本外还可以输出一段 JSON 来控制 Claude Code 的行为。这段 JSON 是 Hook 与主进程之间唯一的结构化反馈通道其完整字段定义来自 system-prompt-hooks-configuration.md{ systemMessage: Warning shown to user in UI, continue: false, stopReason: Message shown when blocking, suppressOutput: false, decision: block, reason: Explanation for decision, hookSpecificOutput: { hookEventName: PostToolUse, additionalContext: Context injected back to model } }各字段的作用systemMessage—— 向用户界面显示一条消息所有 Hook 通用。continue—— 设为false可阻断/停止默认true。stopReason—— 当continue为false时向用户展示的消息。suppressOutput—— 隐藏 stdout 使其不进入会话记录默认false。decision—— 对 PostToolUse / Stop / UserPromptSubmit Hook 可设为blockPreToolUse 已弃用此字段改用hookSpecificOutput.permissionDecision。reason—— 对决策的解释说明。hookSpecificOutput—— 事件专属输出必须包含hookEventName字段additionalContext—— 注入模型上下文的文本permissionDecision——allow、deny或ask仅 PreToolUsepermissionDecisionReason—— 权限决策的原因仅 PreToolUseupdatedInput—— 修改后的工具输入仅 PreToolUse。可以看到hookSpecificOutput.additionalContext就是Hook 附加上下文这一机制的数据来源Hook 在 JSON 输出中声明一段文本Claude Code 主进程便将其作为附加上下文交还给模型。而 system-reminder-hook-additional-context.md 正是这段上下文在系统层渲染为系统提醒的模板。三、模板逐行解剖system-reminder-hook-additional-context 的结构本仓库的 system-reminder-hook-additional-context.md 全文如下!-- name: System Reminder: Hook additional context description: Additional context from a hook ccVersion: 2.1.18 variables: - ATTACHMENT_OBJECT -- ${ATTACHMENT_OBJECT.hookName} hook additional context: ${ATTACHMENT_OBJECT.content.join( )}这是一个带元数据的模板文件其结构可以拆解为三个部分1. 元数据头HTML 注释块与仓库中其它 system-reminder / system-prompt 模板一致该文件头部是一个!-- ... --注释声明了name—— 模板的逻辑名称System Reminder: Hook additional context用于日志与内部识别description—— 一句话说明Additional context from a hook来自 Hook 的附加上下文ccVersion—— 引入该模板的 Claude Code 版本2.1.18variables—— 该模板依赖的注入变量列表这里只有一项ATTACHMENT_OBJECT。2. 模板正文渲染表达式正文只有一行渲染表达式${ATTACHMENT_OBJECT.hookName} hook additional context: ${ATTACHMENT_OBJECT.content.join( )}它的语义是从注入变量ATTACHMENT_OBJECT中取出hookName字段作为提醒的前缀例如PostToolUse、PreToolUse等事件名或用户自定义的 Hook 名称取出content字段——这是一个字符串数组每一行/每一段都是 hook 返回的附加上下文内容调用content.join(\n)将这些数组元素按换行符连接成一个多行文本拼接在hook additional context:之后。也就是说模板的最终渲染形态为HookName hook additional context: 第 1 行附加上下文 第 2 行附加上下文 第 3 行附加上下文3.ATTACHMENT_OBJECT变量的来源ATTACHMENT_OBJECT是仓库内多个系统提醒模板共享的注入变量类型。同样声明该变量的模板还包括system-reminder-hook-success.mdHook 成功消息system-reminder-hook-stopped-continuation.mdHook 停止续写system-reminder-hook-blocking-error.md阻塞型 Hook 命令报错system-reminder-token-usage.mdToken 用量system-reminder-usd-budget.mdUSD 预算system-reminder-lines-selected-in-ide.mdIDE 选中行system-reminder-compact-file-reference.md压缩前的文件引用system-reminder-plan-file-reference.md计划文件引用等。从这些模板的用法可以推断ATTACHMENT_OBJECT是 Claude Code 主进程在运行时把某类事件产生的结构化附件整体注入模板的载体对象其具体字段随模板语义不同而不同。对本模板而言该对象被要求至少携带hookName: string与content: string[]两个字段。四、渲染实例从 additionalContext 到模型可见文本结合第二节的 JSON 输出协议我们构造一个真实的运行示例。假设.claude/settings.json中配置了一个 PostToolUse Hook用jq从 stdin JSON 中提取被 Write 的文件路径并回注一段建议性上下文{ hooks: { PostToolUse: [{ matcher: Write|Edit, hooks: [{ type: command, command: jq -r .tool_response.filePath // .tool_input.file_path | { read -r f; echo \{\\\hookSpecificOutput\\\:{\\\hookEventName\\\:\\\PostToolUse\\\,\\\additionalContext\\\:\\\File was just modified: $f. Consider running lint.\}}; } }] }] } }当该 Hook 触发并输出上述 JSON 后Claude Code 主进程会把hookSpecificOutput.additionalContext的值组装进ATTACHMENT_OBJECT.content数组交由 system-reminder-hook-additional-context.md 渲染。若 Hook 返回的是多段内容数组例如{ hookSpecificOutput: { hookEventName: PostToolUse, additionalContext: First observation: build passed.\nSecond observation: 3 warnings emitted. } }渲染进模型上下文后即为hookName为PostToolUsePostToolUse hook additional context: First observation: build passed. Second observation: 3 warnings emitted.这段文本以系统提醒的身份出现在模型上下文中模型随后即可基于它调整后续行为。这正是Hook 附加上下文机制的核心价值让外部命令的观测结果、格式化输出、测试结论等成为模型决策时可感知的事实输入而不是仅仅停留在终端 stdout 上。五、四类 Hook 反馈提醒一条完整的反馈通道hook additional context并不是 Hook 唯一的反馈形态。仓库中同一族模板构成了完整的Hook → 主进程 → 模型/用户反馈通道理解了它们的差异才能正确设计 Hook 输出模板文件渲染格式触发语义system-reminder-hook-success.md${hookName} hook success: ${content}Hook 命令成功结束回传一段成功消息system-reminder-hook-additional-context.md${hookName} hook additional context: ${content.join(\n)}Hook 通过 JSON 输出回注附加上下文多行system-reminder-hook-stopped-continuation.md${hookName} hook stopped continuation: ${message}Hook 请求停止当前续写流程如continue: false附带停止原因system-reminder-hook-blocking-error.md${hookName} hook blocking error from command: ${command}: ${error}阻塞型 Hook 命令执行失败暴露具体命令与错误信息其中hook stopped continuation还有配套的前缀模板 system-reminder-hook-stopped-continuation-prefix.md其内容为常量文本hook stopped continuation:用于组合拼接消息。这四类提醒回答了同一个 Hook 在不同结局下的模型侧呈现成功时告知结果、有观测时注入上下文、被阻断时给出原因、命令崩溃时报出错误。而本篇文章的主角——additional context——是其中最有建设性的一类因为它不是中断或告警而是主动向模型提供更多决策依据。六、实战可复制的完整 Hook 配置示例以下示例完整继承自 system-prompt-hooks-configuration.md均围绕输出附加上下文 / 控制行为设计可直接放入 settings.json 的hooks字段中。示例 1写入后自动格式化回注已格式化文件{ hooks: { PostToolUse: [{ matcher: Write|Edit, hooks: [{ type: command, command: jq -r .tool_response.filePath // .tool_input.file_path | { read -r f; prettier --write \$f\; } 2/dev/null || true }] }] } }示例 2记录所有 Bash 命令到日志{ hooks: { PreToolUse: [{ matcher: Bash, hooks: [{ type: command, command: jq -r .tool_input.command ~/.claude/bash-log.txt }] }] } }示例 3Stop Hook 向用户显示消息Stop Hook 必须输出带systemMessage字段的 JSON 才会被展示给用户# 输出: {systemMessage: Session complete!} echo {systemMessage: Session complete!}示例 4代码变更后自动跑测试{ hooks: { PostToolUse: [{ matcher: Write|Edit, hooks: [{ type: command, command: jq -r .tool_input.file_path // .tool_response.filePath | grep -E \\.(ts|js)$ npm test || true }] }] } }示例 5向模型回注多行附加上下文本文主题的落地形态{ hooks: { PostToolUse: [{ matcher: Bash, hooks: [{ type: command, command: jq -r .tool_input.command /tmp/last_cmd.txt; if grep -qE npm test|pytest /tmp/last_cmd.txt; then echo {\hookSpecificOutput\:{\hookEventName\:\PostToolUse\,\additionalContext\:\A test command just ran.\\nIf it passed, consider committing.\\nIf it failed, inspect the first error trace.\}}; fi }] }] } }执行流程为Bash 工具调用完成后 → Hook 检查命令是否为测试命令 → 是则输出 JSON声明hookEventName: PostToolUse与多行additionalContext→ 主进程将其拆为数组并经本模板渲染成Bash hook additional context: ...注入上下文 → 模型据此决定是否提交、如何排查。七、设计与注意事项从模板实现与配置文档中可以总结出以下关键约束hookSpecificOutput必须带hookEventName配置文档明确要求该字段必须包含hookEventName否则事件专属输出无法被正确路由additionalContext也就不会进入本模板的渲染路径。content是数组、多行靠join(\n)模板用ATTACHMENT_OBJECT.content.join(\n)把多段内容拼为多行文本说明主进程会先把additionalContext按行拆分或本身以数组传递模板层负责拼接。这意味着你可以在additionalContext中直接使用换行符组织多条观测结论。附加上下文是注入而非展示与systemMessage面向 UI 用户不同additionalContext的目标是模型上下文因此措辞应面向模型——给出结论、事实与建议动作而非面向终端用户的通知文案。事件与字段的可用范围permissionDecision/permissionDecisionReason/updatedInput仅 PreToolUse 可用decision: block仅 PostToolUse / Stop / UserPromptSubmit 可用additionalContext则面向模型注入适用范围最广。设计 Hook 输出时应按事件类型选择合法字段组合。ccVersion 标识本模板标注的 ccVersion 为2.1.18与仓库中其余 Hook 族模板hook-success、hook-stopped-continuation、hook-blocking-error 均为2.1.18一致表明这一组反馈模板在 2.1.18 版本中已定型若你使用的 Claude Code 版本早于此相关行为可能有所不同。八、结语system-reminder-hook-additional-context虽然只是仓库中一行渲染表达式但它背后是一整套设计严谨的 Hook 反馈协议Hook 通过 stdout JSON 输出hookSpecificOutput.additionalContext主进程将其承载进ATTACHMENT_OBJECT再由本模板以hookName hook additional context:前缀 多行join的方式注入模型上下文。理解这条链路后你便可以在实际项目中构建命令观测 → 上下文注入 → 模型自适应的闭环工作流例如自动格式化、测试结果回注、变更摘要上报等场景。更完整的字段定义、事件表与更多示例可继续阅读 system-prompt-hooks-configuration.md以及同目录下的 hook-success、hook-stopped-continuation、hook-blocking-error 三个配套模板。赞分享文档提示工程人工智能【免费下载链接】claude-code-system-promptsAll parts of Claude Codes system prompt, 27 builtin tool descriptions, sub agent prompts (Plan/Explore/Task), utility prompts (CLAUDE.md, compact, statusline, magic docs, WebFetch, Bash cmd, security review, agent creation). Updated for each Claude Code version.项目地址https://gitcode.com/gh_mirrors/cl/claude-code-system-prompts点击查看免费下载相关推荐Payload Hooks 完整参考Collection Hook、Field Hook 与 Hook Context 实战指南Payload Hooks 完整参考Collection Hook、Field Hook 与 Hook Context 实战指南 Payload本仓库 pa后端CMS解析 Claude Code 的 Session Context 系统提醒会话上下文注入模板的变量逻辑与自动附加语义解析 Claude Code 的 Session Context 系统提醒会话上下文注入模板的变量逻辑与自动附加语义 导读 在 Claude Code 的整套文档提示工程人工智能Claude Code Hook 反馈处理完全指南将 Hook 视为用户反馈并正确处理阻塞Claude Code Hook 反馈处理完全指南将 Hook 视为用户反馈并正确处理阻塞 Hook钩子是 Claude Code 中在工具调用等事件发生文档提示工程人工智能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。