Files
GenericAgent/memory/plan_sop.md

12 KiB
Raw Blame History

Plan Mode SOP

触发3步以上有依赖/多文件协同/条件分支/需并行 | 禁用1-2步简单任务直接做 任务开始前必须先创建工作目录 ./plan_XXX/XXX=任务英文短名) 使用code_run({'_inline_eval':True, 'script':'handler.enter_plan_mode("./plan_XXX/plan.md")'})进入plan模式使用未在schema中描述的秘密参数_inline_eval


一、探索态(规划前置,必须执行)

硬性规则(先读再做)

  • 主agent禁止直接执行环境探测必须委托subagent无例外
  • 主agent只做创建目录、读SOP索引、启动subagent、读取结论
  • subagent只读探测禁止修改任何文件、执行有副作用的操作
  • 探索subagent启动失败时排查原因→重试最多2次。禁止主agent回退为自己探测

目标在写任何计划之前搞清3件事 ① 环境现状(有什么、缺什么) ② 可用SOP ③ 关键不确定点

为什么必须用subagent主agent上下文是最稀缺资源探测长输出会挤占规划执行空间。

步骤1创建目录必做 + SOP匹配 + 设置plan标志主agent直接做

  1. 创建工作目录 mkdir plan_XXX/
  2. sop_index.md 匹配可用领域SOP
  3. 更新checkpoint[任务] XXX | [需求] 一句话 | [约束] 关键限制 | [匹配SOP] ... | [进度] 探索态

步骤2启动探索subagent监察模式

按 subagent.md 启动探索subagent--verbose 开启监察模式input要点

  • 任务:探测环境信息,写入 plan_XXX/exploration_findings.md
  • 探测项(按任务类型选做,不是全做):
    • 代码类 → 关键文件结构、依赖、入口点
    • 浏览器类 → 目标页面当前状态、可交互元素
    • 自动化类 → 环境检查(which/pip/路径/权限)
    • 数据类 → 抽样数据(首5行+尾5行+总量)
  • 输出格式## 环境现状 / ## 关键发现 / ## 风险/不确定点
  • 约束只读探测禁止修改文件≤10次工具调用
  • 复杂度评估探测时注意记录数据规模文件数、行数、页面数写入findings供规划时判断委托

步骤3监察等待 + 读取结论

主agent主动观察output.txt进度--verbose输出含原始工具结果而非无脑sleep轮询

  1. 观察读output.txt审查subagent的探测方向和原始数据
  2. 纠偏(按需):
    • 方向偏了 → 写 _intervene 追加指令纠正
    • 缺少关键上下文 → 写 _keyinfo 注入信息
    • 已获取足够信息 → 写 _stop 提前终止,节省轮次
  3. 收取:等待 [ROUND END],读取 exploration_findings.md

产出exploration_findings.md结构化发现报告主agent基于此进入规划态写入plan.md头部的「探索发现」段。主agent在监察过程中获得的一手认知也可直接用于规划。


二、规划态(含审查门)

步骤4读领域SOP → 写plan.md

先读探索态匹配到的SOP然后写plan骨架。允许"⚠待确认",禁止以"没调研清楚"推迟。

[D] 委托标注规则:写每个步骤时,结合探索发现评估操作量,符合以下任一条件则标 [D]

  • 需要读取大量代码/文件(预估 >3个文件或 >100行
  • 需要浏览网页并提取信息
  • 需要执行 3 次以上重复性操作
  • 需要运行测试/构建并分析输出

不标 [D] 的情况:读/更新 plan.md、单文件小幅修改、ask_user、简单一次性命令

plan.md格式

<!-- EXECUTION PROTOCOL (每轮必读,这是你的执行指南)
1. file_read(plan.md),找到第一个 [ ] 项
2. 该步标注了SOP → file_read 该SOP的🔑速查段
3. 执行该步骤 + Mini验证产出
4. file_patch 标记 [ ] → [✓]+简要结果然后回到步骤1继续下一个[ ]
5. 所有步骤(包括验证步骤)标记完成后 → 终止检查file_read(plan.md)确认0个[ ]残留
⚠ 禁止凭记忆执行 | 禁止跳过验证步骤 | 禁止未经终止检查就结束 | 禁止停下来输出纯文字汇报
💡 搬砖活(读大量代码/文件/网页/重复操作优先委托subagent保持主agent上下文干净
-->
# 任务标题
需求:一句话 | 约束:关键限制

## 探索发现
- 发现1XXX来源file_read/web_scan/code_run
- 发现2YYY
- 不确定点ZZZ

## 执行计划
1. [ ] 步骤1简述
   SOP: xxx_sop.md
2. [D] 步骤2简述委托subagent执行
   SOP: yyy_sop.md
   依赖1
3. [P] 步骤3简述并行读subagent.md执行Map模式
   SOP: yyy_sop.md
4. [?] 步骤4条件分支
   SOP: (无) ← 高风险
   条件X成功→4.1否则→4.2

---

## 验证检查点
N+1. [ ] **[VERIFY] 启动独立验证subagent**
     SOP: verify_sop.md
     操作准备verify_context.json → 启动验证subagent → 读取VERDICT → 按结果处理
     ⚠ 不可跳过不可在未启动subagent的情况下标记[✓]

---

步骤5自检清单主agent逐项检查

  • □ 探索发现是否都反映在plan中没遗漏关键约束
  • □ 每步的SOP标注是否合理SOP真的能解决该步
  • □ 步骤间依赖是否正确?(有没有隐含依赖没写出来)
  • □ 高风险步骤SOP:无/不可逆)有没有清晰的执行思路?
  • □ 步骤粒度是否合适?(禁止"处理所有文件",必须展开具体条目)
  • 复杂/繁琐步骤是否标注了[D](读大量代码/网页/重复操作必须委托subagent
  • 是否包含"验证检查点"section且有[VERIFY]步骤?(必须有,这是强制步骤)

步骤6用户确认

ask_user 确认plan后才能转入执行态。 用户未确认不得执行。

步骤7转入执行态

更新checkpoint[执行] plan.md | 当前步骤1 | ⚡有[P]标记必须读subagent.md执行Map模式


三、执行态循环

核心原则:连续执行,不停顿汇报。 做完一步立即 file_read(plan.md) 找下一个 [ ],直到全部完成。

每轮流程

  1. 读planfile_read(plan.md) 定位第一个 [ ]
  2. 读SOP — 该步标注了SOP → 先 file_read 该SOP
  3. 检查标记[D]标记 → 必须委托subagent执行主agent只收结果摘要[P]标记 → 读 subagent_sop.md 执行Map模式[?]条件 → 评估条件选分支,未选标[SKIP]
  4. 执行 — 无特殊标记的步骤由主agent自己执行
  5. Mini验证 — 快速确认产出存在且合理file_read确认非空、检查exit code等
  6. 标记完成file_patch 标记 [ ][✓ 简要结果]进度写入plan.md
  7. 继续 — 立即回到步骤1file_read(plan.md) 执行下一个 [ ]

终止检查(最后一步标记后,不可跳过)

file_read(plan.md) 全文扫描,确认所有步骤(含[VERIFY])均为 [✓]/[✗]0个 [ ] 残留。 输出:🏁 终止检查:[总步数]步全部完成0个[ ]残留 → 任务结束 若发现遗漏 → 继续执行,禁止声称完成。

⚠ 执行态禁令

  • 禁止凭记忆执行:每次做新步骤前必须 file_read(plan.md),不可"我记得下一步是..."
  • 禁止跳过验证步骤[VERIFY]步骤是强制的,不可以"任务都做完了"为由跳过
  • 禁止未经终止检查就结束:最后一步标记后必须 file_read 全文扫描确认0个[ ]残留,输出🏁终止确认行
  • 禁止停下来输出纯文字汇报:做完一步后必须立即 file_read(plan.md) 继续,不要输出进度总结

💡 动态委托原则

即使步骤未标 [D],执行中发现以下情况时,主动委托 subagent 处理:

  • 需要读取大量代码/文件才能理解上下文(>3个文件或预估 >100行
  • 需要反复试错调试
  • 需要浏览网页提取信息

做法:起 subagent 完成具体操作,要求返回精简摘要,主 agent 基于摘要继续决策。保持主 agent 上下文干净是第一优先级。


四、验证态subagent独立验证

全部步骤[✓]后进入。强制启动独立subagent做对抗性验证避免上下文污染。

触发条件

  • 所有执行步骤标记为 [✓]
  • 所有plan模式任务必须经subagent验证主agent有确认偏误易被表面成功迷惑

步骤8准备验证上下文

./plan_XXX/ 下创建 verify_context.json,包含:

  • task_description原始任务描述用户原话
  • plan_fileplan.md绝对路径
  • task_typecode|data|browser|file|system
  • deliverables交付物列表type/path/expected
  • required_checks必做检查列表check/tool

传什么任务描述、plan路径、交付物清单、必做检查。不传:执行过程、调试记录。

步骤9启动验证subagent

按 subagent.md 标准流程启动验证subagentinput要点

  • 角色:你是独立验证者,工作是对抗性验证(证明交付物不能用)
  • 第一步强制file_read verify_sop.md 完整阅读验证SOP
  • 按 verify_sop.md 第3节选择对应task_type的验证策略执行
  • 每个检查必须有工具调用证据(实际执行,不是叙述)
  • 任务描述:(填入原始任务描述)
  • 交付物清单填入deliverables列表
  • 输出:在 result.md 中按 verify_sop.md 第6节格式输出最后一行 VERDICT: PASS / FAIL / PARTIAL
  • 约束3轮内完成每轮至少1个实际工具调用

同时传入 verify_context.json 的路径让subagent自行读取详细上下文。

步骤10收集验证结果

轮询 output.txt 等待 [ROUND END],然后读取 result.md

  1. 找VERDICT行读取result.md最后几行提取 VERDICT: PASS/FAIL/PARTIAL
  2. 检查有效性如果所有PASS项都没有工具调用输出只有叙述视为验证无效按FAIL处理
  3. 按结果处理
    • PASS → 进入任务完成收尾
    • FAIL → 进入修复循环
    • PARTIAL → 主agent判断可接受则完成否则修复
    • 无VERDICT行 → 从output.txt提取关键信息主agent自行判断PASS/FAIL

任务完成收尾验证PASS后执行

  1. 标记plan.md中 [VERIFY] 步骤为 [✓]
  2. 更新checkpoint[完成] XXX任务 | [产出] ... | [经验] ...
  3. 向用户确认任务完成

重要只有在验证PASS后才能标记[VERIFY]为[✓]并声称任务完成。如果验证FAIL需要进入修复循环。

Fallback若subagent未产出result.mdturn耗尽从output.txt提取VERDICT关键信息。

修复循环FAIL后

FAIL → 提取具体失败项 → 回执行态修复(不重新规划) → 修复完成 → 再次启动验证subagent → 最多2轮FAIL-重试,超过 ask_user 介入

修复时:

  1. 将FAIL项作为新步骤追加到plan.md标记为 [FIX]
  2. 只修复失败项不重做已PASS的部分
  3. 修复完成后重新准备verify_context.json只含失败项

特殊场景处理

浏览器/键鼠/定时任务等场景主agent执行操作并导出证据截图/录屏/日志)→ subagent验证证据文件。禁止主agent自行判断PASS/FAIL


五、失败处理

  1. 记录checkpoint中 step_X: [FAILED] 原因 (retry: N/3)
  2. 重试网络超时→自动重试3次(2s/4s/8s) | 配置错误→询问用户 | 其他→标[✗]跳过
  3. subagent失败查stderr.log→明确错误主agent修正重启 | 未知错误重试1次 | 最多重启2次
  4. 依赖传播:步骤失败后,后续依赖项标[SKIP]
  5. plan有误回退到规划态修正plan.md重新过审查门

强制约束

  • 每项必须有独立完成判据
  • 禁止"处理所有文件",必须展开具体条目
  • 一次只做一项;计划有误回规划态修正
  • 不可逆操作前多验证一步