
Deliver User Stories
- 587 installs
- 518 repo stars
- Updated August 4, 2026
- product-on-purpose/pm-skills
deliver-user-stories is an agent skill that generates INVEST-ready user stories with Given/When/Then acceptance criteria for developers and PMs who need sprint-planning tickets traced to approved requirements.
About
deliver-user-stories is a product-on-purpose/pm-skills specification skill at version 2.1.0 that converts PRDs and feature descriptions into user stories using the As a/I want/so that format with testable Given/When/Then acceptance criteria. The seven-step workflow reviews feature context, identifies personas, decomposes user goals, writes story statements, defines acceptance criteria, validates against six INVEST principles, and adds design or technical notes per story. Output follows the references/TEMPLATE.md structure with headers, context, dependencies, and open questions for multi-story documents. Developers and PMs reach for deliver-user-stories after PRD approval during sprint planning, ticket writing, or backlog grooming when scope must be expressed as estimable increments without prescribing implementation. Pair deliver-acceptance-criteria or deliver-edge-cases when a single story needs deeper QA coverage or boundary catalogs. The skill keeps implementation details out of story statements while ensuring each criterion is independently verifiable before engineers estimate work.
- deliver-user-stories
- AI & Agent Building
- AI-coding skill
Deliver User Stories by the numbers
- 587 all-time installs (skills.sh)
- +30 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #1,607 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/product-on-purpose/pm-skills --skill deliver-user-storiesAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 587 |
|---|---|
| repo stars | ★ 518 |
| Last updated | August 4, 2026 |
| Repository | product-on-purpose/pm-skills ↗ |
How do you write user stories from a PRD?
Helps with ai & agent building tasks.
Who is it for?
Product managers and tech leads translating approved PRDs into sprint-ready user stories for engineering backlogs.
Skip if: Teams without an approved PRD, QA-only Given/When/Then deep dives on one story, or refinement-session facilitation notes.
When should I use this skill?
The user needs user stories, sprint tickets, or backlog items written from a PRD or feature description after requirements are approved.
What you get
Persona-based user story document with acceptance criteria, dependencies, design notes, and INVEST validation per story.
By the numbers
- Version 2.1.0 skill with 7-step user story authoring workflow
- Validates each story against 6 INVEST principles before finalizing
Files
<!-- PM-Skills | https://github.com/product-on-purpose/pm-skills | Apache 2.0 -->
User Stories
User stories are concise descriptions of functionality from the user's perspective. They capture who needs something, what they need, and why - without prescribing how to build it. Good user stories enable teams to break large features into estimable, deliverable increments while maintaining focus on user value.
When to Use
- After PRD approval, when breaking down features for implementation
- During sprint planning to create actionable work items
- When writing tickets for engineering teams
- When communicating requirements to stakeholders in accessible terms
- When prioritizing a backlog based on user value
When NOT to Use
- You need deeper, QA-ready Given/When/Then coverage for a single story or slice -> use
deliver-acceptance-criteria - You need the feature-wide catalog of boundary conditions and failure scenarios -> use
deliver-edge-cases - The feature itself is not yet specified -> use
deliver-prdfirst; stories should trace back to documented requirements - You want refinement-session outcomes (estimates, scope decisions, open questions) -> use
iterate-refinement-notes
Instructions
When asked to create user stories, follow these steps:
1. Understand the Feature Context Review the PRD or feature description. Understand the overall goal, target users, and scope boundaries. User stories should trace back to documented requirements.
2. Identify User Personas Determine which users interact with this feature. Each story should be written for a specific persona, not generic "users." Different personas may need different stories for the same feature.
3. Break Down by User Goal Decompose the feature into distinct user goals. Each story should deliver a complete, valuable capability - something the user can actually do when the story is done.
4. Write Story Statements Use the format: "As a [persona], I want [action] so that [benefit]." The benefit clause is critical - it explains why this matters and helps prioritize.
5. Define Acceptance Criteria Write specific, testable criteria using Given/When/Then format. Acceptance criteria define "done" - if all criteria pass, the story is complete.
6. Apply INVEST Criteria Validate each story against INVEST: Independent, Negotiable, Valuable, Estimable, Small, Testable. Revise stories that don't meet these criteria.
7. Add Context and Notes Include relevant design references, technical considerations, and dependencies. These help implementers understand the full picture.
Output Format
Use the template in references/TEMPLATE.md to structure the output. A complete output carries, per story: Story Header; User Story Statement; Context & Background; Acceptance Criteria; Design Notes; Technical Notes; Dependencies; Out of Scope; and Open Questions where any remain. Multi-story documents nest these sections under one heading per story, as the example shows.
Quality Checklist
Before finalizing, verify:
- [ ] Each story follows "As a... I want... so that..." format
- [ ] Stories are independent (can be built in any order)
- [ ] Acceptance criteria use Given/When/Then format
- [ ] Each criterion is testable (someone can verify pass/fail)
- [ ] Stories are small enough to complete in one sprint
- [ ] No implementation details in the story statement
- [ ] Benefit clause explains why this matters to the user
Examples
See references/EXAMPLE.md for a completed example.
{
"schema": 1,
"skill": "deliver-user-stories",
"runs_per_query": 3,
"trigger_threshold": 0.5,
"queries": [
{
"q": "Break the new bulk-export feature into user stories for next sprint",
"expect": "trigger",
"split": "train"
},
{
"q": "Write Jira tickets for the password reset flow in persona, action, benefit format",
"expect": "trigger",
"split": "train"
},
{
"q": "I have an approved PRD for in-app notifications; turn it into stories engineering can pick up",
"expect": "trigger",
"split": "train"
},
{
"q": "Help me slice this big checkout redesign into small shippable increments the team can estimate",
"expect": "trigger",
"split": "train",
"notes": "Intent-only phrasing, no story keyword"
},
{
"q": "I need to communicate the reporting feature scope to engineering in story form",
"expect": "trigger",
"split": "train"
},
{
"q": "Draft user stories for the admin role management epic and check them against INVEST",
"expect": "trigger",
"split": "train"
},
{
"q": "Sprint planning is tomorrow and the search revamp is still one giant blob; help me break it down into ticket-sized pieces",
"expect": "trigger",
"split": "validation",
"notes": "Intent-only phrasing, no story keyword"
},
{
"q": "Convert these requirements for the mobile onboarding flow into As a / I want / so that stories",
"expect": "trigger",
"split": "validation"
},
{
"q": "Generate stories from this feature description: customers can save carts and share them with teammates",
"expect": "trigger",
"split": "validation"
},
{
"q": "Our backlog needs the data import capability split into estimable work items with clear user value",
"expect": "trigger",
"split": "validation",
"notes": "Intent-only phrasing, no story keyword"
},
{
"q": "Write Given/When/Then acceptance criteria for the cart sharing story",
"expect": "no-trigger",
"split": "train",
"near_miss_of": "deliver-acceptance-criteria",
"notes": "Story already exists; deepening it with GWT criteria is the partner's job"
},
{
"q": "Deepen this existing story with testable done conditions QA can pass or fail at handoff",
"expect": "no-trigger",
"split": "train",
"near_miss_of": "deliver-acceptance-criteria",
"notes": "QA-ready done conditions on a single story belong to acceptance criteria"
},
{
"q": "The story for CSV import is written; I need QA-ready scenarios covering the happy path and error states",
"expect": "no-trigger",
"split": "validation",
"near_miss_of": "deliver-acceptance-criteria",
"notes": "Story-scoped testable scenarios, not story writing"
},
{
"q": "Catalog every boundary condition and failure mode across the whole file upload feature",
"expect": "no-trigger",
"split": "train",
"near_miss_of": "deliver-edge-cases",
"notes": "Feature-wide failure catalog belongs to edge cases"
},
{
"q": "Write the PRD for our new analytics module before we break anything down",
"expect": "no-trigger",
"split": "train",
"near_miss_of": "deliver-prd",
"notes": "Feature not yet specified; PRD comes before stories"
},
{
"q": "Capture the estimates, scope decisions, and open questions from today's backlog refinement session",
"expect": "no-trigger",
"split": "validation",
"near_miss_of": "iterate-refinement-notes",
"notes": "Refinement-session outcomes, not story authoring"
},
{
"q": "Draft user-facing release notes for the v3.2 update",
"expect": "no-trigger",
"split": "train",
"near_miss_of": "deliver-release-notes"
},
{
"q": "Debug this Python script that throws a KeyError on startup",
"expect": "no-trigger",
"split": "train",
"notes": "Unrelated engineering ask"
},
{
"q": "Write a SQL query joining the orders and customers tables by region",
"expect": "no-trigger",
"split": "validation",
"notes": "Unrelated"
},
{
"q": "Plan a week-long trip to Portugal in October",
"expect": "no-trigger",
"split": "validation",
"notes": "Unrelated"
}
]
}
deliver-user-stories - Version History
| Version | Date | Release | Effort | Type | Summary |
|---|---|---|---|---|---|
| 2.1.0 | 2026-06-10 | v2.26.0 | F-12-batch-1 | minor | Quality convergence: When NOT to Use + output-contract enumeration (F-12 Batch 1) |
| 2.0.1 | 2026-06-10 | v2.26.0 | F-12-batch-0 | patch | Description rewrite for trigger accuracy (boundary disambiguation; 2026-06-09 audit, v2.26.0 Batch 0) |
| 2.0.0 | 2026-01-26 | - | - | baseline | Prior published version |
2.1.0 (2026-06-10)
Quality-convergence minor (F-12 Batch 1): added a "When NOT to Use" section with boundary pointers to neighboring skills, and the Output Format now enumerates the template sections a complete artifact fills. No template or example changes.
2.0.1 (2026-06-10)
Description-only patch (F-12 Batch 0, from the 2026-06-09 repo audit): the trigger-surface description was rewritten to disambiguate collision pairs with an explicit boundary pointer to the sibling skill. No body, template, or behavior changes.
2.0.0 (2026-01-26)
Baseline row for the prior published version; see git history for its changes.
User Stories: Recurring Tasks Feature
This document contains the user stories for the Recurring Tasks feature. See the Recurring Tasks PRD for full context.
---
Story 1: Create Recurring Task
Story Header
| Field | Value |
|---|---|
| ID | US-101 |
| Title | Create Recurring Task |
| Persona | Team Lead |
| Priority | P0 |
| Epic/Feature | Recurring Tasks |
| Estimate | 5 points |
User Story Statement
As a team lead,
I want to create a task that repeats on a schedule,
so that I don't have to manually recreate recurring work items each week.
Context & Background
Team leads manage ongoing operational tasks like weekly status reports, monthly reviews, and recurring team meetings. Currently, they manually duplicate these tasks, which is time-consuming and error-prone. This story enables basic recurring task creation with standard patterns.
Acceptance Criteria
AC-1: Recurrence Toggle Available
Given I am creating a new task
When I view the task creation form
Then I see a "Make Recurring" toggle option
AC-2: Pattern Selection
Given I have enabled the "Make Recurring" toggle
When I view the recurrence options
Then I can select from Daily, Weekly, or Monthly patterns
AC-3: Weekly Day Selection
Given I have selected "Weekly" recurrence
When I configure the pattern
Then I can select which days of the week the task should recur (multi-select)
AC-4: Monthly Date Selection
Given I have selected "Monthly" recurrence
When I configure the pattern
Then I can choose either a specific date (1-31) or a relative day (e.g., "First Monday")
AC-5: First Instance Created
Given I have configured a recurrence pattern and saved the task
When the task is created
Then the first instance appears in my task list with a recurring indicator icon
Design Notes
- Recurrence panel expands below task details when toggle is enabled
- Use calendar-style day picker for weekly selection
- Show preview text: "Repeats every Monday and Wednesday"
- See Figma: Recurring Task Creation for mockups
Technical Notes
- Store pattern as RRULE format for future calendar sync compatibility
- Generate instances on-demand, not all at once
- First instance due date = task due date; subsequent follow pattern
Dependencies
| Dependency | Type | Status |
|---|---|---|
| None | - | Ready |
Out of Scope
- Custom patterns (e.g., "every 2 weeks")
- End date configuration (covered in US-105)
---
Story 2: Edit Single Instance
Story Header
| Field | Value |
|---|---|
| ID | US-102 |
| Title | Edit Single Instance |
| Persona | Individual Contributor |
| Priority | P0 |
| Epic/Feature | Recurring Tasks |
| Estimate | 3 points |
User Story Statement
As an individual contributor,
I want to edit a single occurrence of a recurring task without changing the entire series,
so that I can handle exceptions like rescheduling one meeting without affecting future occurrences.
Context & Background
Recurring tasks often need instance-level modifications - a weekly report might have a different deadline one week due to a holiday, or a recurring meeting might have different agenda items. Users need flexibility to modify individual instances without disrupting the overall pattern.
Acceptance Criteria
AC-1: Edit Scope Prompt
Given I am editing a task that is part of a recurring series
When I modify any field and attempt to save
Then I am prompted to choose "Edit this instance only" or "Edit all future instances"
AC-2: Instance-Only Edit
Given I have selected "Edit this instance only"
When I save my changes
Then only the current instance is updated, and future instances retain original values
AC-3: Instance Visual Indicator
Given I have edited a single instance
When I view that instance in my task list
Then it displays an indicator showing it differs from the series pattern
AC-4: Series Unaffected
Given I have edited a single instance
When I view other instances of the same series
Then they retain the original values from the series template
Design Notes
- Modal dialog for edit scope selection
- Modified instances show "edited" badge
- See Figma: Instance Edit Flow for interaction details
Technical Notes
- Instance modifications stored as overrides, not new records
- Preserve link to parent series for reporting purposes
Dependencies
| Dependency | Type | Status |
|---|---|---|
| US-101 | Story | Ready |
Out of Scope
- Editing the recurrence pattern itself (covered in US-103)
- Bulk editing multiple instances
---
Story 3: View Upcoming Instances
Story Header
| Field | Value |
|---|---|
| ID | US-103 |
| Title | View Upcoming Instances |
| Persona | Team Lead |
| Priority | P0 |
| Epic/Feature | Recurring Tasks |
| Estimate | 3 points |
User Story Statement
As a team lead,
I want to see upcoming instances of my recurring tasks,
so that I can plan my workload and anticipate upcoming deadlines.
Context & Background
Visibility into future recurring instances helps users plan their time effectively. Without this, users would only see the current instance and might be surprised by upcoming work. This story ensures recurring tasks are visible in planning views.
Acceptance Criteria
AC-1: Future Instances in Task List
Given I have a recurring task with future instances
When I view my task list with "Show upcoming" enabled
Then I see the next 4 weeks of instances for that recurring task
AC-2: Instances in Calendar View
Given I have a recurring task with future instances
When I view the calendar
Then I see recurring task instances on their scheduled dates
AC-3: Instance Count Display
Given I am viewing an instance of a recurring task
When I look at the task details
Then I see which instance this is (e.g., "#3 of series")
AC-4: Series Overview
Given I am viewing any instance of a recurring series
When I click "View Series"
Then I see a list of all past and upcoming instances with their status (completed, pending, overdue)
Design Notes
- Upcoming instances shown with lighter styling than current tasks
- "View Series" link in task detail panel
- Calendar shows recurring icon on recurring task dates
Technical Notes
- Instances generated lazily (on view, not on creation)
- Maximum 4 weeks forward generation to limit database growth
- Consider pagination for series overview if >20 instances
Dependencies
| Dependency | Type | Status |
|---|---|---|
| US-101 | Story | Ready |
| Calendar View Refactor | Team | In Progress |
Out of Scope
- Filtering task list by recurring vs. one-time
- Exporting series to external calendars
---
Story 4: Pause Recurring Series
Story Header
| Field | Value |
|---|---|
| ID | US-104 |
| Title | Pause Recurring Series |
| Persona | Team Lead |
| Priority | P1 |
| Epic/Feature | Recurring Tasks |
| Estimate | 2 points |
User Story Statement
As a team lead,
I want to pause a recurring task series temporarily,
so that I can stop generating new instances during holidays or project pauses without deleting the series.
Context & Background
Teams often need to temporarily halt recurring tasks - during holiday periods, team transitions, or project pauses. Deleting and recreating the series is cumbersome. A pause mechanism preserves the configuration while stopping new instance generation.
Acceptance Criteria
AC-1: Pause Action Available
Given I am viewing a recurring task instance
When I open the task actions menu
Then I see a "Pause Series" option
AC-2: Pause Confirmation
Given I click "Pause Series"
When the confirmation dialog appears
Then I see a message explaining that no new instances will be generated until resumed
AC-3: Paused Visual State
Given I have paused a recurring series
When I view any instance of that series
Then it displays a "Paused" indicator with muted styling
AC-4: Resume Functionality
Given I have a paused recurring series
When I click "Resume Series"
Then the series resumes generating instances from the next scheduled date
Design Notes
- Pause/Resume toggle in task action menu
- Paused tasks show pause icon and grayed styling
- Resume calculates next instance from today, not from pause date
Technical Notes
- Add
paused_attimestamp to series record - Paused series excluded from instance generation job
- Existing instances remain visible but no new ones created
Dependencies
| Dependency | Type | Status |
|---|---|---|
| US-101 | Story | Ready |
Out of Scope
- Scheduled pause (pause until specific date)
- Auto-resume after X days
---
INVEST Checklist Summary
| Story | Independent | Negotiable | Valuable | Estimable | Small | Testable |
|---|---|---|---|---|---|---|
| US-101 | Yes | Yes | Yes | Yes | Yes | Yes |
| US-102 | Yes (depends on 101) | Yes | Yes | Yes | Yes | Yes |
| US-103 | Yes (depends on 101) | Yes | Yes | Yes | Yes | Yes |
| US-104 | Yes (depends on 101) | Yes | Yes | Yes | Yes | Yes |
User Story: [Story Title]
Story Header
| Field | Value |
|---|---|
| ID | [US-XXX] |
| Title | [Brief descriptive title] |
| Persona | [User persona] |
| Priority | [P0/P1/P2] |
| Epic/Feature | [Parent feature or epic] |
| Estimate | [Story points or T-shirt size] |
User Story Statement
As a [specific user persona],
I want [action or capability],
so that [benefit or value I receive].
Context & Background
<!-- Why does this story exist? What problem does it solve? Link to PRD if available. -->
[Context explaining the user need and how this story fits into the larger feature]
Acceptance Criteria
<!-- Use Given/When/Then format. Each criterion should be independently testable. -->
AC-1: [Criterion Title]
Given [initial context or precondition]
When [action taken by user]
Then [expected outcome]
AC-2: [Criterion Title]
Given [initial context or precondition]
When [action taken by user]
Then [expected outcome]
AC-3: [Criterion Title]
Given [initial context or precondition]
When [action taken by user]
Then [expected outcome]
Design Notes
<!-- Link to mockups, UX considerations, or design decisions -->
- [Design note or link to Figma]
- [UX consideration]
Technical Notes
<!-- Implementation hints, technical constraints, or architectural considerations -->
- [Technical note]
- [Constraint or consideration]
Dependencies
<!-- Other stories, external systems, or teams this story depends on -->
| Dependency | Type | Status |
|---|---|---|
| [Dependency 1] | [Story/API/Team] | [Blocked/Ready] |
| [Dependency 2] | [Story/API/Team] | [Blocked/Ready] |
Out of Scope
<!-- Explicitly note what this story does NOT cover -->
- [Excluded item]
- [Excluded item]
Open Questions
<!-- Unresolved questions that may affect implementation -->
- [ ] [Question 1]
- [ ] [Question 2]
Related skills
FAQ
What format does deliver-user-stories use for each story?
deliver-user-stories writes As a [persona], I want [action], so that [benefit] statements plus Given/When/Then acceptance criteria, design notes, dependencies, and out-of-scope items using the bundled TEMPLATE.md structure.
When should deliver-user-stories not be used?
deliver-user-stories should be skipped when no PRD exists yet—use deliver-prd first—or when a single story needs deeper QA criteria via deliver-acceptance-criteria or feature-wide edge cases via deliver-edge-cases.