资讯详情

深入解析 Claude Code「Hook Stopped Continuation」系统提示:钩子中断 Agent 回合的机制与实战

📅 2026/10/8 18:37:58 | 华诺云谱 👁 阅读
深入解析 Claude Code「Hook Stopped Continuation」系统提示:钩子中断 Agent 回合的机制与实战
文档提示工程人工智能【免费下载链接】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 系统提示库中的Hook stopped continuation模板见 system-prompts/system-reminder-hook-stopped-continuation.md完整拆解它的一行消息契约、ATTACHMENT_OBJECT变量语义、触发它的钩子配置机制continue: false、阻塞输出、Stop 事件并结合仓库内的 Hooks Configuration 文档与配套系统提示族给出可直接复制的配置示例与排查思路。读完本文你将掌握如何编写一个能让 Claude Code 在回合中途「停下」的钩子并理解这条系统提示在整条钩子执行链路中的位置。一、模板本体一行消息背后的完整契约该模板在仓库中的完整内容如下原文照录!-- name: System Reminder: Hook stopped continuation description: Message when a hook stops continuation ccVersion: 2.1.18 variables: - ATTACHMENT_OBJECT -- ${ATTACHMENT_OBJECT.hookName} hook stopped continuation: ${ATTACHMENT_OBJECT.message}看似只有一行正文但它承载了完整的契约信息字段值含义nameSystem Reminder: Hook stopped continuation系统提示的注册名称用于在提示库中唯一定位descriptionMessage when a hook stops continuation该提示的用途说明当某个钩子阻止停止了模型继续执行时向模型展示的消息ccVersion2.1.18该模板随 Claude Code 2.1.18 引入仓库随每个版本同步更新见 README.mdvariablesATTACHMENT_OBJECT模板渲染所需的变量来源运行时以结构化对象注入正文${ATTACHMENT_OBJECT.hookName} hook stopped continuation: ${ATTACHMENT_OBJECT.message}渲染后的最终消息从模板结构可以推断这条系统提示由 Claude Code 运行时在「某个钩子停止了本轮继续执行」时注入到会话上下文中让模型明确知道「是哪个钩子、出于什么消息原因停止了本轮执行」——它是一类运行时反馈而不是对模型的指令。这与仓库中同一家族的 system-prompts/system-reminder-hook-blocking-error.md钩子命令本身报错、system-prompts/system-reminder-hook-success.md钩子成功、system-prompts/system-reminder-hook-additional-context.md钩子补充上下文共同构成了钩子执行结果的分支反馈体系。二、ATTACHMENT_OBJECT 变量所有钩子反馈共用的数据载体该模板声明了唯一的变量来源ATTACHMENT_OBJECT正文中使用了它的两个字段${ATTACHMENT_OBJECT.hookName}触发本次反馈的钩子名称即用户在settings.json钩子配置中定义的钩子身份标识${ATTACHMENT_OBJECT.message}该钩子停止续行时附带的消息内容通常是钩子通过 JSON 输出中的stopReason或systemMessage提供的可读文案。值得注意的仓库细节ATTACHMENT_OBJECT被整个钩子反馈家族共享。对比同目录下的 system-prompts/system-reminder-hook-blocking-error.md它使用了${ATTACHMENT_OBJECT.blockingError.command}与${ATTACHMENT_OBJECT.blockingError.blockingError}两个嵌套字段来展示失败的命令与错误文本而 system-prompts/system-reminder-hook-success.md 与 system-prompts/system-reminder-hook-additional-context.md 则分别使用${ATTACHMENT_OBJECT.content}与${ATTACHMENT_OBJECT.content.join(...)}。可见运行时会把钩子执行结果打包成一个统一的 attachment 对象再按事件类型选择对应模板渲染。此外仓库中还保留了一个拆分版本 system-prompts/system-reminder-hook-stopped-continuation-prefix.mdccVersion: 2.1.31其正文仅为一行前缀hook stopped continuation:。结合主模板可以推断在新版本实现中这类消息被拆分为「前缀模板 变量填充」两个部分拼接生成从而允许运行时灵活组合hookName与消息文本而不必把整句写死在一个模板里。三、什么场景会触发「Hook Stopped Continuation」要理解这条消息何时出现需要先看钩子如何「停止续行」。仓库中的 system-prompts/system-prompt-hooks-configuration.md 给出了权威定义钩子可以通过返回 JSON 控制 Claude Code 的行为其中与停止直接相关的字段是continue设置为false即表示「阻止/停止」默认truestopReason当continue为false时展示给用户的停止原因消息systemMessage向用户展示的消息所有钩子类型均可用decision对 PostToolUse / Stop / UserPromptSubmit 钩子可取block用于表达阻止意图reason对该决定如 block的解释说明。因此「hook stopped continuation」这条系统提示正是当某个钩子通过上述任一方式典型如返回{continue: false, stopReason: ...}主动阻止模型继续本轮执行时由运行时注入的消息。它与「阻塞错误」有本质区别反馈类型对应模板触发条件钩子主动停止续行system-prompts/system-reminder-hook-stopped-continuation.md钩子按设计返回停止信号如continue: false钩子命令执行出错system-prompts/system-reminder-hook-blocking-error.md阻塞性钩子命令失败包含失败命令与错误文本Stop 钩子阻塞错误system-prompts/system-reminder-stop-hook-blocking-error.mdStop 事件专用格式为Stop hook blocking error from command ${HOOK_NAME}:其中 Stop 事件钩子还有更进一步的场景仓库中的 system-prompts/system-reminder-session-stop-hook-active.mdccVersion: 2.1.173描述了会话级 Stop 钩子一旦会话级 Stop 钩子处于激活状态其条件未满足前会持续阻止模型停止The hook will block stopping until the condition holds条件达成后自动清除用户无需手动运行/goal clear。在这种机制下如果 Stop 钩子因条件评估等原因停止续行「Hook stopped continuation」提示同样会出现在会话中。四、钩子配置全景从 settings.json 到一次「停止」要真正让上述机制运转起来需要掌握 Claude Code 的钩子配置语法。以下核心内容完整继承自 system-prompts/system-prompt-hooks-configuration.md。4.1 Hook 基本结构钩子以事件为键、以「匹配器 → 钩子数组」为值组织在settings.json的hooks字段中{ hooks: { EVENT_NAME: [ { matcher: ToolName|OtherTool, hooks: [ { type: command, command: your-command-here, timeout: 60, statusMessage: Running... } ] } ] } }字段说明EVENT_NAME要订阅的生命周期事件见下方事件表matcher事件限定符通常是工具名支持|分隔多个如Write|Edithooks该匹配下实际执行的钩子数组type钩子类型可为command/prompt/agentcommandcommand类型要执行的 shell 命令timeout命令超时秒数如 30 或 60statusMessage命令运行期间向用户展示的状态消息。4.2 Hook 事件Events事件Matcher用途PermissionRequest工具名在权限确认弹窗之前运行PreToolUse工具名在工具调用前运行可以阻止调用PostToolUse工具名在工具成功执行后运行PostToolUseFailure工具名在工具失败后运行Notification通知类型在收到通知时运行Stop-在 Claude 停止时运行包括 clear、resume、compactPreCompactmanual/auto在上下文压缩之前运行PostCompactmanual/auto在上下文压缩之后运行可接收摘要UserPromptSubmit-在用户提交消息时运行SessionStart-在会话启动时运行常用的工具匹配器包括Bash、Write、Edit、Read、Glob、Grep。4.3 Hook 类型TypesCommand Hook执行一条 shell 命令如{ type: command, command: prettier --write $FILE, timeout: 30 }Prompt Hook调用 LLM 评估一个条件如{ type: prompt, prompt: Is this safe? $ARGUMENTS }仅可用于 PreToolUse、PostToolUse、PermissionRequest 三个工具事件。Agent Hook运行一个带工具的子代理如{ type: agent, prompt: Verify tests pass: $ARGUMENTS }同样仅可用于上述三个工具事件。4.4 Hook 输入stdin JSON钩子命令通过标准输入接收结构化 JSON{ session_id: abc123, tool_name: Write, tool_input: { file_path: /path/to/file.txt, content: ... }, tool_response: { success: true } }其中tool_response仅存在于 PostToolUse 事件中。4.5 Hook JSON 输出控制继续与否的关键{ 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向用户展示消息所有钩子可用continue设为false以阻止/停止续行默认truestopReasoncontinue为false时展示的停止原因suppressOutput是否从 transcript 中隐藏 stdout默认falsedecisionPostToolUse / Stop / UserPromptSubmit 钩子可取blockPreToolUse 已弃用该字段改用hookSpecificOutput.permissionDecisionreason对决定的解释hookSpecificOutput事件专属输出必须包含hookEventName支持additionalContext注入回模型上下文的文本permissionDecisionallow/deny/ask仅 PreToolUsepermissionDecisionReason权限决定的理由仅 PreToolUseupdatedInput修改后的工具输入仅 PreToolUse。可以看出「让钩子停止续行」本质上是钩子进程在 stdout 输出含continue: false以及可选的stopReason的 JSON运行时据此拦截回合并触发前文所述的「Hook stopped continuation」系统提示。五、让钩子真正停下回合完整可运行示例结合仓库文档中的「Stop hook that displays message to user」模式下面给出一个完整的、可复制的停止场景示例。第一步编写输出 JSON 的命令。命令必须向 stdout 输出含systemMessage字段的 JSON# 输出示例{systemMessage: Session complete!} echo {systemMessage: Session complete!}如果要真正停止续行并给出原因输出应为echo {continue: false, stopReason: 构建检查未通过请先修复编译错误后再继续。, systemMessage: 已暂停构建检查未通过。}第二步在 settings.json 中注册钩子。以下配置会在每次Write/Edit之后运行测试并在失败时通过 JSON 输出阻止模型继续示例参考仓库「Run tests after code changes」模式改造{ hooks: { PostToolUse: [{ matcher: Write|Edit, hooks: [{ type: command, command: jq -r .tool_input.file_path // .tool_response.filePath | grep -E \\.(ts|js)$ npm test || echo {\continue\: false, \stopReason\: \npm test failed, fix the issue first\, \systemMessage\: \测试未通过回合已停止\} }] }] } }执行流程为钩子读取 stdin JSON 中的文件路径 → 对 TS/JS 文件运行npm test→ 失败时输出停止 JSON → 运行时拦截回合并在会话中注入... hook stopped continuation: npm test failed, fix the issue first形式的系统提示。第三步验证。运行claude后触发一次文件写入观察终端中钩子状态消息与停止提示也可以先单独运行钩子命令、手动向其 stdin 喂入上文 4.4 节的 JSON 来验证输出是否符合预期。仓库中的 system-prompts/system-prompt-hooks-configuration.md 还提供了另外两个常用模式可供参考Auto-format after writesPostToolUse 匹配Write|Edit调用prettier --writeLog all bash commandsPreToolUse 匹配Bash将jq -r .tool_input.command追加到日志文件。六、配套系统提示族同一机制的不同反馈「Hook stopped continuation」并非孤立存在它与同目录下多个模板构成钩子反馈家族全部依赖ATTACHMENT_OBJECT或同类变量注入运行时数据文件正文语义使用场景system-prompts/system-reminder-hook-stopped-continuation.md${hookName} hook stopped continuation: ${message}钩子按设计停止续行system-prompts/system-reminder-hook-stopped-continuation-prefix.mdhook stopped continuation:新版拆分的消息前缀system-prompts/system-reminder-hook-blocking-error.md${hookName} hook blocking error from command: ${blockingError.command}: ${blockingError.blockingError}阻塞性钩子命令报错system-prompts/system-reminder-hook-success.md${hookName} hook success: ${content}钩子成功执行system-prompts/system-reminder-hook-additional-context.md${hookName} hook additional context: ${content.join(...)}钩子向模型注入补充上下文对应hookSpecificOutput.additionalContextsystem-prompts/system-reminder-stop-hook-blocking-error.mdStop hook blocking error from command ${HOOK_NAME}:Stop 事件钩子命令报错此外仓库中的 system-prompts/system-prompt-hook-feedback-handling.md 明确了模型的应对原则钩子反馈应被视为用户反馈当钩子阻止某个动作时模型需要据此调整行为——这正是「hook stopped continuation」消息注入后模型应当遵循的行为基线。七、与 Stop 条件钩子的联动会话级场景当停止行为发生在会话级 Stop 钩子上时联动机制会更复杂。仓库中的两份文档提供了完整闭环条件评估 system-prompts/agent-prompt-hook-condition-evaluator-stop.md 定义了 Stop 条件评估子代理的契约——它阅读对话记录后必须返回以下三种形状之一的 JSON{ok: true, reason: 引用满足条件的对话证据}{ok: false, reason: 引用缺失或阻碍条件的内容}{ok: false, impossible: true, reason: 说明条件为何永远无法满足}其中impossible仅在条件自相矛盾、依赖不可用资源或助手已明确尝试并穷尽合理手段时使用证据不足时应返回{ok: false}而非臆断。会话指令 system-prompts/system-reminder-session-stop-hook-active.md 要求模型把激活的会话级 Stop 钩子条件当作自己的直接指令treat the condition itself as your directive立即朝目标推进、不向用户询问下一步钩子会在条件达成前持续阻止停止条件达成后自动清除。结合来看当会话级 Stop 钩子激活且条件未满足时模型每次试图结束回合都会受到钩子拦截——若钩子经由条件评估器判定未达成就会产生停止续行事件进而触发本文主题的「Hook stopped continuation」系统提示。这也解释了为什么该提示在**持续运行的自主任务如 /loop 长任务**场景中会频繁出现它是钩子对回合边界的强约束信号。八、实战注意点与边界超时与状态消息在 system-prompts/system-prompt-hooks-configuration.md 的结构示例中timeout与statusMessage是命令钩子的常见字段停止类命令应保证在超时内返回 JSON避免落入「blocking error」分支。minimal 模式会跳过钩子根据仓库 README.md 对 system-prompts/system-prompt-minimal-mode.md 的描述minimal 模式会跳过 hooks、LSP、插件、自动记忆等特性并要求通过显式 CLI 标志补充上下文。因此在 minimal 模式下本文所述的全部钩子机制不会生效。区分「停止」与「错误」钩子按设计返回continue: false属于正常业务逻辑触发 stopped continuation 提示命令本身失败则属于异常触发 blocking error 提示。排障时应先判断当前会话里出现的是哪条提示。消息内容即用户可见文案stopReason/systemMessage中的文本会直接出现在停止提示与用户界面中应写成清晰、可执行的说明例如「请先修复编译错误」而不是内部调试噪音。版本前提本文引用的模板与配置语义以当前仓库为准Hook stopped continuation 模板自 ccVersion 2.1.18 起前缀模板自 2.1.31 起会话级 Stop 钩子提示自 2.1.173 起。Claude Code 迭代较快具体字段行为请以你安装版本的运行表现和官方文档为准。总结「Hook Stopped Continuation」看似只是一行系统提示实则是 Claude Code 钩子「回合控制」机制在模型上下文中的落点钩子通过 JSON 输出的continue: false/stopReason主动停止续行运行时据此注入这条消息模型则按照「钩子反馈视为用户反馈」的原则调整后续行动。理解它的模板契约system-prompts/system-reminder-hook-stopped-continuation.md、配置语法system-prompts/system-prompt-hooks-configuration.md与配套提示族你就能在自定义钩子、自动化流水线和会话级 Stop 条件场景中精准控制 Claude Code 的回合边界。赞分享文档提示工程人工智能【免费下载链接】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 Agent Hook 系统提示词深度解析基于代码库与对话记录的结构化条件判定机制Claude Code Agent Hook 系统提示词深度解析基于代码库与对话记录的结构化条件判定机制 导读 Agent Hook 是 Claude Cod文档提示工程人工智能Claude Code 大文件截断系统提醒机制解析File truncated 提示的语义、变量注入与分段读取实战Claude Code 大文件截断系统提醒机制解析File truncated 提示的语义、变量注入与分段读取实战 本文聚焦 claude code syst文档提示工程人工智能Claude Code 插件 Hook 开发实战从事件机制到 Prompt-Based 高级钩子claude-plugins-official 指南Claude Code 插件 Hook 开发实战从事件机制到 Prompt Based 高级钩子claude plugins official 指南 导读AI 插件开发工具插件系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑