product-management
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.jsonfor staleness - If >24 hours since last sync, prompt for
/pm:sync
/pm:sync Process
- Fetch all GitHub Issues with
pm:*labels viagh issue list --json - Update
.pm/requests/[issue-number].mdfor each issue - Update
last-updated.jsontimestamp
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 statusto 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:syncon session start
⚠️ Competitor data is 45 days old. Run `/pm:landscape` to refresh.
Additional Resources
Reference Files
references/winning-filter.md- Detailed WINNING scoring criteriareferences/github-labels.md- Label definitions and colorsreferences/issue-template.md- GitHub Issue templatereferences/data-structure.md- Complete.pm/folder structure
Example Files
examples/gap-analysis.md- Sample gap analysis outputexamples/competitor-profile.md- Sample competitor profile