Build a feature plan split into technical stories with Gherkin scenarios in Markdown. Collect required parameters, ask for missing ones, and after explicit approval create one GitHub issue per story, apply native parent/blocker relations, align labels using existing repository labels (or user-approved new labels), and add each issue to a classic project board using GitHub CLI.
How this skill is triggered — by the user, by Claude, or both
Slash command
/feature-story-planner:feature-story-plannerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use this skill when the user wants a feature decomposition into implementable technical stories with acceptance scenarios.
Use this skill when the user wants a feature decomposition into implementable technical stories with acceptance scenarios.
Collect all required parameters before writing the final story set:
feature_summary - concise feature scope.repository - target repo in OWNER/REPO format.epic_id - epic identifier (for example 1).epic_title - epic title.target_category - category/layer (Frontend, Backend, Platform, etc.).story_granularity - expected story size (small, medium, large).project_column_id - classic project column ID where cards must be added.labels - preferred label hints (none if no preference).assignee - GitHub login (none if not used).milestone - milestone number (none if not used).parent_relation_mode - how parent linkage is modeled (epic-parent or story-parent).dependency_mode - dependency semantics to apply (blocks / blocked_by).relation_overrides - optional per-story relation overrides (none if not used).If any required parameter is missing:
project_column_id is unknown, ask the user to provide it (for classic boards this is required for card creation).After all parameters are known, output a Markdown plan with multiple stories. Match this style:
## Story <epic>.<n> — <Story title>
**Epic:** <epic id> - <epic title>
**Category:** <target category>
**Files:** `<file1>`, `<file2>`
**Relations:** Parent: <epic|story-key|none>; Blocks: <story keys|none>; Blocked by: <story keys|none>
**Label intent:** <semantic categories for this story>
---
### Feature: <feature slice name>
> As a <role>, I want <capability> so that <outcome>.
#### Task 1: <task title>
```gherkin
Feature: <task feature name>
Scenario: <scenario title>
Given ...
When ...
Then ...
And ...
```
#### Task 2: <task title>
```gherkin
Feature: <task feature name>
Scenario: <scenario title>
Given ...
When ...
Then ...
```
Rules:
story_granularity.After presenting the stories, stop and ask for explicit approval.
Use a direct question such as:
Do you approve creating these stories as GitHub issues, applying parent/blocker relations, aligning labels, and adding them to the classic project column now?
Do not create issues, relations, labels, or project cards until explicit approval is received.
After explicit approval:
gh label list --repo OWNER/REPO --limit 200
label intent to existing labels.gh label create "<label_name>" --repo OWNER/REPO [--color "<hex_without_hash>"] [--description "<text>"]
gh issue create \
--repo OWNER/REPO \
--title "Story <epic>.<n> — <Story title>" \
--body-file <story_markdown_file> \
[--label "<resolved_label_1>" --label "<resolved_label_2>"] \
[--assignee "<assignee>"] \
[--milestone "<milestone_number>"]
gh api repos/OWNER/REPO/issues/<issue_number> --jq '{id: .id, node_id: .node_id}'
gh api graphql -f query='
mutation($issueId: ID!, $subIssueId: ID!) {
addSubIssue(input: {issueId: $issueId, subIssueId: $subIssueId}) {
issue { id number }
subIssue { id number }
}
}' -F issueId=<PARENT_NODE_ID> -F subIssueId=<CHILD_NODE_ID>
gh api graphql -f query='
mutation($issueId: ID!, $blockingIssueId: ID!) {
addBlockedBy(input: {issueId: $issueId, blockingIssueId: $blockingIssueId}) {
issue { id number }
blockingIssue { id number }
}
}' -F issueId=<BLOCKED_NODE_ID> -F blockingIssueId=<BLOCKER_NODE_ID>
id and add card to classic project column:gh api repos/OWNER/REPO/issues/<issue_number> --jq '.id'
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
/projects/columns/<project_column_id>/cards \
-f content_id=<issue_id> \
-f content_type=Issue
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub joseanmeonez/ai-skills --plugin feature-story-planner