名称: piv
描述: "PIV 工作流编排器——用于系统化多阶段软件开发的 Plan、Implement、Validate 循环。适用于通过 PRP 分阶段构建功能、自动化验证循环或多智能体编排的场景。支持 PRD 创建、PRP 生成、代码库分析以及带验证的迭代执行。"
user-invocable: true
disable-model-invocation: true
元数据: {"openclaw":{"emoji":"gear","homepage":"https://github.com/SmokeAlot420/ftw","requires":{"bins":["git"]},"os":["darwin","linux"]}}
参数解析逻辑如下:
.md 结尾)如果第一个参数以 .md 结尾,则视为 PRD 文件的直接路径:
- PRD_PATH - PRD 文件的直接路径
- PROJECT_PATH - 通过从 PRDs/ 文件夹向上追溯推导得出
- START_PHASE - 第二个参数(默认:1)
- END_PHASE - 第三个参数(默认:从 PRD 自动检测)
如果第一个参数不以 .md 结尾:
- PROJECT_PATH - 项目的绝对路径(默认:当前工作目录)
- START_PHASE - 第二个参数(默认:1)
- END_PHASE - 第三个参数(默认:4)
- PRD_PATH - 从 PROJECT_PATH/PRDs/ 文件夹自动发现
如果 $ARGUMENTS[0] 以 ".md" 结尾:
PRD_PATH = $ARGUMENTS[0]
PROJECT_PATH = dirname(dirname(PRD_PATH))
START_PHASE = $ARGUMENTS[1] 或 1
END_PHASE = $ARGUMENTS[2] 或 从 PRD 自动检测
PRD_NAME = 去除扩展名的 basename
否则:
PROJECT_PATH = $ARGUMENTS[0] 或 当前工作目录
START_PHASE = $ARGUMENTS[1] 或 1
END_PHASE = $ARGUMENTS[2] 或 4
PRD_PATH = 从 PROJECT_PATH/PRDs/ 自动发现
PRD_NAME = 发现的 PRD 文件名(不含扩展名)
关键:每个角色在行动前必须阅读其指令文件。
| 角色 | 指令文件 |
|---|---|
| PRD 创建 | 阅读 {baseDir}/references/create-prd.md |
| PRP 生成 | 阅读 {baseDir}/references/generate-prp.md |
| 代码库分析 | 阅读 {baseDir}/references/codebase-analysis.md |
| 执行器 | 阅读 {baseDir}/references/piv-executor.md + {baseDir}/references/execute-prp.md |
| 验证器 | 阅读 {baseDir}/references/piv-validator.md |
| 调试器 | 阅读 {baseDir}/references/piv-debugger.md |
前提条件: 必须存在 PRD。如果未找到,请告知用户先创建一个。
"上下文预算:约 15% 用于编排器,每个子智能体使用 100% 全新上下文"
你是编排器。保持精简并管理工作流。你不自己执行 PRP——而是为每个任务创建具有全新上下文的专用子智能体。
子智能体创建: 使用 sessions_spawn 工具创建全新的子智能体会话。每次创建都是非阻塞的——你将通过一个公告步骤接收结果。在进入下一步之前,请等待每个智能体的结果。
如果项目没有 PIV 目录,请创建它们:
mkdir -p PROJECT_PATH/PRDs PROJECT_PATH/PRPs/templates PROJECT_PATH/PRPs/planning
如果不存在,将 {baseDir}/assets/prp_base.md 复制到 PROJECT_PATH/PRPs/templates/prp_base.md。
如果不存在,根据 {baseDir}/assets/workflow-template.md 创建 PROJECT_PATH/WORKFLOW.md。
对于从 START_PHASE 到 END_PHASE 的每个阶段:
检查现有 PRP:
ls -la PROJECT_PATH/PRPs/ 2>/dev/null | grep -i "phase.*N\|pN\|p-N"
如果不存在 PRP,使用 sessions_spawn 创建一个全新的子智能体,按顺序执行代码库分析和 PRP 生成:
研究与 PRP 生成任务 - 阶段 {N}
==============================================
项目根目录:{PROJECT_PATH}
PRD 路径:{PRD_PATH}
## 阶段 {N} 范围(来自 PRD)
{粘贴阶段范围}
## 步骤 1:代码库分析
阅读 {baseDir}/references/codebase-analysis.md 了解流程。
保存到:{PROJECT_PATH}/PRPs/planning/{PRD_NAME}-phase-{N}-analysis.md
## 步骤 2:生成 PRP(分析上下文仍保持加载)
阅读 {baseDir}/references/generate-prp.md 了解流程。
使用模板:PRPs/templates/prp_base.md
输出到:{PROJECT_PATH}/PRPs/PRP-{PRD_NAME}-phase-{N}.md
**自行完成这两个步骤。不要创建子智能体。**
使用 sessions_spawn 创建一个全新的子智能体:
执行器任务 - 阶段 {N}
============================
阅读 {baseDir}/references/piv-executor.md 了解你的角色定义。
阅读 {baseDir}/references/execute-prp.md 了解执行流程。
PRP 路径:{PRP_PATH}
项目:{PROJECT_PATH}
遵循:加载 PRP → 详细规划 → 执行 → 验证 → 确认
输出包含状态、文件、测试、问题的**执行摘要**。
使用 sessions_spawn 创建一个全新的子智能体:
验证器任务 - 阶段 {N}
=============================
阅读 {baseDir}/references/piv-validator.md 了解你的验证流程。
PRP 路径:{PRP_PATH}
项目:{PROJECT_PATH}
执行器摘要:{SUMMARY}
独立验证**所有**要求。
输出包含等级、检查项、差距的**验证报告**。
处理结果: 通过 → 提交 | 发现差距 → 调试器 | 需要人工介入 → 询问用户
使用 sessions_spawn 创建一个全新的子智能体:
调试器任务 - 阶段 {N} - 迭代 {I}
============================================
阅读 {baseDir}/references/piv-debugger.md 了解你的调试方法。
项目:{PROJECT_PATH}
PRP 路径:{PRP_PATH}
差距:{GAPS}
错误:{ERRORS}
修复根本原因,而非表面症状。每次修复后运行测试。
输出包含状态、应用的修复、测试结果的**修复报告**。
调试器之后:重新验证 → 通过(提交)或循环(最多 3 次)或升级处理。
cd PROJECT_PATH && git status && git diff --stat
创建语义化提交,包含 Built with FTW (First Try Works) - https://github.com/SmokeAlot420/ftw。
标记阶段完成,记录验证结果。
循环回步骤 1,处理下一阶段。
当子智能体超时或失败时:
1. 检查是否有部分工作完成(创建的文件、编写的测试)
2. 使用简化、更短的提示重试一次
3. 如果重试失败,将已完成的工作告知用户并升级处理
## PIV RALPH 完成
完成阶段:从 START 到 END
总提交次数:N
验证循环次数:M
### 阶段摘要:
- 阶段 1:[功能] - 在 N 个循环内完成验证
...
所有阶段均已成功实施并通过验证。