Onboard an M5Stack Board With One Claude Command

The video walks through the m5-onboard skill, which provisions an M5Stack ESP32 board in about two to three minutes through four stages. It explains why one physical button sequence cannot be automated on native-USB boards but is skipped on bridge-chip boards.

2:23 video3 min readWatch on YouTube

One Claude command can provision a whole M5Stack ESP32 board, taking it through detect, identify, flash and install in about two to three minutes. The video, narrated by Liam for Humanitarians AI, looks at the m5-onboard Claude Code plugin and asks whether the process really has zero exceptions. Its answer is that there is one: on boards that connect over native USB, a person has to do a short button sequence by hand.

One command, four stages

The whole workflow runs through a single command, and underneath it are four stages:

  • Detect finds the board over USB and then confirms the actual chip. The port name differs by system: usbmodem on macOS, ttyACM or ttyUSB on Linux, and COM on Windows.
  • Identify checks hardware signatures for a likely firmware match, but the final choice is always stated explicitly, never guessed.
  • Flash writes the firmware itself.
  • Install copies the real program files onto the board and restarts it.

Two smaller tools cover narrower jobs: pushing just the app bundle to a board that is already flashed, and running a hardware check afterwards.

Three things that matter when running it

First, two boards share the exact same USB signature, so the script cannot tell them apart on its own. Guess the variant wrong and the device boot-loops, which is why the choice is stated explicitly.

Second, a full run takes two to three minutes, so it goes in the background with its output streamed to a log file. The video notes that a silent terminal for three minutes looks exactly like a crash.

Third, the flash step on native-USB boards needs a person.

The button sequence

On native-USB boards there is no software line the script can pulse to put the chip into flashing mode, so the reset is physical. You hold one button, tap reset while still holding it, hold for one more second, then let go. The script waits for the person to actually do that.

Native USB versus a bridge chip

The video stresses that this step is not universal. It is needed only because native-USB boards have no control line to force a reset, so the standard software trick of toggling two control lines does nothing there. Boards that connect through a separate USB-to-serial bridge chip skip the button sequence entirely. The same software trick works normally and the whole flash step runs without anyone touching the board.

It is the same script and the same command each time. Which path it takes depends on which USB hardware is inside the board.

Key takeaways

  • One command runs four stages: detect, identify, flash and install.
  • Port names differ by operating system: usbmodem on macOS, ttyACM or ttyUSB on Linux, COM on Windows.
  • The firmware variant is always stated explicitly because two boards share one USB signature, and a wrong guess causes a boot loop.
  • A run takes two to three minutes, so it runs in the background with a log file.
  • Native-USB boards need a manual sequence: hold a button, tap reset, hold a second longer, release.
  • Boards with a separate USB-to-serial bridge chip flash hands-off.
  • Every stage but one can be automated; the button press stays a human's job.

Try it yourself

The video suggests pasting a prompt into Claude: say you are using the m5-onboard skill to set up a new M5Stack board, and ask it to tell you, before running anything, which stage needs you to touch the device and what the button sequence is. Then watch whether Claude names the sequence before starting, or just launches the script and waits.

Chapters

  1. 0:00The naive framing: "zero exceptions?"
  2. 0:11One command, four stages
  3. 0:47The button dance
  4. 1:22Native USB vs. bridge
  5. 1:51Carry-out
  6. 2:01Your turn
  7. 2:20Outro
Full transcript(auto-generated, with timestamps)

The naive framing: "zero exceptions?"

[0:00]Someone assumed one script flashes this board with zero exceptions. It doesn't, the button dance is the one exception done by hand. So, flash my board with one script, one exception. The whole workflow runs through one

One command, four stages

[0:12]Command, onboard pi apps buddy. Underneath that's four stages. Detect finds the board over USB, the port name differs by system, usbmodem on Mac OS, ttyACM or ttyUSB on Linux, COM on Windows, then confirms the actual chip. Identify checks hardware signatures for a likely firmware match, but the final choice is always stated explicitly, never guessed. Flash writes the firmware itself. Install copies the real program files onto the board and restarts it. Two smaller tools exist for narrower jobs, pushing just the app bundle to a board that's already flashed or running a hardware check afterward. Three things

The button dance

[0:47]Matter once you're actually running this. First, two boards share the exact same USB signature, so the script can't tell them apart on its own. Guess the variant wrong and the device boot loops. Second, a full run takes two to three minutes, so it goes in the background with its output stream to a log file. A silent terminal for three minutes looks exactly like a crash. Third, the flash step itself on boards that connect over native USB. There's no software line the script can pulse to reset the chip into flashing mode, so it's a physical dance. Hold one button, tap reset while still holding it, hold one more second, then let go. The script waits for person to actually do that. That physical step

Native USB vs. bridge

[1:23]Isn't universal. It's needed only because native USB boards have no control line the script can pulse to force a reset. The standard software trick toggling two control lines is simply a no-op there. Boards that connect through a separate USB serial bridge chip skip the button dance entirely. That same software trick works normally and the whole flash step runs through without anyone touching the board. Same script, same command. Which path it takes depends entirely on which USB hardware happens to be inside. One

Carry-out

[1:51]Script can detect, identify, flash, and install this board every stage but one. The button press stays a human's job. No flag replaces a thumb. Your turn, paste

Your turn

[2:01]This into Claude. I'm using the M5 on board skill to set up a new M5 stack board. Before you run anything, tell me exactly which stage needs me to physically touch the device and what that button sequence actually is. Then watch, does Claude name the button dance before it starts or does it just launch the script and wait? The one step no script can skip, lay them in for bear.

More from Extending Claude — Skills, Plugins & Connectors

Humanitarians AI Lyrical Literacy Project