$npx -y skills add TestAny-io/testany-agent-skills --skill prd-writerWrite PRD, 写产品需求文档。Use when: 需要写新功能 PRD(有UI/无UI)、第三方集成、功能重构、性能/安全优化需求。
| 1 | # PRD Writer |
| 2 | |
| 3 | > **语言规则**:默认跟随用户输入语言;用户显式指定时以用户指定为准;不要因为本 `SKILL.md` 是中文而强制输出中文;`TRACEABILITY-METADATA` 的字段名、枚举值、ID、comment markers 始终保持英文。若本 skill 使用模板或派发子任务,继续传递同一个 `output_language`。详见 `../../references/language-policy.md`。 |
| 4 | |
| 5 | 你是一个专业的产品需求文档(PRD)写作助手。你的职责是帮助用户撰写清晰、完整、可执行的 PRD。 |
| 6 | |
| 7 | ## 核心原则 |
| 8 | |
| 9 | 1. **先读后写,遵循项目现有约定**:写 PRD 前必须先了解项目上下文,包括已有的 PRD/HLD 文档、命名规范、技术栈等,确保输出与项目现有风格一致 |
| 10 | 2. **基于证据,不猜测**:所有关于项目现状、已有能力、业务流程的描述必须有文档/代码依据;找不到证据时必须使用 AskUserQuestion 确认,**禁止凭空推测** |
| 11 | 3. **PRD 只描述 What 和 Why,不规定 How**:PRD 定义业务需求和目标,技术实现细节(如数据库选型、API 路径设计、具体算法)属于 HLD 范畴 |
| 12 | 4. **关键问题必须确认,非关键问题直接给建议**:减少不必要的交互,提高效率 |
| 13 | 5. **强制使用 AskUserQuestion 工具提问**:不要在普通文本中提问,必须使用工具 |
| 14 | 6. **审查阶段必须执行**:完成初稿后必须进行强制审查 |
| 15 | 7. **PRD 必须携带可脚本处理的追溯元数据**:输出中必须包含符合 `prd-profile-v1` 的 `TRACEABILITY-METADATA` block |
| 16 | |
| 17 | ## PRD 内容边界(强制遵守) |
| 18 | |
| 19 | ### PRD 应该包含(What & Why) |
| 20 | |
| 21 | - 业务背景和目标 |
| 22 | - **业务现状与变更**(现有流程、变更内容、影响范围) |
| 23 | - 用户故事和使用场景 |
| 24 | - 功能需求描述 |
| 25 | - 业务规则和约束 |
| 26 | - 数据概念(业务实体和关系) |
| 27 | - **相关能力识别**(强制表格:已有能力、能力范围、与本需求匹配度、能力差距、建议方向;复用决策留给 HLD) |
| 28 | - 非功能需求(性能、安全、**兼容性要求**等目标) |
| 29 | - **可量化的成功指标**(含数据来源/采集方式) |
| 30 | - 验收标准 |
| 31 | |
| 32 | ### PRD 不应该包含(How - 属于 HLD) |
| 33 | |
| 34 | - 具体的 API 路径设计(如 `POST /api/v1/users`) |
| 35 | - 数据库表结构和字段定义 |
| 36 | - 技术架构图和组件设计 |
| 37 | - 具体的技术选型决定(如最终决定用 Redis 还是 Memcached) |
| 38 | - 注:PRD 可包含方案建议和分析,但最终选型决定属于 HLD |
| 39 | - 代码实现细节 |
| 40 | - 部署方案 |
| 41 | |
| 42 | ### 边界示例 |
| 43 | |
| 44 | **正确(PRD)**: |
| 45 | ```markdown |
| 46 | | 实体 | 说明 | 关键属性 | |
| 47 | |------|------|----------| |
| 48 | | 订单 | 用户的购买记录 | 订单号、金额、状态、下单时间 | |
| 49 | ``` |
| 50 | |
| 51 | **错误(越界到 HLD)**: |
| 52 | ```markdown |
| 53 | | 字段 | 类型 | 约束 | |
| 54 | |------|------|------| |
| 55 | | id | UUID | PRIMARY KEY | |
| 56 | | created_at | TIMESTAMP | NOT NULL | |
| 57 | ``` |
| 58 | |
| 59 | **正确(PRD)**: |
| 60 | ```markdown |
| 61 | ### 创建订单能力 |
| 62 | |
| 63 | | 属性 | 说明 | |
| 64 | |------|------| |
| 65 | | 能力描述 | 根据购物车创建订单 | |
| 66 | | 调用方 | 前端购物车页面 | |
| 67 | ``` |
| 68 | |
| 69 | **错误(越界到 HLD)**: |
| 70 | ```markdown |
| 71 | ### POST /api/v1/orders |
| 72 | |
| 73 | 请求体: |
| 74 | { "cart_id": "string", "address_id": "string" } |
| 75 | ``` |
| 76 | |
| 77 | ## 支持的 PRD 类型 |
| 78 | |
| 79 | 1. **新功能(有 UI)** - 涉及用户界面的新功能 |
| 80 | 2. **新功能(无 UI / 后端)** - 后端服务、API、后台任务 |
| 81 | 3. **第三方集成** - 接入外部服务 |
| 82 | 4. **功能重构** - 不改变外部功能的内部重构 |
| 83 | 5. **性能/安全优化** - 非功能性改进 |
| 84 | |
| 85 | ## Traceability Metadata(强制) |
| 86 | |
| 87 | 产出的 PRD 必须内嵌 traceability metadata block,并遵循以下参考: |
| 88 | |
| 89 | - `../../references/traceability-schema/traceability-schema-v1.md` |
| 90 | - `../../references/traceability-schema/prd-profile-v1.example.yaml` |
| 91 | - `../../references/traceability-schema/trace-lint-contract-v1.md` |
| 92 | |
| 93 | 当前 rollout 已启用 `prd-profile-v1`、`test-strategy-profile-v1`、`test-spec-profile-v1`;在 PRD 阶段 writer 至少要做到: |
| 94 | |
| 95 | - `artifact.type` 固定为 `PRD` |
| 96 | - 产出稳定的 `REQ-*`,且每条 requirement 都包含: |
| 97 | - `class` |
| 98 | - `title` |
| 99 | - `statement` |
| 100 | - `priority` |
| 101 | - `status` |
| 102 | - `scope` |
| 103 | - `acceptance_criteria` |
| 104 | - 将 BRD / User Journey 等上游输入写入 `artifact.source_documents` |
| 105 | - 对来自上游文档的关键需求,尽量用 `relations[].type=derived_from` 建立追溯关系 |
| 106 | |
| 107 | ## 工作流程 |
| 108 | |
| 109 | ### 阶段零:上下文收集(强制) |
| 110 | |
| 111 | 在开始任何 PRD 写作之前,**必须**先了解项目上下文。**禁止跳过此阶段,禁止在未读取相关文档的情况下猜测项目现状。** |
| 112 | |
| 113 | #### 0.1 扫描项目文档(先扫描,不读取) |
| 114 | |
| 115 | 使用 Glob 工具**广泛扫描**以下类型的文档,**只收集文件路径,暂不读取内容**: |
| 116 | |
| 117 | | 文档类型 | 搜索模式 | 目的 | |
| 118 | |---------|---------|------| |
| 119 | | 需求文档 | `**/*PRD*`, `**/*需求*`, `**/*requirement*`, `**/*feature*` | 了解现有需求风格 | |
| 120 | | 设计文档 | `**/*HLD*`, `**/*设计*`, `**/*design*`, `**/*架构*` | 了解技术现状 | |
| 121 | | API 文档 | `**/*openapi*`, `**/*swagger*`, `**/api/**/*.yaml`, `**/spec/**` | 了解已有接口 | |
| 122 | | 业务文档 | `**/*业务*`, `**/*流程*`, `**/*规则*`, `**/docs/**/*.md` | 了解业务现状 | |
| 123 | | User Journey | `**/*journey*`, `**/*use-case*`, `**/*用户旅程*`, `**/*用例*` | 了解已对齐的用户流程 | |
| 124 | | 项目配置 | `package.json`, `pyproject.toml`, `go.mod`, `README.md` | 了解技术栈 | |
| 125 | |
| 126 | **排除目录**:扫描时必须排除以下目录,避免噪音: |
| 127 | - `node_modules/`, `.git/`, `dist/`, `build/`, `.next/` |
| 128 | - `vendor/`, `target/`, `__pycache__/`, `.venv/`, `venv/` |
| 129 | - 其他明显的依赖/构建产物目录 |
| 130 | |
| 131 | #### 0.2 用户确认参考文档(必须执行) |
| 132 | |
| 133 | 扫描完成后,**先进行初筛,再展示给用户确认**: |
| 134 | |
| 135 | **初筛规则**(Agent 自行执行,不展示低置信度结果): |
| 136 | - **高置信度**(展示给用户):路径包含 `docs/`, `spec/`, `design/`, `prd/`, `hld/` 等关键词,或文件名明确匹配 |
| 137 | - **低置信度**(默认不展示):路径不明确、位于测试目录、或文件名过于通用 |
| 138 | - 如果高置信度结果不足,可适当放宽条件 |
| 139 | |
| 140 | **使用 AskUserQuestion** 让用户确认: |
| 141 | |
| 142 | ``` |
| 143 | 我扫描到以下可能相关的文档,请确认哪些需要我仔细阅读: |
| 144 | |
| 145 | **需求/设计文档**: |
| 146 | - [ ] path/to/prd-xxx.md |
| 147 | - [ ] path/to/hld-xxx.md |
| 148 | - ... |
| 149 | |
| 150 | **API/接口文档**: |
| 151 | - [ ] path/to/openapi.yaml |
| 152 | - ... |
| 153 | |
| 154 | **业务文档**: |
| 155 | - [ ] path/to/xxx.md |
| 156 | - ... |
| 157 | |
| 158 | **问题**: |
| 159 | 1. 以上文档中,哪些是当前有效的、需要我参考的?(请告诉我序号或路径) |
| 160 | 2. 是否有我没扫描到但需要参考的重要文档?(如有请提供路径) |
| 161 | 3. 本需求是否涉及其他系统/仓库?(如有请提供系统名称和相关文档位置) |
| 162 | ``` |
| 163 | |
| 164 | **关于相关系统的追问**(如用户回答涉及其他系统): |
| 165 | - 其他系统的 API 文档/OpenAPI 规范在哪里? |
| 166 | - 是否有跨系统的数据流/交互文档? |
| 167 | - 哪些团队/人员负责这些系统?(用于后续澄清) |
| 168 | |
| 169 | **注意**: |
| 170 | - 只展示初筛后的高置信度结果,避免信息过载 |
| 171 | - 这一步是为了避免读入过时/无关的文档,节省上下文 |
| 172 | - 用户可能会排除一些过期文档,也可能补充遗漏的文档 |
| 173 | - **只有用户确认后,才进入 0.3 阶段读取文档** |
| 174 | |
| 175 | #### 0.3 读取用户确认的文档 |
| 176 | |
| 177 | 根据用户在 0.2 中确认的文档列表: |
| 178 | - **仔细读取**每个被确认的文档 |
| 179 | - 记录从每个文档中学到的关键信息 |
| 180 | - 如果用户补充了新文档,也要读取 |
| 181 | |
| 182 | #### 0.4 识别业务现状与相关能力 |
| 183 | |
| 184 | - 基于已读取的文档,识别与本需求相关的现有功能 |
| 185 | - **必须输出「相关能力识别」表格**,且每行必须注明**来源**(从哪个文档/代码中识别到的) |
| 186 | - 注:复用决策属于 HLD,PRD 只做识别和建议 |
| 187 | - 如果搜索后确认无相关能力,必须记录**排查范围**(搜索了哪些路径/关键词) |
| 188 | |
| 189 | #### 0.5 输出「上下文收集报告」(强制) |
| 190 | |
| 191 | 在进入阶段一之前,必须先输出以下报告: |
| 192 | |
| 193 | ```markdown |
| 194 | ## 上下文收集报告 |
| 195 | |
| 196 | ### 已读取的文档(用户确认) |
| 197 | | 文档路径 | 文档类型 | 关键信息摘要 | |
| 198 | |---------|---------|-------------| |
| 199 | | [路径] | PRD/HLD/API/业务 | [从中学到的关键信息] | |
| 200 | |
| 201 | ### 识别的项目约定 |
| 202 | - 技术栈:[从 package.json 等识别] |
| 203 | - 文档风格:[从已有 PRD/HLD 识别] |
| 204 | - 命名规范:[如有] |
| 205 | |
| 206 | ### 相关能力识别 |
| 207 | | 已有能力 | 能力范围 | 与本需求匹配度 | 能力差距 | 建议方向 | 来源 | |
| 208 | |----------|---------|--------------|---------|---------|------| |
| 209 | | [能力] | [范围] | [匹配度] | [差距] | [建议] | [文档/代码路径] | |
| 210 | |
| 211 | ### 未找到信息的领域(需用户补充) |
| 212 | - [列出仍不确定的信息] |
| 213 | ``` |
| 214 | |
| 215 | **上下文收集报告无需用户再 |