
AgentDeckV2
Brillar0101/agentdeck
RP2040 macropad for supervising AI coding agents: 13 hot-swap keys with per-key RGB status, encoder, joystick, 4-layer PCB, CircuitPython firmware, printable enclosure

RP2040 macropad for supervising AI coding agents: 13 hot-swap keys with per-key RGB status, encoder, joystick, 4-layer PCB, CircuitPython firmware, printable enclosure
AgentDeck is an open-source printed circuit board by Brillar0101, from the Brillar0101/agentdeck repository on GitHub, published under the MIT licence. It is a 4-layer board of 95 × 95 mm with 101 parts on 74 nets, routed with 936 tracks and 166 vias.
It is built around the RP2040, 74AHCT1G125SE and W25Q128JVSIQ, with the AMS1117-3.3, USBLC6-2SC6 and SK6812MINI-E among its other parts. Its parts include 29 capacitors, 16 diodes, 14 switches, 12 resistors and 5 ICs. It belongs with the keyboards and input boards and the RP2040 boards of this library.
AgentDeck is an open-source desk macropad for supervising AI coding agents.
AgentDeck is optimized for people running several coding agents at once who want glanceable status and one-hand control. It is a desk device, not a portable one: USB-C only, no battery, no radio.
Six agent keys light up with each agent's live state (idle, thinking, working, blocked, done). Press one to focus that session. The command keys accept or reject work, the dial scrubs and confirms, and the joystick navigates. A host bridge maps Claude Code hooks to the key colours, so the board answers "which of my sessions needs me?" without alt-tabbing.
This is a Codex Micro-inspired project. The concept follows OpenAI and Work Louder's Codex Micro, and the control layout deliberately echoes it. It is an independent build, not affiliated with, endorsed by, or produced with OpenAI, Work Louder, or Anthropic. The board, firmware and enclosure are original work; no Codex Micro files were used. Some material in this repository (vendor footprints, datasheets, reference photographs, third-party cap and knob models) is not ours to license. See LICENSING.md.
![]() | ![]() |
![]() | ![]() |
Hardware revisions are tracked in the changelog. Because the board is text-based KiCad, every fabricated revision maps to a tagged commit, and a physical board can be traced back to the exact design it was made from.
| Version | What it is | Where |
|---|---|---|
| V1 (this release) | 95 x 95 mm 4-layer RP2040 board, 13 keys, JLCPCB PCBA | v1/hardware/ |
What comes next (v1.0 bring-up, the v1.1 depth release, and what is deliberately parked) is in the roadmap.
| Part | State |
|---|---|
| Schematic + PCB | Complete. 4 layers, fully routed, 0 DRC errors, 0 ERC errors |
| Firmware | Written (CircuitPython, plus an Arduino/C++ port), untested on hardware |
| Host bridge | Written. Maps Claude Code hooks to agent-key colours |
| Enclosure | Modelled and fit-checked in Blender, STLs exported, not yet printed |
| Fab package | Gerbers, BOM and CPL generated for JLCPCB |
Nothing has been manufactured yet, so none of it is hardware-verified.
The repository is organized by discipline. Each directory is self-contained and has its own README where the workflow needs explaining.
| Directory | Contents |
|---|---|
v1/hardware/ | KiCad 10 project: AgentDeck.kicad_pcb, AgentDeck.kicad_sch, footprint / symbol / 3D libraries |
v1/enclosure/ | Blender assembly (AgentDeck-v2-assembled.blend), the parametric case generator (src/generate_case.py), printable STLs, keycap icon art |
v1/firmware/ | CircuitPython firmware (boot.py, code.py) and the Arduino port |
v1/host/ | agentdeck_bridge.py, the Claude Code hook bridge |
v1/fab/ | Gerbers, drill files, BOM and CPL for JLCPCB |
docs/ | design notes, datasheets, reference material, renders in docs/img/ |
LICENSES/ | full licence texts |
The board is a 95 x 95 mm 4-layer PCB, drawn in KiCad 10.
Keycaps carry simple engraved-style icons (dice for the six agent keys, thumbs up and down for accept and reject) rendered from Lucide glyphs. The encoder and joystick caps are white.
Two printed parts plus four printed cover caps. The PCB drops into the bottom tray component-side down, the lid closes over it, and four screws clamp the stack into brass inserts.
| Feature | Spec |
|---|---|
| Screws | M2.5 x 8 mm button head (ISO 7380), head 4.7 x 1.3 mm |
| Lid | 5.2 mm counterbore, 2.5 mm deep, over a 2.9 mm shaft hole |
| Inserts | M2.5 brass heat-set, 4.0 mm OD x 5.0 mm, melted into a 3.6 mm boss bore |
| Cover caps | printed 5.0 x 1.2 mm plugs that hide the screw heads |
| Fit | 0.4 mm pocket clearance around the board (a deliberately loose fit) |
| USB | side port through the tray wall, sized for the plug plus a slim overmould |
| Walls | 2.6 mm, with a 0.6 mm bevel on exposed edges |
Print v1/enclosure/case-bottom.stl, v1/enclosure/case-top-lid.stl, and four of
v1/enclosure/case-cover-plug.stl. The case is generated, not sculpted: edit the
parameters in v1/enclosure/src/generate_case.py and re-run it to get new STLs.
Copy v1/firmware/boot.py and code.py onto a CIRCUITPY drive running
CircuitPython 9.x, with adafruit_hid and neopixel in lib/. An Arduino
port with identical behaviour lives in v1/firmware/arduino/ if you prefer a
compiled build.
The command keys send Ctrl+Alt chords, the dial sets reasoning effort, and the
joystick navigates. v1/firmware/README.md has the full control table, colour
legend, pin map, and the three constants to confirm on first hardware.
v1/hardware/AgentDeck.kicad_pcb in KiCad 10. After
copper changes, refill zones before running DRC, then regenerate v1/fab/
with kicad-cli.v1/enclosure/src/generate_case.py in Blender to rebuild
the STLs from parameters.v1/enclosure/AgentDeck-v2-assembled.blend;
reference renders are committed under docs/img/..dsn/.ses routing intermediates,
autorouter logs) are gitignored and regenerate from the board.Multi-licensed, as is normal for open hardware. See LICENSING.md.
| What | Licence |
|---|---|
Software (v1/firmware/, v1/host/) | MIT |
| Hardware (board, enclosure, fab files) | CERN-OHL-S v2 |
| Documentation | CC-BY-4.0 |
Vendor footprints, datasheets and reference images keep their original terms. Keycap icons are from Lucide (ISC).
| Qty | Value | Footprint | References |
|---|---|---|---|
| 23 | 100nF | C_0603_1608Metric | C3, C10, C11, C12, C15, C19, C20, C21, C22, C23, C24, C25, C26, C27, C28, C29 +7 |
| 13 | ChocSwitch | AgentDeck:KeyOutline | KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY10, KEY11, KEY12, KEY14 |
| 12 | SK6812MINI-E | LED-SMD_4P-L3.2-W2.8-LS5.9_SK6812MINI-E | D1, D2, D3, D4, D5, D6, D10, D11, D12, D13, D14, D15 |
| 5 | 1k | R_0603_1608Metric | R5, R7, R10, R11, R12 |
| 4 | M2.5 | AgentDeck:MountingHole_M2.5 | MH1, MH2, MH3, MH4 |
| 3 | Fiducial_1mm_Mask2mm | Fiducial_1mm_Mask2mm | FID1, FID2, FID3 |
| 3 | red | LED-SMD_L1.6-W0.8-R-RD | D7, D8, D9 |
| 2 | 10uF | C_0603_1608Metric | C16, C17 |
| 2 | 15pF | C_0603_1608Metric | C1, C2 |
| 2 | 1uF | C_0603_1608Metric | C13, C14 |
| 2 | 27R | R_0603_1608Metric | R3, R4 |
| 2 | 5.1k | R_0603_1608Metric | R1, R2 |
| 1 | 10k | R_0603_1608Metric | R8 |
| 1 | 10k DNP | R_0603_1608Metric | R6 |
| 1 | 330R | R_0603_1608Metric | R9 |
| 1 | 74AHCT1G125 | SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BR | U4 |
| 1 | ABM8-272-T3 | CRYSTAL-SMD_4P-L3.2-W2.5-BL | Y1 |
| 1 | AMS1117-3.3 | SOT-223-3_L6.5-W3.4-P2.30-LS7.0-BR | U3 |
| 1 | BOOTSEL | SW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5 | SW13 |
| 1 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW14 |
| 1 | EC11 | SW-TH_EC11E1820402 | ENC1 |
| 1 | K1 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW1 |
| 1 | K10 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW10 |
| 1 | K11 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW11 |
| 1 | K12 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW12 |
| 1 | K2 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW2 |
| 1 | K3 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW3 |
| 1 | K4 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW4 |
| 1 | K5 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW5 |
| 1 | K6 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW6 |
| 1 | K7 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW7 |
| 1 | K8 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW8 |
| 1 | K9 | CONN-SMD_HOTPLUGPAKAGE__C9900010116 | SW9 |
| 1 | LED-SMD_4P-L3.2-W2.8-LS5.9_SK6812MINI-E | LED-SMD_4P-L3.2-W2.8-LS5.9_SK6812MINI-E | D16 |
| 1 | RP2040 | LQFN-56_L7.0-W7.0-P0.4-EP | U1 |
| 1 | SKQUCAA010 | SKQUCAA010 | JS1 |
| 1 | SWD | ProgPads_1x4 | J2 |
| 1 | USB-C | USB-C_SMD-TYPE-C-31-M-12_1 | J1 |
| 1 | USBLC6-2SC6 | SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BL | U6 |
| 1 | W25Q128JVSIQ | SOIC-8_L5.3-W5.3-P1.27-LS8.0-BL | U2 |
It measures 95 × 95 mm and has 4 copper layers, 1.6 mm thick.
101 parts, built around the RP2040, 74AHCT1G125SE, W25Q128JVSIQ and AMS1117-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the Brillar0101/agentdeck repository on GitHub, at the commit this page was made from: the board is v1/hardware/AgentDeck.kicad_pcb and its schematic v1/hardware/AgentDeck.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Brillar0101/agentdeck
RP2040 macropad for supervising AI coding agents: 13 hot-swap keys with per-key RGB status, encoder, joystick, 4-layer PCB, CircuitPython firmware, printable enclosure



LucasLHenry/spelltwister
This is the third version of the code for the Spelltwister module with CCTV. This version uses the Arduino platform and the RP2040, a chip developed by Raspberry Pi for their RPi Pico board.

punkfab/pcb-corpus
235 real KiCad boards from open-source hardware repositories, prepared as a placement and routing benchmark

thiagolocatelli/claude-code-macropad-meme
When I saw the claude code macropad meme image I thought: "I can make this happen", and so I did.

klaus-liebler/sensact
Es gibt vier Namespaces für Nachrichten "REQUEST" und "RESPONSE", "EVENT" und "ACKNOWLEDGE". Dies wird mit den beiden LSB des Versions-Namespace-Bytes erklärt (Somit bleiben 64 Versionierungsmöglichkeiten) Alle vier…

minhazislamnafi/KEEBY60-20
A moduler 60% mechanical hot-swapble keyboard. With 20% numpad attachment will form a proper 80% keyboard

GilDev/GDEK
Low-profile, compact, beginner-friendly, assembly-friendly 4×6 with 5-keys thumb cluster ergonomic keyboard with universal keyswitch support, per-key RGB LED, encoder and RP2040 controller. Phew, that’s a lot!