PR Review Pipeline
SkillAI & modelsReview a GitHub pull request with the RAG + code-graph pipeline (reviewer MCP server). Use when the user asks to review a PR ("review PR 123", "заревьюй PR", a PR URL). Requires ParadeDB/Neo4j running and a built base index.
Use PR Review Pipeline in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add PR Review Pipeline and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the PR Review Pipeline skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by hashgraph-online/awesome-codex-plugins in plugins/mimfort/rag_for_git/plugin/skills/review-pr/SKILL.md and read by Ahel’s review.
Orchestrate a full PR review using the reviewer MCP server tools. The deterministic
tail (policy gate, line grounding, dedup, idempotency, comment cap, publishing) is
handled by publish_review — your job is analysis quality, not formatting rules.
Inputs
Parse from $ARGUMENTS: target PR as owner/repo#N, owner/repo N, or a GitHub PR URL.
--dry-run flag → pass dry_run=true to publish_review and show the report instead
of posting.
Include resolution (applies to all steps below). When you read any
references/*-prompt.md file to dispatch a subagent (steps 3, 4, and 5 —
analyze, requirements, risk changes, blast-radius, verify), it may contain
<!-- include: _common/<file>.md --> markers. Before putting the prompt into
the subagent, replace each marker with the verbatim contents of that file
(path is relative to plugin/skills/). These _common/*.md files are the
single source of the shared findings-schema / anti-hallucination / tool-usage
blocks.
Pipeline
-
Prepare. Call
prepare_review(repo, pr). The payload contains:pr:{number, title, body, base_sha, head_sha, base_ref, draft}policy:{severity_threshold, min_confidence, max_comments, categories, ignore, output_language}units: list of{path, patch, commentable_right, commentable_left}task_board:{type, project, key_pattern, create_target, done_target, options}or null — non-secret generic board metadata from.review.ymltask_keys:{primary, others}or null — task keys extracted from the PR by the serverrisk_paths: bounded non-Python items with{path, status, reasons, patch, commentable_right, commentable_left}risk_skipped_paths: classified paths omitted by the deterministic capskipped_paths,skip_drafts,suggestions_mode
If the payload has
status: "skipped", this is NOT an error but an expected skip (the PR's target branch is not inREVIEW_BRANCHES). Tell the user thereasonvalue and stop: do not run analyze/publish, and do not treat it as a failure.If
pr.draftis true andskip_draftsis true, stop and tell the user. Notepolicy.output_language— ALL finding messages, suggestions and the summary MUST be written in that language. -
Task context (optional). Only if
task_boardis non-null. Resolve the task key: an explicit key in$ARGUMENTSwins; otherwise usetask_keys.primary. If no key is available, skip this step and note in the summary that no task key was found.Task reads are scoped to this repo's project: pass
project=<task_board.project>(from the target branch.review.yml, see step withtask_board) toget_task/get_task_context/search_tasks(PRI-170; emptyproject= unscoped).Read the task store-first (unifies with solve-task):
- Call reviewer
get_task(key, project=<task_board.project>)first. Hit (object with akey) → use it as theTaskBriefdirectly; it is already indexed by the server-side sync, so do NOT callindex_task. - Miss (
null) → call generic incrementalsync_board(board=<task_board.project or null>, board_type=<task_board.type>, provider_options=<task_board.options or {}>, limit=null, purge_orphaned=false), then callget_task(key, project=<task_board.project>)once more. A sync error or second miss is fail-open: skip the requirements dimension and note the reason in the summary — NEVER abort the review.
The
TaskBriefschema is{key, aliases[], title, description, criteria[], status, url, links[]}(phase 3 addsaliases[]and useslinks[]). On either store hit the brief is already indexed — do NOT re-index. Then gather task context to sharpen the requirements check:get_task_context(TaskBrief.key, project=<task_board.project>)→ linked tasks, their PRs, and the code those PRs touched;search_tasks("<TaskBrief.title>. <first lines of description>", project=<task_board.project>)→ semantically similar tasks. Keep ONLY the related/similar items that look relevant; you will pass them to the requirements dimension in step 4. All of this is best-effort: ifindex_task/get_task_context/search_tasksreturn a "(… unavailable)" note or error, continue — never abort the review.
- Call reviewer
-
Analyze (fan-out). The Python per-unit fan-out remains based only on
units. For each unit inunits, dispatch a subagent (Task tool, run independent subagents in parallel; batch units if there are more than ~10) with:- the contents of
references/analyze-prompt.md(read it once, resolve includes, include verbatim); - the unit's
path,patch,commentable_right(sorted list of new-file line numbers available for inline),commentable_left(sorted list of old-file line numbers available for inline), and the PRtitle/body; - the repo/pr identifiers so the subagent can call the reviewer MCP tools
(
search_code,get_related_symbols,read_file,get_definition,find_callers,get_changed_file_diff); - the target output language.
Each subagent submits findings via
submit_findings(repo, pr, findings=[...])(schema-enforced; the server assigns ids).
- the contents of
-
Dimensions (parallel with step 3). Dispatch whole-diff subagents:
- performance: follow the methodology of
../performance-review/SKILL.md(Goal, Method, Severity sections); - maintainability: follow
../maintainability-review/SKILL.md; - requirements (ONLY if a
TaskBriefwas built in step 2): dispatch one subagent withreferences/requirements-prompt.md, the diffs of all units (path + patch), theTaskBrief, plus the related/similar task context gathered in step 2 (linked tasks, their PRs, touched code, similar tasks) as an optional "Related context" block, the repo/pr identifiers (so it can call the reviewer MCP tools), and the target output language. It submits findings viasubmit_findingswith categoryrequirements. - risk changes (ONLY if
risk_pathsis non-empty): dispatch one subagent withreferences/risk-changes-prompt.md, every risk item, the PR title/body, repo/pr identifiers, and output language. It submits only groundedcorrectness/securityfindings viasubmit_findings. - blast-radius: dispatch one subagent with
references/blast-radius-prompt.md, the diffs of all units (path + patch), each unit'scommentable_right/commentable_left(the line numbers where inline comments are allowed), the PRtitle/body, the repo/pr identifiers, and the target output language. It runs two checks — changed signatures breaking callers (viaget_impact) and interface expansion (a changedProtocol/ABC whose implementations must all be updated, viaget_related_symbols/search_code) — and submits findings viasubmit_findingswith categorycorrectness. Give the performance/maintainability subagents: the diffs of all units (path + patch), the repo/pr identifiers so they can call the reviewer MCP tools, and the target output language. They must submit findings viasubmit_findings(categoryperformance/maintainability).
- performance: follow the methodology of
-
Verify. Dispatch one subagent with
references/verify-prompt.mdand the repo/pr identifiers. It reads candidates viaget_candidate_findings(repo, pr)and submits verdicts viasubmit_verdicts(repo, pr, verdicts=[{id, is_real}]). A finding withis_real=falseis dropped at publish; a finding with no verdict is kept (recall-safe — no orchestrator action needed if verify fails). -
Publish. Compose a short review summary (2-5 sentences, in
policy.output_language): what the PR does, overall assessment, key risks. If a task was read, state whether the PR meets the task's requirements; if the task context was requested but unavailable (no key, sync error, task not found), say so briefly. Mention files that were not analyzed: failed subagents andskipped_pathsfrom the prepare payload. Name a failed risk subagent in the summary, and report everyrisk_skipped_pathsentry as not inspected. Callpublish_review(repo, pr, summary, dry_run, task_key)wheretask_keyis the canonicalTaskBrief.keyif a task was read (else omit / null). Review cost is captured automatically by the plugin'sPreToolUsehook (plugin/hooks/review_cost.py) into a sidecar file thatpublish_reviewreads server-side — no action needed here. If the CLI separately provides model/usage/cost metadata, pass it via the optional keyword argumentsmodel,usage, andtotal_costtopublish_reviewanyway: explicit arguments take priority over the sidecar on a per-field basis, so pass whatever the CLI can give you. When published, this links the PR to the task in the graph for future reviews. Report to the user: posted/dry-run, inline count, and the report counters (dropped_by_gate/deduped/invalid/already_posted/moved_to_summary/capped/verify_rejected), run_id.
Failure handling
- A failed analyze subagent must not abort the run: continue with the other units and mention the skipped file in the summary.
- A failed risk changes subagent is fail-open: continue with the review and name it in the summary.
- A
prepare_reviewpayload withstatus: "skipped"is not a failure: report itsreason(target branch not tracked inREVIEW_BRANCHES) and stop without analyze/publish. - If
prepare_reviewfails, surface its error text to the user as-is (it contains the remediation hint, e.g. "docker compose up -d"). - Never post comments yourself via gh/git — only through
publish_review.
Reporting a reviewer defect
Signals
- GitHub stars
- 1k
- Forks
- 316
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
review-pr-hashgraph-online- Source
- github.com/hashgraph-online/awesome-codex-plugins
github.com/hashgraph-online/awesome-codex-plugins
Related picks
Skill · wshobson
The pick for Pythonpython-pro
Skill · jeffallan
The pick for Pythondocker-agent-run
Skill · docker
The pick for Dockerdocker-sandbox
Skill · joelhooks
The pick for Dockerskill-creator
Skill · anthropics
More in AI & modelstriage
Skill · mattpocock
More in AI & models