PR health analysis - CI passing without review, stale PRs, merge conflicts
Scanned 9/20/2026
Install to Claude Code
npx -y skills add rossoctl/rossoctl --skill github:prs --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Github:Prs?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/rossoctl-github-prs)More formats (shields.io, HTML) on the badges page.
---
name: github:prs
description: PR health analysis - CI passing without review, stale PRs, merge conflicts
---
# PR Health
Analyze open PRs to find those needing review, stuck in CI, or going stale.
## Variables
Set at session start:
```bash
export OWNER=<org-or-user>
export REPO=<repo-name>
```
## When to Use
- Weekly PR grooming
- Finding PRs ready to merge
- Identifying stuck or abandoned PRs
> **Auto-approved**: All `gh` commands are read-only and auto-approved.
## Analysis Steps
### 1. All Open PRs
```bash
gh pr list --repo $OWNER/$REPO --state open --json number,title,author,createdAt,updatedAt,reviewDecision,statusCheckRollup
```
### 2. PRs Passing CI Without Review
```bash
gh pr list --repo $OWNER/$REPO --state open --json number,title,author,reviewDecision,statusCheckRollup --jq '.[] | select(.reviewDecision != "APPROVED") | select(.statusCheckRollup != null) | select([.statusCheckRollup[] | select(.conclusion == "FAILURE")] | length == 0) | "#\(.number) \(.title) (@\(.author.login))"'
```
### 3. Stale PRs (no update > 14 days)
```bash
gh pr list --repo $OWNER/$REPO --state open --json number,title,updatedAt,author --jq '.[] | select(.updatedAt < (now - 14*24*3600 | strftime("%Y-%m-%dT%H:%M:%SZ"))) | "#\(.number) \(.title) (last: \(.updatedAt))"'
```
### 4. PRs with Failing CI
```bash
gh pr list --repo $OWNER/$REPO --state open --json number,title,statusCheckRollup --jq '.[] | select(.statusCheckRollup != null) | select([.statusCheckRollup[] | select(.conclusion == "FAILURE")] | length > 0) | "#\(.number) \(.title)"'
```
### 5. PRs with Merge Conflicts
```bash
gh pr list --repo $OWNER/$REPO --state open --json number,title,mergeable --jq '.[] | select(.mergeable == "CONFLICTING") | "#\(.number) \(.title)"'
```
## PR Health Report
```markdown
## PR Health Report
### Ready to Merge (CI passing, needs review): N
- [list — prioritize these for review]
### Failing CI: N
- [list — authors should investigate]
### Stale (> 14 days): N
- [list — ping authors or close]
### Merge Conflicts: N
- [list — needs rebase]
```
## Troubleshooting
### Problem: statusCheckRollup is null for all PRs
**Symptom**: jq filters on CI status return no results.
**Fix**: The repo may not have required status checks. Use `gh pr checks <N> --repo $OWNER/$REPO` per-PR instead.
### Problem: mergeable shows UNKNOWN
**Symptom**: GitHub hasn't computed mergeability yet.
**Fix**: Wait a few seconds and re-query — GitHub computes this lazily. Or open the PR in the browser to trigger the check.
### Problem: Stale query returns too many results
**Symptom**: Old PRs with recent bot comments show as active.
**Fix**: Filter by `updatedAt` AND check `comments` count or last human comment date.
## Related Skills
- `github:last-week` - Weekly summary including PRs
- `github:issues` - Issue triage
- `ci:status` - Detailed CI check analysis
- `repo:pr` - PR creation format
- `git:rebase` - Fix merge conflicts
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!