mcpField
P
prd-generator

prd-generator

github.com/security-phoenix-demo开发8148 次安装7 周前更新
代码仓库

关于 prd-generator

prd-generator 是一项 Claude 技能,可将功能描述经由十角色规格流程转化为注重安全的 PRD。它面向需要结构化需求、验证计划及可选团队工具发布流程的产品和工程团队。

主要功能

  1. 01十角色规格流程
  2. 02安全需求与威胁模型
  3. 03带编号和优先级的 RFC 2119 需求
  4. 04验证矩阵与批次计划
  5. 05Markdown PRD 和 Cursor 计划文件
  6. 06可选发布与利益相关者通知

适用场景

  1. 01根据初步功能描述起草 PRD
  2. 02定义验收标准和安全需求
  3. 03准备分阶段实施的工单或任务
  4. 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]

配置方法:

  1. 交互式(推荐): 首次使用此技能时,Claude 会在生成 PRD 之前询问这些值。你的回答仅用于本次会话。

  2. 环境变量: 如需持久配置,请在 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"
    
  3. 按请求覆盖: 在提示词中包含以下任意设置:

    Write a PRD for feature X. Owner: @jane. Space: ENG. Notify #product-specs.
    

如果未提供配置,Claude 会在继续之前询问你。


此技能的功能

接收功能描述 → 运行包含 10 个角色的规格流程 → 生成所有输出。 Claude 会直接调用连接器——无需用户另行操作。

输出连接器 / 工具
完整的 PRD Markdowncreate_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 之前,我需要了解一些信息:

    1. 应将谁列为负责人?(例如,@your-name)
    2. 主要利益相关者有哪些?(例如,@product-lead、@security-lead)
    3. 应发布到哪个 Confluence 空间?(例如,ENG、PRODUCT)
    4. 是否需要通知某个 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 或给利益相关者发送电子邮件吗?"

评论

支持 Markdown