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.
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.
/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.
/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.
/execute N
Prepare, GPU, monitor, judge, close: hands off to status:done, box destroyed,
report published.
/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 Nresumes any issue from wherever it stopped;/statusprints 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 askit 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.
| when | what moves | via | lands on |
|---|---|---|---|
| before launch | experiment branch (pushed first), plan, state labels | git push | GitHub |
| during the run | metrics + checkpoints out; log tails + hotfix patches back | WandB/R2, rsync | WandB · R2 · Mac |
| at the finish | results synced before teardown; verdict comment; report page (the push is the deploy); code PR | rsync, git push | GitHub · site · R2 |
| after close | run 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.
| agent | job | model · effort |
|---|---|---|
| research-planner | turns the claim into a falsifiable plan in the issue body | Opus 4.8 · max |
| experiment-runner | writes the code patch + payload, runs CPU prep, provisions, launches | Opus 4.8 · max |
| machine-monitor | mechanical health polls (~30 s): ssh/tmux, GPU util, step advance, disk, heartbeat; zero judgment | Sonnet · high |
| training-log-monitor | classifies an anomaly (env vs experiment vs stall), once per anomaly, not every cycle | Opus 4.8 · high |
| analyst | one bounded pass to a PASS / REVISE / STOP verdict; a REVISE auto-files a follow-up issue | Opus 4.8 · xhigh |
| log-writer | summary row, promotes proven settings into the launcher, opens + merges the PR | Opus 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:
/statusshows 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.