mcpField
P
prd-generator

prd-generator

github.com/security-phoenix-demoDevelopment8148 installsUpdated 7w ago
Repository

About prd-generator

prd-generator is a Claude skill that turns feature descriptions into security-focused PRDs through a ten-role specification pipeline. It suits product and engineering teams that need structured requirements, verification plans, and optional publication to team tools.

Key features

  1. 01Ten-role specification pipeline
  2. 02Security requirements and threat model
  3. 03RFC 2119 requirements with IDs and priorities
  4. 04Verification matrix and batch plan
  5. 05Markdown PRD and Cursor plan files
  6. 06Optional publishing and stakeholder notifications

Use cases

  1. 01Drafting a PRD from an early feature description
  2. 02Defining acceptance criteria and security requirements
  3. 03Preparing incremental implementation tickets or tasks
  4. 04Publishing a spec to Confluence and notifying stakeholders

MCP support

The skill can call Atlassian MCP to publish PRDs, and optionally use Linear, Asana, Slack, Notion, and Gmail connectors. If connectors are unavailable, it still produces local files.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/security-phoenix-demo/security-skills-claude-code --skill prd-generator

After installing, type/prd-generatorin Claude Code to confirm it loaded.

Details

From the project README

PRD Generator — Security-Focused

What this skill can talk to

None of these are required — the PRD is produced either way, and a missing connector degrades to a local file rather than an error.

MCP connectorUsed forPriority
AtlassianConfluence page creationPrimary — always attempt
SlackStakeholder notificationOptional
LinearBatch plan → ticketsOptional
AsanaBatch plan → tasksOptional
NotionMirror docOptional
GmailSend the PRD to stakeholdersOptional

Tools it expects: present_files, create_file, bash_tool.

This list used to live in a compatibility: frontmatter key. The Agent Skills spec allows only name, description and allowed-tools, and any extra key makes the claude.ai upload fail with a hard error instead of being ignored — so it belongs in the body.

Customization (Required on First Use)

Before generating your first PRD, Claude will ask you to provide the following settings. These are used throughout the pipeline and in all outputs.

SettingDescriptionExample
Owner nameName(s) shown as PRD owner in all outputs@jane.doe / @john.smith
Default stakeholdersInterested parties added to every PRD@product-team, @security-lead
Confluence space keyYour Atlassian Confluence space for PRD pagesENG, PRODUCT, SEC
Confluence template titleParent page title to nest PRDs underPRD Templates, Product Specs
Slack channelDefault channel for PRD notifications (optional)#product-specs, #security-reviews
Email recipientsDefault stakeholder emails for Gmail drafts (optional)[email protected]

How to configure:

  1. Interactive (recommended): The first time you use this skill, Claude will ask you for these values before generating the PRD. Your answers are used for that session.

  2. Environment variables: For persistent configuration, set these in your shell profile or .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. Per-request override: Include any of these in your prompt:

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

If no configuration is provided, Claude will prompt you before proceeding.


What This Skill Does

Takes a feature description → runs the 10-role spec pipeline → produces all outputs. Connectors are called directly by Claude — no separate user action required.

OutputConnector / Tool
Full PRD Markdowncreate_file + present_files
.cursor/plans/ filecreate_file + present_files
Confluence page in configured spaceAtlassian:createConfluencePage (called directly)
Linear issues from batch planLinear MCP (if user confirms)
Asana tasks from batch planAsana MCP (if user confirms)
Slack notificationSlack:slack_send_message (if channel provided)
Notion mirrorNotion:notion-create-pages (if user confirms)
Email to stakeholdersGmail:gmail_create_draft (if user confirms)

Execution Steps

Step 1 — Gather Configuration + Extract Intent

1a. Check for customization settings. Look for:

  • Environment variables (PRD_OWNER, PRD_STAKEHOLDERS, PRD_CONFLUENCE_SPACE, etc.)
  • Values provided in the user's prompt (e.g., "Owner: @jane", "Space: ENG")
  • If neither is available, ask the user before proceeding:

    "Before I generate the PRD, I need a few details:

    1. Who should be listed as owner? (e.g., @your-name)
    2. Who are the key stakeholders? (e.g., @product-lead, @security-lead)
    3. What Confluence space should I publish to? (e.g., ENG, PRODUCT)
    4. Should I notify a Slack channel or email anyone? (optional)"

1b. Extract intent from the user's description:

  • Feature name → becomes PROJECT-NAME in the Confluence title
  • Problem statement — why this exists
  • Rough scope — what's in / out
  • Which connectors to activate — infer from context; see heuristics at bottom

Ask at most one clarifying question if critical info is missing. Then proceed.


Step 2 — Run the Spec Pipeline (Roles 01–10, inline)

Execute each role mentally. Chain outputs:

RoleOutputToken Budget
01 Context CuratorCLEAN_CONTEXT: facts, decisions, open Qs≤900
02 Scope CutterSCOPE_DEFINITION: goals, non-goals, in/out≤800
03 Constraint DistillerACTIVE_SET: 8–15 testable ACs≤700
04 Requirements EngineerNORMATIVE_REQUIREMENTS: RFC-2119, IDs, P0/P1/P2≤1500
05 Ambiguity HunterCLARIFICATIONS: flag critical ambiguities; loop back to 04 if needed (max 3x)≤1000
06 Security EngineerSECURITY_REQUIREMENTS + THREAT_MODEL≤1200
07 Contract ArchitectCONTRACTS: APIs, events, error taxonomy≤1200
08 Verification Matrixevery MUST has a proof path≤1000
09 Batch PlannerBATCH_PLAN: incremental, verifiable batches≤1200
10 Final GateSHIP / NO_SHIP + blocker list≤800

Step 3 — Render PRD

Produce the full document using the PRD template (see end of this file).


Step 4 — Write Files
outputs/{feature-slug}-PRD.md          ← full PRD document
outputs/{feature-slug}-cursor-plan.md  ← .cursor/plans format

Use create_file for both, then call present_files with both paths.


Step 5 — Confluence Push (ALWAYS attempt)

Call tools in this exact order:

5a. Get cloud ID

tool: Atlassian:getAccessibleAtlassianResources
→ capture cloudId from response

5b. Find parent page

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. Create the PRD page

tool: Atlassian:createConfluencePage
  cloudId: {from 5a}
  spaceKey: {YOUR_SPACE_KEY}
  title: "{PROJECT-NAME} — {Feature Name}"
  parentId: {from 5b}
  body: {full PRD markdown content}

Report the resulting page URL to the user. If any step fails, note why and deliver files anyway.


Step 6 — Optional Connectors

Activate based on user intent (see heuristics at bottom). Ask once after Confluence push:

"Want me to also create Linear/Asana tickets, post to Slack, or email the spec?"

6a. Linear — issues from batch plan
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 — tasks from batch plan
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 — notify stakeholders
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 — mirror page
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 — draft to stakeholders
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 Template

# {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 Plans Format

Save as outputs/{slug}-cursor-plan.md. User drops into .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: ...

Output Format Rules

  • RFC 2119 throughout: MUST / MUST NOT / SHOULD / MAY
  • Requirement IDs: R-FUNC-001, R-SEC-001, R-REL-001, R-UX-001
  • Priority tags: [P0] critical path / [P1] important / [P2] nice-to-have
  • maps_to: AC# on every functional requirement
  • No invented facts — unknowns surface as open questions
  • Max 40 total requirements across all sections
  • Every MUST has a proof path in the verification matrix

Error Handling

SituationAction
Description too vagueAsk one question, proceed with flagged assumptions
Atlassian MCP auth failsDeliver files only, log error clearly
Linear/Asana project not foundCreate new project, report name to user
Slack channel not foundAsk user for correct channel name
>10 open questions from pipelineSurface top 5 blockers, park rest as low-priority
Contradictions in requirementsFlag in CLARIFICATIONS, do NOT auto-resolve
Final Gate = NO_SHIPList blockers explicitly, still produce all files, mark PRD status BLOCKED

Connector Activation Heuristics

Activate connectors proactively based on these signals in the user's message:

SignalConnector
"create tickets", "add to Linear"Linear
"add to Asana", "create tasks"Asana
"notify the team", "post to Slack", channel name mentionedSlack
"send to", "email the spec", email address mentionedGmail
"add to Notion"Notion
any PRD requestAtlassian (always)

Default if no signals: Atlassian + files only. After Confluence push, ask once: "Want me to also create Linear tickets, notify Slack, or email stakeholders?"

Comments

Markdown supported