skills/github-assign-issue/SKILL.md
Recommend and auto-assign GitHub issues to engineers based on domain expertise matrix
npx skillsauth add sipherxyz/universal-ue-skills github-assign-issueInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill reads project-specific values from skills.config.json at the repository root.
Required keys: github.repo, github.owner, github.project_number, milestones.*, team.*
If not found, prompt the user for repository and project details.
Role: Issue Assignment Automation Scope: Project-wide issue routing and assignment Platform: Windows + gh CLI Repository: {github.repo}
Analyze GitHub issues and recommend (or auto-assign) appropriate engineers based on domain expertise matrix, issue labels, title keywords, and referenced file paths.
gh CLI authenticated: gh auth status{project-root}/claude-agents/team/engineer-matrix.md{CWD} = Current Working Directory
{ProjectRoot} = {project.root}
{MatrixPath} = {ProjectRoot}/claude-agents/team/engineer-matrix.md
{RepoOwner} = {github.owner}
{RepoName} = s2
{FallbackAssignee} = {team.principal.handle}
Accept GitHub issue URL or issue number:
Input formats:
- Full URL: https://github.com/{github.repo}/issues/123
- Short URL: {github.repo}#123
- Number only: 123 (assumes current repo)
Extract issue number using regex: issues/(\d+) or #(\d+) or ^(\d+)$
gh issue view {number} --json number,title,body,labels,assignees --repo {github.repo}
Extract:
Validate:
--force flag → Skip warning, proceed with reassignmentRead matrix file from: {ProjectRoot}/claude-agents/team/engineer-matrix.md
Parse into data structures:
Validate:
Multi-signal domain detection with weighted scoring:
Signal 1: Labels (weight: 10)
For each issue label:
If label exists in Domains map:
Add domain with weight = 10
Signal 2: Title Keywords (weight: 5)
For each domain in Domains map:
For each keyword in domain.keywords:
If keyword in issue.title (case-insensitive):
Add domain with weight = 5
Signal 3: File Path Patterns (weight: 3)
Extract file paths from issue body using pattern: `/[A-Za-z_]+/[^\s]+\.(cpp|h|uasset)`
For each path:
For each pattern in FilePatterns:
If path matches pattern:
Add domain with weight = 3
Signal 4: Body Keywords (weight: 2)
For each domain in Domains map:
For each keyword in domain.keywords:
If keyword in issue.body (case-insensitive, first 1000 chars):
Add domain with weight = 2
Aggregate:
Sum weights per domain
Sort by weight descending
Primary domain = highest weight
If total_weight >= 5:
domain_mapping = Domains[primary_domain]
primary_engineer = domain_mapping.primary
backup_engineer = domain_mapping.backup
If Engineers[primary_engineer].availability != 'U':
recommended = primary_engineer
reasoning = "Primary owner of '{domain}'"
confidence = "HIGH" if weight >= 15 else "MEDIUM" if weight >= 10 else "LOW"
Else If backup_engineer AND Engineers[backup_engineer].availability != 'U':
recommended = backup_engineer
reasoning = "Backup for '{domain}' (primary unavailable)"
confidence = "MEDIUM"
Else:
recommended = {FallbackAssignee}
reasoning = "Fallback owner (no available engineer for domain)"
confidence = "LOW"
Else:
recommended = {FallbackAssignee}
reasoning = "Default owner (no domain match)"
confidence = "DEFAULT"
═══════════════════════════════════════════════════════════════
ISSUE ASSIGNMENT RECOMMENDATION
═══════════════════════════════════════════════════════════════
Issue #123: Fix combo system animation desync
URL: https://github.com/{github.repo}/issues/123
Current Assignees: (none)
Labels: combat, Engineering, bug
═══════════════════════════════════════════════════════════════
ANALYSIS
═══════════════════════════════════════════════════════════════
Detected Domains:
1. combat (weight: 15) - Label + keyword "combo"
2. system (weight: 2) - Body keyword "framework"
Signal Breakdown:
- Label "combat" → combat (+10)
- Title "combo" → combat (+5)
- Body "framework" → system (+2)
═══════════════════════════════════════════════════════════════
RECOMMENDATION
═══════════════════════════════════════════════════════════════
Assignee: @DuyTranSipher (Duy Tran) - Game Engineer
Reasoning: Primary owner of 'combat' domain
Confidence: HIGH
Backup: @{team.principal.handle} (Loc Bui) - Principal Engineer
═══════════════════════════════════════════════════════════════
Options:
1. Assign to @DuyTranSipher
2. Assign to @{team.principal.handle} (backup)
3. Select different assignee
4. Skip assignment
Your choice (1/2/3/4): _
If --quick flag: Skip prompt, auto-assign to recommended.
If user selects option 1 or 2 (or --quick mode):
gh issue edit {number} --add-assignee {username} --repo {github.repo}
Validate response:
Assignment complete!
Issue #123: Fix combo system animation desync
Assigned to: @DuyTranSipher (Duy Tran)
Domain: combat
Confidence: HIGH
View issue: https://github.com/{github.repo}/issues/123
Return Values (for programmatic use):
IssueNumber: 123
AssignedTo: DuyTranSipher
Domain: combat
Confidence: HIGH
Error: Issue #9999 not found in {github.repo}
Verify issue exists: gh issue view 9999 --web --repo {github.repo}
Error: Engineer matrix not found
Expected: {project.root}\claude-agents\team\engineer-matrix.md
Run: /github-assign-issue --init-matrix
Warning: Issue #123 already assigned to @existinguser
Options:
1. Add @DuyTranSipher as additional assignee
2. Replace with @DuyTranSipher
3. Keep current assignment
4. Cancel
Your choice: _
Warning: Primary engineer @DuyTranSipher is unavailable (U)
Falling back to backup: @{team.principal.handle}
Continue with backup assignment? (y/N): _
Preview without executing:
/github-assign-issue 123 --dry-run
Shows recommendation but does not modify issue.
Auto-assign without confirmation:
/github-assign-issue 123 --quick
Immediately assigns to recommended engineer.
Override existing assignment:
/github-assign-issue 123 --force
Skips "already assigned" warning.
Process multiple issues:
/github-assign-issue --batch 100,101,102,103
Workflow:
═══════════════════════════════════════════════════════════════
BATCH ASSIGNMENT PREVIEW
═══════════════════════════════════════════════════════════════
| Issue | Title | Domain | Assignee | Confidence |
|-------|--------------------------|---------|------------------|------------|
| #100 | Fix combo animation | combat | @DuyTranSipher | HIGH |
| #101 | UI menu flicker | UXUI | @HungLeSipher | MEDIUM |
| #102 | AI pathing stuck | ai | @KhoaLeSipher | HIGH |
| #103 | General cleanup | - | @{team.principal.handle} | DEFAULT |
═══════════════════════════════════════════════════════════════
Options:
1. Assign all as shown
2. Review individually
3. Cancel
Your choice: _
Create template matrix file:
/github-assign-issue --init-matrix
Creates claude-agents/team/engineer-matrix.md with default template if not exists.
Quick availability update:
/github-assign-issue --set-availability @DuyTranSipher U
Updates engineer's status to Unavailable in matrix file.
Domain Score = (Label Matches × 10) + (Title Keywords × 5) + (File Paths × 3) + (Body Keywords × 2)
| Score | Confidence | Description | |-------|------------|-------------| | >= 15 | HIGH | Strong signal (label + keyword) | | 10-14 | MEDIUM | Single strong signal (label only) | | 5-9 | LOW | Weak signals (keywords/paths only) | | < 5 | DEFAULT | Fallback to @{team.principal.handle} |
After creating an issue, optionally invoke this skill:
After issue creation:
If user wants assignment:
Invoke /github-assign-issue {IssueNumber} --quick
When processing bugs, auto-assign for tracking:
After bug analysis:
Invoke /github-assign-issue {IssueNumber}
Log assignment for sprint tracking
gh commands target --repo {github.repo} explicitlyskill: github-assign-issue
invoke: /github-workflow:github-assign-issue
type: workflow
category: github
scope: project-root
development
This skill should be used when implementing features in isolation using git worktrees. Triggers on "create worktree", "isolated workspace", "parallel development", or when starting implementation that should not affect main workspace.
testing
Manage VFX team issues on GitHub Projects - timeline scheduling, status updates, member commit checks, bulk assign. Use when managing VFX team project board, adding issues to timeline, checking member progress, or bulk-updating issue fields.
tools
Generate C++ validation rules from JSON definitions. Use when team updates ValidationRules.json or asks to add/modify validation rules.
development
Check codebase for Microsoft Xbox XR (Xbox Requirements) compliance issues. Scans for account picker, cloud saves, achievements, Quick Resume, and Xbox certification requirements. Use before console submission or when preparing for Microsoft certification. Triggers on "XR", "Xbox certification", "Microsoft compliance", "Xbox cert", "Xbox requirements", "GDK compliance".