github-pr-reviewer

github-pr-reviewer is a skill for Claude Code, Codex from OpenHands/extensions. It costs 53 tokens per session (6,566 once invoked), scanned A, original, MIT.

An automation that watches GitHub pull requests for a chosen label, runs one OpenHands review for each label event, and publishes the result back to GitHub.

In plain words
What is it for?
Use it to schedule reviews across one or more repositories, track processed label events, suppress stale results, and clean up review workspaces.
Why use it?
It removes the need to start reviews manually and ensures each review uses the pull request's exact submitted commit in a temporary workspace.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one. Also seen: mentions AGENTS.md.

Good fit Use it to schedule reviews across one or more repositories, track processed label events, suppress stale results, and clean up review workspaces.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/openhands/extensions/github-pr-reviewer
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add OpenHands/extensions --skill github-pr-reviewer
Clone the repo
git clone --depth 1 https://github.com/OpenHands/extensions

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for github-pr-reviewer

README.md
[![agentmods](https://agentmods.dev/badge/skills/openhands/extensions/github-pr-reviewer/github.svg)](https://agentmods.dev/skills/openhands/extensions/github-pr-reviewer)
Your own site
<a href="https://agentmods.dev/skills/openhands/extensions/github-pr-reviewer"><img src="https://agentmods.dev/badge/skills/openhands/extensions/github-pr-reviewer/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for github-pr-reviewer

Your own site · 80×15
<a href="https://agentmods.dev/skills/openhands/extensions/github-pr-reviewer"><img src="https://agentmods.dev/badge/skills/openhands/extensions/github-pr-reviewer.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 53 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 6,566 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector warn 7 Sept 2026
SkillSpector: 8 findings, up to high

These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →

  • high Supply Chain · line 187
    Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
    Fix: Avoid downloading and executing remote scripts. Use trusted packages from PyPI/npm. If remote fetch is required, verify checksums and use HTTPS.
  • high Supply Chain · line 200
    Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
    Fix: Avoid downloading and executing remote scripts. Use trusted packages from PyPI/npm. If remote fetch is required, verify checksums and use HTTPS.
  • medium Data Exfiltration · line 51
    Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
    Fix: Verify the destination URL is trusted and necessary. Remove or replace with documented APIs. Ensure no secrets, tokens, or PII are transmitted.
  • medium Data Exfiltration · line 81
    Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
    Fix: Verify the destination URL is trusted and necessary. Remove or replace with documented APIs. Ensure no secrets, tokens, or PII are transmitted.
  • medium Data Exfiltration · line 187
    Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
    Fix: Verify the destination URL is trusted and necessary. Remove or replace with documented APIs. Ensure no secrets, tokens, or PII are transmitted.
  • medium Data Exfiltration · line 200
    Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
    Fix: Verify the destination URL is trusted and necessary. Remove or replace with documented APIs. Ensure no secrets, tokens, or PII are transmitted.
  • low Supply Chain · line 51
    Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
    Fix: Avoid downloading and executing remote scripts. Use trusted packages from PyPI/npm. If remote fetch is required, verify checksums and use HTTPS.
  • low Supply Chain · line 81
    Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
    Fix: Avoid downloading and executing remote scripts. Use trusted packages from PyPI/npm. If remote fetch is required, verify checksums and use HTTPS.
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00053 $0.06566
Opus 5.5 $0.00021 $0.02626
Sonnet 5.5 $0.00011 $0.01313
Haiku 4.5 $0.00005 $0.00657

Measured 7d ago against content hash 546561b68a7c, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

github-pr-reviewer scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 7d ago.

The scan reads SKILL.md. This mod also ships 7 executable files (scripts/agent_conversation.py, scripts/github_client.py, scripts/main.py, …), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

curl -s https://api.github.com/user \
skills/github-pr-reviewer/SKILL.md · 538 lines

How it starts

The opening of the file, as written. The whole thing — 538 lines — stays where its author put it; the contents beside it link to each section on GitHub.

GitHub PR Reviewer Automation

Agent Canvas catalog

For new Agent Canvas installations, use the GitHub code review catalog entry. Its deterministic worker.py delegates each requested exact head to a stable conversation using the selected agent profile. It supports GitHub reviewer-request events and scheduled label scans. The manual upload flow below remains for existing deployments and is deprecated for new installations.

Create a cron automation that watches one or more GitHub repositories for pull requests with a review trigger label, starts an OpenHands review conversation once per label event, and publishes the AI review to GitHub. Windows PowerShell equivalents for the setup, packaging, upload, and API-check shell snippets are in references/windows.md.

The automation script is deterministic: PR discovery, label-event tracking, head eligibility, state persistence, stale-result suppression, the repository checkout, and its removal are all handled in Python. The LLM is invoked only for the review itself.

Before any review conversation is created, a scheduled scan evaluates the current head's GitHub-required checks, read through the GraphQL isRequired signal for the pull request. That signal is the merge policy's own source of truth and is pull-request-scoped, so it stays correct for a stacked PR whose symbolic base branch carries no branch rules of its own:

  • Only checks GitHub reports as required decide the scheduled gate. An optional workflow that fails - including one that fails before creating any check run - does not block a head whose required checks pass.
  • A completed required run on the exact head whose conclusion is failure, cancelled, or timed_out blocks the review. Any other unrecognized conclusion fails closed as a block rather than silently approving.
  • A completed required run whose conclusion is success, neutral, or skipped does not block. A required commit status context is classified alongside required check runs.
  • A queued or in_progress required run on the exact head, and a required context that has not reported a current-head check run at all, make the run exit with a waiting on checks outcome. Unfulfilled is never approval. The worker does not hold a slot polling; the next scheduled scan or explicit review request retries.
  • When the required-check signal cannot be read or is empty, the gate falls back to every current-head check run and workflow run, so a red head still blocks. In that fallback, workflow runs are read as well as check runs, because a workflow can fail before creating any check run - a workflow-level error, or a pull_request run whose jobs never start. Such a run leaves a failed check suite with no check runs under it, so the commit's check-run rollup and gh pr checks both report success and only the workflow run reveals the red CI. A workflow run whose check suite already reported check runs is left to those runs, so a workflow is never counted twice.
  • A scheduled scan considers the trigger label and every open PR, including drafts, that still holds an outstanding all-hands-bot review request. That is what resumes a request made while CI was running: the request is keyed by its own review_requested event, so repeated scans reuse one conversation and one review instead of creating duplicates, and a PR whose request was answered or withdrawn simply drops out of requested_reviewers.
  • The scheduled scan also reviews open, non-draft PRs that nobody requested and that carry no trigger label, once their current head has no completed review by this account. That is what keeps reviewing PRs after the outstanding requests are exhausted. The delivery key is the stable scan:{repository}:{number}:{head}, so repeated scans reuse one conversation and one native review, and a changed head becomes eligible again under its new SHA.
  • Each scheduled scan classifies the whole open backlog, including unrequested PRs. Blocked, pending, draft, or already-reviewed heads therefore cannot hide an eligible head behind an inspection window. The separate max_new_per_run quota limits only newly created review conversations, not the number of PRs inspected; explicit requests and trigger labels retain priority when eligible candidates are drained.
  • A gate stop on an unrequested head posts no managed comment. A PR nobody asked about that is merely red or pending is simply skipped without starting an agent, which is what keeps a scan over a large backlog from posting a gate comment on every PR. The managed comment is the answer to an explicit request, so a requested or labeled head that is red or pending still gets its explanation.
  • Workflow runs are read as well as check runs, because a workflow can fail before creating any check run - a workflow-level error, or a pull_request run whose jobs never start. Such a run leaves a failed check suite with no check runs under it, so the commit's check-run rollup and gh pr checks both report success and only the workflow run reveals the red CI. A workflow run whose check suite already reported check runs is left to those runs, so a workflow is never counted twice.
  • Runs attributed to any other (obsolete) head SHA are ignored, so a stale failure cannot block the push that fixed it. This applies to workflow runs too.
  • Only the latest run of each logical check or workflow counts. A logical check is its name plus the reporting app identity, and a logical workflow is its name plus workflow ID. The latest is chosen by the run ID (the reliable creation sequence) with the start time as a tie-break, so a re-run that fixed a check supersedes its earlier failure on the same SHA while a newer queued or in-progress re-run supersedes an earlier success and makes the head wait. Ordering by the run ID keeps a run whose start time is still absent in its true creation position in both directions.

Read the full file on GitHub · 538 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 7d ago Changed · +23 lines 546561b68a7c
  2. 11d ago Changed · +4 lines 6c1b48f524f5
  3. 12d ago Changed · +12 lines 1fe581cfcb1f
  4. 17d ago Changed · -9 lines d35abc63129f
  5. 21d ago Changed · +152 lines d599fc3002a7
  6. 24d ago Changed · +23 lines c8b265394dcf
  7. 25d ago Changed · +3 lines · -6 tokens per session 2af5b8777c76
  8. 1mo ago Changed · +7 lines 881316952c4c
  9. 1mo ago Changed · +7 lines 4fbd45b93d30
  10. 1mo ago First seen · 316 lines · 59 tokens per session scan A 73d743013473

Subscribe to this mod's changes

github-pr-reviewer is a skill published in the GitHub repository OpenHands/extensions (167 stars, last pushed today), licensed MIT. It adds 53 tokens to every session and 6,566 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

review-implement-phase

Implements triaged review actions, commits focused fixes, and posts Done plus resolves threads. Use when the user wants only the implementation phase of the review-framework workflow.

prisma/orm · 38 tokens

pr

Draft a PR body from OMC's paper trail — the smallest visual that proves the change, evidence consumed from the verify protocol (never re-collected), reversibility from the ADR test on the diff, glossary language throughout.

Yeachan-Heo/oh-my-claudecode · 47 tokens

otto-pr-review-loop

Run Polly and OCR on a PR until all findings settle.

omnigent-ai/omnigent · 17 tokens

engram-branch-pr

PR creation workflow for Engram following the issue-first enforcement system. Trigger: When creating a pull request, opening a PR, or preparing changes for review.

Gentleman-Programming/engram · 37 tokens

verify-behavior

Verify or reproduce visible product behavior by driving the real UI with pi-computer-use's checked tools, requiring verified expect postconditions and durable state evidence for meaningful UI flows. Use when triage needs visual reproduction, implementation needs behavioral proof, review needs interactive confirmation…

nicknisi/dotfiles · 68 tokens

github-contributor

A step-by-step guide for contributing code, tests, documentation, or build changes to open-source projects you do not maintain. It explains how to prepare a pull request that follows the project’s rules and is easier for maintainers to review.

daymade/claude-code-skills · 105 tokens