From github
Systematically inventory and organize GitHub Issues. Classify open issues, group related work, identify close candidates, prioritize remaining work, and propose useful batches. This includes separating CodeRabbit-generated issues from human-reported issues, grouping by root cause, and finding completed issues that can be closed. Trigger on GitHub Issue organization requests such as "organize issues", "triage GitHub issues", "audit open issues", "close stale issues", or "prioritize issues".
How this skill is triggered — by the user, by Claude, or both
Slash command
/github:j5ik2o-gh-issue-organizerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Systematically inventory, classify, and organize open GitHub Issues.
Systematically inventory, classify, and organize open GitHub Issues.
Run the following five steps in order.
Use the gh CLI to fetch every open issue and summarize the current backlog.
Complete retrieval guarantee:
gh issue list --limitis an upper bound, and the default limit is 30. Open issues beyond the limit are silently omitted. Do not let counting or retrieval stop at the default limit.
- Count issues with a sufficiently high limit:
gh issue list --state open --limit 100000 --json number --jq 'length'.- Fetch all issues with a limit at least as large as the actual issue count. For large repositories, use
gh api --paginate "repos/{owner}/{repo}/issues?state=open&per_page=100" | jq -s 'add | [.[] | select(.pull_request | not)]'.--paginateemits one JSON array per page, so applying--jqpage by page splits the result. Usejq -s 'add'to combine all pages first, then remove PRs returned by the Issues endpoint by excluding entries with.pull_request.
# Fetch all open issues with labels, author, and timestamps. Set --limit above the open issue count.
gh issue list --state open --limit 1000 --json number,title,labels,author,createdAt,updatedAt,body
# Count issues by label.
gh issue list --state open --limit 1000 --json labels --jq '[.[].labels[].name] | group_by(.) | map({label: .[0], count: length}) | sort_by(-.count)'
Summarize the result as a table:
| Item | Count |
|---|---|
| Total open issues | N |
| CodeRabbit-generated | N |
| Human-reported | N |
At this stage, use only two high-level buckets: generated and human-reported. Total equals CodeRabbit-generated plus human-reported. The CodeRabbit criteria are author
coderabbitaior a label containingcoderabbit; other bots such asgithub-actions[bot]are not CodeRabbit. Step 2 defines the detailed extraction commands. Treat Step 1 counts as a preliminary overview, then produce final category counts in Step 5 after classification.
Classify each issue into the categories below.
| Category | Rule |
|---|---|
| CodeRabbit-generated | Author is coderabbitai, or any label contains coderabbit. Other automation bots such as github-actions[bot] are not included; put non-CodeRabbit bot issues in Other. |
| Human-reported bug | Issue has the bug label, or the title contains clear bug wording such as bug, defect, failure, or broken. |
| Human-reported feature request | Labels include enhancement or feature. |
| Epic / refactoring | Labels include refactoring or epic, or the title contains Phase or refactoring. |
| Other | Every issue that does not match the four categories above, including human-created issues with no bug, feature, or epic signal, and non-CodeRabbit bot issues such as Dependabot. |
Evaluate categories from top to bottom and use the first match. After CodeRabbit-generated, check bug, then feature request, then Epic / refactoring, and finally Other. This guarantees every issue belongs to exactly one category and keeps Step 5 totals consistent. The reliable bug signal is the
buglabel; title keywords are best-effort language-dependent helpers. If an unlabeled issue is hard to classify mechanically, leave it in Other and ask for a label when needed.
# Extract CodeRabbit-generated issues. Keep this aligned with the classification table.
gh issue list --state open --limit 1000 --json number,title,author,labels --jq '[.[] | select(.author.login == "coderabbitai" or (.labels | any(.name | ascii_downcase | contains("coderabbit"))))]'
# Extract human-reported issues by negating the CodeRabbit condition.
gh issue list --state open --limit 1000 --json number,title,author,labels --jq '[.[] | select((.author.login == "coderabbitai" or (.labels | any(.name | ascii_downcase | contains("coderabbit")))) | not)]'
Group classified issues by root cause or theme.
## Group: [Theme]
- Related issues: #N, #M, #K
- Root cause: [Explanation]
- Proposed handling: [Individual / Batch]
- Estimated effort: [Small / Medium / Large]
For each issue, decide whether it is already resolved by reading the current code. Do not rely only on PR history or commit logs. Always inspect the current code.
Run these steps for each issue:
Parse the issue body and extract:
Check whether the target code still exists:
# When a file path is known.
test -f <file-path>
# Search current code for symbols, function names, or type names.
rg -n "<symbol>|<function>|<type>" .
# Search for distinctive snippets or error messages from the issue.
rg -n "<distinctive-string>" .
If rg is unavailable, use the best available file-read or grep equivalent.
If the current path or name is found, continue to step 3.
If it is not found, do not immediately mark the target as gone. It may have been renamed, moved, or split. Track it through git history so a still-valid issue is not closed incorrectly:
# Track file renames and moves.
git log --follow -M --oneline -- <file-path>
git log -p -M --follow -- <file-path> # Inspect moved paths and changed content.
# Find where a symbol may have moved.
git log -S'<symbol>' --oneline --all # Commits where the string occurrence count changed.
git log -G'<symbol>' --oneline --all # Commits with diffs containing the string.
# Search broadly for possible renamed terms in the current codebase.
rg -n "<renamed-candidate>|<related-term>" .
Git history is only for locating the current code. The resolved/unresolved decision must still come from reading the current implementation.
Read the relevant code for the target symbol, including renamed or moved targets:
# Read the relevant range when line numbers are known.
sed -n '<start-line>,<end-line>p' <file-path>
# Search around the target.
rg -n "<symbol>|<reported-pattern>" <file-path>
If a file-read tool is available, use it to inspect the relevant section directly. Symbolic tools such as Serena may be used as optional helpers only when available; do not depend on them.
Check:
Record one status for each issue:
| Status | Rule | Evidence format |
|---|---|---|
| Closable | Current code shows the report has been resolved. | "Checked <symbol> in <file>; the reported <problem> is resolved by <current implementation>." |
| Target gone | The target file or symbol no longer exists, and git history shows no rename or move target. | "<file> was deleted; git log --follow showed no moved target" or "<symbol> no longer exists." |
| Unresolved | Current code still contains the reported problem. | "Checked <symbol> in <file>; the reported <problem> still exists." |
| Needs confirmation | Code alone cannot decide because the result depends on design intent or product direction. | State why the decision cannot be made from code alone. |
| Duplicate | The same report is already covered by another issue. | State the duplicate issue number. |
git log --follow -M, git log -S, and git log -G; if a moved target exists, inspect that current code.When closing an issue, include code-verification evidence in this format:
## Resolution Check
- Checked target: `<symbol>` in `<file-path>`
- Result: `<reported problem>` is resolved by `<specific current implementation>`
- Related: [PR #N / Refactoring Phase X] when applicable
Closing this issue.
Important: Do not close issues until the user approves the proposed close list. The skill may prepare the analysis automatically, but the actual close action requires user approval.
Report the analysis in the format below.
## Issue Inventory Summary
| Category | Count | Close candidates | Remaining |
|----------|-------|------------------|-----------|
| CodeRabbit-generated | N | N | N |
| Human-reported bug | N | N | N |
| Human-reported feature request | N | N | N |
| Epic / refactoring | N | N | N |
| Other | N | N | N |
| Total | N | N | N |
## Close Candidates
| # | Title | Status | Checked location | Evidence |
|---|-------|--------|------------------|----------|
| #N | ... | Closable | `Bar::baz()` in `src/actor/foo.rs` | Reported mutex usage has been replaced with `Arc<RwLock>`. |
| #N | ... | Target gone | `src/old_module.rs` | File was deleted. |
| #N | ... | Duplicate | - | Same report as #M. |
For each group, include:
Recommend the order for remaining issues:
# Detailed issue list.
gh issue list --state open --limit 1000 --json number,title,labels,author,createdAt,updatedAt,body,comments
# Issues with a specific label.
gh issue list --state open --limit 1000 --label "bug" --json number,title
# Issue details.
gh issue view <number> --json number,title,body,labels,author,comments
# Close an issue with a comment.
gh issue close <number> --comment "Reason"
# Add a label to an issue.
gh issue edit <number> --add-label "label-name"
# Recently merged PRs.
gh pr list --state merged --limit 50 --json number,title,mergedAt
# Files changed by a PR.
gh pr view <number> --json files
rg, file read, git log --follow -M, git log -S, and git log -G for code verification. Use symbolic tools such as Serena only as optional helpers when available.--jq to extract only the needed fields.npx claudepluginhub j5ik2o/ai-tools --plugin githubCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.