yuz207/agentpad13

agentpad13 — open-source 13-key macropad for agentic work (RP2040, vial-qmk, planar joystick, Raw HID agent-status protocol)

34

stars

52

commits

Python

primary language

Aug 26, 2026

updated

README

agentpad13

A 13-key macropad for agentic work, designed from scratch: RP2040, USB-C, 12×1U + 1×2U hot-swap keys, a clickable EC11 encoder, an analog tilt joystick, a capacitive-touch key, and 24 RGB LEDs (per-key plus edge underglow) that an open Raw HID protocol drives to show what your agents are doing — thinking, running, waiting, done, one key each.

Build one

Open the configurator

Pick your options, turn the pad around in 3D, and get back an order sheet where every line links to the exact file you upload to a fab or drop into a slicer. That is the way in. Prefer paper? release/HOW-TO-ORDER.md is the same thing, static.

agentpad13 v5 board in the v2 case, from CAD

The shipping v5 board in the v2 case, straight from the CAD.

What is where

release/            The bundle — everything you order, print or flash.
  HOW-TO-ORDER.md     The configurator's static form.
  RELEASE.md          What shipped and why, section by section.
  MANIFEST.md         Every file in the bundle with its md5 and byte count.
  hardware/           Board fab package, case, plate, bases, keycaps, toppers, gasket.
  firmware/           Flashable UF2s, BRING-UP.md, POLARITY-NOTE.md.
configurator/       The published site and its consumption assets; current outputs are copied from development.
firmware/           vial-qmk tree, simulations, conformance tests, BUILD.md.
docs/               The Raw HID protocol contract, and the design reviews.

Before you send anything to a fab, run python3 manifest_selfverify.py — it should print 9/9 checks PASS. Every listed file is present with the right hash, and nothing unlisted is hiding in the bundle.

Printed toppers already? Print them again

The v1 encoder knobs and stick caps are retired. The current release carries three Ø17.5 encoder knob styles and three joystick toppers: a compact nub, restored TPU puck, and a conventional Ø12 topper paired with a TPU restrictor. Details are in release/RELEASE.md §(f).

Status

  • PCB — complete. v5_8, 84.2 × 100 mm, 2-layer, DRC clean, fab package ready to upload. It retains the v5.7 LED correction, adds the Ø4.0 TP5 solder landing, and factory-populates the encoder.
  • Case — complete. v2.17: FR4 or printed plate, band in three sidewalls, printed tray.
  • Bases — complete. Three optional printed bases; the case is finished without one.
  • Firmware — validated. Emulator-booted and protocol-conformant. Flash agentpad13.uf2.
  • Configurator — live. Static files: no build step, no network calls, no dependencies.

AgentPad13 Direct OAI (experimental alternative)

The isolated codex_oai keymap is an experimental alternative for direct Codex Desktop control. It is not Vial firmware and does not replace the normal, recommended release/firmware/prebuilt/agentpad13.uf2. Codex Desktop talks to this target directly—no helper, daemon, bridge, or Vial protocol—using the locked Codex Micro Lab OAI LED identity (303A:8360, usage FF00:61, Report ID 6, 64-byte reports).

The current unflashed candidate is release/firmware/prebuilt/agentpad13_codex_oai.uf2, 93,696 bytes, SHA-256 fcb50b2419419be43b7cf90b00a96b16063fcaf182bc24b9642d57e2e8adf54d. Start with the keymap contract, source hand-off, and Direct OAI build procedure. Run the complete host suite from the repository root:

python3 -m unittest discover -s firmware/tests/codex_oai -p 'test_*.py'

The checked-in emulator capture and current manifest bind that exact UF2 to the offline USB/protocol/LED checks. Physical validation is still entirely PENDING; no install or flash occurred. Any future hardware operation requires the literal authorization and observation record in the physical runbook.

First power-on

Flash agentpad13.uf2 — hold BOOTSEL and drag the file on. Then hold SW14, the button in the back, for about a second and follow the 13 key LEDs: the board measures its own joystick and stores the result. About 15 seconds, no host software, no reflash, once ever — full procedure in release/firmware/BRING-UP.md. If an axis reads backwards that is polarity, not calibration: release/firmware/POLARITY-NOTE.md.

Firmware source is in firmware/loudest_micro/; the exact Vial/QMK build recipe and validation commands are in firmware/BUILD.md. The plain-QMK, byte-reproducible build is agentpad13_reference.uf2.

Licensing

  • release/hardware/CERN-OHL-W-2.0 (PCB and case CAD).
  • firmware/ and release/firmware/GPL-2.0-or-later (QMK/vial-qmk derivative), except firmware/tests/conformance/protocol_oracle.py, which is MIT. Corresponding source for the prebuilt UF2s = this tree built against vial-qmk per firmware/BUILD.md.

Contributors

yuz207

42 commits

lop1381997

10 commits

yuz207/agentpad13

agentpad13 — open-source 13-key macropad for agentic work (RP2040, vial-qmk, planar joystick, Raw HID agent-status protocol)

34

stars

52

commits

Python

primary language

Aug 26, 2026

updated

README

agentpad13

A 13-key macropad for agentic work, designed from scratch: RP2040, USB-C, 12×1U + 1×2U hot-swap keys, a clickable EC11 encoder, an analog tilt joystick, a capacitive-touch key, and 24 RGB LEDs (per-key plus edge underglow) that an open Raw HID protocol drives to show what your agents are doing — thinking, running, waiting, done, one key each.

Build one

Open the configurator

Pick your options, turn the pad around in 3D, and get back an order sheet where every line links to the exact file you upload to a fab or drop into a slicer. That is the way in. Prefer paper? release/HOW-TO-ORDER.md is the same thing, static.

agentpad13 v5 board in the v2 case, from CAD

The shipping v5 board in the v2 case, straight from the CAD.

What is where

release/            The bundle — everything you order, print or flash.
  HOW-TO-ORDER.md     The configurator's static form.
  RELEASE.md          What shipped and why, section by section.
  MANIFEST.md         Every file in the bundle with its md5 and byte count.
  hardware/           Board fab package, case, plate, bases, keycaps, toppers, gasket.
  firmware/           Flashable UF2s, BRING-UP.md, POLARITY-NOTE.md.
configurator/       The published site and its consumption assets; current outputs are copied from development.
firmware/           vial-qmk tree, simulations, conformance tests, BUILD.md.
docs/               The Raw HID protocol contract, and the design reviews.

Before you send anything to a fab, run python3 manifest_selfverify.py — it should print 9/9 checks PASS. Every listed file is present with the right hash, and nothing unlisted is hiding in the bundle.

Printed toppers already? Print them again

The v1 encoder knobs and stick caps are retired. The current release carries three Ø17.5 encoder knob styles and three joystick toppers: a compact nub, restored TPU puck, and a conventional Ø12 topper paired with a TPU restrictor. Details are in release/RELEASE.md §(f).

Status

  • PCB — complete. v5_8, 84.2 × 100 mm, 2-layer, DRC clean, fab package ready to upload. It retains the v5.7 LED correction, adds the Ø4.0 TP5 solder landing, and factory-populates the encoder.
  • Case — complete. v2.17: FR4 or printed plate, band in three sidewalls, printed tray.
  • Bases — complete. Three optional printed bases; the case is finished without one.
  • Firmware — validated. Emulator-booted and protocol-conformant. Flash agentpad13.uf2.
  • Configurator — live. Static files: no build step, no network calls, no dependencies.

AgentPad13 Direct OAI (experimental alternative)

The isolated codex_oai keymap is an experimental alternative for direct Codex Desktop control. It is not Vial firmware and does not replace the normal, recommended release/firmware/prebuilt/agentpad13.uf2. Codex Desktop talks to this target directly—no helper, daemon, bridge, or Vial protocol—using the locked Codex Micro Lab OAI LED identity (303A:8360, usage FF00:61, Report ID 6, 64-byte reports).

The current unflashed candidate is release/firmware/prebuilt/agentpad13_codex_oai.uf2, 93,696 bytes, SHA-256 fcb50b2419419be43b7cf90b00a96b16063fcaf182bc24b9642d57e2e8adf54d. Start with the keymap contract, source hand-off, and Direct OAI build procedure. Run the complete host suite from the repository root:

python3 -m unittest discover -s firmware/tests/codex_oai -p 'test_*.py'

The checked-in emulator capture and current manifest bind that exact UF2 to the offline USB/protocol/LED checks. Physical validation is still entirely PENDING; no install or flash occurred. Any future hardware operation requires the literal authorization and observation record in the physical runbook.

First power-on

Flash agentpad13.uf2 — hold BOOTSEL and drag the file on. Then hold SW14, the button in the back, for about a second and follow the 13 key LEDs: the board measures its own joystick and stores the result. About 15 seconds, no host software, no reflash, once ever — full procedure in release/firmware/BRING-UP.md. If an axis reads backwards that is polarity, not calibration: release/firmware/POLARITY-NOTE.md.

Firmware source is in firmware/loudest_micro/; the exact Vial/QMK build recipe and validation commands are in firmware/BUILD.md. The plain-QMK, byte-reproducible build is agentpad13_reference.uf2.

Licensing

  • release/hardware/CERN-OHL-W-2.0 (PCB and case CAD).
  • firmware/ and release/firmware/GPL-2.0-or-later (QMK/vial-qmk derivative), except firmware/tests/conformance/protocol_oracle.py, which is MIT. Corresponding source for the prebuilt UF2s = this tree built against vial-qmk per firmware/BUILD.md.

Contributors

yuz207

42 commits

lop1381997

10 commits

Languages

Python

60.5%

JavaScript

25.1%

C

13.4%