tofupilot init

Last updated on November 10, 2026

The init command creates a procedure project that validates and runs as is: a procedure.yaml with a simulated power supply plug, setup, main and teardown phases, a measurement with limits, a pyproject.toml, and the agent files tofupilot agents-md writes. No account is needed.

new project
tofupilot init board-test
cd board-test
tofupilot validate && tofupilot run
files
board-test/
├── procedure.yaml                      # name from the folder: "Board Test"
├── phases/power.py                     # power_on, check_output_voltage, power_off
├── plugs/mock_power_supply.py          # the simulator the YAML points at
├── pyproject.toml
├── .gitignore
├── AGENTS.md                           # managed block for coding agents
├── CLAUDE.md                           # @AGENTS.md
└── .tofupilot/
    ├── procedure.schema.json           # JSON Schema of procedure.yaml
    └── stubs/tofupilot_phase.pyi       # types of the injected phase parameters

The plug is a simulator, so the first run passes without hardware. Point its python: at your real driver once the bench is wired, and keep the simulator for offline runs with tofupilot run --plug. procedure.yaml starts with a yaml-language-server comment that points editors at the schema, and pyproject.toml points Pyright and mypy at the stubs.

[DIR]

The directory to create the project in, created when missing. Defaults to the current directory. A directory that holds anything but a .git is refused (exit code 2) unless --force.

--name <NAME>

The procedure's name. Defaults to the directory name in title case (board-test → Board Test).

name
tofupilot init board-test --name "Board Functional Test"

--force

Adds the starter files to a directory that is not empty. An existing file is never overwritten: it is kept and listed as skipped. AGENTS.md and CLAUDE.md are updated as agents-md does.

--json

Prints one object with path and the created, updated and skipped files, relative to the project.

How is this guide?

On this page