tofupilot run
Last updated on June 26, 2026
The run command executes a procedure. It takes an optional positional path to a procedure .yaml file, a directory, or a Python entry point, and when you pass a path, the procedure runs locally without contacting the dashboard. Without a path, run picks from pulled deployments.
tofupilot run ./procedures/pcb-fvt<PATH>
A positional argument that points to a procedure .yaml file, a directory, or a Python entry point. This conflicts with --deployment.
tofupilot run ./procedures/pcb-fvt--deployment <ID>
To run a specific pulled deployment by ID, pass --deployment. This conflicts with a positional path.
tofupilot run --deployment dep_abc123--ui-values <FILE>
When you want to drive runs without an operator, pass a JSON file with pre-baked Operator UI values keyed by { phase_key: { component_key: value } }.
tofupilot run --ui-values phases.json--ui-timeout <SECONDS>
To time out phases waiting on required UI input, pass a number of seconds. The default is to wait forever.
tofupilot run --ui-timeout 600--tui
The --tui flag force-enables the in-terminal operator UI for this run, overriding the terminal_ui station config. It conflicts with --no-tui.
tofupilot run ./procedure.yaml --tui--no-tui
The --no-tui flag force-disables the in-terminal operator UI for this run, overriding the terminal_ui station config.
tofupilot run ./procedure.yaml --no-tui--kiosk
The --kiosk flag force-enables the local browser kiosk UI for this run, and it spins up an in-process WebSocket and static-file server on loopback. It overrides the kiosk_ui station config and conflicts with --no-kiosk.
tofupilot run --kiosk--no-kiosk
The --no-kiosk flag force-disables the local browser kiosk UI for this run, overriding the kiosk_ui station config.
tofupilot run --no-kiosk--no-bootstrap
The --no-bootstrap flag skips the auto-bootstrap prompt for missing Python virtualenvs on local-path runs, so the run fails with the original Python resolution error instead of offering to provision a venv with uv venv and install dependencies.
tofupilot run ./procedure.yaml --no-bootstrap--upload
The --upload flag syncs a local-path run to the dashboard under the procedure it is linked to. It requires a tofupilot.json in the procedure directory (written by tofupilot link) or the TOFUPILOT_PROCEDURE_ID environment variable, which takes precedence. Without --upload, a local-path run stays local and never contacts the dashboard. The flag is ignored for --deployment runs, which always upload.
tofupilot run ./procedures/pcb-fvt --uploadStudio, the desktop app, invokes the same engine as tofupilot run, so running from the terminal gives the same execution and dashboard sync as running from Studio.
How is this guide?