Anthropic has opened its Claude Hardware Interface (Bluetooth API) to developers, enabling an ESP32-S3-based desk companion to connect directly to the Claude desktop app over Bluetooth Low Energy (BLE).

To demonstrate this new feature, the company released an open-source reference project called Claude Desktop Buddy. It currently runs on the M5StickC Plus (an ESP32-based board from M5Stack, about $30 on AliExpress and Amazon) and works as a small interactive hardware companion for Claude. Also, during the recent “Build with Claude” event, the company recommended the ESP32-S3-based M5Stack Cardputer as one of the best hardware options for developers who want to build physical devices that interact with AI agents.

Claude Desktop Buddy on M5StickC Plus

Claude ESP32-S3 desk companion Desktop Buddy on M5StickC Plus

Designed as a physical companion device for Claude Cowork and Claude Code on macOS and Windows, it stays on your desk and provides real-time updates on the AI agent’s activity. It also lets you respond to permission requests directly using its buttons, so you can approve or deny actions without going back to the desktop app, making interaction with the AI faster and more convenient.

The “Buddy” feature started as a hidden Easter egg and April Fools’ joke inside the Claude Code CLI. It was planned for April 1st, 2026, but it got leaked a day early through an accidental npm source map. Developers could summon it with a simple command to display a reactive ASCII character whose energy and mood changed based on their coding activity. The goal was to make long terminal coding sessions more fun and less boring. But over time, as it got popular, Anthropic decided to expand the concept beyond software. By late April 2026, the company open-sourced the Claude Desktop Buddy project and released a local Bluetooth Low Energy (BLE) API for its desktop apps. You’ll find the code and documentation on GitHub.

This hardware interface solves a key problem of frequent user approvals that similar AI systems like StackChan, Loona Deskmate, and Espressif’s EchoEar voice chatbot do not address. Instead of constantly switching back to your computer screen, you can now receive prompts and approve or deny actions directly on the ESP32 device using physical buttons over BLE. The interaction stays local, fast, and private, and no API keys or internet connection are needed. The firmware also keeps the fun “desk pet” personality with animated visual feedback, while the open BLE standard makes it easy for makers to build their own custom versions.

Sleep mode with ZZZs (left), Celebrate animation (middle), and Attention alert mode when waiting for approval (right)

Sleep mode with ZZZs (left), busycelebrate animation (middle), and Attentionalert mode when waiting for approval (right)

The firmware turns the device into a cute Tamagotchi-style desk pet that reacts to your interactions with Claude. It sleeps when nothing is happening, wakes up as soon as a Claude session starts, and gets visibly impatient when an approval prompt is waiting.

The built-in states include:

If you want a custom animated character instead of the built-in ASCII pets, it’s very easy, and Anthropic provides an official example called Bufo, where you can find custom GIFs. You can also create your own custom GIF character using the included prep_character.py tool. Simply prepare 96-pixel-wide GIFs for each of the seven animation states, create a simple manifest.json file, and put everything in one folder. Then just drag the whole folder into the Hardware Buddy window on your computer. The files are streamed over BLE, and your new character appears on the device instantly. Note: the entire character pack folder (manifest + GIFs) must fit under 1.8MB to be successfully streamed and stored in the ESP32’s flash memory.

The project is built for ESP32 and ESP32-S3 boards using the Arduino framework and is compiled and flashed with PlatformIO. It currently depends on the M5StickC Plus library for the display, buttons, and motion sensor. If you want to use it on other ESP32 or ESP32-S3 boards, you will need to fork the code and change the drivers to match your board’s pin layout.