You need uv installed. Everything else — Python, west, and the Zephyr SDK — is managed by the tooling.
git clone https://github.com/rosterloh/zephyr-applications
cd zephyr-applications
uv sync # create .venv and install all Python tools
uv run pre-commit install # install pre-commit hooks
uv run poe setup # west update (deps/) + Zephyr SDK toolchainsBuild any app against its default (or an explicitly allowed) board:
uv run poe app motor_controller # default: robotis_openrb_150
uv run poe app joystick_controller # default: adafruit_qt_py_esp32s3
uv run poe app rasprover --sysbuild # rasprover hw build + MCUboot
uv run poe app rasprover --board native_sim/native/64 # rasprover native_simEach app has an allowed-board list (see the app task in poe.toml); boards outside it are rejected.
uv run poe flash motor_controlleruv run poe --help| Task | Description |
|---|---|
setup |
First-time workspace setup (west update + SDK install) |
west-update |
Fetch/update all west dependencies into deps/ |
sdk-install |
Install Zephyr SDK toolchains for this project's targets |
app <name> [--board <b>] [--sysbuild] |
Build an app for its default (or an explicitly allowed) board |
flash <name> |
Flash a previously built app |
agent-build <name> [--board <b>] [--sysbuild] |
app with tail-truncated logs written to logs/ |
run-rasprover-sim |
Run an already-built native_sim rasprover image |
fmt |
Format Python scripts with ruff |
.
├── applications/ # Zephyr applications
├── boards/ # Out-of-tree board definitions
├── deps/ # West-managed dependencies (git-ignored)
├── scripts/ # Utility scripts
├── poe.toml # Task runner configuration
├── pyproject.toml # Python dependencies (uv)
└── west.yml # West manifest
goliothandpouchare excluded until pouch addsfull_nameto itsboard.yml(required by the current Zephyr board schema). Re-enable inwest.ymlto restore Golioth support tobluetooth_proxy_device.rasproverhas had Golioth removed and builds cleanly without it.pico_fwuses Zephyr's in-tree AIROC driver for the Pico W's CYW43439; the firmware blobs come fromhal_infineon(fetched bypoe blobs-fetch).deps/is git-ignored. Runuv run poe west-updateto refresh after pulling changes towest.yml.