Skip to main content
A run is one execution. Everything else — metrics, files, spans, code — hangs off it.

Opening one

The CLI never creates. probe run start opens a run inside an experiment that already exists, or directly under a project. A slug that is a near-miss of an existing one is refused, not created — on the CLI the slug is hand-typed every time, and that is where typos come from. Use probe project create / probe experiment create explicitly.The SDK does create, because a training script should not fail on a missing row.

Naming

Omit --name and the server names the run after its slug, or after the petname it mints when there is none — then replaces that with a generated title once the run reaches a terminal status. A name you supply is yours and is never overwritten.

Project-direct runs

Omit --experiment entirely. The run hangs off the project with no experiment in between. That is the honest home for work that has no hypothesis, and it is the shape a Weights & Biases import lands in.

Relationships

child

A sub-run nested under a parent.

fork

A new run continuing the source from a checkpoint step. The source stays untouched.

group

A peer in a sweep, ensemble or distributed job.

Wrapping a command

probe exec opens the run itself, holds it with a heartbeat for as long as the child lives, and closes it from the child’s real exit code. It hands the child PROBE_RUN_ID and PROBE_RUN_EPOCH, and probe.init() inside the job reads them and joins that same run — so wrapping a script that already calls probe.init() produces one run, not two.
sbatch, ray job submit and modal deploy are detected. Those commands return as soon as the job is submitted, so recording the submitter’s exit code as the job’s outcome would be a lie. Probe opens the run awaiting attach instead, and the job claims it when it starts.

Closing one

probe run end is the delivery barrier: it blocks until everything queued for that run has actually been delivered, unless you pass --async. That is what makes “the run is closed” mean “the data is there”. From the SDK, probe.finish() does the same. A script that exits without calling it is still closed at exit as completed, failed or canceled.

When the process dies

SDK-created runs heartbeat every 60 seconds, so the server can reap a run whose process vanished rather than leaving it running forever. Tune with PROBE_HEARTBEAT_SECONDS; <=0 disables it. When a run crashes or fails, Probe emails a postmortem: a timeline of what the run’s telemetry showed before it broke — step time, GPU temperature, loss spikes, memory pressure, learning-rate trouble — where in the execution it stopped (training/epoch-7 > step 41300) and the signal that ended it (killed by SIGKILL).

Reading runs back

Amending

probe link attaches foreign keys under metadata.foreign_keys — how a Probe run stays joinable to the scheduler, tracker or ticket it came from.

Relaunching from a checkpoint

Rewind discards the incumbent run’s record from that step onward and rewrites it, unlocking a completed incumbent to do so. Without the flag nothing is ever deleted — a re-push against an existing external id is rejected rather than allowed to overwrite history quietly.