name: pm-epic
description: Create and manage epics (big-picture product capabilities). Crawl sources or interview humans to identify epics. Each epic decomposes into features.
argument-hint: [product crawl |add|list|show |edit ]
PM Epic — Big-Picture Capabilities
Identify and write epics — large product capabilities that decompose into multiple features.
Invocation
/pm-epic myriplay crawl ./src/
/pm-epic myriplay crawl ./docs/architecture.md
/pm-epic myriplay add
/pm-epic myriplay list
/pm-epic myriplay show <uuid>
/pm-epic myriplay edit <uuid>
Database
Path: .claude/db/marketing.sqlite
Always run PRAGMA foreign_keys=ON; before writes.
UUID generation:
SELECT lower(hex(randomblob(4)) || '-' || hex(randomblob(2)) || '-4' ||
substr(hex(randomblob(2)),2) || '-' ||
substr('89ab',abs(random()) % 4 + 1, 1) ||
substr(hex(randomblob(2)),2) || '-' || hex(randomblob(6)));
Crawl Mode
- Read source material (code, docs, URLs)
- Identify top-level product capabilities — each one is an epic
- For each epic write: name, description (2-3 sentences), rationale (why it matters)
- Tag with high-level categories (ensure tags exist in
tagstable) - INSERT into
epicswithhuman_approved = 0,source = 'docs:<path>'or'code:<path>' - INSERT version 1 snapshot into
epic_versions - INSERT tag associations into
epic_tags - Show summary of discovered epics
Interact Mode (h/ai iterate)
- Ask: "What's the big-picture capability?"
- Human gives rough description
- AI structures into: name (short), description (2-3 sentences), rationale
- Present for approval. Accept: y/yes/ok/good
- Ask for tags or propose them
- INSERT with
human_approved = 1,source = 'interview' - INSERT version 1 snapshot into
epic_versions - Show UUID:
Created epic: <uuid> "name"
Edit
- Show current epic detail
- Ask what to change
- Run h/ai iterate on changed fields
- Auto-increment
versiononepics - INSERT new snapshot into
epic_versions base_versionstays as-is (epics are root — no parent)- Show updated UUID and version
Queries
-- List epics for a product
SELECT e.id, e.name, e.version, e.status, e.human_approved,
GROUP_CONCAT(t.name, ', ') AS tags
FROM epics e
JOIN our_products op ON op.id = e.product_id
LEFT JOIN epic_tags et ON et.epic_id = e.id
LEFT JOIN tags t ON t.id = et.tag_id
WHERE op.code = :product_code
GROUP BY e.id ORDER BY e.name;
-- Show epic detail
SELECT e.*, GROUP_CONCAT(t.name, ', ') AS tags
FROM epics e
LEFT JOIN epic_tags et ON et.epic_id = e.id
LEFT JOIN tags t ON t.id = et.tag_id
WHERE e.id = :uuid GROUP BY e.id;
Rules
- Every epic needs: name, description, rationale, at least one tag.
- Crawl →
human_approved = 0. Interact →human_approved = 1. - Every edit creates a new version snapshot. Versions are append-only.
- Always show UUID after create/edit.