Break down GitHub issues into official GitHub sub-issues by parsing task lists from parent issue descriptions...
This skill automates breaking down GitHub issues into official GitHub sub-issues using the GitHub GraphQL API. It parses various task list formats from parent issue descriptions, shows a preview of proposed sub-issues, and creates them with proper parent-child relationships while inheriting metadata like labels and assignees.
ā ļø CRITICAL: Use this skill IMMEDIATELY after creating an Epic/parent issue with a task list!
DO NOT manually create sub-issues - they won't have proper GitHub parent-child relationships and won't show in the sub-issue UI.
Use this skill when:
Invocation patterns:
ā ļø Common Mistake to Avoid:
ā WRONG - Creates informal sub-tasks WITHOUT parent-child links:
# Create epic
gh issue create --title "Epic: Feature X"
# Manually create sub-issues (NO PARENT-CHILD LINK!)
gh issue create --title "Phase 1" --body "Sub-task of #42"
gh issue create --title "Phase 2" --body "Sub-task of #42"
# Result: Issues exist but aren't real sub-issues
ā CORRECT - Creates official sub-issues WITH parent-child links:
# Create epic with task list
gh issue create --title "Epic: Feature X" --body "## Tasks
- [ ] Phase 1: Setup
- [ ] Phase 2: Implementation"
# IMMEDIATELY use this skill to create official sub-issues
python scripts/create_subissues.py --issue 42 --yes
# Result: Proper sub-issues that show in GitHub UI
Why this matters:
Environment Variables:
export GITHUB_TOKEN="ghp_xxxx" # GitHub token with repo scope
Token Scopes:
GITHUB_TOKEN - Requires repo scope for issue operationsSetup Location:
Configure in .devcontainer/.env (gitignored):
GITHUB_TOKEN=your_token_here
# Break down an issue (interactive - will show preview)
python /workspace/.claude/skills/github-issue-breakdown/scripts/create_subissues.py --issue 42
# Specify repository explicitly
python /workspace/.claude/skills/github-issue-breakdown/scripts/create_subissues.py --issue 42 --repo owner/repo
# Dry-run mode (preview only, no creation)
python /workspace/.claude/skills/github-issue-breakdown/scripts/create_subissues.py --issue 42 --dry-run
When user provides an issue number in their request:
Extract issue number from user request:
User: "Break down issue #42 into sub-tasks"
Execute the script:
cd /workspace/.claude/skills/github-issue-breakdown
python scripts/create_subissues.py --issue 42
Script workflow:
Example output:
Repository: codekiln/langstar
Parent Issue: #42 - Add user authentication
Found 4 tasks to convert into sub-issues:
1. Create login endpoint
2. Create registration endpoint
3. Implement JWT token generation
4. Add authentication middleware
Create these 4 sub-issues? (y/n):
When user requests breakdown but doesn't specify which issue:
Recognize the request:
User: "Break down this issue into sub-tasks"
User: "Create sub-issues from the task list"
Ask user for issue number: Use the AskUserQuestion tool to prompt for the issue number.
Execute with provided issue number:
python scripts/create_subissues.py --issue <user_provided_number>
When user wants to see what would be created without actually creating:
Execute in dry-run mode:
python scripts/create_subissues.py --issue 42 --dry-run
Script will:
/workspace/.claude/skills/github-issue-breakdown/scripts/create_subissues.py
/workspace/.claude/skills/github-issue-breakdown/scripts/gh_helpers.py
| Argument | Required | Description | Example |
|---|---|---|---|
| --issue | Yes | Issue number to break down | --issue 42 or --issue 47 |
| --repo | No | Repository (auto-detected if not provided) | --repo codekiln/langstar |
| --dry-run | No | Preview mode without creating | --dry-run |
| --inherit-labels | No | Inherit labels from parent (default: true) | --inherit-labels |
| --inherit-assignees | No | Inherit assignees from parent (default: true) | --inherit-assignees |
| --section | No | Only parse under this section header | --section "Implementation Tasks" |
| --checkbox-only | No | Only parse checkboxes - [ ], ignore bullets/numbers |
--checkbox-only |
| --max-depth | No | Maximum indentation depth (0 = top-level, default: 0) | --max-depth 1 |
| --all-bullets | No | Disable section filtering (legacy behavior) | --all-bullets |
| --yes, -y | No | Auto-confirm creation without prompting | --yes |
Required:
GITHUB_TOKEN - Fine-grained or classic PAT with repo scopeOptional:
GH_TOKEN - Alternative name for GitHub token (fallback)createIssue mutation with parentIssueIdThe skill uses context-aware parsing by default. Structure your parent issues properly for best results:
Place your tasks under a dedicated section header:
## Overview
Detailed description of the feature...
## Implementation Tasks
- [ ] Phase 1: Research & Experimentation
- [ ] Phase 2: SDK Layer
- [ ] Phase 3: CLI Layer
- [ ] Phase 4: Testing
## Background
Any explanatory content here won't be parsed as tasks.
## Configuration Details
- **Environment variables**: FOO_BAR (won't be parsed - not under Tasks section)
- **Config file**: settings.toml (won't be parsed)
Why this works:
## Implementation Tasks headerDon't use bullets for non-task content throughout your issue:
## Configuration Methods
- **Environment variables**: FOO (this will be parsed as a task!)
- **Config file**: bar.toml (this will be parsed as a task!)
- **CLI flags**: --flag (this will be parsed as a task!)
## Behavior
- When condition X happens (this will be parsed as a task!)
- Need explicit flag Y (this will be parsed as a task!)
Why this fails:
How to fix:
--section "Tasks" to explicitly specify which section contains actual tasksProblem: Issue has 100+ lines with bullets for formatting, configuration options, and explanations.
Symptom: Script finds 50+ tasks when you only want 5-10.
Solution:
--dry-run first to preview what will be parsed## Tasks or ## Implementation Tasks section--section "Phase Tasks" to target specific section--checkbox-only for strict checkbox-only parsingProblem: Issue has multi-level nested tasks with sub-items.
Symptom: All nested items become separate sub-issues.
Solution:
--max-depth 1 if you want one level of nestingProblem: Using - for all content (explanations, options, tasks).
Symptom: Everything becomes a task.
Solution:
--checkbox-onlySymptom: Script finds 50+ tasks but you only have 5-10 actual tasks.
Diagnosis: The parser is picking up explanatory bullets, configuration options, or nested details.
Solutions:
--dry-run to see what's being parsed## Tasks header--section "Implementation Tasks"--checkbox-only to only parse - [ ] itemsExample:
# Preview what will be created
python scripts/create_subissues.py --issue 46 --dry-run
# Only parse under "Implementation Tasks" section
python scripts/create_subissues.py --issue 46 --section "Implementation Tasks"
# Strict checkbox-only mode
python scripts/create_subissues.py --issue 46 --checkbox-only
Symptom: Script reports "No tasks found" but issue clearly has tasks.
Diagnosis: Tasks aren't under a recognized section header.
Solutions:
## Tasks, ## Sub-Issues, or similar--section "Your Custom Header"--all-bullets to parse all bullets (legacy behavior)- [ ], 1., *, -)Example:
# Parse under custom section header
python scripts/create_subissues.py --issue 46 --section "Phase List"
# Disable section filtering (parse all bullets)
python scripts/create_subissues.py --issue 46 --all-bullets
Symptom: Script warns "Found more than 20 tasks" and suggests alternatives.
Diagnosis: Likely over-parsing explanatory content.
What to do:
--dry-run to review what's being parsed--section or --checkbox-only for stricter parsingSymptom: Issues created but don't show as "sub-issues" on parent issue.
Diagnosis: Only affects manually created issues via gh issue create (which doesn't support parent relationships).
Solution: Always use this skill's script - it's the only CLI way to create proper parent-child relationships. The script uses GraphQL createIssue with parentIssueId parameter.
The skill supports multiple task list formats. For detailed documentation, load references/parsing-patterns.md into context.
Quick reference:
- [ ] Task name- [x] Task name (skipped by default)1. Task name* Task name or - Task nameUser says: "Break down issue #42 (Add authentication) into sub-tasks"
Execute:
python scripts/create_subissues.py --issue 42
Result: Creates sub-issues for each task in the parent issue description.
User says: "Show me what sub-issues would be created from issue #47"
Execute:
python scripts/create_subissues.py --issue 47 --dry-run
Result: Shows preview without creating anything.
User says: "Create sub-issues from issue #10 in my other-repo"
Execute:
python scripts/create_subissues.py --issue 10 --repo username/other-repo
Result: Creates sub-issues in specified repository.
This skill enhances the project's GitHub issue-driven development workflow:
Standard Workflow:
This skill includes reference documentation:
references/parsing-patterns.md - Detailed documentation of supported task list formatsLoad reference files into context when needing detailed information about parsing logic or troubleshooting parsing issues.