exoclaw-firmware
Deployable exoclaw image for MicroPython boards. Bundles core
exoclaw + the MP-compatible plugin set (conversation, OpenAI
provider) + board-specific boot wrappers, so flashing one tree
gets you a chip that can hold a conversation with an LLM.
This is the equivalent of exoclaw-nanobot for the chip target —
where nanobot is "what you run on a server", exoclaw-firmware
is "what you flash to a board".
Supported boards
| Board | RAM | Status | Notes |
|---|---|---|---|
| ESP32-S3 (8 MB PSRAM) | 8 MB | Supported | Reference target; SD card recommended. |
| ESP32 (4 MB) | 4 MB | Should work | Tighter; turn off any optional plugins. |
| Raspberry Pi Pico W | 264 KB | Unlikely | RAM budget too small for an LLM agent loop. |
Adding a new board: copy boards/esp32_s3/ to boards/<your_board>/,
adapt the boot.py for that platform's WiFi / SD / clock APIs.
Quickstart (ESP32-S3)
- Wire up an SD card (optional but recommended for session
storage). Default pins in
boards/esp32_s3/boot.py:sclk=12, mosi=11, miso=13, cs=10. - Flash MicroPython 1.27+ to the board (out of scope for this package — see the MicroPython downloads page).
- Copy
boards/esp32_s3/secrets.py.exampletoboards/esp32_s3/secrets.pyand fill inWIFI_SSID,WIFI_PASSWORD,OPENAI_API_KEY. - Stage and flash:
cd packages/exoclaw-firmware mise run flash
- Reset the board (or
mise run replto watch output). On first boot you should seeboot: SD mounted,boot: WiFi up,boot: clock synced, then ayou>prompt — type a message and press enter to chat with the agent over USB serial.
What's in the flash image
The mise run stage task assembles the deployable tree under
.stage/:
.stage/
├── boot.py # WiFi + SD + NTP setup
├── main.py # runs run_serial_chat() (USB-CDC chat loop)
├── secrets.py # gitignored; your credentials
├── exoclaw/ # core (with _cpython.py stripped)
├── exoclaw_conversation/ # MP-compatible conversation plugin
├── exoclaw_provider_openai/ # MP-compatible OpenAI provider
└── exoclaw_firmware/ # this package's app.py
Files matching _cpython.py are stripped at stage time — they
hold CPython-only implementations that the MP runtime never
imports. Same trick the core MP coverage runner uses.
Channels
The default channel after flash is USB-CDC serial. Plug the
board into a host, open mpremote repl (or screen /dev/cu.usbmodem* 115200), hit reset, and you'll see:
boot: WiFi up: ('192.168.…', …)
boot: clock synced via NTP
main: ready — type a message and press enter (Ctrl-C to exit)
you>
Type, press enter, get a response. No chat-platform tokens, no webhook URLs — just stdin/stdout over USB.
For network-side channels, swap the run_serial_chat call in
main.py for your own loop on top of build_agent (which returns
a (provider, conversation) pair). Common patterns:
- HTTP long-poll (Telegram-style) — easiest cloud channel; one outbound request per poll cycle.
- MQTT subscriber (
umqtt.simple) — IoT-native, integrates with Home Assistant / AWS IoT / HiveMQ. - HTTP webhook server (
asyncio.start_server) — local-network only unless you tunnel. - WebSocket — single long-lived connection, lower latency than long-poll, needs a WS client.
- BLE GATT — phone companion app pattern, range ~10m.
Pick what fits the deployment. The serial loop stays useful as a debug channel even after you wire a cloud channel.
mise tasks
| Task | What it does |
|---|---|
mise run stage |
Assemble .stage/ from core + plugins + board files. |
mise run flash |
Copy .stage/ onto the attached board via mpremote. |
mise run repl |
Drop into a REPL on the board. |
mise run run |
Exec main.py on the board without flashing. |
mise run wipe |
Erase the board's filesystem (destructive). |
Metadata
Release files for exoclaw-firmware 0.11.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| exoclaw_firmware-0.11.0.tar.gz | 34.1 kB | Without provenance | Details for exoclaw_firmware-0.11.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| exoclaw_firmware-0.11.0-py3-none-any.whl | Python 3 | none | any | Details for exoclaw_firmware-0.11.0-py3-none-any.whl |
Total release size: 49.5 kB
Release files / exoclaw_firmware-0.11.0.tar.gz
| Download URL | exoclaw_firmware-0.11.0.tar.gz |
|---|---|
| Size | 34.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3e135ac1dba8a262bab28dfc2649940c9309f11fc4a20d372dd6f3c901812738
|
|
BLAKE2b-256 checksum How to use checksums |
016fe57e986bd59f747d31f871a67df4a726fc79e0b106037a6fd8fb436d52d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / exoclaw_firmware-0.11.0-py3-none-any.whl
| Download URL | exoclaw_firmware-0.11.0-py3-none-any.whl |
|---|---|
| Size | 15.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ac1c8097ecd0bbc92b1177b37746a635a1f3111a0017e956c24bc8cfe3d54211
|
|
BLAKE2b-256 checksum How to use checksums |
9cdc2924afa2fe88fb6e76cb289377162c7478e99448572829197059412699af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for exoclaw-firmware 0.11.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.