Desk companion · 2" touch edition

Clawd Build Guide

Everything you need to turn two printed parts and a handful of plug-in electronics into a tappable, beeping Clawd. No soldering: every wire pushes on.

~45 minbuild time
0solder joints
80 × 61 × 40 mmfinished size
8magnets hold the back on
Before you start

Lay out the parts

Tick each one off as you find it. Your ticks are saved in this browser only.

All parts laid out on a cutting mat: orange printed body and back plate, touch screen, Grove Speaker, XIAO board, mini breadboard and eight magnets
Grid squares are 10 mm.
1

Glue magnets into the body

Four pockets: one in each arm and one in each outer leg.

Body lying face down with its open back up; four magnets drop into pockets in the arms and outer legs
  1. Lay the body face down so the open back points up.
  2. Put a small drop of glue in each of the 4 pockets.
  3. Push a magnet into each pocket. It should sit slightly below the surface (about 0.6 mm).
  4. Let the glue set fully before Step 2.
Tip: magnets snap to each other. Keep the rest of the stack well away while you glue each one.
2

Glue magnets into the back plate

This is the one step where order matters: the magnets must attract, not repel.

Back plate with its inner face up; four magnets drop into pockets near the arms and legs
  1. Place a loose magnet on top of each magnet in the body. Let it snap on by itself, so it faces the right way.
  2. Mark the exposed top of each loose magnet with a pen dot.
  3. Put a drop of glue in each pocket on the inner side of the back plate (the side with the posts).
  4. Lower the plate straight onto the body so the pockets land on the stacked magnets. Press gently.
  5. Wait for the glue to set, then pull the plate off. The magnets stay in the plate, standing 0.6 mm proud.
Check: the plate should snap onto the body and line itself up. If it pushes away, a magnet is upside down: pry it out and flip it.
3

Fit the screen

It drops in from the back, glass first.

Touch screen module lowered glass-first into the open back of the body
  1. Plug the 15-wire cable into the socket on the back of the screen now. It is much easier than later.
  2. Peel the screen's protective film. Stick thin double-sided tape on the black border of the glass, not on the picture area.
  3. With the body still face down, lower the screen in glass first. The cable socket faces you.
  4. The glass drops into a shallow pocket behind the face. Check from the front that the window is square, then press firmly.
Tip: the window is centred on the picture, not on the glass, so the screen sits a little off-centre inside. That is expected.
4

Mount the speaker on the back plate

The speaker faces the grille. It rides on the plate, so it lifts away whenever you open Clawd.

Grove Speaker board lowered speaker-side down onto two posts with pins and two rest pads on the back plate, over the grille
  1. Plug the Grove-to-female cable into the speaker's white socket.
  2. Turn the speaker board over so the round speaker faces the plate.
  3. Fit its two mounting holes over the two pins. The speaker end rests on the two square pads, right over the grille.
  4. Add a dab of glue on each pin to hold it.
Check: the board should sit level on all four supports. If a part on the board stops it sitting flat, stop and ask for taller posts rather than forcing it.
5

Wire it up

Do this with the XIAO outside the case, where you can see the pin labels. The pin names are printed on the XIAO; the wire names are printed next to the screen's socket.

FromWireTo
ScreenVCC3V3
ScreenGNDBreadboard GND row (via a male–male jumper)
ScreenMOSID10
ScreenSCLKD8
ScreenLCD_CSD5
ScreenLCD_DCD3
ScreenLCD_BLD6
ScreenTP_SDAD4
ScreenTP_SCLD9
SpeakerSIG (yellow)D7
SpeakerVCC (red)5V
SpeakerGND (black)Breadboard GND row (via a male–male jumper)
BreadboardGND rowGND (female–male jumper)
  1. Push one male end of each male–male jumper into the screen's GND wire and the speaker's black GND wire. Push the other ends into the same row of the breadboard.
  2. Push the male end of the female–male jumper into that row too, and its female end onto the XIAO's GND pin.
  3. Push every other wire straight onto its XIAO pin, following the table.
  4. Tuck the unused wires (MISO, LCD_RST, TP_RST, TP_INT, SD_CS, white NC) out of the way. Leave them loose; they do nothing.
Important: keep D0, D1 and D2 empty. Those pins sit right under the speaker board, and a connector there stops the back closing.
6

Put the XIAO, antenna and breadboard in

The XIAO slides down the inside of Clawd's bottom wall, USB port last.

Body with screen fitted; XIAO board being lowered along the bottom wall with its USB port at the open back; breadboard and antenna already inside
  1. Clip the flat antenna's tiny round plug onto the XIAO's antenna socket. Press until it clicks.
  2. Stick the antenna flat on the inside of the right-hand wall, near the top, with a strip of tape.
  3. Stick the breadboard to the inside of the bottom wall on the left, with double-sided tape.
  4. Hold the XIAO with its parts facing the wall and pins facing into the case. Slide it down so the USB port sits between the two little curbs, flush with the open back.
  5. A small square of double-sided tape under the XIAO stops it rattling.
Tip: the XIAO sits a little right of centre on purpose. That keeps its power pins clear of the speaker board.
7

Upload the code and test

Test with the back still off, so any fix is easy.

  1. Install Arduino IDE 2. In Settings → Additional boards manager URLs, add:
    https://espressif.github.io/arduino-esp32/package_esp32_index.json
  2. In Boards Manager, install esp32 by Espressif. In Library Manager, install Adafruit ST7735 and ST7789 (it brings Adafruit GFX with it).
  3. Open clawd_2in_touch_firmware.ino. Choose board XIAO_ESP32C3, and set USB CDC On Boot to Enabled. Leave the other settings as they are.
  4. Plug the USB-C cable into the XIAO and click Upload.
  5. Clawd plays a hello chirp, shows its logo, then the Wi-Fi details. Tap the screen: Clawd should squish its eyes and chirp.
Tip: turn the little blue knob on the speaker board with a small screwdriver to set the volume.
8

Tidy the wires and click the back on

The magnets pull it into place.

Back plate, with the speaker underneath it, lowered onto the open back of the body; magnets line up in the arms
  1. Fold the spare cable into a neat bundle in the middle of the case. A small cable tie or a twist of tape keeps it together.
  2. Check that nothing presses on the back of the screen and nothing sits on the XIAO's USB port.
  3. Swing the back plate over (the speaker cable stays connected) and let the magnets snap it home.
  4. Plug the right-angle USB-C cable in through the slot near the bottom of the back plate.
Check: if the plate will not sit flat, something is in the way. Most often it's a wire under the speaker board or on a D0–D2 pin.
Finished

Say hello to Clawd

Finished Clawd standing on a desk, screen showing two eyes
  1. On your phone, join the Wi-Fi network Clawd. The password is clawd1234.
  2. Open http://192.168.4.1 in your browser to switch eyes, open the terminal, draw on the screen, or turn sound on and off.
  3. Tap Clawd's face any time to pet it. Swipe left or right for the Claude status, clock and info views.
  4. Next: connect Clawd to your computer for Claude Code alerts.
Claude Code & opencode

Connect Clawd to your computer

Clawd's status light and "Claude needs you" alerts come from small helpers on the computer that runs Claude Code or opencode. Clawd connects two ways: plugged into the computer by USB, or over Wi-Fi. The helpers try both and Clawd ignores duplicates. Nothing runs in the background: Claude Code or opencode fires the helper only when something happens. The helpers are on GitHub at github.com/cliddy1005/clawd-helpers.

Plugged inSimplest. One USB-C cable from the computer powers Clawd and carries the alerts. No Wi-Fi setup.
Wi-FiFor Clawd on a charger away from the computer. Clawd joins your home Wi-Fi as clawd.local.

A · Install the helpers

On the computer that runs Claude Code (Mac or Linux), open Terminal and run:

curl -fsSL https://raw.githubusercontent.com/cliddy1005/clawd-helpers/main/install.sh | sh
  1. The installer copies the Clawd hook into ~/.claude/ and adds five hooks to ~/.claude/settings.json. It keeps your other settings, saves a backup first, and never adds a hook twice.
  2. If opencode is on the computer, it installs the Clawd plugin for opencode too.
  3. To choose what's installed, add an option after sh -s --, for example opencode only:
curl -fsSL https://raw.githubusercontent.com/cliddy1005/clawd-helpers/main/install.sh | sh -s -- --opencode
OptionInstalls
--claude-codeClaude Code hook only
--opencodeopencode plugin for all projects
--opencode-projectopencode plugin for the folder you're in only
--allBoth
  1. Restart Claude Code (and opencode) and ask it something. opencode keeps a server running in the background, so also run pkill -f "opencode serve" once, or restart your computer. The dot in Clawd's top-right corner pulses amber while it works and turns green with a chime when it's done. When it asks for permission, Clawd flashes Claude needs you.
Claude Code / opencodeClawd shows
Session startsBlue light (idle)
Working: you sent a prompt, or a tool ranPulsing amber. Clears an alert once you've answered.
Asks permission or waits for you"Claude needs you" alert and chime
FinishedGreen light, done chime and a happy squish
Prefer to see the files first? Clone the repo and run the installer from it:
git clone https://github.com/cliddy1005/clawd-helpers.git → cd clawd-helpers → ./install.sh

B · Plugged in: you're done

Plug Clawd into the computer with the USB-C cable. That's it: the helpers find Clawd's USB port by themselves each time Claude Code or opencode has something to show.

  1. Use a USB-C cable that carries data. Some cables only charge.
  2. If you have other USB dev boards plugged in, tell the helpers which port is Clawd by adding export CLAWD_PORT=/dev/cu.usbmodem101 (your port) to ~/.zshrc. Clawd's Info view shows "USB: connected to a computer" when the cable is working.

C · Or use Wi-Fi

Use this if Clawd sits on a charger away from the computer. Do it once:

  1. Power Clawd from any USB port or charger.
  2. On your phone or computer, join the network Clawd (password clawd1234).
  3. Open http://192.168.4.1/setup, type your home Wi-Fi name and password, and tap Save and restart. Use a 2.4 GHz network; most routers have one.
  4. Clawd shows "Joining Wi-Fi…", then its eyes. Swipe to the Info view: it shows your network and an IP address such as 192.168.1.42.
  5. Put your computer back on your home Wi-Fi and open http://clawd.local. The controller page should load. If not, use the IP address from the Info view.

D · Test it

Run the line for your route in a terminal. Clawd should flash the alert and chime; tap to dismiss. Swap waiting for working, done or idle to see the other states.

curl "http://clawd.local/cc?state=waiting&msg=Hello&project=test"       # Wi-Fi
echo "waiting|test|Hello" >> /dev/cu.usbmodem101                                 # USB (use your port: ls /dev/cu.usbmodem*)

On Windows

Claude Code runs hooks through Git Bash, so the hook script runs as-is: copy claude-code/clawd-notify.sh from the repo to %USERPROFILE%\.claude\ and add the hooks from claude-code/settings-snippet.json to %USERPROFILE%\.claude\settings.json. On Windows, use Wi-Fi: the USB route is Mac and Linux only for now. .local names often don't resolve on Windows, so set the CLAWD_HOST environment variable to Clawd's IP address.

If something's off

Quick fixes

What you seeTry this
Screen stays blackCheck VCC→3V3, GND, and LCD_BL→D6. Reseat the 15-wire cable at the screen.
Picture is upside downIn the code, change tft.setRotation(1) to tft.setRotation(3) and upload again.
Tapping does nothingCheck TP_SDA→D4 and TP_SCL→D9. Arduino's Serial Monitor (115200) prints touch: ok when it's found.
No soundCheck SIG→D7, red→5V, black→GND row. Turn the blue volume knob up. Check sound is on in the web page.
Can't see the Wi-Fi networkMake sure the antenna is clicked onto the XIAO. Unplug and replug the USB cable.
Upload failsUse a USB-C cable that carries data, not a charge-only one. Hold the XIAO's BOOT button while plugging in, then upload.
clawd.local won't loadUse the IP address from Clawd's Info view. For the helpers, add export CLAWD_HOST=192.168.x.y to your shell profile.
Clawd keeps showing its own hotspotIt couldn't join your Wi-Fi. Re-enter the details at 192.168.4.1/setup and check the network is 2.4 GHz.
Alerts don't arrive over USBUse a data USB-C cable, not a charge-only one. With other USB boards plugged in, set CLAWD_PORT to Clawd's port (ls /dev/cu.usbmodem* lists them).
No alerts from Claude CodeCheck ~/.claude/settings.json is valid JSON (a missing comma breaks it), then run the test commands in Part D. Running the installer again is safe.
Back plate pushes awayA plate magnet is upside down. Pry it out, flip it, and glue it again (see Step 2).