关于 escrever-prd
用于创建和修改功能 PRD 的 skill,帮助产品团队记录行为与业务规则。它将产品意图与技术设计分开,并保留稳定 ID 和生命周期状态。
主要功能
- 01起草完整的功能 PRD
- 02编辑尚未完成的 PRD
- 03将多个功能拆分为 PRD
- 04将推断内容标记为假设
- 05跟踪依赖关系与生命周期状态
- 06保留用户故事和里程碑的稳定 ID
适用场景
- 01记录新功能的行为规则
- 02完善 PRD 草稿
- 03将宽泛需求拆分为多个功能
- 04记录 PRD 之间的依赖
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ fabricioveronez/ harness-publico --skill escrever-prd安装后在 Claude Code 中输入/escrever-prd确认已加载。
附带文件evals/evals.jsonreferences/template-prd.md
详细介绍
编写 PRD
创建和编辑功能 PRD。PRD 是一个产品思考单元:一组可以一起说明其决策的行为和业务规则。它是面向人的文档,是产品意图的真实来源。它全面描述功能的行为和业务规则;AI 会按需查阅其中的原因,并根据 SPEC(由 sdd-especificar 从 PRD 派生)进行实现。实现所需的技术背景来自 TRD(实施时一并加载)。必要时,参考字段用于关联 PRD 之间以及 PRD 与外部资源。
此 skill 既涵盖创建 PRD,也涵盖编辑尚未完成的现有 PRD——status: concluido 的 PRD 不可变,不应通过此 skill 编辑。
PRD 在流程中的作用
PRD 承担两个作用:
- 功能规格——独立描述行为和业务规则的文档,用于实现功能
- 状态控制——通过
status字段和depends_on关系图,作为功能生命周期的真实来源
由此产生的原则:
concluido状态下不可变——状态达到concluido后,PRD 会冻结并成为历史记录。之后如需变更行为,应新建 PRD,而不是编辑已完成的 PRD- 通过
depends_on渐进式披露——显式声明 PRD 之间的依赖关系;只有当实现上下文需要时,Agent 才会读取依赖的 PRD - 职责分离——PRD 涵盖行为和业务规则;TRD 和 ADR 涵盖技术限制、技术栈和架构决策。PRD 引用技术文档,但不指导、限定范围或跟踪技术实现——PRD 的形式由产品决定,而非由执行决定
- 稳定 ID——US 和 Milestone 会分配 ID(US01、Milestone 1……),分配后不得更改,因为后续文档(规划、任务)会通过这些 ID 进行引用
输入
用户提供想要构建内容的描述,其中可能包括:
- 问题或机会描述
- 解决方案构想
- 技术背景
- 已知限制
$ARGUMENTS — 如果提供,将其用作功能的初始描述。
执行流程
1. 识别模式
首先,识别请求属于创建还是编辑:
- 创建——用户描述新功能,或未引用任何现有 PRD
- 编辑——用户引用特定 PRD(按编号、名称或文件),或要求调整、完善现有内容
编辑模式下:
- 在
./docs/prds/中读取所引用的 PRD - 检查
status——如果为concluido,则停止并告知用户:已完成的 PRD 不可变,行为变更应新建 PRD - 对于状态为
rascunho、pronto或em-progresso的 PRD,继续编辑,并保留已分配的prd_number、US ID 和 Milestone ID
2. 范围与阻塞性缺口分析
生成前,快速进行两项检查:
2a. 检测多个功能
判断标准不是是否彼此独立,而是是否能自成一体。PRD 涵盖一个功能的条件是:各部分都能自成一体,并为用户交付可观察到的成果。如果输入中的不同部分分别满足这一标准,那么它们就是不同的功能——即使彼此依赖。依赖关系很正常,应记录在 depends_on 中(一个串联的功能仍然是独立功能);它不是阻止拆分的理由。
**合理性检查:**如果某个功能需要许多产品里程碑(实际上超过约 6 个),它很可能包含多个功能——请重新评估拆分方式。里程碑少并不意味着必须拆分:小型功能可以只有 1 或 2 个合理的里程碑。
如果检测到多个功能,在生成前提出具体的拆分方案:
Detectei 3 features no input. Sugiro criar:
PRD-A: [nome da feature A]
PRD-B: [nome da feature B]
PRD-C: [nome da feature C]
Começamos pelo PRD-A?
等待确认或调整拆分方案。在内部记录待处理 PRD 列表。
2b. 阻塞性缺口
检查是否存在某些信息缺失,导致草稿无法使用——即无法合理推断的信息。真正的阻塞性缺口示例:无法确定功能所属的领域,也无法确定其所属的系统。
如果存在阻塞性缺口:提出一个封闭式问题(尽可能提供选项),不要进行访谈。其他任何缺口——均进行推断并在草稿中标注。
如果不存在:立即生成。
3. 生成带有假设的草稿
立即生成完整 PRD,不等待更多信息。未提供的内容应进行推断并内联标注。
假设格式:
- Token expirado → redirecionar para login *(premissa — confirme ou corrija)*
对于任何推断出的内容,都使用 *(假设 — 请确认或更正)*,包括规则、边缘情况、验收标准、负向范围和里程碑。用户审阅的是具体文本,而不是回答抽象问题。
生成:
- 阅读
references/template-prd.md中的模板 - 填写所有章节,生成完整 PRD
- 推断未提供的规则和边缘情况,并将每一项标记为假设
- 将草稿交给用户进行针对性审阅 生成规则:
- 使用清晰、客观的语言,避免不必要的行话
- 填写所有章节——将推断内容标记为前提;只有用户明确留空的内容才使用「待定」
- PRD 应在行为和业务规则方面自包含,而非技术背景。技术栈、架构和规范以实施时一并加载的 TRD 为准;相关时,「背景」章节只需提供指向 TRD 的引用,不要重复技术栈
- 每项功能都必须是带有连续 ID 的用户故事(US)(US01、US02……)
- 每个 US 必须包含:采用「作为[角色],我希望[操作],以便[收益]」格式编写的用户故事、Rules(业务规则和预期行为)以及 Edge cases(异常情况及预期行为)
- 每个 US 至少包含一条 Rule 和一个 Edge case;如果未提供,则推断最可能的情况并标记为前提
- Edge cases 遵循以下格式:「[异常情况] → [预期行为]」
- 验收标准(§5a)涵盖该功能特有的功能性和非功能性标准——只有在有业务理由时,才纳入响应时间、可用性和容量(记录阈值及其原因)。项目级全局 NFR(整体 p95、正常运行时间、加密)归入 TRD,不归入 PRD。成功指标(基线→目标)归入 §5b
- 不接受「应当运行良好」或「性能良好」等模糊标准——应改写为客观可验证的标准;如果数据不足,则标记为前提
- 里程碑是产品节点:由一组连贯的功能组成,为用户带来实际价值——它应当是可以宣布的成果,而不是执行过程中的一个阶段。每个里程碑须明确涵盖哪些 US(按 ID 列出)、说明为何它是一个里程碑(进行自我评估:如果理由牵强,它很可能是伪装成里程碑的任务,或是硬塞在一起的两个里程碑),并提供验收清单(从 §5a 中筛选该里程碑所涵盖 US 的标准,由验收人于实施后逐项勾选)。里程碑没有最低数量;上限约为 6 个是 §2a 的合理性信号。不要在里程碑中详细说明技术任务或执行顺序——拆分方式(切片、任务、顺序)由
sdd-especificar负责 - 仅当规则分支无法通过文字清楚说明时,才纳入业务流程(§4,即旅程/流程图,其中决策点体现规则)。PRD 不包含技术拓扑(组件/服务、数据模型)——这些内容归入 TRD、ADR,或者在属于难以撤销的局部决策时,归入切片的 PLAN
- 「不在范围内」章节为必填项——如果未提供,则推断明显排除的项目并标记为前提
- 「决策记录」记录产品决策和重要的业务前提。架构/技术决策不应纳入其中——应作为 ADR 处理
- 如果输入包含持久性架构决策(数据库选择、身份验证策略、架构模式、基础库),不要将其纳入产品决策:应指出这属于 ADR,并建议通过
escrever-trd的 Decision 模式记录到docs/adrs/。PRD 可在 §8 引用该 ADR - 「参考资料」章节列出背景中提及的文档、问题、相关 PRD、API、设计或外部资源链接
- frontmatter 中的
references字段必须以列表格式包含与「参考资料」章节相同的链接 - US ID(US01、US02……)和里程碑 ID(Milestone 1、2……)保持稳定——分配后不得更改,因为后续产物(规划、任务)会引用这些 ID
- 创建模式下,保存时的初始
status始终为rascunho。编辑模式下,保留 PRD 当前的status——pronto、em-progresso和concluido之间的转换由后续规划和执行技能完成
4. 依赖关系映射
在将 PRD 提交最终审核之前:
- 列出
./docs/prds/中现有的文件(或用户指定路径下的文件) - 对每个现有 PRD,评估当前功能是否依赖其中已定义的内容——依赖是指此功能的实现预设了另一个 PRD 中描述的行为、实体、接口或规则
- 在 frontmatter 中填写
depends_on字段,列出已识别依赖项的prd_number(例如:depends_on: ["001", "003"]) - 在“决策记录”中记录判定每项依赖所采用的标准,避免今后重新推导判断过程
规则:
- 依赖必须真实且具体——不要列出所有“相关”或“属于同一领域”的 PRD
- 如果没有依赖,保留
depends_on: [] - 按需加载依赖的 PRD(渐进式披露)——不要将其内容纳入当前 PRD
5. 针对性完善
根据用户的要求修订草稿——修正前提、调整范围、完善规则。重复此过程,直至获得批准。
如果审核导致功能范围发生变化,保存前重新评估 depends_on——功能职责的增减可能导致依赖项增加或减少。
6. 保存文件
创建模式下,保存新的 PRD:
- 确定下一个编号:列出
./docs/prds/中现有的文件,找出已使用的最大编号(格式为NNN)。下一个 PRD 使用紧接其后的序号。如果不存在任何 PRD,则从001开始。 - 命名文件:
NNN-[nome-em-kebab-case].md(例如:003-autenticacao-oauth.md) - 默认位置:
./docs/prds/ - 如果用户指定了其他路径,则使用指定路径
- 如果目录不存在,则创建该目录
- 在 frontmatter 中填写
prd_number字段,使用分配的编号(例如:003)
编辑模式下,覆盖原文件,同时保留 prd_number、文件名、当前 status 以及已分配的 US 和 Milestone ID。新增 US 使用下一个可用的连续 ID。
7. 多 PRD 连续处理
保存后,检查步骤 2a 中是否提出了拆分,且仍有待处理的 PRD。
如果有:
PRD-A salvo. Continua com PRD-B: [nome da feature B]?
确认后,开始处理下一个 PRD——利用前一个 PRD 中的决策作为上下文,以便做出更准确的推断(相同技术栈、相同系统、相同检测到的模式)。
重复此过程,直至拆分中的所有 PRD 均已保存,或用户中止。