A tiny 3-button USB macro pad for vibe coding — built on an Arduino Pro Micro with standard Cherry MX switches. It plugs in as a normal USB keyboard (no drivers, any OS) and gives you one physical button each for the three things you do constantly when coding with an AI assistant:
| Button | What it does | Default keystroke |
|---|---|---|
| 🎙️ Voice | Push-to-talk dictation (hold to talk, release to stop) | holds Space |
| ✅ Accept | Confirm the AI's proposed action | taps Enter |
| ❌ Reject | Cancel / decline the AI's proposed action | taps Esc |
Each button has its own status LED. A customizable light pattern plays on power-up; afterwards each LED lights only while its button is pressed (so the Voice LED stays on the whole time you're holding to talk).
The defaults target Claude Code in a terminal, but every key is a one-line edit away from working with Cursor, Copilot, or anything else — see Configuration.
- Plug-and-play USB-HID — the Pro Micro's ATmega32U4 emulates a real keyboard; no host software.
- Dead-simple electronics — 3 switches read with internal pull-ups: no diodes, no key matrix, no button resistors. Only 3 resistors total (one per LED).
- One dimmable LED per button (PWM) running a continuous wave animation that flows across the backlit logo; a button press lights its LED full, then the wave resumes.
- Fully configurable firmware — keys, pins, push-to-talk vs. toggle, debounce, and the LED pattern are all constants at the top of a single, heavily-commented
.ino. - No third-party libraries — just the built-in Arduino
Keyboardlibrary.
| Qty | Item |
|---|---|
| 1 | Arduino Pro Micro (ATmega32U4, 5 V / 16 MHz) |
| 3 | Cherry MX switches (any variant) + keycaps |
| 3 | LEDs (3 mm or 5 mm) |
| 3 | 220 Ω resistors |
| — | Hookup wire, solder, a USB cable for the Pro Micro |
Full list with tools: hardware/BOM.md.
| Function | Pro Micro pin |
|---|---|
| Accept switch | A0 → GND |
| Reject switch | A1 → GND |
| Voice switch | A2 → GND |
| Voice LED (left) | D5 (PWM) → 220 Ω → LED → GND |
| Accept LED (mid) | D6 (PWM) → 220 Ω → LED → GND |
| Reject LED (right) | D9 (PWM) → 220 Ω → LED → GND |
Pins are chosen to keep I²C, SPI, UART and a spare PWM free for future add-ons — see docs/WIRING.md.
Details and the reasoning behind it: docs/WIRING.md.
- Build it — solder the three switches and LEDs to the Pro Micro following
docs/ASSEMBLY.md. - Flash it — open
firmware/vibe_keyboard/vibe_keyboard.inoin the Arduino IDE and upload. Step-by-step:docs/FLASHING.md. - Set up voice — Voice holds Space, Claude Code's built-in push-to-talk key. Tap Voice+Accept to run
/voice, then hold Voice to dictate. (Prefer a global dictation app? SwitchVOICE_KEYtoKEY_F13— seedocs/CONFIGURATION.md.) - Use it — the LEDs fade up on boot, then the wave flows. Tap Accept/Reject in your editor; hold Voice to dictate.
- Assembly / soldering guide
- Wiring reference
- Flashing the firmware
- Configuration & remapping
- Bill of materials
- Design spec
This is open hardware — fork it, rebuild it, remix the layout. Issues and pull requests
welcome (extra layouts, alternate keymaps, case designs). If you design an enclosure, drop
your STL + logo into the local case/ folder (it's git-ignored by default).
MIT © Dominik Hartl