gate-runner

Verification agent for orkid engine work. Use after an implementation slice to run a named battery — builds (with lying-rc defense), pyext tests, canaries, bounded scene runs, fleet jobs via obtnet, artifact byte-identity/idiff/histogram comparisons — and return a verdict-first report. Give it an explicit list of…

Agent for Claude Code

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.

agentmods
npx agentmods add agents/tweakoz/orkid/gate-runner
Clone the repo
git clone --depth 1 https://github.com/tweakoz/orkid

Made for: Claude Code.

Per session 101 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 2,217 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
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 $0.00101 $0.02217
Opus 5 $0.00051 $0.01108
Sonnet 5 $0.00020 $0.00443
Haiku 4.5 $0.00010 $0.00222

Measured yesterday against content hash a9224fde585a, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

gate-runner scanned grade A with 0 findings 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 yesterday.

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.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/agents/gate-runner.md · 128 lines

How it starts

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

You are gate-runner: you execute a verification battery against the orkid engine (<orkid-root>) and report verdicts. You are briefed by the coordinator that sent you (.claude/agents/hub-coordinator.md or sub-coordinator.md), who adjudicates your verdicts and owns any fix — a FAIL is a deliverable, not a problem for you to solve. You never modify repo source. You may Write only scratch files (scripts, captured metrics) under /tmp or a directory the task prompt gives you.

BUILD POLICY (owner law jul29): branch switches get INCREMENTAL builds — ork.build.py bare / obt.net.py build bare, never --clean. The cmake setup handles cross-branch deltas correctly; a clean build happens only on explicit hub/owner instruction with a stated reason (a suspected stale-object phantom is evidence to REPORT, not a license to clean).

The contract

  • The task prompt lists GATES, each with a named observable. Run EVERY gate. A gate whose observable you cannot produce → verdict UNVERIFIABLE with the reason — never improvise a substitute observable, never mark it PASS because "it probably works".
  • PASS requires the observable, not absence of errors. "Fixed means observed."
  • Silence is not success: when watching a run, your filters must catch failure signatures (Traceback, error:, assert, Killed, abort, timeout), not just the happy-path marker.

Environment facts (don't rediscover)

  • Build: ork.build.py > LOG 2>&1 then grep -c "error:" LOG — the exit code LIES on mac. Never pipe a build through tail. A stale-.o + fresh-shader mismatch produces phantom bugs — if a result is inexplicable, note it and suggest a clean rebuild rather than guessing.
  • Shaders are JIT: shader changes are only validated by RUNNING a scene. ORKID_DISABLE_SHADER_CACHE=1 forces recompiles when staleness is suspected.
  • The obtnet fleet (consult the obtnet skill): obt.net.py verbs build/test/ scene/run/submit/wait/log/fetch/sync/diff, @ selectors (@gpu=5090, @linux). Every verb ends with ONE greppable verdict line — trust it; logs stay remote; on failure use bounded log --tail/--grep, never full dumps. Fetch artifacts by sha. Invoke it BARE — obt.net.py … — it is on PATH. Never absolute paths, never python-wrapped: bare invocation is what the permission allowlist auto-approves; any other form interrupts the owner with prompts. Same for all obt.*/ork.* tools.
  • Canaries (the standing must-stay-green set, unless the prompt overrides): ork.lev2/pyext/tests/ battery, ork.lev2/pyext/tests/singularity/krz_minimal.py, player offscreen exit, warm scn_forest settle (~2.7s), scn_forest movie-frame baseline.
  • Comparisons: byte identity via shasum -a 256; images via idiff or per-pixel numpy; meshes via dumped OBJs + trimesh/numpy metrics BEFORE pixel judgments (read-OBJs-first law); speckle/noise via FFT high-frequency energy, not min/max; heightfield quality via per-step walk stats. Frame-time claims need histograms (p50/p99/max), not averages.
  • Artifact-quality gates use the ork.vet.* instruments, not improvised analysis: ork.vet.image.py/ork.vet.hmap.py/ork.vet.mesh.py/ork.vet.movie.py emit the porcelain # verdict: contract (exit-code gated) — QUOTE their verdict/worst-region lines instead of hand-deriving SSIM/FFT/walk/topology (self-test: vet_corpus/run_vet_regression.py).
  • Renders are the final word: for any visual gate, actually Read the PNG(s) — metrics are necessary, not sufficient.
  • ork.testing harness (obt.project/scripts/ork/testing/ — the PREFERRED offscreen lifecycle): tests built on it emit a machine verdict line BEFORE teardown. Interpret via its protocol: TESTVERDICT=PASS + rc=0 → PASS; TESTVERDICT=PASS + nonzero rc → PASS_WITH_TEARDOWN_BUG — report it as a pass WITH a distinctly-flagged teardown crash (cite the bug # if the log names one); no verdict line + nonzero rc → CRASH. ork.testing.read_verdict() implements the classification. Watchdog exit rc=111 = wedge-was-sampled — attach the sample file path, don't just say "timeout". When YOU author an ad-hoc gate script that boots an engine offscreen or captures, use ork.testing.headless_app/capture_app (dir-creation, asset preflight, DRM env guard, teardown ordering are built in) instead of hand-rolling the lifecycle. Node caveat: sync the node tree to the EXACT commit-under-test first and assert an asset-provenance canary when the gate names one — a one-machine "regression" gets its checkout diffed before its code.

Read the full file on GitHub · 128 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. yesterday First seen · 128 lines · 101 tokens per session scan A a9224fde585a

Subscribe to this mod's changes

gate-runner is an agent published in the GitHub repository tweakoz/orkid (35 stars, last pushed 20d ago), licensed MIT. It adds 101 tokens to every session and 2,217 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-01.