# Job files

A job file holds the same settings as `Client.run()` in TOML, so a job can be
kept in version control and submitted with one command.

```bash
runcompute init      # writes runcompute.toml
runcompute quote     # price it
runcompute run       # submit and wait
```

## Example

```toml
name = "llama-lora"
image = "ghcr.io/acme/finetune:2025-09"
command = ["python", "train.py", "--epochs", "3"]

budget = 40            # dollars
work_units = 12        # A100-hours of work
min_vram = 40          # GB of GPU memory
gpu_count = 1
allow_spot = true
checkpoint_every = 0.5 # hours
```

Every key maps to a [job parameter](/docs/parameters/). Unknown keys are
rejected before anything is submitted.

## Commands that read a job file

| Command | What it does |
| --- | --- |
| `runcompute run [FILE]` | Submit, print events until the job ends, exit 0 on success |
| `runcompute submit [FILE]` | Submit and print the job ID |
| `runcompute quote [FILE]` | List matching machines with estimated hours and cost |

`FILE` defaults to `runcompute.toml`. Job files need Python 3.11 or newer.
