90 lines
2.9 KiB
Markdown
90 lines
2.9 KiB
Markdown
---
|
|
name: gh-review-requests
|
|
description: Fetch unread GitHub notifications for open PRs where review is requested from a specified team or opened by a team member. Use when asked to "find PRs I need to review", "show my review requests", "what needs my review", "fetch GitHub review requests", or "check team review queue".
|
|
allowed-tools: Bash
|
|
risk: safe
|
|
source: community
|
|
---
|
|
|
|
# GitHub Review Requests
|
|
|
|
Fetch unread `review_requested` notifications for open (unmerged) PRs, filtered by a GitHub team.
|
|
|
|
**Requires**: GitHub CLI (`gh`) authenticated.
|
|
|
|
## When to Use
|
|
- You need to find unread GitHub PR review requests for a specific team.
|
|
- You want to check which open PRs currently need your review or a teammate's review.
|
|
- You need a filtered review queue instead of manually browsing GitHub notifications.
|
|
|
|
## Step 1: Identify the Team
|
|
|
|
If the user has not specified a team, ask:
|
|
|
|
> Which GitHub team should I filter by? (e.g. `streaming-platform`)
|
|
|
|
Accept either a team slug (`streaming-platform`) or a display name ("Streaming Platform") — convert to lowercase-hyphenated slug before passing to the script.
|
|
|
|
## Step 2: Run the Script
|
|
|
|
```bash
|
|
uv run ${CLAUDE_SKILL_ROOT}/scripts/fetch_review_requests.py --org getsentry --teams <team-slug>
|
|
```
|
|
|
|
To filter by multiple teams, pass a comma-separated list:
|
|
|
|
```bash
|
|
uv run ${CLAUDE_SKILL_ROOT}/scripts/fetch_review_requests.py --org getsentry --teams <team slugs>
|
|
```
|
|
|
|
### Script output
|
|
|
|
```json
|
|
{
|
|
"total": 3,
|
|
"prs": [
|
|
{
|
|
"notification_id": "12345",
|
|
"title": "feat(kafka): add workflow to restart a broker",
|
|
"url": "https://github.com/getsentry/ops/pull/19144",
|
|
"repo": "getsentry/ops",
|
|
"pr_number": 19144,
|
|
"author": "bmckerry",
|
|
"reasons": ["opened by: bmckerry"]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
`reasons` will contain one or both of:
|
|
- `"review requested from: <Team Name>"` — the team is a requested reviewer
|
|
- `"opened by: <login>"` — the PR author is a team member
|
|
|
|
## Step 3: Present Results
|
|
|
|
Display results as a markdown table with full URLs:
|
|
|
|
| # | Title | URL | Reason |
|
|
|---|-------|-----|--------|
|
|
| 1 | feat(kafka): add workflow to restart a broker | https://github.com/getsentry/ops/pull/19144 | opened by: evanh |
|
|
|
|
If `total` is 0, say: "No unread review requests found for that team."
|
|
|
|
## Fallback
|
|
|
|
If the script fails, run manually:
|
|
|
|
```bash
|
|
gh api notifications --paginate
|
|
```
|
|
|
|
Then for each `review_requested` notification, check:
|
|
- `gh api repos/{repo}/pulls/{number}` — skip if `state == "closed"` or `merged_at` is set
|
|
- `gh api repos/{repo}/pulls/{number}/requested_reviewers` — check `teams[].name`
|
|
- `gh api orgs/{org}/teams/{slug}/members` — check if author is a member
|
|
|
|
## Limitations
|
|
- Use this skill only when the task clearly matches the scope described above.
|
|
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
|
|
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
|