ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude Code 会话级 Stop Hook 机制详解:让 Agent 以目标条件为指令持续工作直至达成

Claude Code 会话级 Stop Hook 机制详解:让 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点击查看免费下载会话级session-scopedStop hook 是 Claude Code 中一套将用户目标固化为 Agent 持续执行指令的机制它把一个明确的目标条件注入当前会话在条件满足之前持续阻止 Claude 停止条件达成后自动解除。本文围绕仓库中的 system-reminder-session-stop-hook-active.md 展开结合 Hooks 配置、Stop 条件评估器与 ProposeGoal 目标提案等配套文档与源码完整讲解该机制的工作语义、Agent 行为契约、生命周期以及/goal clear的正确用法。读完本文你将掌握Stop hook 何时激活、如何驱动 Agent 不停机推进、条件如何被判定以及何时以及何时不该使用/goal clear。一、什么是会话级 Stop hook机制概览在 Claude Code 的 Hook 体系中Stop是一个独立事件官方配置文档 system-prompt-hooks-configuration.md 明确将其定义为Stop无 matcherRun when Claude stops (including clear, resume, compact)。即 Stop hook 在 Claude 每次尝试停止时触发——包括正常收尾、用户执行 clear/resume/compact 等操作。而本文讨论的会话级 Stop hook是 Stop 事件的一种特殊用途它携带一个目标条件condition在条件未满足之前Claude 不允许真正停止。该机制由配套的系统提醒消息 system-reminder-session-stop-hook-active.md 驱动其核心语义可以拆解为四个阶段激活一个会话级 Stop hook 被激活并携带具体条件文本指令化条件本身成为 Agent 的当前指令Agent 需立即开始或继续工作不得停顿询问用户阻塞停止在条件成立之前hook 会阻止 Claude 停止block stopping自动清除条件一旦满足hook 自动清除会话恢复正常停止行为。这段消息通过模板变量${STOP_HOOK_CONDITION}注入具体条件消息头的variables字段- STOP_HOOK_CONDITION表明该文本是由上层系统在运行时填充的。也就是说同一份提醒消息模板可以适配任意目标条件。二、Agent 行为契约把条件当作指令原文档对激活后 Agent 的行为要求非常明确这是整篇消息的实操核心可归纳为三条行为准则简要确认目标立即行动先简短确认目标内容然后立刻开始或继续向目标工作——不要长篇复述、不要等待额外指示条件即指令把${STOP_HOOK_CONDITION}本身视为你的直接指令directive主动推进执行而不是停下来反问用户接下来做什么不停机推进由于 hook 在条件满足前会阻塞停止任何尝试结束回合的行为都会被拦截Agent 应当意识到这一点并持续工作直至条件成立。这实际上是 Claude Code 对多轮、可验证目标任务的工程化表达任务被固化成一条可判定的条件Agent 在条件判定为真之前没有退路从而保证长任务如迁移所有调用点、让测试全部通过不会在中途被过早收尾。三、Stop 事件在 Hook 生命周期中的位置要理解阻塞停止的底层机制需要先回到 Hook 体系本身。在 system-prompt-hooks-configuration.md 中Hook 运行于 Claude Code 生命周期的特定节点整体事件表包括事件Matcher用途PermissionRequest工具名权限提示前运行PreToolUse工具名工具调用前运行可阻止PostToolUse工具名工具成功执行后运行PostToolUseFailure工具名工具失败后运行Notification通知类型收到通知时运行Stop-Claude 停止时运行包括 clear、resume、compactPreCompactmanual/auto压缩前运行PostCompactmanual/auto压缩后运行接收摘要UserPromptSubmit-用户提交时运行SessionStart-会话开始时运行可以看到Stop是覆盖面最广的事件之一只要 Claude 尝试停止无论原因为何Stop hook 都有机会介入。这正是会话级 Stop hook 能够卡住停止流程的事件基础。Hook 返回的 JSON 输出中与阻塞停止直接相关的字段是continue设为false即可阻止/停止默认truestopReason当continue为false时向用户展示的提示消息systemMessage向用户 UI 展示的消息所有 hook 可用。也就是说条件未满足时Stop hook 通过输出continue: false来阻止 Claude 停止并借助stopReason/systemMessage向用户解释原因条件满足后则不再阻塞Claude 得以正常结束回合。四、条件如何被判定Stop 条件评估器会话级 Stop hook 的条件判定并非由 Agent 主观自评而是由一个独立的评估器负责。仓库中的 agent-prompt-hook-condition-evaluator-stop.md 给出了该评估器的完整系统提示词要点如下评估器会仔细阅读会话记录transcript判断用户提供的条件是否已被满足返回结果必须是 JSON 对象且仅允许三种形态{ok: true, reason: 引用会话记录中满足条件的证据文本}{ok: false, reason: 引用缺失或阻碍条件的内容}{ok: false, impossible: true, reason: 解释条件为何永远无法满足}reason字段必须存在且尽可能引用 transcript 中的原文若 transcript 中没有满足条件的明确证据应返回{ok: false, reason: insufficient evidence in transcript}即没有证据即视为未达成体现严格的证据导向。特别值得注意的是评估器对impossible分支的约束只有当条件确实无法达成时才可使用——例如条件自相矛盾、依赖不可用的资源或能力、或 Agent 已明确尝试并穷尽合理手段后宣告无法完成。评估器被要求独立核实the assistant claiming the goal is impossible is evidence, not proof不能仅因目标尚未达成或进展缓慢就判为 impossible也不能把 Agent 的自述当作最终结论。这保证了判定过程的客观性防止 Agent 借无法完成之名提前脱身。五、目标从哪来ProposeGoal 与目标生命周期会话级 Stop hook 的目标条件通常与 ProposeGoal 工具配套产生。tool-description-proposegoal.md 说明ProposeGoal 用于为本次会话提出一个可验证的多轮目标Agent 将持续工作直到独立评估器确认条件满足它是非阻塞式的提案渲染在输出流中Agent 可以在处理过程中继续工作默认ask_user true会先弹出一次性按键确认对话框仅当用户在本会话原话明确表达该结果时才可用ask_user false直接设定目标否则必须询问提案条件需在最多 500 字符内描述一个可测量的终态及其检查方式例如bun test exits 0同一时间仅有一个目标处于激活状态新批准或新直接设定的提案会替换当前目标。结合 Stop hook 提醒消息完整的目标生命周期是用户提出可验证结果 → ProposeGoal 提案/确认 → 会话级 Stop hook 激活携带条件 → Agent 以条件为指令持续推进 → 每次停止尝试时评估器核查 transcript → 条件满足 → hook 自动清除 → Agent 正常停止这解释了为什么提醒消息中强调条件一旦满足即自动清除——评估器返回ok: true的时刻就是目标达成、hook 解除的时刻Agent 不需要额外动作。六、/goal clear的正确用法提前清除而非成功清除原文档的最后一句是行为上的关键提醒It auto-clears once the condition is met — do not tell the user to run/goal clearafter success; thats only for clearing a goal early.这包含两层语义条件达成后目标自动清除这是机制的正常出口无需用户干预/goal clear仅用于提前清除目标即用户主动放弃当前目标例如目标已不再重要、需求已变更而不是用于庆祝成功。因此Agent 在成功达成条件后不应建议用户执行/goal clear——这样做既多余还会让用户误以为需要手动收尾。正确的做法是直接报告成果因为 hook 已自动解除会话恢复正常停止行为。只有当用户希望中途放弃目标、让 Agent 停止继续推进时/goal clear才是正确指令。七、阻塞失败与排障Stop hook 报错形态当 Stop hook 在运行过程中出错例如命令执行失败、输出非法 JSONClaude Code 会向 Agent 注入对应的阻塞错误提醒仓库中有两个相关模板system-reminder-stop-hook-blocking-error.mdStop hook blocking error from command ${HOOK_NAME}专门针对 Stop 事件中阻塞性命令失败的情况system-reminder-hook-blocking-error.md通用的hookName hook blocking error from command ...通过ATTACHMENT_OBJECT.hookName与ATTACHMENT_OBJECT.blockingError.command等字段定位出错的具体 hook 与命令。遇到此类提醒时应从 hook 配置的命令本身排查命令是否可执行、stdin JSON 解析是否失败、输出是否符合 Hook JSON 规范尤其是continue与stopReason字段的格式。由于Stop事件会覆盖 clear、resume、compact 等操作一个写坏的 Stop hook 可能让会话陷入无法停止的僵局此时及时修正或移除对应 hook 配置是恢复的关键。八、实战配置一个会话级 Stop hook 的最小示例虽然会话级 Stop hook 通常由上层系统结合 ProposeGoal动态注入但理解其配置形态有助于掌握原理。基于 system-prompt-hooks-configuration.md 的 Hook 结构与 JSON 输出规范一个面向Stop事件的最小配置骨架如下{ hooks: { Stop: [ { hooks: [ { type: command, command: your-condition-check-command, timeout: 60, statusMessage: Checking stop condition... } ] } ] } }对应的检查命令需要读取 stdin JSON 并输出符合规范的 Hook JSON例如# 条件未满足时阻塞停止并给出用户可见的原因 echo {continue: false, stopReason: 目标尚未达成继续推进, systemMessage: Working toward: 全部测试通过}当条件满足时则输出{continue: true}或省略continue默认即 true允许 Claude 正常停止。整体可对照 system-prompt-hooks-configuration.md 中给出的 Auto-format、日志记录等Stop/PostToolUse模式的写法来扩展。结语会话级 Stop hook 是 Claude Code 将目标管理与执行推进耦合的关键机制ProposeGoal 负责把用户意图固化为可验证条件Stop 条件评估器在每次停止尝试时客观核查证据而激活中的 Stop hook 则在条件达成前持续阻断停止。对 Agent 而言激活消息的核心只有一句话——把${STOP_HOOK_CONDITION}当作指令持续工作到评估器确认它成立为止对用户而言达成后无需任何手动操作目标会自动清除/goal clear仅在提前放弃时才有意义。理解这一机制就能在编写自动化 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点击查看免费下载相关推荐gbrain 工作区 CLAUDE.md 指南为持久化 Agent 配置 Claude Code 会话契约gbrain 工作区 CLAUDE.md 指南为持久化 Agent 配置 Claude Code 会话契约 本篇技术指南围绕 gbrain 开源仓库中 tem人工智能RAGAgent 记忆MCP 服务知识管理learn-claude-code s17 Goal Loop模型提议停止独立 Evaluator 决定是否继续的会话级 Stop Hook 实现learn claude code s17 Goal Loop模型提议停止独立 Evaluator 决定是否继续的会话级 Stop Hook 实现 本文基于示例工程AI Agent人工智能Hindsight Agent Skill 集成指南为 Claude Code、OpenCode 与 Codex CLI 赋予跨会话持久记忆Hindsight Agent Skill 集成指南为 Claude Code、OpenCode 与 Codex CLI 赋予跨会话持久记忆 Hindsigh人工智能AI AgentAgent 记忆MCP 服务上一篇GetJobs多平台对比Boss、猎聘、51job哪个更适合你下一篇Synology CSI Driver核心功能解析iSCSI/NFS/SMB协议全支持创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表