skills/plan-epic/SKILL.md
Interactive GitHub Epic planner. Plans one milestone at a time. The first epic is always Shell (scaffold + CI with a fixed set of stories). Each subsequent epic is defined through operator dialogue. Use /plan-issue to create the individual stories once an epic is defined.
npx skillsauth add liatrio-labs/ai-prompts plan-epicInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are running an interactive planning session to define a GitHub Milestone (epic) for an app. You define what the epic delivers and create the milestone — story creation is handled by /plan-issue.
Before asking anything, gather context:
README.md, CLAUDE.md (if present), AGENTS.md (if present), package.json or equivalent build file, and the top-level directory structure.prototype, design, mockups, wireframes, or similar. If found, list the files inside and read any that describe screens, flows, or features (HTML, markdown, or image files from Claude Design or similar tools).gh milestone list --state all to see existing epics.If a prototype folder exists, it is a reference for what the finished app might look like — not a backlog to execute in order.
The first epic is always Shell. Its purpose: a deployable artifact exists and CI is fully wired, but there is no domain functionality yet. The stories are fixed — the operator does not define them.
Present these to the operator and ask if any need adjusting for the tech stack (different test framework, artifact registry, monorepo, etc.). Full story detail is in /plan-issue.
| Story | Goal |
|-------|------|
| Repo Scaffold | Documented folder structure with all base config files in place |
| Health Endpoint and Containerization | App runs in a container and exposes GET /health returning 200 |
| Unit Test Capability | Unit tests run locally and as a required CI job on every PR |
| Build and Publish Artifact | CI builds and publishes a Docker image to a registry on merge to default branch |
| Security and Dependency Scan | CI runs dependency and SAST scans on every PR |
| Lint and Format Enforcement | Linting and formatting rules enforced as a required CI job on every PR |
Once the operator confirms the story list:
Create the milestone:
gh milestone create "Shell" --description "Deployable shell app with full CI pipeline. No domain functionality."
Tell the operator: "Milestone created. Use /plan-issue to create each story and link it to this milestone."
Every epic after Shell is defined by the operator through dialogue. Each one should deliver something new that users can interact with and give feedback on.
Do NOT create a milestone until the operator has agreed on what the epic delivers.
Ask the operator:
"What do you want to be able to do or verify once this epic is complete? Describe it as an interaction — something you could actually perform to confirm it's working."
Examples of well-formed interactions:
GET /students and get a list of student objects back."If the answer is vague, probe:
If a prototype was found in Step 1, use it to focus the question:
"The prototype shows [screen A], [screen B], and [screen C]. Which of these do you want to be able to interact with when this epic is done?"
Collect all interactions for this epic. When the operator is done, reflect them back as a list and confirm before proceeding.
Once the operator agrees on the interaction list:
Agree on a short epic name that describes what the epic delivers (e.g., "Browse Core Entities", "Student Enrollment MVP").
Create the milestone:
gh milestone create "[Epic Name]" --description "[One-sentence summary of what users can do when this epic is complete]"
Tell the operator: "Milestone created. Use /plan-issue for each interaction to create the individual stories and link them to this milestone."
After creating any epic, ask:
"Want to plan the next epic? If so, tell me what you're thinking about delivering next — or say yes and I'll start by asking."
If yes, return to Next Epic. If not, list all milestones created this session and close.
# List existing milestones
gh milestone list --state all
# Create a milestone
gh milestone create "Epic Name" --description "Description"
If the target repo is ambiguous (multiple remotes, or invoked outside a git repo), confirm with the operator before creating anything.
development
Use when you need lightweight browser QA for a web page, local HTML file, or app: inspect console errors, broken assets, keyboard/focus behavior, viewport readability, and publish evidence-backed findings JSON through a local HTML report viewer.
data-ai
Provision DNS records for liatr.io subdomains in the liatrio/liatrio-external-dns repository. Use when adding, modifying, or removing DNS CNAME records, A records, or other Route53 records for liatr.io or k8s-ignite.com domains. Triggers on requests like 'add a domain', 'create a subdomain', 'point X.liatr.io to Y', or 'set up DNS for a new site'.
development
Provides concise guidance for using uv (Python package manager), including project workflows, pip-compatible commands, Python version management, and PEP 723 inline script dependencies. Use when users mention uv, uv run, inline dependencies, PEP 723, or Python dependency/project management.
development
Manage local development environments with Tilt. Use when working with projects that run services via Tilt (indicated by presence of Tiltfile), including checking service status, viewing logs, troubleshooting connectivity issues, or managing the Tilt stack. Essential for projects using Tiltfile with local_resource for orchestrating backend, frontend, and other services.