m5-onboard
End-to-end onboarding for a freshly-plugged-in M5Stack ESP32 device (Cardputer, Cardputer-Adv, Core, CoreS3, Stick) — detect on USB, flash UIFlow 2.0 firmware, and install the Claude Buddy MicroPython app bundle. Use whenever the user plugs in or wants to flash/provision/reset an M5Stack or ESP32 board, or says "m5-onboard go".
Security Assessment
About m5-onboard
m5-onboard automates the full cold-start provisioning workflow for a freshly plugged-in M5Stack ESP32 device (Cardputer, Cardputer-Adv, Core, CoreS3, Stick). It detects the board on USB, identifies the model, flashes UIFlow 2.0 firmware, and installs the Claude Buddy MicroPython app bundle onto /flash/ so the device boots into user software. It solves the fiddly, multi-stage nature of bringing up an unknown board — port detection, firmware flashing, the manual download-mode button dance, and app installation — by driving it through a single orchestrator script with clear stage handoffs.
The main orchestrator is scripts/onboard.py, which sequences sub-scripts (detect.py for port/chip enumeration, the flash stage, and install_apps.py) while waiting for reboots and capturing the device MAC. A decision tree tells the assistant when to run the full onboard flow, when to just refresh apps, and when to run smoke_test.py (I2C, LCD, speaker, button checks). The skill carefully instructs running onboard.py in the background with a tee'd log and the Monitor tool so streaming progress and physical prompts reach the user, and it details relaying the required G0/RST button sequence to enter download mode on native-USB boards, since flashing cannot proceed without that manual press.
It targets makers and hobbyists provisioning M5Stack/ESP32 hardware, defaulting to the Cardputer-Adv variant. The scripts and app bundle live in a local clone of the build-with-claude repository. Use cases include first-time provisioning of a fresh board, reflashing/resetting a device, refreshing installed apps, and smoke-testing suspected hardware faults. Flashing firmware overwrites the device's existing image, which is the intended, user-driven purpose of the skill.
FAQ
What does this skill provision?
It detects an M5Stack ESP32 board on USB, identifies the model, flashes UIFlow 2.0 firmware, and installs the Claude Buddy MicroPython app bundle (custom launcher plus Hello, Claude Buddy BLE client, and Snake) onto /flash/.
Which board does it assume by default?
It defaults to the Cardputer-Adv variant. If the user says just 'Cardputer' (no Adv) or names another board like Core2, CoreS3, Basic, or Fire, the correct --variant must be passed explicitly, since the two share a form factor but need different firmware and flashing the wrong image boot-loops the device.
Why does flashing require a manual button press?
On native-USB boards there is no software path into download mode. The user must hold the G0 button, briefly press RST, then release G0; the screen going dark confirms download mode. The assistant must relay this and wait for confirmation before the flash can start.
How should the onboard command be run from Claude Code?
Not as a foreground Bash command — it runs 2–3 minutes and its output would not stream back. It should run in the background with output tee'd to a log file, monitored so stage banners and physical prompts reach the user in real time.
What does the smoke test check?
smoke_test.py runs an I2C, LCD, speaker, and button check to diagnose a flashed device that feels broken or to report what is on the bus.
Install m5-onboard
Quick Setup:
- Copy the skill folder to
.claude/skills/ - Claude will automatically detect and use the skill
Repository
anthropics/claude-plugins-official