Product Management Skill
AI-native product management for startups. Transform Claude into an expert PM that processes signals, not just feature lists.
Core Philosophy
WINNING = Pain × Timing × Execution Capability
Filter aggressively from 50 gaps to 3-5 high-conviction priorities. Expert PMs track signals with confidence scores, timestamps, and velocity.
Commands Quick Reference
Command Purpose
/pm:analyze
Scan codebase + interview for product inventory
/pm:landscape
Research competitor landscape
/pm:gaps
Run gap analysis with WINNING filter
/pm:file
Batch create GitHub Issues for approved gaps
/pm:prd
Generate PRD and create GitHub Issue
/pm:sync
Sync local cache with GitHub Issues
Agents
This plugin provides specialized agents for autonomous tasks:
Agent Triggers On Purpose
research-agent
"research [competitor]", "scout [name]" Deep autonomous web research
gap-analyst
"find gaps", "what should we build" Systematic gap identification with scoring
prd-generator
"create PRD for [feature]" Generate PRD + create GitHub Issue
Data Storage
All data stored in .pm/ folder at project root:
.pm/ ├── config.md # Positioning, scoring weights ├── product/ # Product inventory, architecture ├── competitors/ # Competitor profiles ├── gaps/ # Gap analyses with scores ├── requests/ # Synced GitHub Issues (for dedup) ├── prds/ # Generated PRDs └── cache/last-updated.json # Staleness tracking
See references/data-structure.md for complete file templates.
WINNING Filter Scoring
Hybrid scoring approach - Claude suggests researchable criteria, user scores domain-specific:
Criterion Scorer Source
Pain Intensity (1-10) Claude Review sentiment, support data
Market Timing (1-10) Claude Search trends, competitor velocity
Execution Capability (1-10) User Architecture fit, team skills
Strategic Fit (1-10) User Positioning alignment
Revenue Potential (1-10) User Conversion/retention impact
Competitive Moat (1-10) User Defensibility once built
Total: X/60 → Recommendation:
-
40+ → FILE (high conviction)
-
25-39 → WAIT (monitor)
-
<25 → SKIP (not worth it)
See references/winning-filter.md for detailed scoring criteria.
Deduplication & Sync
Prevent duplicate feature requests by syncing with GitHub Issues:
On Session Start
-
Check .pm/cache/last-updated.json for staleness
-
If >24 hours since last sync, prompt for /pm:sync
/pm:sync Process
-
Fetch all GitHub Issues with pm:* labels via gh issue list --json
-
Update .pm/requests/[issue-number].md for each issue
-
Update last-updated.json timestamp
Deduplication During Gap Analysis
-
Load existing issues from .pm/requests/
-
For each new gap, fuzzy match against existing:
-
Title similarity (Levenshtein): 40% weight
-
Keyword overlap: 30% weight
-
Label match: 20% weight
-
Description similarity: 10% weight
-
Mark gaps as:
-
EXISTING (>80% match) → Show linked issue
-
SIMILAR (50-80%) → Warn, ask user
-
NEW (<50%) → Proceed normally
Output Format
| Gap | WINNING | Status | Match |
|---|---|---|---|
| OAuth support | 47/60 | EXISTING | #42 (95%) |
| Dark mode | 38/60 | NEW | - |
Flow Summaries
Product Analysis (/pm:analyze )
-
Scan codebase for features (routes, components, APIs, models)
-
Interview user for business context
-
Generate inventory with technical moats and debt flags
-
Save to .pm/product/
Competitive Intelligence (/pm:landscape , /pm:scout [name] )
-
Research competitors via WebFetch/WebSearch
-
Categorize features: Tablestakes, Differentiators, Emerging, Deprecated
-
Save profiles to .pm/competitors/
Gap Analysis (/pm:gaps )
-
Load product inventory + competitor profiles
-
Check staleness (>30 days → prompt refresh)
-
Sync with GitHub Issues for deduplication
-
Identify all gaps, score with WINNING filter
-
Mark as NEW/EXISTING/SIMILAR
-
Save to .pm/gaps/[date]-analysis.md
Feature Filing (/pm:review , /pm:file )
-
/pm:review
-
Walk through gaps, decide FILE/WAIT/SKIP
-
/pm:file
-
Create GitHub Issues for approved gaps (skips duplicates)
-
Apply labels: pm:feature-request , winning:* , priority:*
PRD Generation (/pm:prd [feature] )
-
Load feature context from gap analysis or GitHub Issue
-
Generate PRD: Problem, User Stories, Acceptance Criteria, etc.
-
Save to .pm/prds/[slug].md
-
Create GitHub Issue with PRD content as feature request
Backlog & Roadmap (/pm:backlog , /pm:roadmap )
-
Fetch open issues with pm: labels
-
Sort by WINNING score or RICE
-
Organize into Now/Next/Later priorities
GitHub Integration
Labels (Auto-Created)
pm:feature-request pm:gap-identified pm:competitor-intel priority:now priority:next priority:later winning:high (40+) winning:medium (25-39) winning:low (<25)
Prerequisites
-
GitHub CLI (gh ) installed and authenticated
-
Run gh auth status to verify
See references/github-labels.md for label definitions. See references/issue-template.md for issue format.
Integration with spec-kit
This plugin handles WHAT to build and WHY (product discovery). For HOW to build it, use spec-kit:
PM Plugin → GitHub Issue → spec-kit /pm:file Creates issue /speckit.specify /pm:prd Creates issue /speckit.plan → /speckit.implement
The GitHub Issue IS the handoff—no separate command needed.
Staleness Handling
PM data ages. Handle proactively:
-
Competitor data >30 days: Prompt refresh before gap analysis
-
Gap analysis >14 days: Warn when viewing backlog
-
GitHub sync >24 hours: Suggest /pm:sync on session start
⚠️ Competitor data is 45 days old. Run /pm:landscape to refresh.
Additional Resources
Reference Files
-
references/winning-filter.md
-
Detailed WINNING scoring criteria
-
references/github-labels.md
-
Label definitions and colors
-
references/issue-template.md
-
GitHub Issue template
-
references/data-structure.md
-
Complete .pm/ folder structure
Example Files
-
examples/gap-analysis.md
-
Sample gap analysis output
-
examples/competitor-profile.md
-
Sample competitor profile