Flash the firmware
Plug your EleksCava device into your computer with USB-C and head to the web installer. ESP Web Tools handles everything in the browser — no drivers to install, no SDK to download, no command line.
Open Web InstallerSix steps. About five minutes. Zero terminal commands beyond a single copy-paste. By the end, your AI coding agent will be reflected on a physical e-paper display sitting next to your keyboard.
Plug your EleksCava device into your computer with USB-C and head to the web installer. ESP Web Tools handles everything in the browser — no drivers to install, no SDK to download, no command line.
Open Web InstallerAfter flashing finishes, the device reboots automatically. You should see the InksPet welcome screen:
SETUP MODEThe device has now started its own WiFi hotspot named InksPet_XXXX (where XXXX is the last 4 hex digits of its MAC address).
Take out your phone (or laptop) and join the device's hotspot:
http://192.168.4.1The device will save your credentials, leave AP mode, and reboot into normal mode. The LED switches from white to a slow green breathing pulse — that's the "ready, waiting for an agent" state.
From any computer on the same network, open a browser and visit:
http://inkspet.local
You should see the InksPet web dashboard — a real-time view of agent
state, tool call statistics, and a Hook Setup button. If inkspet.local doesn't resolve (older Windows / corporate networks
sometimes block mDNS), check the bottom of the device's e-paper screen — it
shows the assigned IP address. Use that instead:
http://192.168.0.63 ← whatever IP your device shows
On the dashboard, click the Hook Setup button. A dialog opens with an auto-generated prompt that contains:
Click Copy, then paste the entire prompt into your AI coding assistant (Claude Code, Cursor, Aider, etc.). The agent will read your project's hook config file, add the InksPet entries, and tell you when it's done.
"Add InksPet hooks to my Claude Code config so it sends events to http://192.168.0.63/hook"
Time to test it. Ask your AI assistant to do something simple, like:
"Read the README and tell me what this project does"
Watch the device. You should see, in this order:
Try a command that triggers a permission prompt, too — the screen will switch to a full-width PERMISSION REQUEST layout, the LED will flash yellow, and you can press A / B / C on the device to approve / always-allow / deny without touching your keyboard.
http://inkspet.local and shows the device as Online
If you use the Claude desktop app (macOS or Windows), InksPet connects over Bluetooth LE directly — no HTTP hooks needed. It implements Anthropic's official Hardware Buddy protocol, so the device becomes a first-class approval panel with a live session HUD on the e-paper. Pairing is secured with LE Secure Connections + a 6-digit passkey displayed on the device.
Open the Claude desktop app (build 1.3100 or later). Go to Help → Troubleshooting → Enable Developer Mode. A new Developer menu appears in the menu bar.
Click Developer → Open Hardware Buddy…. A small window opens with a Connect button on the left and a file drop area on the right. Leave it open.
Click Connect. From the scan list, pick Claude-XXXX — the
4-hex suffix is the last two bytes of your InksPet's Bluetooth MAC. When macOS prompts for
a pairing passkey, look at the e-paper — the device displays a fresh 6-digit code. Type it
into the macOS prompt and confirm.
Why a passkey? InksPet is a DisplayOnly peripheral with LE Secure Connections + MITM bonding, so transcript snippets and tool commands travel encrypted over Bluetooth. The passkey rotates every boot; after the first successful pairing, macOS caches the bond and reconnects silently on every subsequent session.
The e-paper switches to the Buddy HUD layout: a one-line summary from Claude
(e.g. "1 running" or the user's most recent prompt — Chinese text supported), today's cumulative
token count, and up to three of the most recent transcript entries. The footer shows your device name
(Claude-XXXX) and a bonded indicator confirming the link is encrypted.
When Claude needs permission to run a tool — Bash, an MCP call, a filesystem edit —
the device switches to the full-width PERMISSION REQUEST layout and the LED flashes yellow.
Press A to allow or C to deny. The decision rides back to
Claude desktop over BLE in milliseconds with the correlation id intact.
Drag a folder containing manifest.json plus 96-pixel-wide GIFs onto the drop area
in the Hardware Buddy window, then click Send to Device. The pack streams
over BLE (base64 chunks with per-chunk acks, ≤1.8 MB), lands in /characters/<name>/
on LittleFS, and the renderer hot-swaps to animated mode. Colour GIFs are dithered to 1-bit with
an 8×8 Bayer matrix — your e-paper is monochrome, but the character retains its character.
Try Anthropic's bufo example pack for a starting point.
SETUP MODE and the hotspot will appear.InksPet_ followed by 4 hex characters (e.g. InksPet_3F2A).mDNS (the technology behind .local names) can be blocked by older Windows builds, corporate firewalls, and some routers with mDNS reflection disabled.
The fix: look at the bottom of the e-paper screen — the device prints its IP address on every boot. Open http://<that-ip> directly in your browser and bookmark it.
You can also assign a static DHCP lease to the device's MAC address in your router admin panel so the IP never changes.
Two options:
Yes. Install the InksPet hooks in each assistant's config — they all post to the same local endpoint. When more than one agent is active, the crab enters Juggling (1 subagent, purple breathing) or Conducting (2+ subagents, purple solid) state automatically.
The dashboard tags each event with the originating agent name so you can see who's doing what.
InksPet v1.1.0 and later speaks Anthropic's Hardware Buddy BLE protocol natively. Pairing in four clicks:
Claude-XXXX (last 2 BT MAC bytes as hex).The bond persists across reboots — you only do this once per device.
Claude-XXXX. If it's there but Claude still can't see it, the issue is on the macOS side.sudo pkill bluetoothd in Terminal. macOS auto-restarts the daemon and forgets stale scan results.
Fixed in v1.1.1. The v1.1.0 status ack included a non-standard field that strict schema
validators in the desktop app silently rejected. Flash v1.1.1 from
inkspet.com/flash — battery percentage, free heap, uptime, approval count,
denial count, and level will populate the stats panel within a few seconds of reconnecting.
Yes. The firmware tags every permission request with its source transport (HTTP or BLE), so when you press a button the decision replies back over the correct channel — no cross-channel leakage. The agent state manager merges sessions from both paths by priority, so the display shows the highest-priority activity (a permission request always wins over routine work).
In practice: Claude Code runs in your terminal with HTTP hooks installed, Claude desktop sits paired over BLE, and one physical device quietly serves both.
unpair command to the device, which erases the stored LE bond.Claude desktop for macOS or Windows, build 1.3100 or later, with Developer Mode enabled (Help → Troubleshooting → Enable Developer Mode). Without Developer Mode, the Hardware Buddy menu item doesn't appear.
Anthropic documents Hardware Buddy as a maker/developer feature, not a stable consumer product — the wire protocol may evolve. InksPet firmware updates at inkspet.com/flash track compatibility; the latest is always recommended.