| name | Managing Repository Labels |
| description | Reviews existing repository issues, code structure, and domain to create or refresh a semantic label system with appropriate colors aligned to the repository's specific context and needs. Use for initial setup or periodic maintenance (every 6-12 months) when users mention "labels", "label organization", "repository cleanup", "label system", or when detecting labeling inconsistencies. |
| platforms | claude-code |
| status | stable |
| allowed-tools | Bash, gh, Glob, Grep, Read, Write |
| requires | gh CLI authenticated, repository write access |
| tags | github, labels, organization, maintenance, setup |
Managing Repository Labels
Analyze repository context and establish or refresh a semantic label system tailored to the project's domain and needs.
What you should do
When invoked, help the user create or refresh their repository's label system by:
Understanding the request - Determine what's needed:
- Initial setup for new repository
- Periodic refresh (6-12 month cycle)
- Standardization across organization
- Migration from legacy labels
Analyzing the repository - Gather context:
- Technology stack and project type
- Existing issue patterns
- Current label usage and gaps
- Team terminology
Designing the label system - Create semantic labels:
- Core categories (bug, enhancement, question)
- Domain-specific labels (api, frontend, pipeline, etc.)
- Apply semantic color philosophy
- Ensure no redundancy or overlap
Implementing changes - Execute carefully:
- Create new labels with proper colors
- Migrate issues from old to new labels
- Delete obsolete labels (after verification)
- Audit and label unlabeled issues
Documenting the system - Create
.github/LABELS.md:- Label categories and descriptions
- Usage guidelines
- Migration history
When to use this skill
Trigger phrases:
- "Set up labels"
- "Organize our labels"
- "Label system is a mess"
- "Standardize labels"
- "Clean up labels"
- "Refresh label system"
Proactive detection:
- Many unlabeled issues detected
- Duplicate labels observed (e.g.,
docsanddocumentation) - Inconsistent label usage
- Project scope has expanded
- Team mentions label confusion
Scheduled maintenance:
- Every 6-12 months for active repositories
- When merging multiple repositories
- After significant project evolution
Analysis process
1. Analyze repository context
# Get repository information
REPO=$(gh repo view --json nameWithOwner -q .nameWithOwner)
REPO_DESCRIPTION=$(gh repo view --json description -q .description)
# List existing labels
gh label list --json name,description,color --limit 100
# Analyze recent issues for patterns
gh issue list --limit 50 --json title,body,labels --state all
Look for:
- Technology stack (languages, frameworks)
- Issue patterns (security, performance, bugs, features)
- Team terminology (what words do they use?)
- Missing label coverage (unlabeled issues)
2. Determine label categories
Core categories (most repositories need):
- Nature: bug, enhancement, question
- Domain-specific: Labels specific to project type (api, frontend, backend)
- Quality: testing, refactor, docs
- Infrastructure: ci, dependencies, config
- Impact: security, performance, accessibility
Important: Do NOT create labels for status (todo/done), priority (high/low), value (essential/nice-to-have), or effort (heavy/light). These should be managed as custom fields in GitHub Projects V2, not labels.
Repository-specific examples:
- API project: endpoint, schema, authentication
- Data project: pipeline, validation, data-quality
- UI project: ux, accessibility, design-system
- Library: breaking-change, deprecation, api
Color assignment
Use semantic color philosophy to communicate meaning visually. See LABEL-COLORS.md for complete reference.
Quick reference
| Category | Hex Code | Use Case |
|---|---|---|
| Critical (Red) | FF3B30 |
bug, breaking-change |
| High Priority (Orange) | FF9500 |
security, performance |
| Success (Green) | 34C759 |
testing, quality |
| Enhancement (Light Green) | 30D158 |
enhancement, feature-request |
| Refinement (Purple) | AF52DE |
refactor, cleanup |
| Infrastructure (Cyan) | 00C7BE |
ci, deployment |
| Technical (Blue) | 007AFF |
dependencies, architecture |
| Routine (Gray) | 8E8E93 |
docs, config |
Color selection rules
- Darker shades = higher urgency within same color family
- Never use pure red (
FF0000) - too alarming - Limit to 2-3 shades per color family - avoid confusion
- Test accessibility - ensure WCAG AA contrast
- Match GitHub defaults -
bugusesFF3B30
Implementation workflow
Step 1: Create or update labels
# Create new labels
gh label create "bug" --description "Something isn't working" --color "FF3B30"
# Update existing labels
gh label edit "bug" --description "Something isn't working" --color "FF3B30"
Step 2: Migrate issues
Before deleting obsolete labels, migrate issues:
# List issues with old label
OLD_LABEL="old-label-name"
NEW_LABEL="new-label-name"
ISSUES=$(gh issue list --label "$OLD_LABEL" --json number --jq '.[].number')
# Migrate each issue
for issue in $ISSUES; do
echo "Migrating issue #$issue from $OLD_LABEL to $NEW_LABEL"
gh issue edit $issue --remove-label "$OLD_LABEL" --add-label "$NEW_LABEL"
done
Migration strategies:
- Direct replacement: Old label → New label (1:1)
- Split: One old → Multiple new (e.g.,
feature→enhancement+ domain) - Consolidate: Multiple old → One new (e.g.,
high-priority+critical→security) - Drop: Remove obsolete labels
Step 3: Clean up obsolete labels
After migration, delete old labels:
# Verify label has no remaining issues
REMAINING=$(gh issue list --label "old-label" --json number --jq 'length')
if [ "$REMAINING" -eq 0 ]; then
gh label delete "old-label"
echo "Deleted obsolete label: old-label"
else
echo "Warning: $REMAINING issues still use old-label"
fi
Common labels to clean up:
- Status labels:
todo,in-progress,done,backlog(use Status custom field) - Priority labels:
high-priority,low-priority,p0,p1(use Value/Effort custom fields) - Value labels:
essential,nice-to-have(use Value custom field) - Effort labels:
heavy,light,quick-win(use Effort custom field) - Duplicate labels (e.g.,
documentationanddocs) - Vague labels (e.g.,
needs-work,help-wanted) - Legacy project-specific labels
Step 4: Audit unlabeled issues
# Find unlabeled issues
gh issue list --label "" --limit 100 --json number,title
# Review and apply appropriate labels
for issue in $(gh issue list --label "" --json number --jq '.[].number' | head -20); do
gh issue view $issue
# gh issue edit $issue --add-label "appropriate-label"
done
Step 5: Document the system
Create or update .github/LABELS.md:
# Repository Labels
## Label Categories
### Critical Issues (Red-Orange)
- `bug` - Something isn't working
- `security` - Security-related issues
- `performance` - Performance improvements
### Quality (Green)
- `testing` - Test suite improvements
- `docs` - Documentation updates
### Infrastructure (Blue-Cyan)
- `ci` - Continuous integration
- `dependencies` - Dependency updates
## When to Use
**bug**: Broken functionality, errors, or unexpected behavior
**security**: Any security vulnerability or concern
**testing**: Test suite or testing infrastructure changes
**docs**: Documentation improvements
## Multiple Labels
Issues can have multiple labels:
- `bug` + `security`: Security vulnerability
- `enhancement` + `performance`: Performance-improving feature
## Migration History
### YYYY-MM-DD: Label system refresh
- **Reason**: [Initial setup | Periodic refresh | Project scope expansion]
- **Changes made**:
- Migrated `feature` → `enhancement`
- Consolidated `high-priority`, `urgent` → `security`
- Deleted obsolete labels: `wontfix`, `invalid`
- Added domain labels: `api`, `frontend`, `backend`
- **Issues affected**: XX issues migrated
**Maintenance schedule:**
- Review label system every 6-12 months
- Document each refresh with date and reason
- Update this file when label changes are made
Quality gates
Before completing, verify:
- Labels cover all common issue types in repository
- Colors follow semantic color philosophy
- Descriptions are clear and actionable
- No redundant or overlapping labels
- All issues migrated from old to new labels
- Obsolete labels verified empty and deleted
- Documentation created in
.github/LABELS.mdwith migration history - Unlabeled issues reviewed and labeled appropriately
Expected outcomes
- Consistent label system aligned to repository needs
- Semantic colors that communicate priority/type visually
- Clear documentation for contributors
- Existing issues properly categorized
- Foundation for better issue triage and project management
- Maintenance schedule established
Repository type examples
API/Backend project
api,endpoint,database,authenticationbug,security,performancetesting,docs,ci
Frontend project
ui,ux,accessibility,design-systembug,browser-compat,performancetesting,docs,dependencies
Data/Pipeline project
pipeline,validation,data-qualitybug,performance,configtesting,docs,dependencies
Library/Framework
api,breaking-change,deprecationbug,enhancement,docsexamples,testing,dependencies
Integration with other skills
Works with:
gh-project-setup- Use during initial project setupgit-issue-create- References label system for new issuesgh-project-manage- Complements project field management
Triggers from:
- Repository onboarding workflows
- Project setup automation
- Issue creation detecting missing labels
- Team requesting better organization