| name | plan-first |
| description | 复杂任务前先规划执行策略,明确步骤、依赖、风险。仅当用户明确说出"使用 plan-first"或"启动 plan-first"时触发。不适用于任何隐式场景。 |
规划优先
复杂任务前先规划执行策略,明确步骤、依赖、风险,等待用户确认后再执行。
触发约束
此 skill 仅通过显式调用触发。
⛔ 不触发的场景
- 用户提到"规划"、"想一下"等但未提及 plan-first
- 用户直接说"帮我写代码"、"实现 X"(这是 EnterPlanMode 的触发条件,不是本 skill)
- 用户未显式引用 @plan-first
✅ 触发条件
必须同时满足:
- 用户明确说出"使用 plan-first"或"启动 plan-first",或显式引用 @plan-first
- 用户提供了复杂任务或明确需求
与 EnterPlanMode 的区别
| EnterPlanMode | plan-first |
|---|
| 宿主工具内置机制,进入 plan mode | Skill,在正常对话中输出规划 |
| 用户说"帮我实现 X"时触发 | 用户说"使用 plan-first"时触发 |
| 生成 plan.md 文件,正式审批流程 | 对话中输出规划文本,非正式 |
| 适合需要代码编写的实现任务 | 适合任何需要先规划的复杂任务 |
简单说:EnterPlanMode 是正式的、结构化的规划流程;plan-first 是轻量的、对话式的规划辅助。
核心原则
- 规划再行动 — 复杂任务先输出执行计划,用户确认后再执行
- 步骤清晰 — 每个步骤可独立理解、独立验证
- 风险可见 — 标注潜在阻断点和依赖,不隐藏不确定性
执行流程
Step 1: 分析任务复杂度
判断是否需要规划:
| 特征 | 需规划 | 可直接执行 |
|---|
| 涉及文件数 | ≥3 个文件 | 1-2 个文件 |
| 涉及模块 | 跨模块/跨层级 | 单模块内 |
| 决策点 | 有多种实现路径 | 单一路径 |
| 外部依赖 | 有不确定依赖 | 无外部依赖 |
| 用户已知偏好 | 用户偏好未知 | 用户偏好明确 |
如果任务简单,可直接执行;如果复杂,输出规划。
Step 2: 输出执行计划
规划格式:
## 执行规划
**任务**: {用户任务描述}
**复杂度判断**: {为什么需要规划}
### 执行步骤
1. **{步骤名称}**
- 目标: {这一步要达成什么}
- 操作: {具体做什么}
- 依赖: {前置条件}
- 输出: {完成后产生什么}
- 风险: {潜在阻断点}
2. **{步骤名称}**
...
### 决策点
| 决策 | 选项 | 默认选择 | 原因 |
|------|------|---------|------|
| {决策1} | A/B | A | {为什么选 A} |
| {决策2} | X/Y | X | {为什么选 X} |
### 风险评估
- ⚠️ {风险1}: {描述,如何规避}
- ⚠️ {风险2}: {描述,如何规避}
### 预期总耗时
约 {X-Y} 分钟 / {X-Y} 步操作
Step 3: 等待用户确认
输出规划后,等待用户:
- "好" / "开始" / "执行" → 按规划执行
- "修改步骤 X" → 调整规划后重新确认
- "取消" → 不执行
禁止在用户确认前开始执行任何步骤。
Step 4: 执行并同步状态
执行过程中,每完成一步简要更新:
- "步骤 1 完成:{输出结果}"
- 发现新问题时及时报告,不隐藏
反模式
- 禁止输出规划后直接开始执行 — 必须等待用户确认
- 禁止编造用户偏好 — 不确定时询问
- 禁止隐藏风险 — 阻断点必须标注
- 禁止规划过于抽象 — 每步必须可执行、可验证
- 禁止遗漏依赖关系 — 步骤顺序必须考虑依赖
完成检查清单
标记规划完成前确认: