关于 prd-generator
prd-generator 是一项 Claude 技能,可将功能描述经由十角色规格流程转化为注重安全的 PRD。它面向需要结构化需求、验证计划及可选团队工具发布流程的产品和工程团队。
主要功能
- 01十角色规格流程
- 02安全需求与威胁模型
- 03带编号和优先级的 RFC 2119 需求
- 04验证矩阵与批次计划
- 05Markdown PRD 和 Cursor 计划文件
- 06可选发布与利益相关者通知
适用场景
- 01根据初步功能描述起草 PRD
- 02定义验收标准和安全需求
- 03准备分阶段实施的工单或任务
- 04将规格发布到 Confluence 并通知利益相关者
MCP 相关
该技能可调用 Atlassian MCP 发布 PRD,也可选用 Linear、Asana、Slack、Notion 和 Gmail 连接器。连接器不可用时,仍会生成本地文件。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ security-phoenix-demo/ security-skills-claude-code --skill prd-generator安装后在 Claude Code 中输入/prd-generator确认已加载。
详细介绍
PRD 生成器 — 以安全为重点
此技能可以连接的服务
以下都不是必需的——无论如何都会生成 PRD;如果缺少连接器,则会降级为本地文件,而不是报错。
| MCP 连接器 | 用途 | 优先级 |
|---|---|---|
| Atlassian | 创建 Confluence 页面 | 主要 — 始终尝试 |
| Slack | 通知利益相关方 | 可选 |
| Linear | 批量计划 → 工单 | 可选 |
| Asana | 批量计划 → 任务 | 可选 |
| Notion | 镜像文档 | 可选 |
| Gmail | 将 PRD 发送给利益相关方 | 可选 |
预期使用的工具:present_files、create_file、bash_tool。
此列表以前位于
compatibility:frontmatter 键中。Agent Skills 规范仅允许使用name、description和allowed-tools,任何额外的键都会导致 claude.ai 上传失败并出现硬错误,而不是被忽略——因此此列表应放在正文中。
自定义设置(首次使用时必需)
生成第一个 PRD 之前,Claude 会要求你提供以下设置。这些设置会在整个流程和所有输出中使用。
| 设置 | 说明 | 示例 |
|---|---|---|
| 负责人姓名 | 所有输出中显示为 PRD 负责人的姓名 | @jane.doe / @john.smith |
| 默认利益相关方 | 添加到每个 PRD 中的相关人员 | @product-team、@security-lead |
| Confluence 空间键 | 用于 PRD 页面的 Atlassian Confluence 空间 | ENG、PRODUCT、SEC |
| Confluence 模板标题 | 用于归置 PRD 的父页面标题 | PRD Templates、Product Specs |
| Slack 频道 | PRD 通知的默认频道(可选) | #product-specs、#security-reviews |
| 电子邮件收件人 | Gmail 草稿的默认利益相关方电子邮件地址(可选) | [email protected] |
配置方法:
-
交互式(推荐): 首次使用此技能时,Claude 会在生成 PRD 之前询问这些值。你的回答仅用于本次会话。
-
环境变量: 如需持久配置,请在 shell 配置文件或
.env中设置以下变量:export PRD_OWNER="@your-name" export PRD_STAKEHOLDERS="@stakeholder1, @stakeholder2" export PRD_CONFLUENCE_SPACE="YOUR_SPACE_KEY" export PRD_CONFLUENCE_TEMPLATE="Your Template Page Title" export PRD_SLACK_CHANNEL="#your-channel" -
按请求覆盖: 在提示词中包含以下任意设置:
Write a PRD for feature X. Owner: @jane. Space: ENG. Notify #product-specs.
如果未提供配置,Claude 会在继续之前询问你。
此技能的功能
接收功能描述 → 运行包含 10 个角色的规格流程 → 生成所有输出。 Claude 会直接调用连接器——无需用户另行操作。
| 输出 | 连接器 / 工具 |
|---|---|
| 完整的 PRD Markdown | create_file + present_files |
.cursor/plans/ 文件 | create_file + present_files |
| 配置空间中的 Confluence 页面 | Atlassian:createConfluencePage(直接调用) |
| 根据批量计划创建的 Linear 问题 | Linear MCP(经用户确认后) |
| 根据批量计划创建的 Asana 任务 | Asana MCP(经用户确认后) |
| Slack 通知 | Slack:slack_send_message(如果提供了频道) |
| Notion 镜像 | Notion:notion-create-pages(经用户确认后) |
| 发送给利益相关方的电子邮件 | Gmail:gmail_create_draft(经用户确认后) |
执行步骤
步骤 1 — 收集配置并提取意图
1a. 检查自定义设置。 查找:
- 环境变量(
PRD_OWNER、PRD_STAKEHOLDERS、PRD_CONFLUENCE_SPACE等) - 用户提示中提供的值(例如“负责人:@jane”“空间:ENG”)
- 如果两者都没有,请先询问用户,再继续:
“在生成 PRD 之前,我需要了解一些信息:
- 应将谁列为负责人?(例如,@your-name)
- 主要利益相关者有哪些?(例如,@product-lead、@security-lead)
- 应发布到哪个 Confluence 空间?(例如,ENG、PRODUCT)
- 是否需要通知某个 Slack 频道或通过电子邮件通知任何人?(可选)”
1b. 从用户的描述中提取意图:
- 功能名称 → 用作 Confluence 标题中的
PROJECT-NAME - 问题陈述 — 说明存在的原因
- 大致范围 — 包含什么/不包含什么
- 要启用哪些连接器 — 根据上下文推断;参见底部的启发规则
如果缺少关键信息,最多提出一个澄清问题。然后继续。
步骤 2 — 运行规范流程(角色 01–10,内联执行)
在内部执行每个角色,并串联输出:
| 角色 | 输出 | Token 预算 |
|---|---|---|
| 01 上下文整理员 | CLEAN_CONTEXT:事实、决策、待解决问题 | ≤900 |
| 02 范围裁定员 | SCOPE_DEFINITION:目标、非目标、范围内/外 | ≤800 |
| 03 约束提炼员 | ACTIVE_SET:8–15 条可测试验收标准 | ≤700 |
| 04 需求工程师 | NORMATIVE_REQUIREMENTS:RFC-2119、ID、P0/P1/P2 | ≤1500 |
| 05 歧义排查员 | CLARIFICATIONS:标记关键歧义;必要时返回 04(最多 3 次) | ≤1000 |
| 06 安全工程师 | SECURITY_REQUIREMENTS + THREAT_MODEL | ≤1200 |
| 07 契约架构师 | CONTRACTS:API、事件、错误分类 | ≤1200 |
| 08 验证矩阵 | 每条 MUST 都有验证路径 | ≤1000 |
| 09 批次规划员 | BATCH_PLAN:增量式、可验证的批次 | ≤1200 |
| 10 最终关卡 | SHIP / NO_SHIP + 阻塞项列表 | ≤800 |
步骤 3 — 编写 PRD
使用 PRD 模板(见本文末尾)生成完整文档。
步骤 4 — 写入文件
outputs/{feature-slug}-PRD.md ← full PRD document
outputs/{feature-slug}-cursor-plan.md ← .cursor/plans format
对两个文件都使用 create_file,然后调用 present_files 并传入两个路径。
步骤 5 — 推送到 Confluence(始终尝试)
严格按以下顺序调用工具:
5a. 获取云 ID
tool: Atlassian:getAccessibleAtlassianResources
→ capture cloudId from response
5b. 查找父页面
tool: Atlassian:searchConfluenceUsingCql
cql: title = "{YOUR_TEMPLATE_TITLE}" AND space = "{YOUR_SPACE_KEY}"
→ capture page ID from first result
fallback: ask user for parent page ID if search returns nothing
5c. 创建 PRD 页面
tool: Atlassian:createConfluencePage
cloudId: {from 5a}
spaceKey: {YOUR_SPACE_KEY}
title: "{PROJECT-NAME} — {Feature Name}"
parentId: {from 5b}
body: {full PRD markdown content}
向用户报告生成的页面 URL。如果任何步骤失败,说明原因,并仍然交付文件。
步骤 6 — 可选连接器
根据用户意图启用(参见底部的启发规则)。推送到 Confluence 后询问一次:
“还需要我创建 Linear/Asana 任务、在 Slack 上发布消息,或通过电子邮件发送规范吗?”
6a. Linear — 根据批次计划创建问题
tool: Linear (search or create project matching feature name)
For each BATCH in BATCH_PLAN:
create issue:
title: "{BATCH_ID} — {batch goal}"
description: steps + validation criterion + requirements covered
priority: P0 batches → urgent | P1 → medium | P2 → low
6b. Asana — 根据批次计划创建任务
tool: Asana (find or create project "{PROJECT-NAME}")
For each BATCH:
create task:
name: "{BATCH_ID} — {batch goal}"
notes: steps + validation + requirements
assignee: infer from stakeholders or leave unassigned
6c. Slack — 通知利益相关者
tool: Slack:slack_search_channels → find #{channel}
tool: Slack:slack_send_message
channel: #{channel}
text: |
📋 *New PRD: {Feature Name}*
Status: DRAFT | Owner: @{OWNER_NAME}
Confluence: {page URL from Step 5}
_{2-sentence summary}_
Batches: {N} | P0 requirements: {count}
Reply to request changes.
6d. Notion — 镜像页面
tool: Notion:notion-search → find "Product Features" page or space root
tool: Notion:notion-create-pages
parent: {found page}
title: "{PROJECT-NAME} — {Feature Name}"
content: full PRD markdown
6e. Gmail — 起草邮件发送给利益相关者
tool: Gmail:gmail_create_draft
subject: "[PRD DRAFT] {Feature Name}"
body: executive summary + Confluence link + P0 requirements list
(to: leave blank unless user provides emails)
PRD 模板
# {FEATURE_NAME}
**Owner:** @{OWNER_NAME}
**Status:** DRAFT
**Date:** {ISO_DATE}
**Version:** 1.0
---
## Interested Parties
- @{STAKEHOLDER_1}
- {other stakeholders}
---
## Document Status Reference
| Status | When | Action |
|--------|------|--------|
| DRAFT | Work in progress | Draft document |
| APPROVED | Reviewed and approved | Approved version |
| ARCHIVED | Obsolete | No longer active |
---
## 0) Overview
{problem_statement}
### Context
{clean_context summary — FACTS + DECISIONS from Role 01}
### Goals
{goals — from Role 02 Scope Cutter}
### Non-Goals
{non_goals — from Role 02 Scope Cutter}
---
## Features
### FEATURE 1 — {name}
**Objective:** {one-line}
#### Functional Logic
{R-FUNC-* requirements with IDs, priority tags, maps_to AC#}
#### UI / UX Changes *(if applicable)*
{R-UX-* requirements}
#### Data Model Changes *(if applicable)*
{field names, types, constraints, migration notes}
#### Export Requirements *(if applicable)*
{formats: CSV / PNG / PDF; fields included; filter state preservation}
#### Open Questions
1. {question}
---
{repeat FEATURE block for each logical grouping from normative requirements}
---
## Security Requirements
### Threat Model
- **Assets:** {list}
- **Actors:** {list}
- **Entry Points:** {list}
- **Trust Boundaries:** {list}
- **High-Risk Flows:** {list}
### Security Requirements
{R-SEC-* with IDs, [P0/P1], proof_hint: test|static|contract|manual}
### Abuse Cases *(only if they produce new requirements)*
{AC-SEC-* items}
---
## API Contracts
{API-001, EVT-001 definitions from Role 07 Contract Architect}
---
## Verification Matrix
| Requirement ID | Level | Proof Type | Proof Artifact | Notes |
|---|---|---|---|---|
| R-FUNC-001 | MUST | test | test_{name} | |
| R-SEC-001 | MUST | static | rule_{name} | |
---
## Delivery Plan
### BATCH 1 — {name}
- **Goal:** {goal}
- **Covers:** R-FUNC-001, R-SEC-001
- **Steps:**
1. {step}
- **Validation:** {done-when criterion from verification matrix}
- **Risks/Rollback:** {risk + rollback strategy}
{repeat per batch}
---
## Data & Performance Considerations
{NFRs: volume thresholds, precomputation requirements, caching strategy, timezone handling}
---
## Risk & Mitigation
| Risk | Mitigation |
|------|-----------|
| {risk} | {mitigation} |
---
## Open Clarification Summary
1. {Q1}
2. {Q2}
---
## References
- Baseline spec: {reference doc or "N/A"}
- Confluence: {page URL from Step 5}
Cursor 计划格式
保存为 outputs/{slug}-cursor-plan.md。用户将文件放入 .cursor/plans/:
# Plan: {Feature Name}
Date: {ISO date}
Status: DRAFT
## Objective
{one paragraph}
## Implementation Batches
### Batch 1 — {name}
**Files to touch:** {list or TBD}
**Requirements:** R-FUNC-001, R-SEC-001
**Steps:**
1. {step}
**Done when:** {validation criterion}
### Batch 2 — ...
## P0 Requirements
- R-FUNC-001 [P0] MUST ...
- R-SEC-001 [P0] MUST ...
## Open Questions (resolve before implementation)
- Q1: ...
输出格式规则
- 全文使用 RFC 2119:MUST / MUST NOT / SHOULD / MAY
- 需求 ID:R-FUNC-001、R-SEC-001、R-REL-001、R-UX-001
- 优先级标签:[P0] 关键路径 / [P1] 重要 / [P2] 有更好
- 每条功能需求都要包含
maps_to: AC# - 不得编造事实 — 未知项列为待解决问题
- 所有章节的需求总数最多为 40 条
- 每条 MUST 在验证矩阵中都必须有验证路径
错误处理
| 情况 | 操作 |
|---|---|
| 描述过于含糊 | 提出一个问题,并在标注假设的情况下继续 |
| Atlassian MCP 认证失败 | 仅交付文件,并清楚记录错误 |
| 未找到 Linear/Asana 项目 | 创建新项目,并向用户报告项目名称 |
| 未找到 Slack 频道 | 询问用户正确的频道名称 |
| 流程中有超过 10 个未解决问题 | 指出最重要的 5 个阻碍因素,其余问题暂列为低优先级 |
| 需求中存在矛盾 | 在 CLARIFICATIONS 中标出,切勿自动解决 |
| 最终关卡 = NO_SHIP | 明确列出阻碍因素,仍生成所有文件,并将 PRD 状态标记为 BLOCKED |
连接器启用启发规则
根据用户消息中的以下信号,主动启用连接器:
| 信号 | 连接器 |
|---|---|
| "create tickets", "add to Linear" | Linear |
| "add to Asana", "create tasks" | Asana |
| "notify the team", "post to Slack", 提及频道名称 | Slack |
| "send to", "email the spec", 提及电子邮件地址 | Gmail |
| "add to Notion" | Notion |
| 任何 PRD 请求 | Atlassian(始终启用) |
默认情况下,如果没有任何信号:Atlassian + 仅文件。 推送到 Confluence 后,询问一次:"要我也创建 Linear 工单、通知 Slack 或给利益相关者发送电子邮件吗?"