Run experiments¶
An experiment is a commit. You create one with submit, inspect it with diff
and log, move between experiments with checkout, and read results on the
dashboard.
Submit¶
submit snapshots your working tree, commits it as a new experiment, and queues
it. There are three ways to use it, depending on how much you want the agent to
own.
You wrote the code and it's final. Autolab commits + pushes it and moves you into the new experiment.
Every field you set — including your code — is locked: the agent fills only the blanks (like a missing run command) and never overwrites your work.
A starting point you're happy for the agent to revise. You stay in your current experiment.
Where do I end up after submit?
You advance into the new experiment only when the code is final — you
pushed code and didn't pass --soft. With --soft (agent may revise) or
--nocode (agent writes it), you stay put. This keeps your working tree
predictable.
Nothing to submit?
A plain autolab submit with no changes and no message is refused —
there'd be nothing for anyone to run or implement. Edit code first
(autolab diff previews what would be sent), pass -m "<why>" to rerun
the current code as a new experiment (e.g. to check run-to-run variance),
or use --nocode -m "<idea>" to let the agent write the code.
Common options¶
autolab submit -m "bf16 + larger batch" \
--name "bf16-bs512" \ # else the agent derives a name
--run "python train.py" \ # else inherited / agent-filled
--setup "uv sync" \ # environment prep before the run
--node "8xH100" \ # node constraint
--from <id> \ # branch from a specific experiment instead of main
--priority 10 # queue priority
See all options in the CLI reference.
Inspect changes: diff¶
diff has two modes. With no argument it shows your uncommitted changes
versus the experiment you're in — exactly what submit would send. With an
experiment id it shows what that experiment changed versus the code it
branched from. (Your .autolab/ control dir is never shown.)
By default it prints a summary — each changed file with its added/removed line
counts, like git diff --stat. Pass -p/--patch to print the changed lines
themselves:
autolab diff # your changed files, ±lines each (new files included)
autolab diff -p # …the full patch: the changed lines themselves
autolab diff <id> # what experiment <id> changed vs its base, ±lines per file
autolab diff <id> -p # …as a full patch
autolab diff <id> works once the experiment's code is final (it ran, or
its code was locked). While the agent may still write or revise the code —
queued or --nocode/--soft experiments — there is no meaningful diff yet and
the CLI says so.
History: log¶
log includes queued and pending experiments. The commit column stays
empty until the code is final — for --soft/--nocode experiments the agent may
still be coding it.
Lineage: graph¶
Where log is a flat list, graph shows the branch tree — what each
experiment was forked from, so you can see how the research actually evolved:
autolab graph # the lineage tree; → marks the experiment you're in
autolab graph --root <id> # only one experiment's subtree
autolab graph --format json # the same graph as edges, for scripts and agents
alice/nanochat
└── 9f2a01c4 merged loss 0.42 baseline
└── 7b1e88aa merged loss 0.31 rotary embeddings
├── → 4c0d12ff running bf16 + larger batch
└── a83b77e1 merged loss 0.25 cosine decay
Each node shows the short id, status, primary metric, and title. A child hangs
under the experiment it branched from — the one you chose with
submit --from <id>, or the latest merged experiment by
default. Status is colour-coded the same way as the dashboard's
graph view.
Only experiments that have started appear — queued/pending ones have no
lineage yet, so use log to see those. --format json emits one node per
experiment with its resolved parent_experiment_id, parent_source
(parent_id or base_commit), depth, and is_current — handy for an agent
reasoning over the tree.
Move between experiments: checkout¶
Reset your working tree to any experiment's code, or back to main:
autolab checkout <id> # this experiment's code
autolab checkout main # the current main branch
autolab checkout <id> -f # discard local changes while switching
checkout fetches first so the target commit is present. If you have uncommitted
changes it stops and tells you how to keep them (submit) or discard them
(-f).
Stay current: pull¶
Read results¶
An experiment's run logs and the agent's activity stream on its dashboard
page — open it straight from the terminal with
autolab open <id>.
Artifacts aren't captured yet
The runner does not upload checkpoints or files, only logs.
Cancel¶
Cancelling a running job also stops it on its node — a not-yet-started
assignment is dropped, and an in-flight run is killed (scancel on Slurm
clusters) so the GPU frees up right away.
Open in the browser¶
Most experiment IDs accept a short prefix. If a prefix is ambiguous the CLI tells you — see Troubleshooting.