Review PR
SkillDev toolsReview a PR from local annotated-diff artifacts and write validated review.json for the workflow to publish. Use for machine-readable PR review instead of posting to GitHub directly. Optionally fold verify-behavior computer-use findings into the same review.json for UI changes.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Review PR skill
What this skill tells your AI
The instructions your AI receives, as published by warpdotdev-demos/nano-banana-editor in .agents/skills/review-pr/SKILL.md and read by ahel’s review.
Write review.json for the checked-out PR. Do not post to GitHub.
Inputs
- Working tree = PR branch
pr_diff.txt(annotated). If only a raw diff exists:python3 .agents/skills/review-pr/scripts/annotate_diff.py --input raw_diff.txt --output pr_diff.txtpr_description.txtwhen presentspec_context.mdwhen present (or build viaresolve_spec_context.pyif the prompt says so)- Optional companions only when referenced:
review-pr-local,check-impl-against-spec,security-review-pr,verify-behavior— samereview.json; companions must not change schema, severities, safety, evidence, suggestion, or line contracts
Scope
Prioritize: correctness, security, error handling, regressions, material performance, material spec drift.
- Findings must be grounded in the annotated diff + nearby checkout code
- Inline comments only on paths/lines in this PR's annotated diff; otherwise top-level
body - Style/nits only with a concrete suggestion block
- New tests only for distinct paths/edge cases not already covered
- V0/initial PRs: timeouts/retries/lifecycle as optional unless correctness/security/data-loss risk
- Docs/specs-only: clarity, completeness, contradictions, missing acceptance criteria
- UI/interactive +
verify-behaviorpresent: optionalverifyon PR head; fold failures as important/critical; brief success note inbodyonly if it changes the review
Annotated lines (only location source)
| Prefix | Side |
|---|---|
[OLD:n] | LEFT, line n |
[NEW:n] | RIGHT, line n |
[OLD:n,NEW:m] context | RIGHT, line m |
Copy path / side / line (and range) from a real annotation. No annotation → body, not comments.
Comments
Each comments[].body starts with exactly one:
🚨 [CRITICAL]— bugs, security, crashes, data loss⚠️ [IMPORTANT]— logic, edge cases, missing error handling, material spec drift💡 [SUGGESTION]— worthwhile improvements🧹 [NIT]— cleanup only with a suggestion block
Rules: concise, actionable, no praise/hedging; prefer single-line; ranges ≤ 10 lines; verify each comment's coordinates against pr_diff.txt before emit.
Suggestions
<replacement only>
- Exact file indentation; block replaces exactly
start_line–lineinclusive - Do not repeat lines outside that range (causes duplicates on apply)
- Preserve brace/bracket/paren/
enddepth vs replaced lines - Multi-line: set
start_line/start_sideandline/side - Validate fixes with available build/typecheck/lint/targeted tests when practical; if unvalidated, say so — do not present speculative code as ready
Specs (spec_context.md)
Extract commitments → compare to diff/branch → flag material mismatches only (important+). Broad drift in body; inline only on changed lines. No drive-by alignment commentary. No useful specs → review on merits; mention absence only if it raises risk.
review.json contract
{
"verdict": "REJECT",
"body": "…",
"comments": []
}
| Field | Rule |
|---|---|
verdict | Required: "APPROVE" or "REJECT" only. Approve / Approve with nits → APPROVE; Request changes → REJECT. Must match body disposition. |
body | Required string (GitHub review body). Not summary. |
comments | Required array (empty OK). |
path | Repo-relative; must be in the diff. |
line / side | Required; side is LEFT or RIGHT. |
start_line / start_side | Multi-line only; start_side required if start_line set. |
body minimum
Lead with actionable findings by severity, or one line that there are no findings.
Also include only:
Found: X critical, Y important, Z suggestions- Disposition:
Approve|Approve with nits|Request changes(matchesverdict) - Untouched-code / out-of-diff concerns that could not be inline (if any)
Do not include: PR change summaries, generic praise, restating the diff, low-value narration, or long overviews.
Validate (required)
python3 .agents/skills/review-pr/scripts/validate_review_json.py --review-json review.json --diff pr_diff.txt
Fix until it passes. If the path differs, use validate_review_json.py under the loaded review-pr skill dir.
No gh pr review / gh pr comment / gh api posting. Only output: final review.json.
Signals
- GitHub stars
- 28
- Forks
- 11
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
review-pr-3- Source
- github.com/warpdotdev-demos/nano-banana-editor