From dev-workflow
Use when a user wants to capture a feature idea as a formal story, create a ticket, write to the backlog, or says 'create a story', 'write a ticket', 'add to backlog', or describes a feature they want tracked.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dev-workflow:create-storyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Role:** Create Story — gather context, generate a story draft, and submit it to the PM tool
Role: Create Story — gather context, generate a story draft, and submit it to the PM tool
SCOPE BOUNDARY: This skill creates a PM story and NOTHING else. It does not write code, write local files, make commits, checkout git branches, implement features, or start development. When the story is submitted, output the story URL and STOP. This skill never creates sub-stories or subtasks — all repos and scope live in the single story.
No required arguments. Optional: a brief feature description as a starting prompt.
Read skills/shared/standards.md — these mandatory rules govern this entire session.
Read skills/shared/adapter-loading.md — adapter loading procedure referenced in Phase 2.
Read skills/shared/repo-discovery.md — repo discovery procedure referenced in Phase 0.
Before Phase 0, verify how this skill was invoked per the Story Creation Gate in skills/shared/standards.md:
full-cycle run: proceed.The Phase 5 draft-approval gate is unchanged and still applies on every path.
skills/shared/repo-discovery.md (Path 1 → one repo; Path 2 → all discovered repos)skills/shared/repo-discovery.md (identical to folder/repo name, e.g. /workspace/my-service → my-service)CLAUDE.md from the repo root:
CLAUDE.md exists: extract the service purpose — look for a ## Project Overview section first; if absent, use the first substantive paragraph (skip headings and blank lines)CLAUDE.md is absent: note a warning — "⚠️ No CLAUDE.md found for {service-name} — skipping context for this service" — and continue**{service-name}** ({claude_md_path}):
{purpose}
Services without a CLAUDE.md are omitted from the briefs.$ARGUMENTS is non-empty: use it as the story description and proceed to Phase 2$ARGUMENTS is empty: use AskUserQuestion to ask —
"What story would you like to create?" Then use the answer as the story description and proceed to Phase 2
~/.claude/dev-workflow/config.jsonpm_adapter valueskills/shared/adapter-loading.md## Create Story heading in the loaded adapter file. If not found: STOP — "This PM adapter does not support Create Story. Please update ~/.claude/skills/pm-adapter/{name}.md with a Create Story section."teamId, Jira requires PROJECT_KEY if not yet established in session). Surface any such requirements to the user before starting the interview in Phase 3, so they don't interrupt Phase 6.Using the service briefs from Phase 0 and the story description from Phase 1, attempt to populate all story draft fields:
title: derive from the starter prompt — never askoriginalRequest: verbatim user starter prompt — never askdescription: summarize from starter prompt; explore codebase for context if vague — ask only if the request is genuinely too vague to understand after investigationreposToModify: a LIST of the discovered repos the feature actually touches (drawn from Phase 0 discovery) — explore code if unclear; ask only if no repo clearly fits after investigation and there are no repos. When the story spans more than one repo, tag each inferred acceptance-criteria and testing-instruction item with its repo marker (e.g. [api], [web]); items spanning all repos are tagged [all]reposToReference: infer from repo briefs (repos that provide context without being modified) — never askacceptanceCriteria: derive from repo patterns, existing tests, and feature description — never ask (infer up to 5 items; label uncertain ones [Inference]; apply per-repo tags when multiple repos are in scope)testingInstructions: derive from repo patterns and existing test conventions — never ask (infer up to 3 steps; apply per-repo tags when multiple repos are in scope)story_type: infer from context — "feature" for new capabilities, "bug" for fixes, "chore" for maintenance — never askUse the AskUserQuestion tool only when both of these are true: (1) the answer cannot be inferred from the codebase or context, and (2) getting it wrong would produce a materially misleading story. Stop asking after 2 questions maximum — draft regardless of remaining ambiguity, labeling uncertain fields as [Inference].
Note: The initial "What story would you like to create?" prompt in Phase 1 does not count against the 2-question limit. The limit applies only to clarifying questions asked during Phase 3.
Internally hold the draft fields — do NOT emit any JSON or code block. Display only the rendered markdown preview below (no code fences, no JSON):
Title: {title}
Description: {description}
Repos to modify: {reposToModify joined with ", "} Repos to reference: {reposToReference joined with ", " or "(none)"}
Acceptance Criteria:
Testing Instructions:
Use AskUserQuestion to ask the user. The question field must include the full story draft (same markdown rendered in Phase 4), followed by the approval prompt. This ensures the story content is visible regardless of how the question is routed or displayed. Format the question as:
{full story draft markdown, same as Phase 4 output}
---
Type **yes** to submit this story to {pm_adapter}, or describe what to change.
Use the PM adapter's Create Story operation (capability #5) with all draft fields.
On success: display —
Story created successfully!
ID: {story-id}
URL: {story-url}
On failure: STOP with the error — do not retry silently.
npx claudepluginhub mechanicaltyler/claude-quest --plugin dev-workflowCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.