feat: add align-plan and execute-plan skills

This commit is contained in:
mujing
2026-09-10 10:12:52 +08:00
commit a6c2da2d87
3 changed files with 216 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
---
name: align-plan
description: 通过代码调查和每轮 1–3 个问题对齐工程目标,纠正错误假设,维护当前决策,并经用户确认生成供新会话执行的计划。适用于需要先讨论需求、改造边界和实现取舍的任务;本 skill 不实施代码。
---
# 对齐目标并生成计划
产出一份新会话仅凭它和代码库就能实施的计划。调查服务于当前目标;不要把访谈变成遍历所有可能性的设计会议。
## 资产位置
1. 先读取项目约束、Git 状态和项目根目录的 `.agent/MEMORY.md`。优先采用用户本次明确指定的资产目录,否则复用 MEMORY 中的 `讨论资产目录`;已有会话中明确指定的位置也有效,不重复询问。
2. 没有位置时,在首轮 1–3 个问题中询问外部资产根目录。等待期间可只读调查,不自行选择目录或把讨论写进项目代码目录。
3. 用户给出位置后,解析为绝对路径,确认不在当前代码库内;若用户明确要求例外,遵从其选择。确认目录可用后记录到 MEMORY,保留其中其他内容。不可写或路径失效时说明具体问题,请用户提供可用位置,不静默回退。
4. MEMORY 只保存必要定位信息,例如:
```markdown
## 讨论资产
- 讨论资产目录:/用户指定的绝对路径
```
写入前检查 MEMORY 是否被 Git 跟踪;已跟踪则说明与“不提交本地记忆”的冲突,先解决冲突,不自行取消跟踪。未跟踪时在 `git rev-parse --git-path info/exclude` 指向的本地排除文件中幂等加入 `/.agent/MEMORY.md`,不改共享 `.gitignore`。非 Git 项目仍保留本地记忆,并说明当前无法设置 Git 排除。
5. 在外部根目录中建立 `<项目标识>/<日期-任务主题>/`。项目标识结合仓库名和路径区分同名项目,任务目录冲突时使用新名称,不覆盖其他任务。核心文件为 `current.md` 和确认后生成的 `plan-v1.md`;后续确认版本另存,不覆盖旧批准版本。
宿主限制写入时,遵从限制,在对话中维护当前状态并明确尚未落盘;不要把未保存资产说成已保存。资产维护是规划阶段唯一的写入范围,不能开始项目实现。
## 调查与问答
- 先读相关代码、调用链、现有测试与项目约束,再提出问题。需要外部证据时,针对影响当前决策的开源实现或官方资料查证,记录链接、版本或提交以及相关结论;不进行无边界的生态调研。无法查证的内容标记为待验证。
- 每轮提问共 1–3 个,只问影响目标、验收或实现选择的问题。能从环境查明的事实自己查。需要先前答案的问题留到下一轮;不要用一个问题包装大量独立子问题。
- 提问前给出必要的调查结论;存在真实取舍时给出简短选项、推荐及原因。使用宿主的提问工具(若可用),否则直接提问;不依赖特定工具,不使用装饰性 emoji。
- 对用户的判断区分事实、假设与偏好。事实有误时指出冲突证据、影响和替代建议;证据不足则说明不确定性。尊重明确的偏好,不为反驳而反驳,也不把用户提出的想法自动视作已批准方案。
- 优先复用现有能力、标准库和平台机制,选择满足已确认目标的最小实现。不用“简化”省略用户要求或必要的正确性保障。
- 新想法先核对当前目标。若出现多个可独立交付的目标、跨子系统的大幅改造,或明显超出原验收条件,说明扩大点,提出分阶段建议并让用户选择。未确认前保留原目标,旁支放入范围外事项。
## 当前决策是状态
每轮吸收回答后更新 `current.md`,保持简短、可独立理解;下一轮基于它和新证据提问。包含:
- 原始目标与当前已确认目标;目标改变时保留改变原因。
- 验收条件、已确认决策及简短理由。
- 已查明事实及来源;尚待确认的建议或假设单独列出。
- 约束、保留行为、不做事项、未决问题。
用新决定替换已失效决定;被否决方案只保留防止重提所需的一句原因,不累积聊天全文。用户未回答、沉默或模型自己的推荐都不算确认。恢复会话、上下文压缩或出现矛盾时,重新读取当前决策和相关代码;不能从压缩摘要猜测确认状态。
## 收敛、确认与交接
当目标、边界、关键实现选择和验收都明确,且没有影响实施的未决问题时停止提问。不为凑问题继续访谈。
展示完整候选计划,一次让用户确认。计划至少包含以下信息,简单任务可合并段落,不填充无意义章节:
```markdown
# 任务名称
## 定位与确认
- 项目:仓库绝对路径;有远程时附仓库标识
- 基线:分支、提交;无初始提交则明确注明
- 工作区:与计划相关的未提交变化
- 版本:v1;状态:待确认 / 已确认;确认日期与确认依据
## 目标与边界
原始目标、当前行为、目标行为、保留行为、不做事项。
## 决策与影响
已确认选择及原因;业务行为、公共接口、架构的前后变化。
无变化的类别明确注明;必要事实来源;已确认的假设。
## 文件与步骤
预计新增、修改、删除的仓库相对路径及各自目的。
按依赖顺序列实施任务,每项关联验收条件。
允许为已批准目标补充必要测试或配置文件,须记录理由;
其他范围扩展、业务行为、公共接口或架构变化需重新确认。
## 验收与验证
可判定的验收条件;对应现有或待补测试、运行目录、命令与预期结果。
必要环境和依赖;无法验证的部分不能伪装为通过。
```
确认前自查:新会话是否还需要聊天历史才能理解,是否有占位符、互相矛盾的决定、漏写的文件目的或隐含的业务变化。修复事实遗漏;涉及新决策则回到提问。
用户确认完整候选计划后,保存对应内容并记录真实的确认依据,不能把未展示的新内容夹入已批准版本。实质变化另行展示、确认并保存新版本。最终计划必须自包含,不要求执行者继续读取访谈记录。
提供已保存计划的绝对路径,以及新会话提示词:`使用 execute-plan 执行 /绝对路径/plan-v1.md`。结束本次规划,不自动调用执行 skill。新会话是使用约定,不能声称已替用户清空上下文。
+50
View File
@@ -0,0 +1,50 @@
---
name: execute-plan
description: 在新会话中读取用户指定的已确认工程计划,按范围实施、验证、重新核对目标并 review,完成后创建本地 Git 提交。适用于执行已有计划;不用于替代需求讨论或自动扩展改造范围。
---
# 执行已确认计划
输入为用户指定的计划文件路径。无需安装其他 skill,也不依赖旧会话。按项目已有方式完成实现,不强制子代理、worktree、固定 TDD 或额外依赖。
## 开始前
1. 完整读取计划,提取原始目标、已批准行为、保留行为、文件范围、步骤和验收条件。未给路径且无法从本次明确引用确定时询问路径,不猜“最新计划”。
2. 读取目标项目约束、相关代码和测试,核对项目定位、Git 基线与工作区。路径变化时通过仓库身份和内容确认,不仅凭同名目录执行。基线提交变化不必自动阻塞:调查是否影响计划成立的前提;存在实质冲突再澄清。
3. 检查计划的确认状态及依据;缺少批准、存在关键遗漏或当前代码使计划失效时,展示具体缺口并取得澄清。不得把“执行这个未完成的草稿”当作所有隐含决策都已确定,也不对已有有效批准重复索要确认。
4. 记录实施前分支、HEAD(或尚无提交)、暂存、未暂存和未跟踪文件,保留足够的基线信息区分用户已有改动。不能覆盖、回退或替用户提交无关内容。若与任务重叠且无法可靠隔离,先解决冲突。
5. 实施记录默认写在指定计划旁的独立 `execution-日期时间.md`,包含计划版本、基线、进度和证据,不覆盖已有记录。该位置必须符合用户的外部资产约定;位置不明时读取 `.agent/MEMORY.md` 或询问。目录不可用时报告问题,不回退到代码目录,不把资产混入 Git 提交。
若当前会话还保留规划讨论,提醒用户新会话约定;不能假称已经清空上下文。无论宿主是否能识别会话边界,都以计划和重新读取的代码为依据。宿主处于只读或计划模式时遵从限制,不执行变更。
## 实施边界
- 按计划依赖顺序推进;每项改动必须能解释为完成一个批准任务或验收条件。优先复用代码库、标准库和平台现有能力。
- 在批准范围内自主解决实现细节、修复本任务引入的问题,不每一步都索要许可。
- 可补充达成已批准目标所必需的测试或配置文件,在实施记录中说明文件、原因及对应验收条件。文件扩展不能成为更改业务行为、公共接口、架构、升级依赖或扩大验收范围的借口。
- 其他未计划的文件改动或实质范围变化,先展示所需变化与原因,取得确认后保存补充计划或新版本,再继续受影响工作。保留原批准版本,不为解释已发生的越界改动而重写计划。
- 发现无关问题时只在记录中注明“本次未处理”;不要顺手重构、清理、格式化整个仓库或修复旁支问题。
- 记录任务进度、必要配套文件、验证命令和结果。恢复会话或上下文压缩后重新读取原计划与实施记录,不从聊天印象续做。
## 验证与 Review
完成实现后,重新完整读取原计划和原始目标,再检查实际 diff。不能仅根据自己刚写的实现判断完成。
1. **范围**:每个变更对应哪项任务或验收;必要配套文件是否有理由;是否存在未批准的业务、接口、架构变化;用户已有内容是否保留。
2. **行为**:目标行为是否成立,要求保持的行为是否仍成立,错误路径、兼容性和相关调用方是否受到意外影响。
3. **测试**:逐项将验收与回归风险映射到检查。先复用已有测试,再补真实缺口;不添加只复述实现的断言、重复用例或无意义覆盖率要求。对无代码变更任务使用适当的文档或结构检查。
4. **执行证据**:运行计划要求和实际改动需要的检查,记录命令、结果及限制;不能把“应当通过”当作已通过。无变化且无新疑点时不反复跑相同测试。
5. **正确性 Review**:检查具体实现及暂存前的完整任务 diff,修复范围内问题,修复后重跑受影响检查。若发现本次越界内容,只撤销自己可可靠识别的越界改动;无法隔离时请求澄清,不触碰用户内容。
测试失败时调查原因并修复范围内问题。已有失败、缺失环境或范围外阻碍无法解决时如实报告,不能宣布验收通过或自行绕过检查提交。后续新授权可调整验证要求,但必须记录差异。
## 本地提交与交付
- 通过上述检查后,只暂存本任务的文件或可隔离片段。不要使用会带入无关内容的批量暂存方式。
- 检查完整暂存 diff,并与初始暂存状态对照。已有用户暂存内容时,必须采用能保持其状态且仅提交本任务的方式;不能隔离则先询问,不创建混合提交。
- 确认 `.agent/MEMORY.md`、讨论资产和无关文件不在提交中;若 MEMORY 已被跟踪,不自行取消跟踪,先报告冲突。
- 创建一次描述结果的本地 Git commit,遵循项目提交规范;不 push、不 amend 既有提交、不自动跳过 hooks。若 hooks 修改内容,重新检查变化并验证后再提交。
- 读取提交 hash 和提交文件列表,核实仅包含本任务内容,检查工作区剩余变化。提交失败时说明具体原因,不伪造完成状态。
- 若没有差异,报告目标已满足及验证证据,不创建空提交。非 Git 项目说明不能提交,不擅自初始化仓库。未配置身份时不自行修改用户 Git 身份。
最后更新外部实施记录,报告:完成内容、验证证据、必要配套文件与已批准偏差、遗留限制、commit hash(或未提交原因)。