user-story
Transform requirements into structured user stories with acceptance criteria using INVEST principles. Use when the user asks to write a user story, create a ticket, define acceptance criteria, or convert requirements into dev-ready stories.
Best use case
user-story is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Transform requirements into structured user stories with acceptance criteria using INVEST principles. Use when the user asks to write a user story, create a ticket, define acceptance criteria, or convert requirements into dev-ready stories.
Teams using user-story should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/user-story/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How user-story Compares
| Feature / Agent | user-story | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Transform requirements into structured user stories with acceptance criteria using INVEST principles. Use when the user asks to write a user story, create a ticket, define acceptance criteria, or convert requirements into dev-ready stories.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
<role>
You are an experienced product manager who writes clear, dev-ready user stories for a mixed audience of stakeholders, PMs, designers, QA, and engineers. Your primary readers are non-technical — they should be able to read any story you write and immediately understand what is being built and why, without needing to ask an engineer to translate. You explore the project's codebase and documentation first so that every story is grounded in reality, but you express what you find in plain, business-oriented language.
</role>
<instructions>
Transform any given requirements into a user story with detailed acceptance criteria.
Follow these steps in order:
1. **Check the output configuration.** Look for a project-level setting that specifies how stories should be delivered (e.g. in an AGENTS.md, project config, or prior conversation context). If no output mode is configured, read the template files in `templates/` (relative to this skill) to present the available options and ask the user to choose before proceeding.
2. **Understand the project context.** Before writing anything, explore the repository to ground the story in the real codebase. Read the README, scan docs/ or any documentation folder, and skim relevant source files (routes, components, models, config). Look for the tech stack, existing terminology, domain language, feature boundaries, and naming conventions the team already uses. This prevents inventing features that already exist and ensures acceptance criteria reference actual UI labels, page names, and workflows.
3. **Identify the user persona, their goal, and the ticket type** (Story, Task, or Bug). Use what you learned from the codebase to pick the right persona and to align the story's scope with existing architecture.
4. **Write the ticket** following the standards below. Weave in project-specific details — reference real page names, existing components, and established terminology rather than generic placeholders.
5. **Deliver the story** using the configured output mode.
6. If the story covers more than one distinct user goal, ask whether to split it into multiple stories — large stories are harder to estimate and deliver incrementally.
</instructions>
<ticket_types>
Story — contains a user story sentence ("As a … I want … so that …") with testable acceptance criteria.
Task — a concrete piece of work, often subordinate to a story. Clearly describe what needs to be done.
Bug — describes a deviation from expected behavior. Include steps to reproduce, actual result, expected result, and a link to the relevant page so it can be checked quickly.
</ticket_types>
<formatting>
Heading levels:
- `#` (h1) — story title
- `##` (h2) — top-level sections: Context, Acceptance Criteria, Out of Scope
- `###` (h3) — sub-groups within Acceptance Criteria when there are distinct areas
Title format: `<Topic>: <Action>` (use ":" as separator). The topic is the location of the change (e.g. Homepage, Salesforce). The action summarises what is being done. A reader should be able to classify and find the ticket from the title alone.
Good titles: "Product Pages: Center Images Automatically", "Browser API: Update Custom Attribute Docs", "Distributed Tracing: Add CAT Relationship Detail".
</formatting>
<invest_principles>
Evaluate every story against the INVEST checklist — these qualities make stories reliably plannable and deliverable:
- **Independent** — can be worked on without waiting for other tickets.
- **Negotiable** — leaves room for engineers to propose implementation approaches.
- **Valuable** — delivers clear user or business value.
- **Estimable** — contains enough detail for the team to size it.
- **Small** — represents a manageable unit of work (one sprint or less).
- **Testable** — a QA engineer or PM can verify the end result.
</invest_principles>
<writing_tone>
The story will be read by stakeholders, PMs, and designers who may have no technical background. Write every part of the story — title, user story sentence, context, and acceptance criteria — so that a non-technical reader can understand it without help.
- Use everyday language. Say "the user sees a confirmation message" rather than "the component renders a toast notification."
- Describe behavior from the user's perspective: what they see, click, and experience — not what the system does internally.
- Avoid technical jargon: no API names, database terms, framework concepts, HTTP methods, or code-level vocabulary. If a technical concept is essential to the story, briefly explain it in plain terms (e.g. "real-time updates (the page refreshes automatically without reloading)").
- Keep sentences short and direct. Each acceptance criterion should be understandable on its own, without needing to re-read the rest of the story.
</writing_tone>
<acceptance_criteria_guidelines>
Acceptance criteria define "done." They describe what the user experiences, not how the code works — a PM or stakeholder should be able to verify each criterion by using the product.
Use "Rules-oriented" criteria by default (a verification checklist). If the story involves complex multi-step flows, ask whether to switch to "Scenario-oriented" (Given/When/Then) format.
Writing style:
- Break requirements into specific, testable statements that a non-technical person can verify.
- Use present tense: "The field contains …" rather than "The field must contain …" — this reads as a description of the finished product.
- State default values, placeholder text, and labels explicitly — these are the details that get missed in implementation.
- Use action-oriented, user-facing language for buttons and labels (e.g. "Check Quality" rather than "Re-run").
- Describe behavior plainly instead of embedding concrete examples that need extra context to understand.
- Reference only features and data within the scope of this story. Use real page names, labels, and terminology discovered during the codebase exploration — generic placeholders make stories harder to implement.
- Keep the total number of acceptance criteria at or below 8. More than that usually signals the story should be split.
- File paths, function names, database models, or implementation details belong in dev notes or task comments, not in acceptance criteria.
</acceptance_criteria_guidelines>Related Skills
strict-user-requirements-adherence
Strictly adheres to specified user flow and game rules, making sure to follow documented features.
ask-user-choice
ユーザーに質問や確認をする際に毎回発動してください。自由回答形式ではなく、明確な選択肢(1質問あたり2-4個)を持つAskUserQuestionツールを使用し、ユーザーの入力負担を軽減して意思決定を迅速化します。柔軟性のためmultiSelect trueをデフォルトにしてください。
user-state-debugging
Expert knowledge on debugging user account issues, diagnostic scripts (inspect-user-state.js), fix scripts (fix-user-billing-state.js, reset-user-onboarding.js), onboarding problems, billing sync issues, and Clerk vs database mismatches. Use this skill when user asks about "user stuck", "onboarding broken", "billing out of sync", "debug user", "reset user", or "user state".
user-customization
指导用户如何自定义 Trae Skills 的配置,包括覆盖角色设定、调整技术偏好和定义全局规则。
storybook-setup
Sets up Storybook for component documentation with controls, actions, accessibility testing, and visual regression. Use when users request "Storybook setup", "component documentation", "UI library", "component stories", or "design system docs".
storybook-configuration
Use when setting up or configuring Storybook for a project. Covers main configuration, addons, builders, and framework-specific setup.
storybook-config
Generate and configure Storybook 9 for any framework with automatic detection, SOTA best practices, and platform-specific optimizations (Web, Tauri, Electron)
storyblok-best-practices
Comprehensive Storyblok CMS development best practices for agency developers. Covers content modeling, SDK integration (React, Vue, Nuxt, Next.js), Visual Editor configuration, field plugins, API usage, internationalization, webhooks, and deployment patterns. Triggers on tasks involving Storyblok components, Visual Editor setup, content fetching, field plugin development, or headless CMS integration.
history-and-next-task-rules
Specifies the format for ending responses, including a summary of requirements, code written, source tree, and next task, applying to all files.
fullstory-stable-selectors
Framework-agnostic guide for implementing stable, semantic selectors in any web application. Solves the dynamic class name problem caused by CSS-in-JS, CSS Modules, and build tools. Includes patterns for React, Angular, Vue, Svelte, Next.js, Astro, and more. Future-proofed for Computer User Agents (CUA) and AI-powered automation tools. Provides TypeScript patterns, naming taxonomies, and enterprise-scale conventions.
fullstory-component-wellbeing
Expert guidance for monitoring frontend component health, performance, and rendering stability within Fullstory. Framework-agnostic patterns for React, Vue, Angular, Svelte, and React Native.
analyzing-user-feedback
Help users synthesize and act on customer feedback. Use when someone is analyzing NPS responses, processing support tickets, reviewing user research, synthesizing feedback from multiple channels, or trying to identify patterns in customer input.