agentsclimarketplace

Review pr

Skill flurdy/agent-skills/skills/review-pr

Review a repository-qualified pull request at an immutable head, compare it with Jira requirements, and return a read-only verdict with explicit evidence completeness.From its SKILL.md

Install
npx -y skills add flurdy/agent-skills --skill review-pr

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

10.2 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it

Review Pull Request

Review one immutable GitHub pull-request snapshot. The workflow is read-only: it never submits a GitHub review, approval, change request, comment, Slack message, Jira mutation, checkout change, or other external action. No GitHub review is ever submitted by this skill.

Usage

/review-pr                                      # current branch
/review-pr 123                                  # current-repository shorthand
/review-pr owner/repo#123                       # repository-qualified
/review-pr https://github.com/owner/repo/pull/123  # PR URL
/review-pr owner/repo#123 --automation --premium-established --expected-head SHA

Accept a PR URL, owner/repo#number, a numeric current-repository shorthand, or no selector. A qualified selector never derives repository identity from the current working directory.

Optional controls:

  • --expected-head SHA — require the selected immutable head.
  • --checkout PATH — consider this local checkout, but use it only after exact verification.
  • --automation — return the machine-readable contract below and never ask a question.
  • --premium-established — assert that the caller selected the premium route before automation.
  • --deadline-seconds N — total attended review budget; default 300 seconds. Record one absolute stop deadline at invocation, pass only the remaining seconds to each collector call, and return partial evidence when the budget expires.

1. Establish the premium route

This skill is model-tier: premium.

For a manual invocation below the premium tier, use AskUserQuestion once:

  • Continue here — accept reduced depth for this run.
  • Stop — switch model or rerun in a premium session.

Skip the question when the user explicitly selected the current model.

For --automation, the skill must not prompt. Require --premium-established and confirm the current route satisfies the premium tier. If either condition fails, return status: failed, reason: premium-route-unavailable, and no verdict. Frontmatter alone is not route attestation.

2. Collect one qualified snapshot

Run the collector once before analysis:

~/.agents/skills/review-pr/scripts/gh-pr-snapshot.py \
  'owner/repo#123' \
  --expected-head HEAD_SHA_IF_SUPPLIED \
  --checkout CHECKOUT_IF_SUPPLIED \
  --timeout REMAINING_SECONDS \
  --pretty

Omit absent options. With numeric or no selector, the collector uses the current checkout only to resolve the shorthand, then passes explicit owner/repository to every remote request.

The collector returns canonical repository/PR identity, node ID, base/head refs and SHAs, bounded file patches, exact-head CI rollup, normalized feedback, a review-state key, checkout verification, limits, and errors. It disables paging and lazy Git fetching, applies one deadline and command-output cap, and rechecks base/head identity after collection.

Gate on its status:

  • complete with reviewReady: true — continue.
  • partial — name every unavailable/truncated source; do not issue a definitive verdict.
  • stale — stop and report the expected and observed revisions; never present mixed-SHA evidence.
  • failed — stop and report the bounded error; do not infer that missing evidence is empty.

Draft or closed/merged state remains explicit in target; do not treat it as an open review.

3. Use local code only after exact checkout proof

A matching checkout is optional. Local repository reads are permitted only when checkout.available is true. That means the origin matches the selected repository, the working tree is clean, and local HEAD exactly matches the PR head SHA. Anchor every Read, Grep, or Glob path under checkout.path.

When verification fails, state Local repository search unavailable with the collector's reason. Use only the bounded remote patches and metadata. Never search the workspace root or unrelated cwd, and never switch branches, fetch, reset, clean, create a worktree, or edit files.

4. Read feedback before forming an opinion

Read evidence.feedback.records before analyzing the patches. Preserve stable identity, updateKey, stateKey, source, lifecycle, author, targets, and path/line data. Inspect evidence.feedback.partial and its errors before treating absence as none.

Build the unresolved list from:

  • unresolved, non-outdated inline-review records;
  • current CHANGES_REQUESTED reviews only when target.reviewDecision still reports changes requested;
  • substantive current review summaries or conversations whose request remains unmet.

Treat approvals, dismissed/outdated/resolved records, self-authored messages, and automated status noise separately. Bot findings require the same independent validation as human findings.

5. Load Jira context when linked

Find the first Jira key in title, body, or head branch using [A-Z][A-Z0-9]{1,9}-[0-9]+.

  • No key: record jira.status: not-linked and continue without an AC checklist.
  • Key found and lookup succeeds: extract summary, description, status, issue type, and acceptance criteria with the read-only Jira get tool.
  • Key found but Jira is unavailable, malformed, or missing the acceptance field: record jira.status: unavailable, include the error, and never claim requirements are satisfied.

Do not use any Jira mutation tool.

6. Analyze the exact-head evidence

Use target, evidence.files, feedback, CI state, and verified local reads when available.

Before Jira lookup and before each analysis phase, check the one invocation deadline. On expiry, return partial with budget-expired; do not start another tool call. The caller should also impose its normal turn/runtime budget so interruption does not depend on model compliance.

For each changed file, assess:

  • alignment with linked acceptance criteria;
  • correctness, security, compatibility, and scope;
  • test coverage including happy, sad, and edge paths;
  • whether current patches address unresolved feedback;
  • deletions and repository-wide references, but only when checkout verification permits the search.

If file patches, feedback, checks, Jira requirements, or repository-wide evidence needed for a claim are unavailable, make the limitation explicit. Missing evidence is never evidence of absence.

7. Recheck the immutable revisions

Immediately before writing any verdict, run the fast verifier using the original snapshot SHAs:

~/.agents/skills/review-pr/scripts/gh-pr-snapshot.py \
  'owner/repo#123' \
  --expected-head ORIGINAL_HEAD_SHA \
  --expected-base ORIGINAL_BASE_SHA \
  --expected-state-key ORIGINAL_STATE_KEY \
  --verify-only \
  --timeout REMAINING_SECONDS

The state key covers PR lifecycle, draft/review decision, exact-head CI state, and stable feedback identities/update state. If verification returns anything except complete, return stale or failed and suppress the verdict. Never reuse approval from a previous invocation or head SHA.

8. Render unresolved comments before the verdict

Every human-readable review must include this exact section before any assessment or verdict:

### Unresolved Reviewer Comments

- author — path:line — request — whether it remains valid at the reviewed head

If genuinely empty, emit:

### Unresolved Reviewer Comments

- None.

9. Output contract

Manual output

## owner/repo#123 Review

**Head:** {immutable head SHA}
**Base:** {immutable base SHA}
**Snapshot:** complete
**Jira:** {key and summary | Not linked | Unavailable}
**CI:** {exact-head rollup state}
**Local checkout:** {verified path | unavailable reason}

### Changes Overview
- ...

### Unresolved Reviewer Comments
- ...

### AC Checklist
| AC | Status | Evidence |
|----|--------|----------|
| ... | pass/fail/partial | ... |

### Concerns
- ...

### Verdict
{Safe to merge | Needs changes | Needs discussion}

Verdict rules:

  • Needs changes for unmet ACs, failing exact-head CI, or a valid blocking concern.
  • Needs discussion for conflicting evidence or a substantive unresolved question.
  • Safe to merge only when the snapshot is complete, exact-head CI succeeds, Jira ACs are met when linked, and unresolved comments are None..
  • No definitive verdict for partial, stale, or failed snapshots.

Automation output

For --automation, emit one JSON object and no conversational prompt or surrounding prose:

{
  "schemaVersion": "review-pr/v1",
  "status": "complete|partial|stale|failed",
  "reason": null,
  "target": {
    "repository": "owner/repo",
    "number": 123,
    "nodeId": "...",
    "headSha": "...",
    "baseSha": "...",
    "stateKey": "..."
  },
  "changesOverview": [],
  "evidence": {
    "snapshotComplete": true,
    "checkout": "verified|unavailable",
    "checkoutReason": null,
    "jira": "available|not-linked|unavailable",
    "jiraKey": null,
    "jiraSummary": null,
    "ci": "SUCCESS|FAILURE|PENDING|UNKNOWN",
    "errors": []
  },
  "unresolvedComments": [],
  "acChecklist": [],
  "concerns": [],
  "verdict": "safe-to-merge|needs-changes|needs-discussion|null"
}

reason is null for complete results and names the bounded failure/stale reason otherwise, including premium-route-unavailable. Before snapshot identity is available, target fields are null rather than fabricated. changesOverview contains the complete bounded changes summary used by the manual report. checkoutReason explains unavailable local evidence. jiraKey is populated when a key is linked; jiraSummary is populated only when lookup succeeds. Each unresolved comment, AC row, and concern retains its concise evidence so an automation caller can render the same complete report without re-running analysis.

The watcher may consume a verdict only when status is complete, the final revision recheck succeeded, and verdict is non-null. This output authorizes no GitHub review or other external communication.

What ships with it: 9 files

60.7 KB alongside SKILL.md, 9 of them executable

tests/

Gives 0 of the 12 instructions most review quality skills give in ~2.2k tokens

Counted across 1,048 of the 1,783 authors here whose files we hold, read 2026-08-07

  • Ask questions one at a timein 81 of 1048, across 64 files
  • Provide a recommended answer for each questionin 73 of 1048, across 50 files
  • Explore the codebase instead of asking answerable questionsin 66 of 1048, across 42 files
  • Resolve dependencies between decisions one-by-onein 42 of 1048, across 17 files
  • Interview the user relentlessly about the planin 38 of 1048, across 13 files
  • Order findings by severityin 31 of 1048
  • Resolve each branch of the decision treein 27 of 1048, across 5 files
  • Run a grilling sessionin 26 of 1048, across 5 files
  • Update CONTEXT.md immediately when a term is resolvedin 26 of 1048, across 11 files
  • Propose precise canonical terms for vague languagein 25 of 1048, across 7 files
  • Create documentation files lazilyin 24 of 1048, across 5 files
  • Assign severity to every findingin 24 of 1048

Said here and by no other author read

  • run the snapshot collector once before analysis
  • use local checkout only after exact verification
  • read existing feedback before forming an opinion
  • load linked Jira context using read-only tools
  • check the invocation deadline before each analysis phase
  • run the verifier immediately before writing any verdict

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 326,645. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.