repo-issue-triage
npx skills add https://github.com/spboyer/repo-issue-triage --skill repo-issue-triage
Agent 安装分布
Skill 文档
Repo Issue Triage
Automates the process of auditing all open GitHub issues against pending PRs, recently merged PRs, and the current main branch codebase, then produces a structured report with close/keep recommendations and actionable work items.
Quick Reference
| Property | Value |
|---|---|
| MCP Tools | github-mcp-server |
| CLI Tools | grep, glob, git log |
| Tracking | Session SQL database |
| Output | Structured markdown report |
| Best For | Periodic repo hygiene, sprint planning, release prep |
When to Use This Skill
- Periodic issue hygiene (weekly/monthly triage)
- Sprint planning â identify what’s already covered by PRs
- Pre-release audit â find issues that can be closed
- Post-merge cleanup â close issues covered by recent merges
- PR health monitoring â CI status, review threads, approvals
Workflow
Execute these 7 phases in order. Use parallel tool calls wherever noted.
Phase 1: PR HEALTH CHECK
Check the status of the user’s open PRs first. This is always the starting point â address any failing CI or unresolved review threads before moving to issue triage.
Parallel calls:
For each PR owned by the user:
- CI status: gh pr checks {number} â count failures/passes/running
- Review threads: GraphQL reviewThreads â count unresolved
- Approvals: reviews â list approved-by
Output table:
| PR | Title | CI | Approvals | Unresolved Threads | Status |
Actions if issues found:
- CI failures â fetch job logs, identify and fix
- Unresolved threads â read comments, address or resolve
- No approvals â note as “awaiting review”
Phase 2: FETCH ALL DATA
Fetch all open issues, open PRs, and recently merged PRs in parallel.
Parallel calls:
gh issue list --state open --limit 500
gh pr list --state open --limit 100
gh pr list --state merged --limit 30 (recent merges)
Extract into structured format: number | title | labels | assignees
Important: Use
--limit 500for issues. Paginate if repo has more. Use CLI (gh) for bulk fetching â it’s faster than individual API calls.
Phase 3: BUILD COVERAGE MAP
Build a mapping of what PRs (open and merged) cover which issues.
Method 1: Direct links
- Scan PR titles/bodies for “Fixes #N”, “Closes #N”, “fix #N”
- Check issue bodies for PR references
Method 2: Keyword matching
- Match PR titles against issue titles using topic keywords
- Use regex patterns for common coverage relationships
Method 3: Known mappings
- If the user has been working in this session, use SQL tables from prior work to pre-populate known coverage
Store in SQL:
CREATE TABLE issue_triage (
number INTEGER PRIMARY KEY,
title TEXT,
labels TEXT,
assignees TEXT,
status TEXT DEFAULT 'pending',
covered_by TEXT,
reason TEXT,
tier TEXT
);
Phase 4: DEEP ANALYSIS (Parallel Batches)
For issues not clearly mapped, do deep analysis using sub-agents.
Split issues into batches of ~100-120 and send to parallel explore agents. Each agent gets:
- The batch of issues (number | title | labels | assignees)
- The list of open PRs with descriptions of what they change
- The list of recently merged PRs
- Instructions to check the codebase for implemented features
Agent prompt pattern:
Read {batch_file} containing ~{N} GitHub issues for {owner}/{repo}.
For each issue, determine if it could be CLOSED or PARTIALLY addressed
by any of these recent changes:
MERGED PRs:
- #{num}: {title} ({summary of changes})
OPEN PRs:
- #{num}: {title} ({summary of changes})
Also check the codebase in {repo_path} for any issues that might
already be implemented on main.
Output ONLY issues that are CLOSEABLE or PARTIALLY covered.
Format: #NUMBER | TITLE | STATUS (CLOSE/PARTIAL) | COVERED_BY | REASON
Key: Use
exploreagent type with a capable model (e.g., Codex) for accurate codebase analysis. Run 4 batches in parallel.
Phase 5: VERIFY ON MAIN
For issues flagged as potentially fixed, verify against the codebase:
# Search for the fix
grep -r "keyword" --include="*.go" cli/
glob "**/*relevant_file*"
# Check recent commits
git log --oneline --grep="issue-keyword" -20
# Verify file exists
ls path/to/expected/implementation
Critical: Don’t trust keyword matches alone. Verify the actual implementation exists and addresses the issue’s requirements.
Phase 6: CATEGORIZE AND TIER
Assign each issue to a category using the classification rules.
Additionally, tier actionable issues:
| Tier | Description | Criteria |
|---|---|---|
| Close Now | Fully covered or already on main | Verified implementation exists |
| Auto-Close | Linked to open PR with “Fixes #N” | Will close when PR merges |
| Partially Covered | PR addresses part of issue | Note what’s done and what remains |
| Quick Win | Small, well-defined, unassigned | Can fix in <1 hour |
| Actionable Bug | Clear scope, reproducible, unassigned | Can investigate and fix |
| Needs Design | Requires architecture decisions | Flag for team discussion |
| Assigned | Has owner, in progress | Skip â someone is working on it |
| Epic/Tracking | Tracking issue, not directly closeable | Skip |
Phase 7: REPORT
Generate the final report using the report template.
Report sections:
- PR Health Status table
- Closeable issues (with reasons)
- Auto-close on merge issues
- Partially covered issues (what’s done, what remains)
- Quick wins and actionable items
- Category breakdown of remaining issues
- Summary statistics
Output as a markdown file and open in the user’s editor.
Closing Issues
When closing issues, always include a detailed comment explaining:
- What PR or commit covers the issue
- Specifically how the issue is addressed (mention code/features)
- Any remaining gaps (for partial closures, note what’s left)
Pattern:
Addressed by PR #{num} which {specific description of what the PR does}.
{Additional detail about how this resolves the issue's requirements}.
Do NOT use generic close messages like “Fixed” or “Resolved”.
Batch Processing Guidelines
To avoid flooding the GitHub API:
| Operation | Batch Size | Delay |
|---|---|---|
| Issue fetching | 100-500 per call | None needed |
| PR status checks | All in parallel | None needed |
| Issue closing | 2-3 at a time | 1-2 seconds between |
| Comment posting | 2-3 at a time | 1-2 seconds between |
| Sub-agent analysis | 4 parallel batches | Wait for all to complete |
MCP Tools Used
| Tool | Method | Purpose |
|---|---|---|
github-mcp-server |
list_pull_requests |
Fetch all open/merged PRs |
github-mcp-server |
list_issues |
Fetch all open issues |
github-mcp-server |
issue_read |
Deep-read individual issues |
github-mcp-server |
pull_request_read |
Check PR details/diff/status |
github-mcp-server |
search_issues |
Find linked issues |
github-mcp-server |
search_code |
Search codebase for implementations |
grep |
â | Search local codebase for fixes |
glob |
â | Find implementation files |
Error Handling
| Error | Resolution |
|---|---|
| Pagination needed (>500 items) | Use page parameter, loop until empty |
| Rate limiting | Add delays between batches |
| Issue body too large | Extract first 500 chars for classification |
| Ambiguous classification | Default to KEEP_OPEN (conservative) |
| Sub-agent timeout | Retry with smaller batch |
| GraphQL thread query fails | Fall back to REST API reviews endpoint |
Reference Documentation
- Classification Rules â Decision tree for categorizing issues
- Report Template â Output format specification