Install
$ agentstack add skill-security-phoenix-demo-security-skills-claude-code-secure-prd-skill ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
PRD Generator — Security-Focused
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.
| Setting | Description | Example | |---------|-------------|---------| | Owner name | Name(s) shown as PRD owner in all outputs | @jane.doe / @john.smith | | Default stakeholders | Interested parties added to every PRD | @product-team, @security-lead | | Confluence space key | Your Atlassian Confluence space for PRD pages | ENG, PRODUCT, SEC | | Confluence template title | Parent page title to nest PRDs under | PRD Templates, Product Specs | | Slack channel | Default channel for PRD notifications (optional) | #product-specs, #security-reviews | | Email recipients | Default stakeholder emails for Gmail drafts (optional) | team@example.com |
How to configure:
- 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.
- Environment variables: For persistent configuration, set these in your shell profile or
.env:
``bash 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" ``
- 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.
| Output | Connector / Tool | |--------|-----------------| | Full PRD Markdown | create_file + present_files | | .cursor/plans/ file | create_file + present_files | | Confluence page in configured space | Atlassian:createConfluencePage (called directly) | | Linear issues from batch plan | Linear MCP (if user confirms) | | Asana tasks from batch plan | Asana MCP (if user confirms) | | Slack notification | Slack:slack_send_message (if channel provided) | | Notion mirror | Notion:notion-create-pages (if user confirms) | | Email to stakeholders | Gmail: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-NAMEin 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:
| Role | Output | Token Budget | |------|--------|-------------| | 01 Context Curator | CLEANCONTEXT: facts, decisions, open Qs | ≤900 | | 02 Scope Cutter | SCOPEDEFINITION: goals, non-goals, in/out | ≤800 | | 03 Constraint Distiller | ACTIVESET: 8–15 testable ACs | ≤700 | | 04 Requirements Engineer | NORMATIVEREQUIREMENTS: RFC-2119, IDs, P0/P1/P2 | ≤1500 | | 05 Ambiguity Hunter | CLARIFICATIONS: flag critical ambiguities; loop back to 04 if needed (max 3x) | ≤1000 | | 06 Security Engineer | SECURITYREQUIREMENTS + THREATMODEL | ≤1200 | | 07 Contract Architect | CONTRACTS: APIs, events, error taxonomy | ≤1200 | | 08 Verification Matrix | every MUST has a proof path | ≤1000 | | 09 Batch Planner | BATCHPLAN: incremental, verifiable batches | ≤1200 | | 10 Final Gate | SHIP / NOSHIP + 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
| Situation | Action | |-----------|--------| | Description too vague | Ask one question, proceed with flagged assumptions | | Atlassian MCP auth fails | Deliver files only, log error clearly | | Linear/Asana project not found | Create new project, report name to user | | Slack channel not found | Ask user for correct channel name | | >10 open questions from pipeline | Surface top 5 blockers, park rest as low-priority | | Contradictions in requirements | Flag in CLARIFICATIONS, do NOT auto-resolve | | Final Gate = NO_SHIP | List 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:
| Signal | Connector | |--------|-----------| | "create tickets", "add to Linear" | Linear | | "add to Asana", "create tasks" | Asana | | "notify the team", "post to Slack", channel name mentioned | Slack | | "send to", "email the spec", email address mentioned | Gmail | | "add to Notion" | Notion | | any PRD request | Atlassian (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?"
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Security-Phoenix-demo
- Source: Security-Phoenix-demo/security-skills-claude-code
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.