← Marketplace
1 agent
2 chests
2 contexts
1 loop
1 table
12 belts4 yokes
PR Review Runner
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
What's inside
- 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
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"