Install any skill in seconds. Free to start, no credit card required.
Get Started Free →oliver-kriska/phx-pr-review
Address feedback left on a GitHub pull request: fetch unresolved review threads, make agreed Elixir/Phoenix code fixes, reply, and resolve.
Passed 7 of 14 test cases with the skill, and 4 of 14 without it.
and 6 more in the full report
6 fixed5 passed either way9 still failing2 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 6 test cases the skill fixed. Same model, same prompt, with and without the skill.
Process thread `PRRT_kwDOA1234` on PR #15 with `--no-resolve`. The code edit and comment reply were approved and posted successfully, so complete the resolution step now.
| Checked | Without skill | With skill |
|---|---|---|
| Disables review thread resolution because --no-resolve was supplied | Missed | Passed |
| Reports the thread outcome without issuing a resolveReviewThread mutation | Missed | Passed |
The instructions your model reads when the skill loads.
Inspect unresolved pull-request review threads, triage them read-only by default, and apply only explicitly approved fixes. GitHub mutations are never implied.
/phx-pr-review 42
/phx-pr-review 42 --fix
/phx-pr-review https://github.com/owner/repo/pull/42 --bots-only
/phx-pr-review 42 --no-resolve
gh 2.94-compatible
fallback (requires command -v gh and gh auth status):PR_INPUT="${1:?PR number or URL}"
if [[ "$PR_INPUT" =~ ^https://github.com/([^/]+)/([^/]+)/pull/([0-9]+) ]]; then
OWNER="${BASH_REMATCH[1]}"; REPO="${BASH_REMATCH[2]}"; PR="${BASH_REMATCH[3]}"
else
OWNER=$(gh repo view --json owner --jq '.owner.login')
REPO=$(gh repo view --json name --jq '.name'); PR="$PR_INPUT"
fi
gh api graphql --paginate -F owner="$OWNER" -F repo="$REPO" -F pr="$PR" -f query='query($owner: String!, $repo: String!, $pr: Int!, $endCursor: String) { repository(owner: $owner, name: $repo) { pullRequest(number: $pr) { reviewThreads(first: 100, after: $endCursor) { nodes { id isResolved isOutdated path line originalLine comments(first: 100) { totalCount nodes { id databaseId body author { login __typename } replyTo { id } } } } pageInfo { hasNextPage endCursor } } } } }'
gh api graphql --paginate -F owner="$OWNER" -F repo="$REPO" -F pr="$PR" -f query='query($owner: String!, $repo: String!, $pr: Int!, $endCursor: String) { repository(owner: $owner, name: $repo) { pullRequest(number: $pr) { reviews(first: 100, after: $endCursor) { nodes { id state body submittedAt author { login __typename } } pageInfo { hasNextPage endCursor } } } } }'
--paginate binds each returned pageInfo.endCursor to $endCursor. Filter
isResolved == false after collecting pages. Preserve thread id, root
comment id/databaseId, and author.__typename (not login suffixes).
comments(first:100) is nested and is not paginated by the outer command:
if comments.totalCount > nodes.length, report the thread as TRUNCATED and
fetch every comment page with this exact query. The outer query intentionally
omits nested comments.pageInfo so gh --paginate follows only the outer
reviewThreads.pageInfo cursor:
test cases passed, vs 4 / 14 without
Published skills whose descriptions closely match this one, with their headline benchmark lift.
More skills from the same source and nearby in the registry, with their headline benchmark lift.