← Com-Eff RLVR hubresults feed: Experiment Runs

research harness · introduction · updated 2026-07-10

The agentic harness: autonomous experiments, driven from a laptop

Every experiment is run end to end by AI agents from a local Mac running Claude Code desktop. One research claim = one GitHub issue = one lifecycle, and you make exactly one decision per experiment: approving the plan. The agents do the rest: design it, write the code, rent the GPU, watch training, judge the result, publish the report, and give the GPU back.

1The lifecycle at a glance

In one line: the Mac is the hub. It pushes every GitHub artifact up over git (issue, plan, branch, PR) and mirrors the ephemeral GPU box over rsync (code down, logs and checkpoints back). The GPU exists only for the Launch to Monitor span and is reaped the instant results sync, so a crash or a dead box loses nothing.

how it actually runs

Not a linear script: it is a loop over a heavily customized plan template, advancing through gates (approval, CPU prep, budget, teardown) and looping back whenever one is not met.

2Three commands, one human decision

Each phase runs in a fresh window, so context never leaks between phases. Everything a later window needs travels through GitHub labels, the issue body, and a small local ledger, never a chat transcript.

window 1

/build "…"

File the claim in plain language, producing issue #N, auto-labeled. Every claim carries one falsifiable numeric hypothesis; if you omit it, the harness proposes one to edit.

window 2

/plan N

An agent writes the plan into the issue body, then stops at the gate: a short digest with the worst-case dollar cost. Approve, edit, or reject. deep adds judge panels.

window 3

/execute N

Prepare, GPU, monitor, judge, close: hands off to status:done, box destroyed, report published.

example: one issue, research + heavy engineering
/build "Anchor-refresh clone OOMs at offload-OFF / token-len 30000 on the
comm-eff arms. Add gradient checkpointing to build_anchor_module in
verl/workers/comm_eff/anchor.py so the extra forward/backward never
materializes full activations, then show the R1-Distill-1.5B 16K/n16 run
holds GSM8K parity with the dense control within 1% at anchor cadence 20 /
delay 10, peak memory under 140 GB on 1×H200."

That single line spawns the branch, the anchor.py patch, a CPU import and shape gate, a memory-feasibility probe on 1×H200, the full run, the verdict, and a merged PR.

  • All uncertainty is spent before approval. Brainstorming, judge panels, and adversarial review happen at planning time only. After your yes, execution is single-shot with bounded retries, no open-ended agent loops.
  • Anything unclear stops. A stage that cannot proceed flags the issue (needs:human) with the reason and the exact resume command. It never guesses or spins.
  • Parallel experiments = parallel windows, one issue each, in its own git worktree. /go N resumes any issue from wherever it stopped; /status prints the whole fleet.

3GPUs appear late, leave early

The core cost rule: implementation finishes on the laptop before any GPU exists.

  • Prepare (Mac only): the runner creates the experiment branch, writes the code patch and launch payload, and runs one bounded CPU sanity pass (imports, shapes, off-path parity). No cloud box exists yet.
  • Provision (only when green): the harness rents the cheapest offer on a fixed ladder (1×H200, then 1×B200, then 2×H200; reliability over 0.99), sizing known workloads from measured profiles instead of re-probing. With --gpu ask it pauses so you can hand it a box you rented yourself; resuming never re-does the laptop work.
  • Teardown (immediately): the box is destroyed the moment results sync. Judging, reporting, and publishing all run back on the laptop, GPU-free.

4Nothing gets lost: git one way, rsync the other

The laptop drives; it never archives. The two channels in the diagram above run automatically (git for GitHub, rsync for the GPU box), so a crash, a dead box, or a closed window loses nothing.

whenwhat movesvialands on
before launchexperiment branch (pushed first), plan, state labelsgit pushGitHub
during the runmetrics + checkpoints out; log tails + hotfix patches backWandB/R2, rsyncWandB · R2 · Mac
at the finishresults synced before teardown; verdict comment; report page (the push is the deploy); code PRrsync, git pushGitHub · site · R2
after closerun dirs, caches, and handles are swept. The laptop keeps one summary row; the durable record lives on GitHub, WandB, R2, and this site.

5The subagents: cheap eyes, expensive judgment

Each stage dispatches a specialized subagent with a fresh context. Model and effort are tiered by what a mistake costs: the two agents that author the plan and the code get the ceiling, because a wrong one burns real GPU money.

agentjobmodel · effort
research-plannerturns the claim into a falsifiable plan in the issue bodyOpus 4.8 · max
experiment-runnerwrites the code patch + payload, runs CPU prep, provisions, launchesOpus 4.8 · max
machine-monitormechanical health polls (~30 s): ssh/tmux, GPU util, step advance, disk, heartbeat; zero judgmentSonnet · high
training-log-monitorclassifies an anomaly (env vs experiment vs stall), once per anomaly, not every cycleOpus 4.8 · high
analystone bounded pass to a PASS / REVISE / STOP verdict; a REVISE auto-files a follow-up issueOpus 4.8 · xhigh
log-writersummary row, promotes proven settings into the launcher, opens + merges the PROpus 4.8 · high

The watch loop is the only place a cheaper model runs: the Sonnet poller reads numbers on a cadence, and the Opus classifier is paid for only when something looks wrong.

6Reflexes and money safety

Hooks fire automatically on every session event; no agent decides to run them.

  • Kill switch: touch ~/.claude-kill-switch instantly pauses every agent tool call across all windows; rm to resume.
  • Write protection: a hook refuses edits to the upstream code tree outside a per-experiment branch, so agents cannot corrupt the substrate.
  • No box outside the ledger: a ledger row is registered the instant a box handle exists, and the provisioner destroys any box that never passes an SSH probe. Each box is stamped with the Vast account that created it, so teardown always uses the right key.
  • Three teardown backstops: the monitor reaps on results-sync, then a window-close reaper catches stale heartbeats, GPU-hour caps, and orphans, then an hourly cron reaper runs with no session open. An unexplained box never keeps billing.
  • Visibility: /status shows live $/hr across both accounts and flags any box with no owning ledger row; per-run GPU-hour caps live in every plan, weekly and monthly dollar caps in one config.

7Cheat sheet

/build "does signed_ema α=0.4 hold parity at cadence 10/10?"   # file, issue #N
/plan N            # plan into the issue body, then your approve   (add `deep`)
/execute N         # run to done   (--gpu auto|ask, --attach <id>, --account team)
/go N              # resume from anywhere
/status            # fleet, burn rate, leak check

This page is the human introduction. The machine truth the agents read lives in the research checkout: project.yaml (single source of truth for config), skills/*/SKILL.md (the commands), and agents/*.md (the subagents). Finished runs land on the Experiment Runs feed, the only tab the pipeline writes; the reports and weekly tabs stay human-curated. The harness is project-agnostic and ports by editing one config file.