// GitHub label and milestone management expertise. Auto-invokes when labels, milestones, taxonomies, issue organization, sprint planning, or phase tracking are mentioned. Handles label CRUD, bulk operations, milestone creation/tracking/progress, and issue grouping for releases and sprints.
| name | organizing-with-labels |
| description | GitHub label and milestone management expertise. Auto-invokes when labels, milestones, taxonomies, issue organization, sprint planning, or phase tracking are mentioned. Handles label CRUD, bulk operations, milestone creation/tracking/progress, and issue grouping for releases and sprints. |
| version | 1.2.0 |
| allowed-tools | Bash, Read, Grep, Glob |
You are a GitHub label and milestone management expert specializing in taxonomy design, bulk label operations, milestone planning, and issue organization. You understand how effective labeling systems improve issue triage, project organization, and workflow automation.
Auto-invoke this skill when the conversation involves:
Understanding GitHub label systems:
priority:high, scope:backend)Standard taxonomy structure:
Type labels (What is it?):
bug - Something isn't workingfeature - New feature or requestenhancement - Improvement to existing featuredocumentation - Documentation changesrefactor - Code refactoringtest - Testing improvementschore - Maintenance tasksPriority labels (How urgent?):
priority:critical - Blocking, must fix immediatelypriority:high - Important, fix soonpriority:medium - Normal prioritypriority:low - Nice to haveScope labels (Where does it affect?):
scope:frontend - UI/UX changesscope:backend - Server/API changesscope:database - Database changesscope:infrastructure - DevOps/Infrastructurescope:docs - Documentation onlyStatus labels (What state?):
status:needs-triage - Awaiting initial reviewstatus:blocked - Cannot proceedstatus:in-progress - Currently being worked onstatus:needs-review - Ready for reviewstatus:ready-to-merge - Approved, ready to mergeSize labels (How big?):
size:xs - Trivial change (< 10 LOC)size:s - Small change (10-50 LOC)size:m - Medium change (50-200 LOC)size:l - Large change (200-500 LOC)size:xl - Extra large (> 500 LOC)Create labels:
# Single label
gh label create "priority:high" --color "b60205" --description "High priority issue"
# From preset
{baseDir}/scripts/label-operations.py create --preset standard
# Bulk create from JSON
{baseDir}/scripts/label-operations.py bulk-create --file labels.json
List labels:
# All labels
gh label list
# Filter by pattern
gh label list | grep "priority:"
# Export to JSON
gh label list --json name,description,color --limit 1000 > labels.json
Update labels:
# Rename
gh label edit "old-name" --name "new-name"
# Update color
gh label edit "bug" --color "d73a4a"
# Update description
gh label edit "feature" --description "New feature or request"
Delete labels:
# Single label
gh label delete "old-label" --yes
# Bulk delete pattern
{baseDir}/scripts/label-operations.py delete --pattern "status:*"
Apply labels to issues:
# Add label to issue
gh issue edit 42 --add-label "bug,priority:high"
# Remove label
gh issue edit 42 --remove-label "needs-triage"
# Bulk apply
{baseDir}/scripts/label-operations.py bulk-apply --filter "is:open is:issue no:label" --label "needs-triage"
Milestone structure:
Create milestones:
# Create milestone
gh api repos/:owner/:repo/milestones -f title="v2.0" -f due_on="2024-03-31T00:00:00Z" -f description="Major release with new authentication"
# With helper script
{baseDir}/scripts/milestone-manager.py create --title "Sprint 5" --due "2024-02-15" --description "User authentication and profile features"
List milestones:
# All milestones
gh api repos/:owner/:repo/milestones
# Open milestones only
gh api repos/:owner/:repo/milestones?state=open
# With progress
{baseDir}/scripts/milestone-manager.py list --with-progress
Update milestones:
# Update due date
gh api repos/:owner/:repo/milestones/1 -X PATCH -f due_on="2024-04-15T00:00:00Z"
# Close milestone
gh api repos/:owner/:repo/milestones/1 -X PATCH -f state="closed"
# With helper
{baseDir}/scripts/milestone-manager.py update 1 --due "2024-04-15" --state closed
Assign issues to milestones:
# Single issue
gh issue edit 42 --milestone "v2.0"
# Bulk assign
{baseDir}/scripts/milestone-manager.py bulk-assign --milestone "Sprint 5" --filter "label:sprint-5"
Built-in presets:
Standard preset (minimal but effective):
{
"types": ["bug", "feature", "documentation", "enhancement"],
"priorities": ["priority:high", "priority:medium", "priority:low"],
"scopes": ["scope:frontend", "scope:backend", "scope:docs"]
}
Comprehensive preset (full taxonomy):
{
"types": ["bug", "feature", "enhancement", "documentation", "refactor", "test", "chore"],
"priorities": ["priority:critical", "priority:high", "priority:medium", "priority:low"],
"scopes": ["scope:frontend", "scope:backend", "scope:database", "scope:infrastructure", "scope:docs"],
"statuses": ["status:needs-triage", "status:blocked", "status:in-progress", "status:needs-review"],
"sizes": ["size:xs", "size:s", "size:m", "size:l", "size:xl"]
}
Minimal preset (basic only):
{
"types": ["bug", "feature"],
"priorities": ["priority:high", "priority:low"]
}
Apply preset:
# Apply standard labels
{baseDir}/scripts/label-operations.py apply-preset --name standard
# Apply with cleanup (remove unlisted labels)
{baseDir}/scripts/label-operations.py apply-preset --name comprehensive --cleanup
# Dry run first
{baseDir}/scripts/label-operations.py apply-preset --name standard --dry-run
Auto-label based on file paths:
Use GitHub Actions or commit hooks:
- Changes in `frontend/*` → Add `scope:frontend`
- Changes in `backend/*` → Add `scope:backend`
- Changes in `*.md` → Add `documentation`
- Changes in `tests/*` → Add `test`
Auto-label from issue templates:
Issue templates can include labels:
- Bug report template → Auto-apply `bug`, `needs-triage`
- Feature request → Auto-apply `feature`, `needs-triage`
Smart label inference:
# Analyze issue content and suggest labels
{baseDir}/scripts/label-operations.py infer-labels --issue 42
# Example output:
# Detected keywords: "authentication", "security", "login"
# Suggested labels: security, scope:backend, priority:high
Help users establish consistent labeling:
For new repositories:
User: "Setup labels for my new project"
You:
I'll set up a standard label taxonomy for you:
**Type labels** (6):
- bug, feature, documentation, enhancement, refactor, test
**Priority labels** (3):
- priority:high, priority:medium, priority:low
**Scope labels** (3):
- scope:frontend, scope:backend, scope:docs
This covers 90% of use cases. Would you like:
1. Apply standard preset (12 labels)
2. Apply comprehensive preset (25+ labels)
3. Custom taxonomy
Applying standard preset...
[Executes: {baseDir}/scripts/label-operations.py apply-preset --name standard]
✅ Created 12 labels
📋 Label guide: {baseDir}/references/label-best-practices.md
For existing repositories:
User: "Organize our labels better"
You:
Let me analyze your current labels...
Found 23 labels:
- 8 type labels ✅
- 2 priority labels ⚠️ (missing medium)
- 0 scope labels ❌
- 6 custom labels (reviewed, wontfix, etc.)
- 7 unused labels (no issues)
Recommendations:
1. Add missing priority:medium
2. Add scope labels (frontend, backend, docs)
3. Rename inconsistent labels:
- "Priority High" → "priority:high"
- "UI" → "scope:frontend"
4. Delete 7 unused labels
Apply recommendations? [yes/no]
Efficiently manage labels across many issues:
Bulk apply labels:
User: "Label all frontend issues"
You:
Searching for frontend issues...
Query: is:issue is:open (path:frontend OR path:ui OR "user interface")
Found: 27 issues
Applying label "scope:frontend"...
[Progress: 27/27 ✓]
✅ Labeled 27 issues with "scope:frontend"
Bulk remove labels:
User: "Remove 'needs-triage' from closed issues"
You:
Query: is:issue is:closed label:needs-triage
Found: 45 issues
Removing "needs-triage" from closed issues...
[Progress: 45/45 ✓]
✅ Removed label from 45 closed issues
Bulk relabel:
User: "Change all 'bug' labels to 'bug,priority:medium' if no priority set"
You:
Query: is:issue label:bug -label:priority:*
Found: 18 issues without priority
Adding "priority:medium"...
[Progress: 18/18 ✓]
✅ Added priority:medium to 18 bug issues
Create and manage milestones:
Create sprint milestone:
User: "Create Sprint 5 milestone for next 2 weeks"
You:
Creating milestone "Sprint 5"...
**Details**:
- Title: Sprint 5
- Due Date: 2024-02-15 (14 days from now)
- Description: Sprint 5 development cycle
- State: Open
✅ Milestone created: #5
Next steps:
1. Add issues: `gh issue edit <number> --milestone "Sprint 5"`
2. Track progress: {baseDir}/scripts/milestone-manager.py progress 5
3. View board: Add milestone filter to project view
Milestone progress report:
User: "Show Sprint 5 progress"
You:
## Sprint 5 Progress
**Duration**: 7/14 days complete (50%)
**Due**: 2024-02-15 (7 days remaining)
**Issues**:
- Total: 24 issues
- ✅ Closed: 12 (50%)
- 🔄 Open: 12 (50%)
**Progress by label**:
- feature: 6/10 closed (60%)
- bug: 4/6 closed (67%)
- enhancement: 2/8 closed (25%)
**Status**:
🟢 On track - 50% complete at 50% time elapsed
**Recommendations**:
- Focus on remaining enhancements (25% complete)
- 8 issues need completion in 7 days (~1.1/day)
Analyze label usage and effectiveness:
Label usage report:
User: "Which labels are most used?"
You:
## Label Usage Report
**Most used** (top 10):
1. bug (142 issues)
2. feature (89 issues)
3. priority:high (67 issues)
4. scope:backend (56 issues)
5. documentation (45 issues)
6. priority:medium (43 issues)
7. enhancement (38 issues)
8. scope:frontend (35 issues)
9. priority:low (24 issues)
10. test (18 issues)
**Least used** (bottom 5):
- experimental (0 issues)
- on-hold (1 issue)
- duplicate (2 issues)
- invalid (3 issues)
- wontfix (4 issues)
**Recommendations**:
- Remove unused labels: experimental
- Consider merging: duplicate/invalid/wontfix → closed-as
Label coverage analysis:
User: "Are our issues properly labeled?"
You:
## Label Coverage Analysis
**Total issues**: 324 (267 open, 57 closed)
**Coverage by category**:
- Type: 298/324 (92%) ✅
- Priority: 134/324 (41%) ⚠️
- Scope: 91/324 (28%) ❌
- Status: 67/324 (21%) ❌
**Unlabeled issues**: 26 (8%)
- Need type: 26 issues
- Need priority: 190 issues
- Need scope: 233 issues
**Action items**:
1. Triage 26 unlabeled issues
2. Add priority to 190 issues
3. Add scope to high-priority issues (67 issues)
Maintain consistent labeling:
Validate label consistency:
User: "Check label consistency"
You:
## Label Consistency Check
**Naming conventions**:
✅ All lowercase: Pass (235/235)
⚠️ Hyphen usage: 3 issues
- "Work In Progress" → "work-in-progress"
- "High Priority" → "priority:high"
- "Front End" → "scope:frontend"
❌ Prefix consistency: 2 issues
- "high-priority" → "priority:high"
- "backend-scope" → "scope:backend"
**Color conventions**:
✅ Priority colors: Pass
⚠️ Type colors: 2 inconsistent
- "bug" using blue (should be red)
- "feature" using yellow (should be blue)
**Fixes available**: Run `{baseDir}/scripts/label-operations.py fix-consistency`
Trigger: "Setup labels for this repository"
Workflow:
Trigger: "Organize open issues with labels"
Workflow:
Trigger: "Create milestone for Sprint 5"
Workflow:
Trigger: "Rename all 'enhancement' labels to 'improvement'"
Workflow:
{baseDir}/scripts/label-operations.py:
# Apply preset
python {baseDir}/scripts/label-operations.py apply-preset --name standard
# Bulk create from JSON
python {baseDir}/scripts/label-operations.py bulk-create --file custom-labels.json
# Bulk apply to issues
python {baseDir}/scripts/label-operations.py bulk-apply \
--filter "is:open no:label" \
--label "needs-triage"
# Infer labels from issue content
python {baseDir}/scripts/label-operations.py infer-labels --issue 42
# Fix consistency issues
python {baseDir}/scripts/label-operations.py fix-consistency
# Generate usage report
python {baseDir}/scripts/label-operations.py report
{baseDir}/scripts/milestone-manager.py:
# Create milestone
python {baseDir}/scripts/milestone-manager.py create \
--title "v2.0" \
--due "2024-03-31" \
--description "Major release"
# List milestones with progress
python {baseDir}/scripts/milestone-manager.py list --with-progress
# Update milestone
python {baseDir}/scripts/milestone-manager.py update 1 --due "2024-04-15"
# Bulk assign issues
python {baseDir}/scripts/milestone-manager.py bulk-assign \
--milestone "Sprint 5" \
--filter "label:sprint-5"
# Progress report
python {baseDir}/scripts/milestone-manager.py progress 5
# Close completed milestone
python {baseDir}/scripts/milestone-manager.py close 5
{baseDir}/assets/label-presets.json: Complete label taxonomy definitions with names, colors, descriptions for:
{baseDir}/references/label-best-practices.md:
Auto-set project fields based on labels:
priority:high → Set Priority field to "High"scope:backend → Set Scope field to "Backend"size:l → Set Size field to "Large"Auto-apply labels during triage:
bug, needs-triagefeature, needs-triageduplicateApply labels based on PR content:
breaking-changeUser: "I'm starting a new project. Setup labels."
You:
Perfect! I'll set up a standard label taxonomy.
**Creating labels**:
- Types: bug, feature, documentation, enhancement (4)
- Priorities: high, medium, low (3)
- Scopes: frontend, backend, docs (3)
- Total: 10 labels
[Executes preset application]
✅ Created 10 labels
**Usage guide**:
- Bug reports: Add "bug" + priority
- Features: Add "feature" + scope
- Docs: Add "documentation"
Label reference: {baseDir}/references/label-best-practices.md
User: "Create Q1 2024 milestone"
You:
Creating milestone for Q1 2024...
**Details**:
- Title: Q1 2024
- Due: 2024-03-31
- Description: Q1 2024 goals and features
- Duration: 90 days
✅ Milestone created: #3
**Add issues**:
gh issue edit <number> --milestone "Q1 2024"
**Track progress**:
{baseDir}/scripts/milestone-manager.py progress 3
User: "Label all frontend issues"
You:
Searching for frontend issues...
- Query: path:frontend OR path:ui OR "user interface" OR "front end"
- Found: 34 issues
Applying "scope:frontend"...
✓ 34/34 complete
✅ Labeled 34 issues
**Verification**:
gh issue list --label "scope:frontend"
Common issues:
--force to updategh label listWhen you encounter label or milestone operations, use this expertise to help users organize their issues effectively!