Build

Claude Control Pad

A desk buddy that chirps when a Claude Code session needs you.

These parts on their own: $179. The 3D-printed parts are not included, but the Big Kit comes with a free 3D print voucher (the Chunky Kit with three), a custom casing included. Design yours with our free, open-source AI CAD tool, or email [email protected] and we will help you print it.

  • 14-Port Motherboard×1
  • USB-C×1
  • Screen×2
  • Speaker×1
  • Microphone×1
  • Distance Sensor×1
  • Button×1
  • Knob×1

Smart Home · Wi-Fi · Bluetooth

What it does

  1. 1It sits on the desk next to your laptop. When a Claude Code session needs you, it chirps and its eyes look up.
  2. 2Two screens are the eyes, the speaker its voice, the microphone its ears, and the distance sensor in its nose knows when you lean in.
  3. 3A printed shell around the 14-port board. The modules sit behind the face and reach the board with short ribbon cables.

How to build it

  1. 1Connect the microphone to ports 1 and 2 with a ribbon cable.
  2. 2Connect the right-eye screen to ports 3 and 4.
  3. 3Connect the speaker to ports 5 and 6.
  4. 4Connect the button to port 7.
  5. 5Connect the left-eye screen to ports 9 and 10.
  6. 6Connect the distance sensor to port 11.
  7. 7Connect the knob to ports 13 and 14.
  8. 8Slide the USB-C into port 8 and plug the cable into your computer.
  9. 9Plug it in and press Upload to board.

Uploading works from Chrome or Edge on a computer. Open this page there with the board plugged in.

On the board

  • 1+2MicrophoneIts ears
  • 3+4ScreenThe right eye
  • 5+6SpeakerIts voice
  • 7ButtonBoop: a chirp and a happy face
  • 9+10ScreenThe left eye
  • 11Distance SensorThe nose: wakes it when you come close
  • 13+14KnobVolume; press to talk
  • 8USB-CPower and programming

The code

clawd.cpp · 246 linesDownload
/*
 * Clawd: Claude Code desk buddy firmware (Atech 14-port board, ESP32-S3)
 *
 * What it does on its own:
 *   - two portrait screens are the eyes: a terminal-cursor pupil that blinks, glances around, and shows a mood
 *     (idle / thinking / listening / talking / happy / alert / sleepy)
 *   - the distance sensor wakes it when someone comes close and sends it to sleep when they leave
 *   - the boop button chirps + a happy face; the knob is the volume (ring shows the level), knob press = push-to-talk
 *   - the mic level is posted so the host can see when you speak
 *
 * What the host (host/clawd.py) adds over USB serial, Atech JSON protocol (software/talking-to-your-device.md):
 *   actions  set_state <name> | look {"x":-1..1,"y":-1..1} | blink | say_level 0..1 | set_volume 0..1 |
 *            play_tone {"frequency","duration"} | play_rtttl <str> | play_pcm <b64 16 kHz mono s16> | stop |
 *            listen 0|1 (stream mic PCM as "pcm" events, base64, 512 samples per chunk) | mood_hold ms
 *   events   button_press/button_release (boop), knob {"pos","dir"}, ptt 1/0, presence 1/0, distance mm,
 *            sound_level, pcm <b64>, state <name>
 *
 * Structure follows software/program-structure.md: everything runs in FreeRTOS tasks, loop() parks.
 */
#include <Arduino.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_task_wdt.h"
#include <Wire.h>
…