Use this when a team wants a facilitated, multi-step story writing session that starts from user personas, works through acceptance criteria interactively, and ends with polished stories pushed to a project tracker. This is a skill set — it chains multiple skills with bridge steps between stages.
For writing a single story quickly, use /story-write instead.
Process
Step 1: Establish personas
Start by grounding the session in who the stories are for.
- Check for existing personas — look in the
personas/directory. If persona files exist, list them:"I found these personas: (list). Which ones are relevant to this session?"
- If no personas exist, offer two paths:
- Quick proto-persona — "Describe the user in 2-3 sentences: their role, what they care about, what frustrates them. I'll create a working proto-persona we can reference."
- Full persona — "Want to run
/persona-createfirst to build a proper research-backed persona?"
- Confirm the persona(s) for this session. All stories will reference these personas in the "As a..." description.
Bridge → Step 2: Persona names and key goals carry forward into scope mapping and story descriptions.
Step 2: Map the feature scope
Collaboratively define what the session will cover.
- What feature or capability are we writing stories for? (The feature area, not individual stories yet.)
- What are the boundaries? What's in scope for this session vs. out of scope?
- Any known constraints? (APIs, third-party services, design system, timeline, team capacity)
- Any designs or wireframes? (Figma links, screenshots, descriptions)
- What story format do you need?
- Default (our standard) — As a / I want / So that + Gherkin AC + Technical Details + Out of Scope
- Jira-optimized — Summary, Description, Acceptance Criteria (Gherkin), Story Points, Labels
- Linear-optimized — Title + markdown body with clean headers, priority, labels
- Custom — describe your team's template
- Where should stories go for this session? (This applies to all stories.)
- Conversation only (default)
- Linear — push directly via Linear MCP
- Jira — push directly via Atlassian MCP
- Asana — push via Asana MCP (if connected)
- Notion — create as a Notion page
- Other — check available connectors via
search_mcp_registry
Based on the feature scope, propose 3-7 candidate stories as one-line descriptions. Get user confirmation on which stories to write.
Bridge → Step 3: The scope boundaries and candidate story list feed into acceptance criteria development.
Step 3: Write acceptance criteria (interactive Gherkin workshop)
For each story in the candidate list, walk through acceptance criteria together:
-
Happy path first — "What's the main thing the user does, and what should happen?"
- Draft a Gherkin scenario: Given (context) → When (action) → Then (outcome)
- Read it back and ask: "Does that capture it?"
-
Error paths — "What can go wrong? What if the user enters bad data, loses connection, or doesn't have permission?"
- Draft error scenarios for each realistic failure mode
-
Edge cases — "What about empty states, maximum limits, concurrent users, or unusual inputs?"
- Add edge case scenarios where relevant
-
Review the full AC set — Present all scenarios for the story and ask:
- "Are we missing any scenarios?"
- "Are any of these unnecessary?"
- "Is the scope right — not too big?"
-
Check story size — If the AC set suggests more than 1-3 days of work, propose splitting:
- Split into vertical slices (each delivers end-to-end value)
- Never split by technical layer
- Get confirmation before splitting
Repeat for each story in the session.
Bridge → Step 4: The acceptance criteria become either prototype specs or polished story content.
Step 4: Choose output path
For each story (or the full set), ask:
"Would you like to: A) Generate a UI prototype — a quick HTML mockup to validate the feature visually before writing final stories B) Write polished stories — go straight to formatted story output ready for your tracker C) Both — prototype first, then write stories"
Path A: Prototype
Use the /artium-prototype approach:
- Extract key UI elements from the acceptance criteria
- Generate a branded HTML file at
./prototypes/(feature-slug)/index.html - Preview for the user
- Capture a screenshot for attaching to stories later
Path B: Polished stories
For each story, use the /story-write Step 4 format (matching the format chosen in Step 2):
- Write the full story with all sections
- Use the persona name(s) from Step 1 in the "As a..." description
- Include the Gherkin AC developed in Step 3
- Fill in Technical Details, Out of Scope, and Added Context
Path C: Both
Run prototype first, then write stories with the prototype linked.
Step 5: Human review
Present the complete package for all stories written in this session:
Session review: Here are the (N) stories from this session.
(List each story title with a one-line summary)
For each story:
- Is the description accurate?
- Are the acceptance criteria complete?
- Is the scope right?
- Any changes needed?
(If prototypes were generated:)
- Does the prototype match your expectations?
Ready to push to (Linear / Jira / etc.)? Or keep in conversation only?
Do not proceed to Step 6 until the user explicitly approves. Loop back to Step 3 or Step 4 for any story that needs changes.
Step 6: Export to tracker
Push all approved stories to the session-level tracker choice using the /story-write Step 8 process:
-
Show batch summary before pushing:
Ready to push (N) stories to (tracker). Confirm?
- (Story title 1)
- (Story title 2) ...
-
Push all stories after confirmation. Remember team, project, and other settings across stories.
-
Report results:
Pushed (N) stories to (tracker):
- (ID): (Title) — (tracker URL)
- ...
-
Handle failures individually — report which succeeded and offer to retry failures.
See /story-write Step 8 for detailed tracker-specific instructions (Linear, Jira, Asana, Notion).
Related skills
/story-write— write a single story (this skill set wraps and extends it)/persona-create— create full research-backed personas (called from Step 1)/artium-prototype— create branded HTML prototypes (called from Step 4)/story-split— break large stories into smaller slices (called from Step 3)/story-review— review existing stories for quality/journey-map— create journey maps that inform story scope
Output locations
| Format | Location | Notes |
|---|---|---|
| Story text | Conversation | Always produced. Source of truth until pushed. |
| Prototype | ./prototypes/(feature-slug)/index.html | Optional. Branded HTML mockup. |
| Linear issues | Linear workspace | Via Linear MCP. Batch push supported. |
| Jira issues | Jira project | Via Atlassian MCP. Batch push supported. |
| Asana tasks | Asana project | Via Asana MCP (if connected). |
| Notion pages | Notion workspace | Via Notion MCP. |
Example Output
Input
- Team: Meridian Health, digital product squad building a patient-facing mobile app
- Personas available:
personas/sarah-caregiver.md(adult daughter managing care for an elderly parent),personas/dr-patel-ordering-physician.md - Feature scope: Medication refill requests — patients (or caregivers) can request prescription refills without calling the clinic
- Constraints: Must integrate with existing RxHub pharmacy API; no new backend services this sprint; design system is Meridian DS v2
- Tracker: Linear, project
MHEALTH, teamMobile Squad
Output (abbreviated)
Story Workshop — Medication Refill Requests
Step 1: Personas confirmed
Using Sarah (Caregiver) for this session — adult daughter managing prescriptions for her father, Earl. Key goals: reduce phone tag with the clinic, get confirmation without waiting on hold. Key frustrations: unclear refill status, repeated authentication friction.
Dr. Patel is out of scope for this session — refill approval workflows are a separate session.
Step 2: Feature scope
In scope: Viewing active prescriptions, submitting a refill request, confirmation messaging, request status tracking.
Out of scope: Prescription transfers, new prescription requests, insurance pre-auth flows.
Constraints noted: RxHub API, Meridian DS v2, no new backend services.
Format: Linear-optimized (title + markdown body, priority, labels).
Tracker: Linear → MHEALTH, Mobile Squad.
Candidate stories for this session:
| # | One-line description |
|---|---|
| 1 | View list of active prescriptions eligible for refill |
| 2 | Submit a refill request for a single prescription |
| 3 | Confirm refill request submitted and show estimated ready date |
| 4 | View status of a pending refill request |
| 5 | Handle RxHub API error gracefully during submission |
✅ All 5 confirmed. Proceeding to AC workshop.
Step 3: Acceptance criteria (interactive Gherkin workshop)
Story 2 — Submit a refill request
Happy path:
Scenario: Caregiver submits a refill request for an eligible prescription
Given Sarah is logged in and viewing Earl's active prescriptions
And "Lisinopril 10mg" shows as eligible for refill (≥7 days before empty)
When she taps "Request Refill" on Lisinopril
And confirms the preferred pharmacy (pre-populated from profile)
Then a refill request is sent to RxHub
And she sees a success confirmation with estimated ready date
And the prescription status updates to "Refill Requested"
Error path:
Scenario: RxHub returns a refill-too-soon error
Given Sarah taps "Request Refill" on Atorvastatin
When the RxHub API returns error code RX-429 (too soon to refill)
Then she sees: "It's too early to refill this prescription.
You can request again on [date]."
And no request is logged in the system
Edge case:
Scenario: Caregiver has no preferred pharmacy on file
Given Sarah's profile has no preferred pharmacy saved
When she taps "Request Refill"
Then she is prompted to select or add a pharmacy before submitting
And her selection is offered as a save option for future refills
AC review: No splits needed — estimated 2 days. ✅ Scope confirmed.
(Stories 1, 3, 4, 5 follow same workshop pattern — ACs drafted and confirmed)
Step 4: Output path selected → B) Polished stories
MHEALTH story: Submit a refill request
Title: Caregiver can submit a prescription refill request
As a caregiver managing a dependent's medications (Sarah), I want to submit a refill request directly from the app, So that I don't have to call the clinic or pharmacy during business hours.
Acceptance Criteria:
(Gherkin scenarios from Step 3 — happy path, error path, edge case)
Technical Details:
- Call
POST /rxhub/v2/refill-requestwithpatient_id,rx_number,pharmacy_npi - Map RxHub error codes:
RX-429→ too soon,RX-503→ pharmacy unavailable - Preferred pharmacy pulled from
patient_profile.preferred_pharmacy
Out of Scope: Prescription transfers, insurance pre-auth, auto-refill enrollment
Labels: caregiver, pharmacy, rxhub-integration
Priority: High
Step 5: Session review
Here are the 5 stories from this session:
- View eligible prescriptions — List active Rxs with refill eligibility status
- Submit refill request — Request a refill, confirm pharmacy, send to RxHub ✅
- Refill confirmation screen — Success state with estimated ready date
- View pending refill status — Status tracker for in-flight requests
- RxHub error handling — Graceful degradation for API failures
Awaiting explicit approval before pushing to Linear.
Step 6: Export to Linear (after approval)
Pushed 5 stories to Linear / MHEALTH / Mobile Squad:
MHEALTH-214: View eligible prescriptions — linear.app/meridian/issue/MHEALTH-214MHEALTH-215: Submit refill request — linear.app/meridian/issue/MHEALTH-215MHEALTH-216: Refill confirmation screen — linear.app/meridian/issue/MHEALTH-216MHEALTH-217: View pending refill status — linear.app/meridian/issue/MHEALTH-217MHEALTH-218: RxHub error handling — linear.app/meridian/issue/MHEALTH-218