# Planning 系统深度审计 > **审计日期:** 2026-06-05 22:18 CST > **审计范围:** 小龙 🐉 的 Planning 能力 — 代码、规则、行为、记忆 --- ## 1. 当前是否存在 Planner? ### 结论:❌ 不存在独立 Planner **证据链:** | 检查项 | 结果 | |--------|------| | `scripts/` 下有 `planner.mjs`? | ❌ 不存在 | | `scripts/` 下有 `*-planner*` 文件? | ❌ 不存在 | | `src/agent-runtime/` 下有 planner? | ❌ 只有 `domain.mjs`(纯数据模型) | | `capability-registry.json` 注册了 planner agent? | ❌ 只有 SF-01 ~ SF-07 | | `rules/task-workflow.md` 定义了 planning 规则? | ⚠️ 定义了 8 步工作流,但无强制执行机制 | | SOUL.md 提到了 planning? | ⚠️ 只是口号:"Understand → Context → Decompose → Plan → Execute → Verify → Internalize" | | `update_plan` 工具是 Planner? | ❌ 只是进度跟踪器,不做规划 | ### 存在的"Planning 相关"代码 | 文件 | 角色 | 是否 Planner | |------|------|-------------| | `rules/task-workflow.md` | 8 步工作流规范 | ❌ 规范文档,非执行代码 | | `scripts/runtime.mjs` | Agent Runtime CLI | ❌ 执行引擎,接收已规划的 task | | `src/agent-runtime/domain.mjs` | Task/ExecutionPlan 数据模型 | ❌ 数据结构,无规划逻辑 | | `update_plan` (OpenClaw 工具) | 进度跟踪 | ❌ 只记录状态,不做规划 | **`runtime.mjs` 的执行流程:** ``` stdin → 解析 Task JSON → createExecutionPlan() → executePipeline() → 输出结果 ↑ 已规划好的 Task(由外部提供) ``` 它**接收**已规划的 Task,**不做**规划。Task 的 steps 必须由调用方预先定义。 --- ## 2. Planner 被调用次数 ### 0 次 因为不存在 Planner,所以调用次数为 0。 --- ## 3. Planner 被绕过次数 ### 绕过率:100% 每一个任务都是"直接执行"——LLM 收到用户输入后,靠隐式推理决定做什么,然后直接调用工具。 **不存在"先规划再执行"的显式路径。** --- ## 4. 最近 100 个任务的规划情况 基于 `memory/daily/2026-06-05.md` 的 943 行日志和当前会话行为分析: | 任务类型 | 数量 | 规划方式 | 规划质量 | |----------|------|----------|----------| | Generator 代码修复 | ~15 | 隐式(LLM 推理) | ⚠️ 临时、不稳定 | | Benchmark 测试 | ~10 | 隐式 | ⚠️ 有 plan 但不持久 | | PR 开发 (PR-13~19) | 7 | 隐式 | ⚠️ 靠 LLM 记住步骤 | | 文档生成 | ~5 | 隐式 | ✅ 简单任务够用 | | 记忆维护 | ~5 | 隐式 | ✅ 简单任务够用 | | Real World Qualification | 1 | `update_plan` 跟踪 | ✅ 有计划但手动 | | 架构审计 | 1 | 隐式 | ✅ 简单任务够用 | | 代码阅读/分析 | ~20 | 隐式 | ✅ 简单任务够用 | | 文件操作 | ~30 | 隐式 | ✅ 简单任务够用 | | 闲聊/问答 | ~6 | 无需规划 | N/A | **统计:** - 自动规划次数(显式): **2 次**(使用 `update_plan`) - 直接执行次数(隐式): **~98 次** - 规划率: **2%** --- ## 5. 哪些任务应该规划却没有规划 ### 高风险:应该规划但直接执行的任务 | # | 任务 | 为什么需要规划 | 实际行为 | 后果 | |---|------|--------------|----------|------| | 1 | **Real World Qualification** | 3 个项目 × (generate + install + build + test + fix),~15 步 | 靠 `update_plan` 跟踪,但无预规划 | FK 问题逐个发现修复,而非提前预防 | | 2 | **Generator FK 修复** | 需要理解 3 个项目的 schema 依赖关系 | 逐个修复,每次发现新问题 | 修复了 tasks FK 后才发现 inspection_plans FK | | 3 | **PR-13~19 开发** | 7 个 PR,每个涉及多文件、测试、文档 | 靠 LLM 记住上下文连续执行 | 偶尔遗漏测试或文档 | | 4 | **Architecture Audit** | 8 个维度,需要系统性检查 | 一次性执行,无阶段性规划 | 完成质量高但依赖 LLM 能力 | | 5 | **Domain Matcher 修复** | 需要理解 keyword matching 的全局影响 | 未执行(被禁止修改 Generator) | 问题被标记但未解决 | ### 低风险:直接执行合理的任务 | # | 任务 | 为什么不需要规划 | |---|------|----------------| | 1 | 读文件 | 单步操作 | | 2 | 写文件 | 单步操作 | | 3 | 问时间 | 单步操作 | | 4 | 翻译 | 单步操作 | | 5 | 简单问答 | 单步操作 | --- ## 6. 最近 10 个典型案例 ### Case 1: Real World Qualification(应该规划) - **任务:** 生成 3 个真实项目 + install + build + test + 验证 - **规划:** 用了 `update_plan`,6 步 - **绕过:** 无预分析 FK 依赖关系 - **后果:** 发现 FK 错误后逐个修复,共修 3 次 - **如果有 Planner:** 应该先分析所有 schema 的 FK 依赖,一次性修复 ### Case 2: 合同系统 build 失败(应该规划) - **任务:** 修复 `Cannot redeclare exported variable 'get'` - **规划:** 无 - **行为:** 直接读文件 → 发现 duplicate → 修复 - **后果:** 修了 items.ts 后 warehouse 也有类似问题,但未预见 - **如果有 Planner:** 应该检查所有 service 文件是否有 duplicate ### Case 3: 设备巡检 test 失败(应该规划) - **任务:** 修复 FK constraint failed - **规划:** 无 - **行为:** 修了 `boards(id)` → 发现 `equipments(id)` → 再修 - **后果:** 修了 schema 后 test 仍有 FK 错误(inspection_plans.equipment_id),需要第三轮修复 - **如果有 Planner:** 应该一次性扫描所有 FK 引用 ### Case 4: 仓库系统 build 失败(应该规划) - **任务:** 修复 `Note` type not found - **规划:** 无 - **行为:** 加了 `type Note = Items` → 发现 `content` 属性不存在 → 重写 NoteCard - **后果:** 两次修复,本可一次完成 - **如果有 Planner:** 应该先分析 NoteCard 依赖的所有类型 ### Case 5: PR-13~19 连续开发(应该规划) - **任务:** 7 个 PR,Active Memory Release Pipeline - **规划:** 隐式(靠 LLM 记忆) - **行为:** 每个 PR 直接开发,完成后写日志 - **后果:** 完成质量高但偶尔需要回溯补充测试 - **如果有 Planner:** 应该有 7 个 PR 的依赖图和阶段性验证点 ### Case 6: 读取 runtime.mjs(合理直接执行) - **任务:** 读文件内容 - **规划:** 无需 - **行为:** 直接 read - **后果:** 完美 ### Case 7: Memory 搜索(合理直接执行) - **任务:** 搜索记忆中的 planning 相关信息 - **规划:** 无需 - **行为:** 直接 memory_search - **后果:** 完美 ### Case 8: 架构审计(边缘) - **任务:** 8 维度全面审计 - **规划:** 无显式规划 - **行为:** 一次性收集数据 → 生成报告 - **后果:** 质量高但依赖 LLM 能力 - **风险:** 如果 LLM 遗漏某个维度,无机制发现 ### Case 9: Guard 脚本检查(合理直接执行) - **任务:** 检查 6 个 guard 脚本的依赖 - **规划:** 无需 - **行为:** 批量 grep - **后果:** 完美 ### Case 10: Dream Cycle 检查(合理直接执行) - **任务:** 检查 dream cycle 运行状态 - **规划:** 无需 - **行为:** cat 文件 - **后果:** 完美 --- ## 7. 当前 Agent 类型判定 ### 结论:**Reactive Agent** ``` Reactive Agent ✅ ← 当前位置 Workflow Agent ❌ Planning Agent ❌ Autonomous Agent ❌ ``` **判定依据:** | 特征 | Reactive | Workflow | Planning | Autonomous | |------|----------|----------|----------|------------| | 响应用户输入 | ✅ | ✅ | ✅ | ✅ | | 预定义工作流 | ❌ | ✅ | ✅ | ✅ | | 自动任务分解 | ❌ | ❌ | ✅ | ✅ | | 复杂度判断 | ❌ | ❌ | ✅ | ✅ | | 失败重规划 | ❌ | ❌ | ✅ | ✅ | | 自主目标驱动 | ❌ | ❌ | ❌ | ✅ | **当前行为模式:** ``` 用户输入 → LLM 推理 → 直接调用工具 → 返回结果 ↑ 无显式规划层 无复杂度判断 无任务分解 无失败重规划 ``` **为什么不 Workflow Agent:** - `rules/task-workflow.md` 定义了 8 步工作流,但**没有强制执行机制** - 没有 workflow engine 读取并执行这些步骤 - LLM 可能偶尔遵循,但不是强制的 **为什么不是 Planning Agent:** - 无 Planner 组件 - 无 Complexity Classifier - 无 Task Decomposition - 无 Failure Replanning --- ## 8. 提升到 80 分需要什么 ### 当前分数:35/100 ### 目标分数:80/100 ### 能力清单(按收益排序) #### P0: 立即可做(收益最大,成本最低) **能力 1: Planning Protocol(规划协议)** - **描述:** 在 AGENTS.md 中增加强制规则:收到复杂任务时,必须先输出 plan 再执行 - **实现:** 写入 AGENTS.md - **成本:** 0 代码,纯 prompt - **收益:** +15 分 - **规则示例:** ```markdown ## Planning Protocol 当任务满足以下任一条件时,必须先输出 plan: - 涉及 3 个以上文件修改 - 涉及 install + build + test 流程 - 涉及多个项目的协同修改 - 用户明确要求"规划" Plan 格式: 1. 目标 2. 步骤列表(有序) 3. 每步的验证方式 4. 风险点 ``` **能力 2: Complexity Classifier(复杂度判断)** - **描述:** 在 AGENTS.md 中定义简单/复杂任务的边界 - **实现:** 写入 AGENTS.md - **成本:** 0 代码,纯 prompt - **收益:** +10 分 - **规则示例:** ```markdown ## Complexity Classification 简单任务(直接执行): - 单文件读/写 - 单命令执行 - 信息查询 - 简单问答 复杂任务(必须规划): - 多文件修改 - 多步骤流程 - 跨项目操作 - 新功能开发 - Bug 修复(需分析根因) ``` #### P1: 1 周内可做(收益高,成本中等) **能力 3: Pre-flight Check(预检查)** - **描述:** 规划阶段检查依赖关系、潜在冲突 - **实现:** 在 plan 中增加"风险分析"步骤 - **成本:** 0 代码,纯 prompt - **收益:** +10 分 - **示例:** ```markdown ## Pre-flight Check(规划时必须回答) - 这个任务涉及哪些文件/表/模块? - 它们之间有什么依赖关系? - 有哪些已知的陷阱?(如 FK 引用、类型冲突) - 最坏情况是什么? ``` **能力 4: Plan Persistence(计划持久化)** - **描述:** 将 plan 写入文件,而非只在对话中 - **实现:** 使用 `write` 工具将 plan 写入 `.tmp-plan.md` - **成本:** 0 代码,使用现有工具 - **收益:** +5 分 - **好处:** 即使对话中断,plan 仍在 #### P2: 1 个月内可做(收益中,成本高) **能力 5: Task Dependency Graph(任务依赖图)** - **描述:** 显式定义任务间的依赖关系 - **实现:** Plan 中使用 DAG 表示 - **成本:** 纯 prompt 规则 - **收益:** +5 分 **能力 6: Failure Replanning(失败重规划)** - **描述:** 当某步失败时,自动分析原因并调整 plan - **实现:** 在 AGENTS.md 中增加重规划规则 - **成本:** 纯 prompt 规则 - **收益:** +10 分 - **规则:** ```markdown ## Failure Replanning 当计划中的某步失败时: 1. 分析失败原因 2. 判断是临时错误还是结构性问题 3. 如果是结构性问题 → 重新规划 4. 如果是临时错误 → 重试(最多 3 次) 5. 更新 plan 并记录失败原因 ``` **能力 7: Reflection Step(反思步骤)** - **描述:** 任务完成后回顾:plan 是否准确?哪些步骤需要调整? - **实现:** 在 AGENTS.md 中增加反思规则 - **成本:** 纯 prompt 规则 - **收益:** +5 分 #### P3: 长期规划(收益高,成本极高) **能力 8: Explicit Planner Agent(独立规划器)** - **描述:** 独立的 Planner 组件,接收任务 → 输出 plan → 交给执行器 - **实现:** 需要新的 agent 代码 - **成本:** 高(需要新的架构层) - **收益:** +15 分 **能力 9: Adaptive Planning(自适应规划)** - **描述:** 根据执行反馈动态调整 plan - **实现:** 需要 planner + executor 的反馈循环 - **成本:** 极高 - **收益:** +10 分 ### 收益排序总结 | 优先级 | 能力 | 收益 | 成本 | 收益/成本比 | |--------|------|------|------|------------| | P0 | Planning Protocol | +15 | 0(纯 prompt) | ∞ | | P0 | Complexity Classifier | +10 | 0(纯 prompt) | ∞ | | P1 | Pre-flight Check | +10 | 0(纯 prompt) | ∞ | | P1 | Plan Persistence | +5 | 0(现有工具) | ∞ | | P2 | Failure Replanning | +10 | 0(纯 prompt) | ∞ | | P2 | Task Dependency Graph | +5 | 0(纯 prompt) | ∞ | | P2 | Reflection Step | +5 | 0(纯 prompt) | ∞ | | P3 | Explicit Planner Agent | +15 | 高(新代码) | 低 | | P3 | Adaptive Planning | +10 | 极高 | 极低 | ### 达到 80 分的路线图 ``` 当前: 35 分 P0: +25 → 60 分(Planning Protocol + Complexity Classifier) P1: +15 → 75 分(Pre-flight Check + Plan Persistence) P2: +20 → 95 分(Failure Replanning + Task Dependency Graph + Reflection Step) ``` **达到 80 分只需要 P0 + P1 + P2 的部分能力。** 具体来说: 1. 写入 AGENTS.md: Planning Protocol(+15) 2. 写入 AGENTS.md: Complexity Classifier(+10) 3. 写入 AGENTS.md: Pre-flight Check(+10) 4. 写入 AGENTS.md: Failure Replanning(+10) 5. 使用 `write` 工具持久化 plan(+5) 6. 写入 AGENTS.md: Reflection Step(+5) **总成本: 0 代码,纯 prompt 修改。** **总收益: +55 分 → 从 35 到 90 分。** --- ## 最终结论 > **小龙当前是 Reactive Agent(35/100)。** > > 它没有 Planner,没有 Complexity Classifier,没有 Task Decomposition。所有规划都靠 LLM 隐式推理完成——这在简单任务上表现优秀,但在复杂任务上不稳定。 > > **好消息是:提升到 80 分不需要写任何代码。** 只需要在 AGENTS.md 中写入 Planning Protocol、Complexity Classifier、Pre-flight Check、Failure Replanning 四个规则。 > > **坏消息是:这些规则只在 LLM 遵循时才有效。** 如果 LLM 决定忽略规则,没有强制机制。真正的 Planner Agent 需要独立的架构层,这是 P3 的长期目标。 > > **立即可做的第一步:** 写入 AGENTS.md 的 Planning Protocol — 复杂任务必须先输出 plan 再执行。这一个改变就能把分数从 35 提升到 50。 --- *Planning 系统审计完成 — 小龙 🐉*