YOKE_Marketplace
← Marketplace

PR Review Runner

FREEby GroveSt23 tiles · 4 wires

An agent that reviews a GitHub pull request at one exact commit: builds, tests, runs your browser QA checks and records an evidence-backed PASS/FAIL/BLOCKED row. Needs a local agent with git, node and Playwright, plus a read-only GitHub token in a vault (key name GITHUB_TOKEN). Setup steps are in the HARNESS SETUP box.

Run PR Review Runner using Yoke Credits. Compute, AI calls, and retained storage are metered. New organizations receive $1 in credits; at least $1 available is required to launch.
No subscription · pause whenever you like

The board

commsdatarelation
AgentChestTableChest

What's inside

1 agent2 chests2 contexts1 loop1 table12 belts4 yokes
agent
PR Review Agent
chests
PR Review Side Chest, PR Review Chest
contexts
PR REVIEW INSTRUCTIONS, HARNESS SETUP (fill in)
loop
PR Review Loop
table
pr_review_notes
version 1updated 2026-09-30published 2026-09-30

Swarm file

View the swarm file (455 lines)
# PR Review Runner v2: built from a Cmd+B board capture, then sanitized (generic ids/names; agent config, chest items and table rows are NOT carried).
# Belt/loader layout is grid-position based: keep the tiles adjacent as placed. Set the loop to FIRE ON DEMAND and give the agent a local runtime. See SETUP.md.

pipes = []
cam_x = 0.0
cam_y = 0.0
cam_zoom = 1.0
prompt_loaders = []
http_fetch_loaders = []
webhook_loaders = []
trash = []
last_seq = 0
last_hash = ""

[[agents]]
id = "pr-loader-4"
name = "PR Loader 4"
gx = 17
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-8"
name = "PR Belt 8"
gx = 8
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-7"
name = "PR Belt 7"
gx = 7
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-6"
name = "PR Belt 6"
gx = 6
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-5"
name = "PR Belt 5"
gx = 5
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-4"
name = "PR Belt 4"
gx = 4
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-3"
name = "PR Belt 3"
gx = 3
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-12"
name = "PR Belt 12"
gx = 16
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-11"
name = "PR Belt 11"
gx = 15
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-9"
name = "PR Belt 9"
gx = 9
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-2"
name = "PR Belt 2"
gx = 2
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-1"
name = "PR Belt 1"
gx = 1
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-loader-3"
name = "PR Loader 3"
gx = 13
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-loader-1"
name = "PR Loader 1"
gx = 10
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-agent"
name = "PR Review Agent"
gx = 11
gy = 3
width = 2
height = 2
system_prompt = ""
projects = []
has_session = false
last_status = ""
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-side-chest"
name = "PR Review Side Chest"
gx = 11
gy = 6
width = 2
height = 2
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-chest"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-instructions"
name = "PR REVIEW INSTRUCTIONS"
gx = 14
gy = 1
width = 2
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-context"
doc_text = """
PR REVIEW AGENT: HOW TO REVIEW A PULL REQUEST

You are woken when the PR Review loop delivers a package. Each package is one review of one PR at one commit.

Package (JSON): {"task":"pr_review","repo":"<owner/repo>","pr":<number>,"head_sha":"<short sha>","fired_at_utc":"<clock>","mode":"pre_merge | post_merge","suite":"<what to check, free text>","authorized_by":"<agent or person who asked>"}
If task is not "pr_review", or pr or head_sha is missing, or it says "probe" or "ignore", do nothing.

1. SET UP. Follow the HARNESS SETUP context box. Fetch the PR head and check out the EXACT commit in the package, detached. Run git rev-parse after fetching and test the package commit. If the PR head has moved since, note the newer commit under open_questions; do not switch to it.

2. OPEN THE RECORD. In the table pr_review_notes create (or open) the row with key pr<PR>_<first 7 chars of sha>. Set started_at_utc from the clock (never guessed), mode, branch, base, sha and full_sha.

3. RUN THE CHECKS. Install dependencies, then run the build, type-check and test commands from HARNESS SETUP. Then run the QA checks named in the package's suite field, and any QA suite listed in HARNESS SETUP, in a real browser with screenshots as evidence. This job is READ-ONLY: never push, merge, approve, comment on the PR, change settings or secrets, or use production credentials. Never spoof network headers on a real network. Kill any servers you started before switching to another commit.

4. FIND WHAT CHANGED. If this PR was reviewed at an earlier commit (an older row for the same PR), record changes_since_prior_sha: what changed and which earlier findings are now fixed or still open. Skip the rebuild if the app source did not change between the two commits.

5. WRITE THE RESULT to the same row: checks [{id, st: PASS | FAIL | BLOCKED, ev}], counts, fails, blocked (check + reason), timing, harness (versions/tools used), open_questions, finished_at_utc, and one history line {at_utc, change}. Use BLOCKED, never PASS, for anything you could not truly verify (for example a check that needs a real preview deployment, a real region, or credentials you do not have). Never write people's names, emails or tokens into a row.

6. REPORT. Send the requester ONE short message: repo, PR number, commit, verdict (PASS / FAIL / BLOCKED), counts, any FAILs or blockers, and timing. No other messages.

7. KEEP STANDING NOTES. When you learn something reusable about this harness (a setup step, a quirk, a timing tip), add it to the row named standing_notes in pr_review_notes, with a history line. Do not put project secrets there.
"""
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-table"
name = "pr_review_notes"
gx = 11
gy = 0
width = 2
height = 2
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-table"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-loader-2"
name = "PR Loader 2"
gx = 11
gy = 5
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-yoke"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-belt-10"
name = "PR Belt 10"
gx = 14
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-belt"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-loop"
name = "PR Review Loop"
gx = 0
gy = 3
width = 1
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-loop"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-chest"
name = "PR Review Chest"
gx = 18
gy = 3
width = 2
height = 2
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-chest"
overrides = []
unplaced = false
created_by = ""

[[agents]]
id = "pr-harness"
name = "HARNESS SETUP (fill in)"
gx = 17
gy = 1
width = 2
height = 1
system_prompt = ""
projects = []
has_session = false
last_status = ""
template_id = "builtin-context"
doc_text = """
HARNESS SETUP: replace every YOUR_* value before the first run.

Repository: YOUR_REPO (owner/repo)
Git access: a read-only GitHub token stored in your vault under the key name GITHUB_TOKEN. Read it by name; never write it into any file, row or message.
Checkout: git clone YOUR_REPO into a working folder, then git fetch origin pull/<PR>/head and check out the exact commit, detached.
Install command: YOUR_INSTALL_COMMAND
Type-check command: YOUR_TYPECHECK_COMMAND
Unit-test command: YOUR_TEST_COMMAND
Build command: YOUR_BUILD_COMMAND
Start command and port (if the app must run for browser checks): YOUR_START_COMMAND, YOUR_PORT
Preview URL pattern (optional): YOUR_PREVIEW_URL_PATTERN
QA suite (optional): the commands or scripts that drive your browser checks, and what each one covers. Example suites are project-specific; list your own.
Browser: Playwright with a Chromium browser installed on this machine.
Third-party vendors: if your app loads third-party scripts, stub them with request interception rather than hitting real vendors.

Reusable habits:
- Only rebuild when the app source changed between commits; remove build caches when switching to a different PR.
- Stop background servers before switching commits.
- Poll for events instead of fixed sleeps.
- If a check needs a real preview deployment, real region or credentials you do not have, mark it BLOCKED with the reason.
"""
overrides = []
unplaced = false
created_by = ""

[agent_runtimes]

[agent_harnesses]

[agent_models]

[node_orientations]

[agent_slugs]

[spawned_by]

[node_creator]

[[wires]]
from = "pr-agent"
to = "pr-table"

[[wires]]
from = "pr-table"
to = "pr-agent"

[[wires]]
from = "pr-instructions"
to = "pr-agent"

[[wires]]
from = "pr-harness"
to = "pr-agent"