Stop Hook Auto-Continue Pattern

Nikola Balic (@nibzard)· emerging

问题

即使任务并未真正完成,Agent也会结束本轮操作并将控制权交还给用户。常见场景如下:

  • 代码编译成功,但测试失败
  • 已完成变更,但质量检查未通过
  • 功能已实现,但集成测试出现故障
  • 迁移已执行,但验证步骤未完成

若不进行干预,用户必须手动检查并重新向Agent发送prompt,这会产生交互摩擦。

方案

使用**停止钩子(stop hooks)**在每个agent轮次后以编程方式校验成功条件。若未满足条件,则自动继续agent的执行,直至任务真正完成。

停止钩子(stop hook):agent完成一轮运行后触发的脚本。它可检查当前状态,进而决定是将控制权交还给用户,还是让agent持续运行。

define_stop_hook() {
    # 在每个agent轮次完成后运行

    test_result = run_tests()

    if test_result.failed:
        agent.continue_with_prompt(
            "测试失败,错误信息:{test_result.errors}。请修复这些问题。"
        )
    else:
        agent.stop()  # 将控制权交还给用户
}

结合**危险模式(dangerous mode)**使用:在容器化/沙箱环境中,这一机制可实现完全自主运行,直至任务成功完成。

如何使用

基础实现:

  1. 定义成功标准(测试通过、构建成功、代码检查无问题等)
  2. 创建用于检查这些标准的停止钩子(stop hook)
  3. 若标准未满足,注入反馈并继续Agent执行
  4. 若标准满足,将控制权交还给用户

Claude Code SDK 示例:

// 停止钩子配置
{
  "hooks": {
    "on_stop": {
      "command": "./scripts/check_success.sh",
      "auto_continue_on_failure": true
    }
  }
}

高阶用户模式(来自会话记录):

“你可以定义这样的停止钩子:如果测试不通过,就继续执行。本质上是让模型持续运行,直到任务完成为止。”

程序化SDK的进阶用法: 结合容器中的危险模式实现自主运行:

  • Agent 做出变更
  • 停止钩子检查测试结果
  • 若测试失败,Agent 自主继续执行
  • 循环直至测试通过或触发超时
  • 效果:“从非确定性流程中获得确定性结果”

权衡

优点

  • 真正完成任务:未实际达成目标绝不停止
  • 减少人工干预:无需手动重新触发prompt
  • 系统化质量保障:采用编码化的成功判定标准,而非依赖人工判断
  • 自主运行:与SDK结合可实现完全无人值守的任务执行
  • 避免提前结束:Agent无法过早宣称任务完成

缺点

  • 成本失控风险:若判定标准无法达成,Agent可能陷入无限循环
  • 依赖优质判定标准:不完善的成功检查会引发无限循环
  • 容器开销:在沙箱环境中运行最为安全
  • 调试难度大:难以检查执行过程中的中间状态
  • 超时管理要求高:需要合理的限制机制来防止无限执行

安全注意事项

  • 借助超时机制限定执行时长
  • 在循环过程中监控token使用量
  • 先在安全环境中测试hooks
  • 从简单的判定标准入手,再逐步过渡到复杂检查
  • 记录所有auto-continue决策,便于调试

参考文献

关键词

核心围绕Claude Code的功能特性与应用场景展开,提及可自定义停止钩子让模型在测试未通过时持续运行,还指出结合SDK程序化调用后,能通过脚手架从非确定性的随机模型中得到确定性输出。

直译
  • 鲍里斯·切尔尼:“你可以定义一个停止钩子,比如如果测试不通过,就让模型继续运行。本质上你可以让模型一直运行直到任务完成。”
  • 鲍里斯·切尔尼:“当你将它与SDK以及这类程序化用法结合时,效果简直惊人。这是一个随机系统,具有非确定性,但借助脚手架你就能获得确定性的结果。”
  • 【播客来源】《AI & I播客:像开发者那样使用Claude Code》 (链接:https://every.to/podcast/transcript-how-to-use-claude-code-like-the-people-who-built-it)

来源摘要

正在获取来源并生成中文摘要…

来源: https://every.to/podcast/transcript-how-to-use-claude-code-like-the-people-who-built-it

← 返回社区