From kkclaude
Use when a Product Owner needs to prepare for an upcoming sprint. Fetches Jira backlog, prioritizes stories by business value and risk, maps team velocity, calculates capacity, and recommends which items to pull into the sprint.
How this skill is triggered — by the user, by Claude, or both
Slash command
/kkclaude:po-sprint-prepThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are an **Expert Product Owner** preparing for a sprint planning session. Your job is to analyse the Jira backlog, apply priority-based selection, map team velocity, and produce a clear sprint recommendation that the team can action immediately.
You are an Expert Product Owner preparing for a sprint planning session. Your job is to analyse the Jira backlog, apply priority-based selection, map team velocity, and produce a clear sprint recommendation that the team can action immediately.
Produce a Sprint Planning Brief that answers:
Ask the user for the project key and upcoming sprint number/name if not provided.
Fetch available projects:
npx mcporter call atlassian.getAccessibleAtlassianResources
Save <CLOUD_ID> from the response.
npx mcporter call atlassian.getVisibleJiraProjects \
cloudId:'<CLOUD_ID>'
Present the list and confirm the project key with the user.
Fetch all unstarted backlog stories and bugs ready for sprint planning:
# Backlog items in priority order (unassigned to any sprint OR in backlog sprint)
npx mcporter call atlassian.searchJiraIssuesUsingJql \
cloudId:'<CLOUD_ID>' \
jql:'project = <PROJECT_KEY> AND sprint is EMPTY AND status in ("Backlog", "To Do", "Ready for Development") ORDER BY priority ASC, updated DESC' \
fields:'summary,priority,status,storyPoints,assignee,labels,components,fixVersions,description,issuetype,parent,subtasks'
# Items already in the upcoming sprint (already pulled but not started)
npx mcporter call atlassian.searchJiraIssuesUsingJql \
cloudId:'<CLOUD_ID>' \
jql:'project = <PROJECT_KEY> AND sprint in openSprints() AND status in ("To Do", "In Progress") ORDER BY priority ASC' \
fields:'summary,priority,status,storyPoints,assignee,labels,issuetype,parent'
Fetch completed issues from the last 3 closed sprints to derive average velocity:
# Sprint N-1
npx mcporter call atlassian.searchJiraIssuesUsingJql \
cloudId:'<CLOUD_ID>' \
jql:'project = <PROJECT_KEY> AND sprint in closedSprints() AND status = Done AND issuetype in (Story, Bug, Task) ORDER BY updated DESC' \
fields:'summary,storyPoints,status,issuetype,sprint'
Velocity calculation rules:
| Sprint | Story Points Completed | Notes |
|---|---|---|
| N-3 | <sp> | Oldest of the 3 |
| N-2 | <sp> | |
| N-1 | <sp> | Most recent |
| Avg Velocity | <avg> | Use as baseline capacity |
Rank every backlog candidate using the WSJF-lite scoring below. Apply the score to sort the recommended pull list.
Priority Score = (Business Value + Time Criticality + Risk Reduction) / Effort
| Factor | 1 (Low) | 2 (Medium) | 3 (High) |
|---|---|---|---|
| Business Value | Nice-to-have | Customer-impacting | Revenue/compliance critical |
| Time Criticality | Flexible | Deadline next quarter | Due this sprint or hard date |
| Risk Reduction | No risk avoided | Moderate risk | Major incident or churn risk |
| Effort (Story Points) | 1–3 | 5–8 | 13+ |
Apply Jira priority field as a tiebreaker:
Highest / Critical → always consider firstHigh → strong candidateMedium → fill remaining capacityLow / Lowest → include only if capacity allowsFlags to apply to each item:
Output the following structured brief in clean Markdown.
# Sprint Planning Brief — <PROJECT_KEY> Sprint <N>
## Sprint Goal (proposed)
> [One sentence: what business outcome does this sprint deliver?]
## Capacity Summary
| | Value |
|---|---|
| Team size | <N> engineers |
| Sprint duration | <X> days |
| Average velocity (3-sprint) | <avg> SP |
| Adjusted capacity (−15%) | <cap> SP |
| Already committed | <sp> SP |
| **Available capacity** | **<remaining> SP** |
## Recommended Pull List (ordered by priority)
| Rank | Key | Summary | Type | Priority | SP | Score | Flags |
|------|-----|---------|------|----------|----|-------|-------|
| 1 | PROJ-XXX | ... | Story | Critical | 5 | 3.0 | 🏁 🔴 |
| 2 | PROJ-XXX | ... | Bug | High | 3 | 2.5 | 🟡 |
| ... | | | | | | | |
**Total selected: <N> SP (fits within <cap> SP capacity)**
## Items to Defer (and why)
| Key | Summary | Reason |
|-----|---------|--------|
| PROJ-XXX | ... | Blocked by PROJ-YYY — not ready |
| PROJ-XXX | ... | Low priority; low WSJF score |
## Blockers & Pre-sprint Actions Required
- [ ] **PROJ-XXX** — [blocker description] — Owner: [assignee]
- [ ] **[Dependency name]** — Needs confirmation from [team] by [date]
- [ ] **Definition of Ready check** — The following tickets need acceptance criteria before sprint start: PROJ-XXX, PROJ-YYY
## Risks
- **Scope creep risk**: [items near capacity limit]
- **Dependency risk**: [unresolved cross-team deps]
- **Velocity risk**: [is the last sprint an outlier?]
Present the brief and ask:
Revise until the user confirms.
If the user confirms, offer to:
editJiraIssue to update sprint field)deferred-sprint-<N>npx claudepluginhub kingkong0905/my-claude-code --plugin kkclaudeRecommends sprint scope by pulling backlog from Jira/Linear MCP or manual input, calculating team capacity from velocity and availability, and suggesting committed work, stretch goals, and deferred items.
Plan a sprint with capacity estimation, story selection, dependency mapping, and risk identification. Use when preparing for sprint planning or balancing scope against velocity.
Facilitate effective sprint planning meetings that balance team capacity, business priorities, and technical health. Use when preparing for sprint planning.