Help us improve
Share bugs, ideas, or general feedback.
From pm-delivery
Writes user stories in standard format with acceptance criteria, edge cases, and definition of done from feature briefs, PRDs, or verbal descriptions.
npx claudepluginhub mohitagw15856/pm-claude-skills --plugin pm-deliveryHow this skill is triggered — by the user, by Claude, or both
Slash command
/pm-delivery:user-story-writerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill produces production-ready user stories from a feature brief, PRD section, or verbal description. Each story follows the standard format with a clear who/what/why, behavioural acceptance criteria in Given/When/Then format, edge cases, and definition of done. Output is ready to paste into Jira, Linear, or your planning tool.
Generates user stories in persona-action-benefit format from product requirements. Useful for sprint planning, ticket writing, and scope communication.
Generates user stories from feature descriptions with acceptance criteria in Given/When/Then format, edge cases, dependencies, and out-of-scope items for sprint planning.
Writes user stories with INVEST-compliant acceptance criteria in Given/When/Then format. Activates during product backlog grooming, sprint planning, or feature refinement.
Share bugs, ideas, or general feedback.
This skill produces production-ready user stories from a feature brief, PRD section, or verbal description. Each story follows the standard format with a clear who/what/why, behavioural acceptance criteria in Given/When/Then format, edge cases, and definition of done. Output is ready to paste into Jira, Linear, or your planning tool.
Ask the user for these if not provided:
For each story:
Epic: [Parent epic name — e.g. "Advanced Search"] Story ID: [Jira/Linear ID — leave blank if not yet created] Priority: [P1 / P2 / P3] Story points: [Leave blank — for engineering to estimate]
As a [specific user type — not "user"], I want to [concrete action they want to take], So that [the outcome they achieve — business value, not feature description].
Example:
As an account manager, I want to filter my client list by last contact date, so that I can quickly identify clients I haven't spoken to in over 30 days and prioritise outreach.
[1–3 sentences of context that aren't in the user story itself: when does this story matter, what triggers the need, how does it fit into a larger flow. This helps engineers understand why before they ask.]
Format: Given / When / Then
Each criterion tests one specific behaviour. Write one GWT per observable outcome — not one GWT for the whole feature.
AC1: [Short name for this criterion]
Given [starting state or context]
When [user action]
Then [observable system behaviour]
AC2: [Short name]
Given [...]
When [...]
Then [...]
AC3: [Short name]
Given [...]
When [...]
Then [...]
[List scenarios that are non-obvious but must be handled. These become additional ACs or notes to engineering.]
[Explicitly state what this story does NOT cover — prevents scope creep and clarifies where the next story begins.]
If the user provides an epic or feature brief, decompose it into a full set of stories before writing them:
Epic: [Name] Goal: [What outcome does completing this epic achieve?] Stories:
| # | Story | Notes | Dependencies |
|---|---|---|---|
| 1 | [Core happy path story — the simplest version of the feature that delivers value] | ||
| 2 | [Validation / error handling story] | Depends on #1 | |
| 3 | [Edge case or power user story] | Depends on #1 | |
| 4 | [Admin or configuration story] | ||
| 5 | [Performance or scale story — if applicable] | Depends on #1 |
Suggested sprint order: [Which stories are P1 for MVP? Which can follow in a later sprint?]
Use these to review stories before handing to engineering:
| Anti-pattern | Example | Fix |
|---|---|---|
| Solution in the story | "As a user I want a dropdown filter" | Remove the UI decision — "As a user I want to filter by date range" |
| Vague "so that" | "so that it's easier to use" | Make it specific — "so that I can prioritise outreach without opening each record manually" |
| Too big | Story covers 5 distinct user flows | Split into separate stories per flow |
| No acceptance criteria | Story has description only | Add at least 3 GWT criteria before engineering starts |
| ACs that test the solution, not the behaviour | "Given the dropdown is open, When I select an option" | Test the outcome — "Given I have applied a date filter, When I view my results, Then only clients last contacted in that date range appear" |
| Missing empty state | No AC for what happens with 0 results | Add it — empty states are part of the feature |
| Missing error state | No AC for network failure or invalid input | Add error handling ACs explicitly |
Feature brief: "Allow users to export their invoice history as a PDF or CSV"
As a finance admin, I want to export my invoice history as a CSV file, so that I can import it into our accounting software without manual data entry.
AC1: Successful export
Given I am on the Invoices page with at least one invoice
When I click "Export" and select "CSV"
Then a CSV file is downloaded containing all visible invoices with columns: Invoice ID, Date, Amount, Status, Customer Name
AC2: Empty state
Given I am on the Invoices page with no invoices
When I click "Export"
Then the export button is disabled and a tooltip reads "No invoices to export"
AC3: Filtered export
Given I have applied a date filter showing invoices from Jan 2026 only
When I click "Export" and select "CSV"
Then the export contains only invoices from Jan 2026 — not all invoices
Edge cases:
Out of scope: PDF export (Story 2), scheduled exports (future epic)
As a finance admin, I want to export my invoice history as a formatted PDF, so that I can share a professional summary with our accountant.
[... ACs follow same pattern ...]