Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/aiskillstore-organizing-with-labels/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 6 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 267% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 246% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 323% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 384% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 196% | 0% |
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:
bash# 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:
bash# 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:
bash# 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:
bash# Single label gh label delete "old-label" --yes # Bulk delete pattern {baseDir}/scripts/label-operations.py delete --pattern "status:*"
Apply labels to issues:
bash# 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:
bash# 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:
bash# 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:
bash# 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:
bash# 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):
json{ "types": ["bug", "feature", "documentation", "enhancement"], "priorities": ["priority:high", "priority:medium", "priority:low"], "scopes": ["scope:frontend", "scope:backend", "scope:docs"] }
Comprehensive preset (full taxonomy):
json{ "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):
json{ "types": ["bug", "feature"], "priorities": ["priority:high", "priority:low"] }
Apply preset:
bash# 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:
markdownUse 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:
markdownIssue templates can include labels: - Bug report template → Auto-apply `bug`, `needs-triage` - Feature request → Auto-apply `feature`, `needs-triage`
Smart label inference:
bash# 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:
markdownUser: "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:
markdownUser: "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:
markdownUser: "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:
markdownUser: "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:
markdownUser: "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:
markdownUser: "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:
markdownUser: "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:
markdownUser: "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:
markdownUser: "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:
markdownUser: "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:
bash# 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:
bash# 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-changemarkdownUser: "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
markdownUser: "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
markdownUser: "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!
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 21,405 | 8,586 | -60% | 1 | 1 | 0% | 2,852 | 5,866 | +106% | 0 | 0 | — |
case-13 | pass→pass | 12,406 | 15,710 | +27% | 1 | 1 | 0% | 2,110 | 7,384 | +250% | 0 | 0 | — |
case-02 | fail→pass | 12,544 | 15,101 | +20% | 1 | 1 | 0% | 2,002 | 7,357 | +267% | 0 | 0 | — |
case-03 | fail→fail | 29,578 | 4,629 | -84% | 1 | 1 | 0% | 4,733 | 5,948 | +26% | 0 | 0 | — |
case-04 | fail→pass | 16,915 | 13,176 | -22% | 1 | 1 | 0% | 2,035 | 7,033 | +246% | 0 | 0 | — |
case-05 | fail→pass | 13,613 | 5,235 | -62% | 1 | 1 | 0% | 1,519 | 6,420 | +323% | 0 | 0 | — |
case-06 | fail→pass | 12,651 | 7,379 | -42% | 1 | 1 | 0% | 1,405 | 6,802 | +384% | 0 | 0 | — |
case-07 | pass→pass | 12,187 | 9,441 | -23% | 1 | 1 | 0% | 1,402 | 6,309 | +350% | 0 | 0 | — |
case-08 | fail→pass | 16,654 | 4,975 | -70% | 1 | 1 | 0% | 2,096 | 6,210 | +196% | 0 | 0 | — |
case-09 | fail→pass | 15,906 | 10,761 | -32% | 1 | 1 | 0% | 1,750 | 6,401 | +266% | 0 | 0 | — |
case-10 | fail→pass | 15,602 | 8,200 | -47% | 1 | 1 | 0% | 1,915 | 6,891 | +260% | 0 | 0 | — |
case-11 | fail→pass | 16,682 | 12,261 | -27% | 1 | 1 | 0% | 2,062 | 6,599 | +220% | 0 | 0 | — |
case-12 | fail→pass | 18,449 | 14,008 | -24% | 1 | 1 | 0% | 2,313 | 6,930 | +200% | 0 | 0 | — |
case-14 | pass→pass | 16,385 | 15,741 | -4% | 1 | 1 | 0% | 2,039 | 7,466 | +266% | 0 | 0 | — |
case-15 | fail→fail | 15,554 | 13,896 | -11% | 1 | 1 | 0% | 2,547 | 7,903 | +210% | 0 | 0 | — |
case-16 | pass→pass | 18,581 | 16,942 | -9% | 1 | 1 | 0% | 2,120 | 7,524 | +255% | 0 | 0 | — |
case-17 | fail→pass | 12,968 | 13,137 | +1% | 1 | 1 | 0% | 2,055 | 6,786 | +230% | 0 | 0 | — |
case-18 | fail→pass | 14,610 | 3,269 | -78% | 1 | 1 | 0% | 1,698 | 5,983 | +252% | 0 | 0 | — |
case-19 | fail→pass | 8,423 | 10,859 | +29% | 1 | 1 | 0% | 1,491 | 6,018 | +304% | 0 | 0 | — |
case-20 | pass→pass | 14,906 | 12,976 | -13% | 1 | 1 | 0% | 1,489 | 6,894 | +363% | 0 | 0 | — |
case-21 | fail→pass | 15,305 | 22,984 | +50% | 1 | 1 | 0% | 1,131 | 7,184 | +535% | 0 | 0 | — |
case-22 | pass→pass | 15,287 | 9,914 | -35% | 1 | 1 | 0% | 1,922 | 7,324 | +281% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +59 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.