Daisy Hollman cb7ed888dd
Add cwc-makers plugin: /keep-thinking Cardputer onboarding
Packages the Code-with-Claude Makers (claude.com/cwc-makers) Cardputer
experience as a one-command flow for event attendees:

- commands/keep-thinking.md: user entry point — clones
  moremas/build-with-claude and runs the m5-onboard provisioning flow
- skills/m5-onboard/SKILL.md: vendored from upstream onboard/SKILL.md;
  Installation section replaced with clone-location note; explicit
  'relay physical button steps to user' directive added
- skills/cardputer-buddy/SKILL.md: post-onboarding app iteration

All three are user-invocable; /keep-thinking is the intended entry
point. Skill content is Apache-2.0 from the upstream repo.

Linear: CC-1975

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

🏠 Remote-Dev: homespace
2026-05-06 00:06:27 +00:00

1.8 KiB

name description
cardputer-buddy Iterate on the Cardputer-Adv MicroPython app bundle (Claude Buddy, Snake, Hello) after the device is already provisioned via m5-onboard. Use when the user wants to add a new app, push a single changed .py without re-flashing, watch device serial logs, or run a one-shot REPL command. Trigger on "add an app", "push to the cardputer", "tail the device", "run on the device", or follow-up work after /keep-thinking.

Cardputer Buddy app bundle

The buddy/ directory in the local build-with-claude clone is the MicroPython payload that m5-onboard installs onto /flash/. Work inside that clone.

Device layout

/flash/
├── main.py              launcher menu (replaces UIFlow's boot flow)
├── buddy_*.py           shared libs (BLE, UI, state, protocol, chars)
├── burst_frames.py      sprite frames
└── apps/
    ├── claude_buddy.py  BLE client → Claude Desktop's Hardware Buddy
    ├── hello_cardputer.py
    └── snake.py

main.py scans /flash/apps/ at boot and lists every .py as a menu entry. Drop a file into buddy/device/apps/, push it, and it appears on next boot.

Adding an app

Crib from buddy/device/apps/hello_cardputer.py — smallest example of keyboard polling, font, and exit conventions. Then push without re-flashing:

python3 onboard/scripts/install_apps.py --port <PORT> --src buddy

<PORT> is whatever detect.py reported last run (e.g. /dev/cu.usbmodem1101, /dev/ttyACM0, COM3).

Dev loop tooling (buddy/scripts/)

# Push a subset of files over USB-serial
python3 buddy/scripts/push.py --port <PORT> --files apps/snake.py

# Watch device logs
python3 buddy/scripts/tail_serial.py --port <PORT>

# One-shot REPL exec
python3 buddy/scripts/repl_run.py --port <PORT> --script "import os; print(os.listdir('/flash'))"