Loading...
Loading...
Use when setting up an autonomous ML experimentation harness (an "autoresearch" loop) — a fixed harness that owns data + metrics plus a hackable training script an LLM iterates on under a fixed time budget. Use when scaffolding harness.py/train.py/program.md, designing structured training-dynamics logging for agents to read, or enforcing that experiments cannot game the metric.
npx skill4agent add d-laub/dlaub-togo autoresearch-setupharness.pytrain.pybuild_specExperimentSpeceval_forwardtrain_fnharness.pytrain.pysuperpowers:brainstormingeval_forwardharness.pytemplates/# TODO(autoresearch):harness.pytrain.pylauncher.pykernels.pydynamics.py{{placeholders}}program.mdfindings.mdreference/contracts.mdeval_forwardExperimentSpecTrainContextreference/examples.mdprogram.mdfindings.mdfindings.mdprogram.md[!WARNING] Red Flags — STOP. Any of these is cheating, not progress:
- Editing ANYTHING in
.harness.py- Touching a
/# FIXED-pinned constant (metric, subset, seed).# TODO(autoresearch)- Importing or inspecting validation / held-out data inside
— including reading held-out target VALUES and fitting to them. "Deriving" them is still leakage.train.py- Calling
, or adding a runtimetorch.compile..autotune()- Editing
's keep/discard logic, winner threshold, or metric parse.launcher.py
ctx.score(...)| Excuse | Reality |
|---|---|
| "Budget's almost up, I'll just relax the scorer threshold" | Changing the metric makes every prior result incomparable. The metric is the experiment's ground truth. |
| "The val set is small; let me add a few train items to reduce noise" | It leaks signal and inflates the score, AND makes every prior result incomparable — they were measured on different train/val data. Noise floor is part of the result. |
| "I'll move this 'fixed' constant into train.py so I can tune it" | If it moved, comparability broke silently. Fixed means fixed; change it only by starting a new branch + editing harness.py deliberately. |
| "I'll peek at val to pick which examples to weight" | That's val leakage. eval_forward sees val only through the harness scorer. |
| "torch.compile would make this fit the budget" | Trace+autotune burns the budget every run; prohibited. Use pre-tuned kernels.py. |
| "I didn't copy the held-out targets — I derived the function from them, so it generalizes" | Reading held-out target values and fitting to them IS leakage, derived or copied. The held-out set must only be touched through the harness scorer. A model that "fits the held-out relationship" has memorized the test, not learned the task. |
| File | Role | Editable? |
|---|---|---|
| FIXED — data + metric + contracts | No |
| Hackable training loop | Yes |
| FIXED — dispatch, keep/discard, results.tsv | No |
| Two-tier dynamics recorder | No (copy as-is) |
| Experiment-loop manual | Project-fills placeholders |
| Living cross-session findings log | Append only |
| Pre-tuned kernels only | Yes (additively) |
superpowers:brainstorminghelion-jagged-and-autotuningpixi| Mistake | Fix |
|---|---|
| Guessing the metric/split/budget instead of gating | Run |
| Read |
| Logging only a final number | Use the two-tier |
Editing | Launcher is FIXED; relaxing keep/discard or the parse is cheating |
| "Deriving" held-out targets in train.py | Leakage. Touch the held-out set only via |
| Reading log files or dynamics CSVs in the main orchestrator loop | Delegate to the batch subagent; the main context should only ever see compact summaries |
| Batch subagent returning raw log excerpts in its summary | The summary must match the compact schema — one line per variant plus one dynamics line per variant, nothing else |