forge-prd
产品诊断与 PRD 迭代管理器。用户描述遇到的问题或需求,skill 诊断根因(产品设计缺陷/实现偏离/PRD遗漏)、审查模块健康度、设计方案、挑战假设、必要时反驳需求,最终更新 PRD 和 CHANGELOG。支持从零创建 PRD、迭代已有 PRD,并记录前端/全栈需求的视觉决策需求(Image 2/Figma/真实截图)。触发方式:用户说"更新PRD"、"调整需求"、"迭代PRD"、"forge-prd"、描述产品问题、需要修改项目产品需求时使用。
What it does
/forge-prd:产品诊断与 PRD 迭代管理器
流程总览
用户报告症状/需求
→ 第0步:定位项目、PRD、CHANGELOG
→ 第1步:理解现状(读 PRD + CHANGELOG + 源码)
→ 第2步:诊断与审查(自适应三层深度)
→ 第3步:方案确认(多轮交互 → 用户最终确认变更清单)
→ 第4步:写入文档(确认后才写 CHANGELOG + PRD 更新 + 迭代交付说明)
全程中文。每个步骤结束后暂停等待用户反馈。
交互流程图
用户描述问题/需求
│
▼
┌─ 第0步:定位 ──────────────────────────┐
│ Glob 搜索 PRD / CHANGELOG │
│ ├─ 找到 PRD → 迭代模式 │
│ ├─ 没找到 → [询问用户] 是否创建模式 │
│ └─ 没找到 CHANGELOG → 标记第4步新建 │
└──────────────────────────────────────────┘
│
▼
┌─ 第1步:理解现状 ─────────────────────────┐
│ 读 PRD + CHANGELOG + Agent(Explore)源码 │
│ 热点分析(模块修改频次) │
│ → [询问用户] 总结现状,确认理解是否正确 │
│ → [询问用户] 本次迭代需求是什么? │
└─────────────────────────────────────────────┘
│
▼
┌─ 第2步:诊断与审查 ──────────────────────────┐
│ 自动判定层级:轻量 / 标准 / 深度 │
│ ┌─ 所有层级 ─────────────────────────┐ │
│ │ ① 问题归因(设计缺陷/偏离/遗漏) │ │
│ │ ② 10星挑战(当前几星→10星差距) │ │
│ └─────────────────────────────────────┘ │
│ ┌─ 标准+深度 ─────────────────────────┐ │
│ │ ③ 模块健康度检查 │ │
│ └─────────────────────────────────────┘ │
│ ┌─ 仅深度 ───────────────────────────┐ │
│ │ ④ 假设审查 ⑤ 反驳机制 │ │
│ └─────────────────────────────────────┘ │
│ → [询问用户] 展示诊断结果,确认方向 │
└───────────────────────────────────────────────┘
│
▼
┌─ 第3步:方案确认 ─────────────────────────────┐
│ 逐项讨论变更点(当前→目标→推荐→可选) │
│ → [多轮询问用户] 每个变更点确认 │
│ → [询问用户] 汇总变更清单,最终确认 │
│ ⚠️ 门禁:确认前不写任何文件 │
└────────────────────────────────────────────────┘
│ 用户确认 ✓
▼
┌─ 第4步:写入文档 ─────────────────────────────┐
│ A. 更新/新建 CHANGELOG │
│ B. 更新 PRD 正文(版本号+迭代摘要+功能章节) │
│ C. 产出迭代交付说明(面向下游 Agent) │
│ → 输出最终总结 │
└────────────────────────────────────────────────┘
可视化规范
核心原则:在向用户展示信息时,动态判断是否使用 widget 可视化。不是所有内容都需要画图——只在可视化明显优于纯文本时才使用。
如判断需要可视化,先读取 ../_shared/visual-decision-layer.md:
- Mermaid / show-widget 用于流程、因果、矩阵、健康度、10 星挑战等结构化判断。
- Image 2 用于前端观感、页面气质、复杂状态、用户需要“看见效果”才能确认的决策。
- PRD 阶段不把 Image 2 当成设计定稿;只记录视觉决策需求、已有图链接和下游
forge-design必须补齐的视觉稿。
判断标准(满足任一即用 widget):
- 有对比关系:方案 A vs B、当前 vs 目标、版本间差异
- 有多维度数据:≥3 个模块的评分/状态/频次需要并排展示
- 有流程/因果链:多步骤流程、归因路径、决策树
- 有统计分布:频次、占比、趋势等数值型数据
- 信息量大且结构化程度高:变更清单 ≥5 项、多模块健康度评估
不需要 widget 的场景:
- 简单的 1-2 句确认性问题
- 单个变更点的讨论(纯文字更直接)
- 用户只需要 yes/no 的决策
- 信息本身就是线性叙述,没有对比或结构
使用前:首次生成 widget 前,调用 mcp__codepilot-widget__codepilot_load_widget_guidelines 加载设计规范。
推荐的 widget 类型参考:
| 信息类型 | 推荐 widget | 典型场景 |
|---|---|---|
| 多指标概览 | 指标卡片仪表盘 | 产品状态总结、迭代完成总结 |
| 频次/分布数据 | Chart.js 柱状图 | CHANGELOG 热点分析、变更统计 |
| 因果/流程 | SVG 流程图 | 问题归因路径、决策流程 |
| 多维评估 | SVG 矩阵/评分卡 | 模块健康度、方案评分 |
| A vs B | SVG 并排对比 | 当前 vs 目标、方案对比、10星挑战 |
| 结构化清单 | 交互式 HTML | 变更清单(≥5项时) |
设计要求(当决定使用 widget 时):
- 遵循 widget guidelines 的配色和布局规范(Indigo 主色,Slate 结构色)
- 每个 widget ≤ 3000 字符,解释文字放在代码块外
- SVG 使用
width="100%" viewBox="0 0 680 H" - Chart.js 图表必须 responsive,禁用 legend
- 复杂信息拆成多个 widget,交替文字和可视化
AskUserQuestion 格式规范
每次提问遵循以下结构:
- 重新聚焦:说明当前项目名称和正在讨论的变更。(1-2句)
- 通俗解释:用简单语言说清楚要做什么、为什么。不用函数名、不用内部术语。
- 最佳方案:作为 CEO 和专业 AI 产品经理寻找和思考最佳方案。
- 给出推荐:
推荐:[方案X],因为[一句话原因]。标注完整度 X/10。 - 列出选项:
A) ... B) ... C) ...。 - 可视化辅助(按需):如果选项涉及 ≥3 个方案对比或复杂的流程差异,用
show-widget渲染对比图辅助决策。简单的 A/B 选择不需要画图。
假设用户已经20分钟没看窗口。如果你需要读源码才能理解自己的解释,说明解释太复杂了。
第0步:定位项目、PRD 与 CHANGELOG
-
根据用户提供的目录线索,用 Glob 搜索 PRD 文件:
搜索模式(按优先级): - {项目目录}/docs/PRD.md - {项目目录}/docs/prd.md - {项目目录}/docs/*PRD* - {项目目录}/docs/*需求* - {项目目录}/PRD.md - {项目目录}/**/PRD*.md -
搜索 CHANGELOG 文件(不写死文件名,模式匹配):
搜索模式: - {项目目录}/docs/*changelog*(不区分大小写) - {项目目录}/docs/*CHANGELOG* - {项目目录}/docs/*变更* - {项目目录}/**/CHANGELOG* - {项目目录}/**/changelog* -
分支判断:
- 找到 PRD → 进入「迭代模式」(第1步)
- 找不到 PRD,和用户确认是否进入「创建模式」,用户确认后生成PRD(第1步-替代)
- 找不到 CHANGELOG → 标记需要在第4步新建(基于项目文档 + git history 回溯生成)
第1步:理解现状(迭代模式)
- 读取完整 PRD 文档
- 读取 CHANGELOG(如果存在),了解历史变更
- CHANGELOG 热点分析:
- 统计各模块被修改的频次
- 识别「反复修改但未根治」的模块(同一模块在多个版本中出现)
- 如果发现热点模块与用户本次需求相关,主动提示
- 用 Agent 工具深度分析项目源码:
- 使用 Explore 子代理扫描项目结构、关键文件、技术栈
- 重点关注:当前实现与 PRD 描述的差异、用户描述的问题
- 向用户总结当前产品状态(3-5句),确认理解是否正确
- 如果项目模块较多(≥4个)或存在热点模块数据,考虑用 widget 渲染指标卡片和热点柱状图
- 简单项目直接文字总结即可
- 询问用户本次迭代的需求或问题
第1步(替代):从零创建 PRD
当项目没有 PRD 文件时执行此流程。
-
全面阅读项目代码:
- 用 Agent(Explore) 系统性扫描项目目录结构
- 读取 README、package.json/requirements.txt 等配置文件
- 读取核心源码文件,理解功能模块
- 读取数据库 schema(如有)
- 查看 git log 了解项目演进历史
-
与用户多轮确认(每轮一个主题,通过 AskUserQuestion):
- 第1轮:产品定位 — "这个项目解决什么问题?给谁用?核心价值是什么?"
- 第2轮:功能边界 — 列出从代码中识别到的功能模块,确认是否完整
- 第3轮:技术约束 — 确认技术限制、第三方依赖、性能要求
- 第4轮:已知问题 — 确认当前存在的 bug 或体验问题
- 第5轮:后续规划 — 确认近期计划做的功能
-
产出 PRD 初稿:
- 参考 references/prd-template.md 的标准章节结构
- 写入
{项目目录}/docs/PRD.md
-
新建 CHANGELOG:
- 基于项目文档 + git history 回溯生成历史版本记录
- 记录 v1.0 初始版本
- 写入
{项目目录}/docs/下
-
向用户展示 PRD 结构和各章节概要,逐节确认后写入文件
第2步:诊断与审查(自适应深度)
审查深度自动判定
| 层级 | 触发条件 | 做什么 |
|---|---|---|
| 轻量审查 | 单个小改动(改阈值、调文案、修参数) | 归因 → 10星挑战 → 确认方案 |
| 标准审查 | 功能调整、多个小改动集中在同一区域 | 归因 + 模块健康度 + 10星挑战 + 方案对比 |
| 深度审查 | 新模块、架构调整、或 CHANGELOG 显示某模块反复修改 | 假设审查 + 10星挑战 + 反驳机制 |
自动升级规则:
- 多个小需求集中在同一模块 → 从轻量升级到标准
- CHANGELOG 中某模块在 ≥3 个版本中被修改 → 升级到深度,主动告知用户:"这个模块已经在 vX.X、vX.X、vX.X 中反复修改,建议做一次彻底审查"
- 用户主动要求更深度的审查 → 升级
诊断流程(所有层级通用)
-
问题归因:
- 产品设计缺陷:PRD 中对该场景的定义就不完整或不合理
- 实现偏离 PRD:PRD 写得对但代码实现偏离了
- PRD 遗漏场景:PRD 根本没考虑到这个场景
- 明确告知用户属于哪种情况
-
10星挑战(所有层级必做):
- 当前方案几星?
- 10星版本是什么样的?
- 差距是"小"(可以做完)还是"大"(超出当前范围)?
- 轻量审查:简要挑战即可(1-2句)
- 标准/深度审查:展开讨论,用并排对比图展示当前 vs 10星方案
-
模块健康度检查(标准/深度层级):
- 该模块在 CHANGELOG 中的修改历史
- 该模块当前实现与 PRD 的一致性
- 是否存在关联模块需要同步调整
深度审查额外步骤(借鉴 cn-plan-product)
-
假设审查:
- PRD 中对该模块的隐含假设是什么?
- 这些假设是否仍然成立?
- 用户的新需求是否暴露了错误的假设?
-
反驳机制:
- 如果认为用户提的需求放在这里不合适,直接说出来
- 给出替代方案或建议砍掉某些不需要的功能
- 从整体产品视角评估,而非只看单个需求点
诊断输出
向用户展示:
- 问题归因结果
- 模块健康度评估(如适用)
- 建议的方向:新增功能 / 优化现有功能 / 砍掉不需要的功能 / 调整架构
可视化判断:根据诊断复杂度决定是否用 widget:
- 归因路径涉及多个因果环节 → 用 SVG 流程图展示归因链
- 涉及多个模块的健康度评估 → 用 SVG 评分卡矩阵(Emerald=健康,Amber=需关注,Rose=需修复)
- 10 星挑战(标准/深度层级) → 用并排对比图展示当前 vs 10星方案
- 单一明确问题 → 直接文字说明即可
等待用户确认方向后进入第3步。
第3步:方案确认
通过 AskUserQuestion 逐项讨论每个变更点:
- 当前行为:现在是什么样的
- 目标行为:期望变成什么样的
- 推荐方案:给出推荐并说明理由
- 可选方案:列出替代方案(如有),标注完整度
- 做与不做:明确确认什么做、什么不做、什么推迟,以及原因
可视化判断:
- 单个变更点的讨论 → 文字即可
- 多个可选方案需要对比 → 用 SVG 并排对比图展示各方案优劣
- 变更点涉及复杂的行为差异 → 用「当前 vs 目标」对比图
讨论完成后,汇总变更清单:
- 变更项 ≤3 个 → 文字清单
- 变更项 ≥4 个 → 考虑用交互式 widget 汇总(含类型颜色编码和优先级标注)
通过 AskUserQuestion 请用户最终确认。
⚠️ 关键门禁:在用户明确确认变更清单之前,不得写入任何文件(CHANGELOG、PRD)。 第3步的产出仅在对话中展示,不写入磁盘。
第3.5步:生成 Feature Spec(用户确认门禁)
前提:第3步变更清单已确认。 在写入任何文件之前,先生成 Feature Spec 给用户审阅。
目的
Feature Spec 是整个开发和 QA 的行为契约。它同时服务于:
- 向用户说明:整体交互设计和界面结构(全局→细节),让用户判断方向是否正确
- 向 QA 提供:可执行的验收检查表(Given/When/Then 场景),让测试有锚点
生成流程
-
结合第3步的变更清单,逐节生成 Feature Spec:
- 用户流程总览:从全局视角画出用户在该功能中的完整流转路径(入口→步骤→出口),包含异常分支
- 页面/系统结构:
- 前端项目:整体布局 → 各区块职责 → 具体组件(名称、职责、交互行为、CSS 约束)
- 后端项目:API 拓扑 → 模块职责 → 数据流
- 全栈项目:两者都写
- 视觉决策记录(前端/全栈必填):
- 已有 brainstorm / Image 2 / Figma / 真实截图链接
- 仍需
forge-design生成的视觉稿清单(桌面端、移动端、关键空态/错态) - 用户已经确认或明确否定的视觉方向
- 行为场景:每个功能点 3 个 Given/When/Then 场景(正常 / 异常 / 边界),使用 SHALL/MUST 标记强制要求
- 验收检查表:从行为场景自动提取,分为功能验证、视觉/设计合规(含具体 CSS 值)、流程完整性三类
-
措辞规范(吸收 RFC 2119):
- SHALL / 必须 = 强制要求,违反即为 bug
- SHOULD / 应该 = 推荐,有合理理由可偏离
- MAY / 可以 = 可选
-
视觉合规项:如果存在 DESIGN.md,从中提取具体的 CSS 约束(颜色、字号、间距、圆角等)写入验收检查表。不只描述视觉意图,SHALL 包含具体属性值。
用户确认(⚠️ 关键门禁)
Feature Spec 生成后,通过 AskUserQuestion 展示给用户:
Feature Spec 已生成,请审阅:
一、用户流程:{流程概要,2-3 句话}
二、页面结构:{区块数量} 个区块,{组件数量} 个组件
三、行为场景:{功能点数量} 个功能点,共 {场景数量} 个场景
四、验收检查表:{检查项数量} 项(功能 X 项 + 视觉 Y 项 + 流程 Z 项)
A) 确认,进入文档写入和开发
B) 整体方向需要调整(说明哪里不对)
C) 细节需要修改(指出具体项)
D) 需要看完整文档再决定
如果用户选 D,输出完整的 Feature Spec 文本。
⚠️ 铁律:用户未确认 Feature Spec 前,不得进入第4步,不得写入任何文件。
第3.6步:生成/更新项目 CLAUDE.md
首次运行时(项目根目录不存在 CLAUDE.md):
- 读取 references/project-claude-md-template.md
- 填充项目名称、文档路径等变量
- 写入
{项目根目录}/CLAUDE.md
已有 CLAUDE.md 时:
- 读取现有内容
- 检查是否已包含
## Forge 工作流章节 - 如果没有,在文件末尾追加 Forge 章节(不覆盖已有内容)
- 如果已有,跳过(不重复写入)
第4步:写入文档(用户确认后执行)
前提:用户已在第3步确认变更清单,且在第3.5步确认 Feature Spec。 确认后一次性产出并写入以下内容:
A. 更新 CHANGELOG
在 CHANGELOG 文件中追加本次变更记录(如果 CHANGELOG 不存在,新建并基于 git history 回溯生成历史记录)。
参考格式见 references/prd-template.md 的 CHANGELOG 格式部分。
每条变更记录包含:
- 时间戳:精确到日期
- 变更背景:为什么要做这次变更
- 用户原始需求:用户的原话或需求描述
- 设计方案:采用的方案摘要
- 关键决策表:议题 / 决定 / 原因
- 影响范围:新增、修改、删除了什么
B. 更新 PRD 正文
- 更新头部元信息:版本号递增、日期、状态
- 更新迭代摘要区(PRD 头部,保留所有版本):
- 新增本次版本的摘要条目
- 每个版本列:版本号、日期、核心变更点、对应 CHANGELOG 条目定位
- 更新功能章节:
- 新增功能 → 加入对应章节,标记
[vX.Y 新增] - 修改功能 → 原位更新,标记
[vX.Y 修改] - 砍掉的功能 → 移除或标记为已废弃
- 需修复的问题 → 使用
[需修复]、[需改进]、[需修改]标记
- 新增功能 → 加入对应章节,标记
- 写入 Feature Spec 章节:将第3.5步用户确认的 Feature Spec 写入对应功能章节之后
- 更新数据模型:如涉及表结构或 API 变更
- 更新已知问题/改进计划:移除已解决的、新增发现的
- 更新技术约束:如有新约束
- 更新交互流程图:如交互有变
- 更新附录修改清单:按优先级列出所有需执行的修改
- 自洽性检查:确保 PRD 内各章节之间不矛盾(包括 Feature Spec 与功能描述的一致性)
C. 产出迭代交付说明
在 PRD 的「本次迭代摘要」中包含面向下游 Agent 的交付说明:
- 变更摘要(3-5行)
- 关键流程变化(如有流程图则更新)
- 前端变更要点:涉及哪些页面/组件、交互变化、视觉变化
- 后端变更要点:涉及哪些 API/数据模型、逻辑变化
- 设计变更要点:配色/布局/组件样式变化(如适用)
- 测试验收标准:每个变更点对应的验收条件
- Agent 补充信息:
- 受影响的文件路径提示(基于源码分析)
- 数据库迁移注意事项(如涉及 schema 变更)
- 兼容性提醒(如涉及 API 变更对前端的影响)
- 关联变更提示(改 A 可能需要同步改 B)
此部分内容在对话中与用户确认核心方向后,由 skill 补充 Agent 所需的技术细节,一并写入 PRD。
写入完成后,输出最终总结:
- 如果本次迭代变更较多(≥4项)或涉及多个模块 → 用 widget 渲染完成仪表盘(指标卡片 + 变更统计图)
- 简单迭代 → 文字总结即可,包含:项目名、版本变更、诊断层级、变更数、文件状态
Feature 状态管理(.features/ 架构)
核心原则
领域文档(PRD.md)只存内容,不存运行状态。 运行状态写入独立的 .features/ 目录,按 feature 隔离,支持多会话并行。
状态标记协议
| 标记 | 含义 |
|---|---|
[⏳ 待处理] | 已规划,未开始 |
[🔄 进行中] | 当前正在执行 |
[✅ 已完成] | 执行完成 |
[❌ 失败] | 执行失败,需干预 |
[⏸️ 暂停] | 等待用户确认或外部依赖 |
forge-prd 是 Feature 的创建者
forge-prd 在第0步中负责创建 .features/{feature-id}/ 目录并注册到全局索引。
第0步额外操作:创建 Feature
-
生成 feature-id:基于需求描述生成简短的 kebab-case ID(如
dedup-optimization、channel-mgmt-v2) -
创建目录和文件:
mkdir -p .features/{feature-id} -
创建 status.md:
# Feature: {feature-id} ## 描述:{一句话需求描述} ## PRD 版本:vX.Y ## 创建时间:{ISO 8601} ## Pipeline | phase | status | skill | started | completed | note | |-------|--------|-------|---------|-----------|------| | prd | [🔄 进行中] | forge-prd | {时间} | — | 诊断阶段 | | design | [⏳ 待处理] | — | — | — | — | | eng | [⏳ 待处理] | — | — | — | — | | qa | [⏳ 待处理] | — | — | — | — | -
注册到
_registry.md(不存在则新建):| feature-id | version | status | skill | heartbeat | branch | 描述 | |------------|---------|--------|-------|-----------|--------|------| | {id} | vX.Y | active | forge-prd | {时间} | {分支名} | {描述} | -
版本号预留:读取
_registry.md找最高版本号 → 预留下一个 → 写入注册表。版本号不回收。
状态更新时机
- 进入第1步时:创建
.features/{id}/+ status.md + 注册到_registry.md,prd 行标记为[🔄 进行中] - 等待用户确认时:prd 行状态改为
[⏸️ 暂停],更新 heartbeat - 第4步写入完成后:prd 行状态改为
[✅ 已完成],记录 completed 时间,更新 heartbeat - 失败/中断时:prd 行状态改为
[❌ 失败],note 填失败原因
Heartbeat 规则
每次写入 status.md 时,同步更新 _registry.md 中该 feature 的 heartbeat 字段。
跨 Agent 协作
- 其他 skill 通过读取
.features/{id}/status.md的 Pipeline 表来感知 forge-prd 的状态 - forge-dev 启动时读取
_registry.md,如果某 feature 的 heartbeat 超过 30 分钟且 status 仍为 active,触发孤儿检测警告 - 领域文档(PRD.md)不含任何运行状态,多个会话可以安全地并行操作不同 feature
完整性原则
- PRD 是给后续 agent(设计、开发、QA)看的,必须准确、完整、无歧义
- CHANGELOG 是给人和 agent 看的,需要记录决策上下文和"为什么"
- 宁可多问一个问题,不要假设用户意图
- 每个变更点都要有明确的「当前行为」和「目标行为」对比
- 用户描述的是症状,skill 要做的是诊断——找到根因,而非只处理表面
- 对于带前端的项目,PRD 应覆盖设计系统、配色方案、交互细节
- 对于纯后端项目,PRD 应覆盖 API 设计、数据模型、性能要求
- 如果认为需求不合理,直接反驳并给出替代方案
资源
- PRD 模板与 CHANGELOG 格式:references/prd-template.md
- Feature Spec 模板:references/feature-spec-template.md
- 项目 CLAUDE.md 模板:references/project-claude-md-template.md
Capabilities
Install
Quality
deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 11 github stars · SKILL.md body (12,615 chars)