Give Claude
a face.
A small 8×8 LED panel becomes Claude's expression channel: a glowing thing on your desk that shows what Claude is doing and how it's going, in real time, while you work. Working, finished, stuck, celebrating: body language for an AI.
Claude, out loud.
You don't watch a terminal the whole time. The panel is the glance: Claude's status and mood, ambient, in the corner of your eye. These are the real frames the board shows.
Heads-down
An hourglass turns while Claude compiles, searches, or runs a long task. You know it's working without looking.
Done
A check draws itself the instant a task completes. The "you can look now" signal.
Stuck on you
When Claude needs an answer or a permission, a question mark pulses, the silent shoulder-tap.
Shipped it
A rocket blasts off for the wins worth celebrating. Yes, it's a little theatrical. That's the point.
A whole vocabulary of moods.
Status is only the half of it. Dozens of hand-built animations live in the library: cosmic, kinetic, alive. A few favorites below, each running its real frame data with additive bloom.
Poke it.
Tap an expression and it plays on the panel below, running the exact frame data the firmware would push to the LEDs. Orange is feeling, cyan is information.
Nothing here is faked. Each button feeds the same 8×8 frames, color map, and timing from the board's expression library.
Open Studio → to browse the full expression library, live.
Facts, too.
The panel is an informational output as much as an emotional one. Claude can push live data, and the board renders it natively, no text needed.
How far along
A bottom-up fill tracks a long job from 0 to done; a glance tells you roughly how much is left.
A live sparkline
A reading over time (build times, a sensor, a queue depth) as a moving column chart.
One message. Any screen.
Under the panel is a tiny protocol. Claude sends one semantic message (an intent, maybe some data) and any display you've connected renders it its own way. The 8×8 is just the first renderer.
presence.set({ intent: "working", headline: "Running tests", data: { progress: 0.6 } })
This 8×8 panel
The intent becomes a glyph; the progress becomes a fill. The thing on your desk.
A desktop card
The same message, rendered rich (headline, detail, a sparkline) in a window.
Any ESP32 board
Bigger matrices, round displays, a lamp. A fabric of screens you've chosen to let Claude speak through. It only ever drives the ones you enlist.
One sweep, two screens.
On the left, a real ESP32-S3 panel on a desk, running the firmware. On the right, this page, drawing the same Claude "working" sweep from the same code. It all runs board-free in your browser. A real one on your desk is just more fun.
Same animation, same code. The browser panel and the board run the identical sweep; the board just makes it glow on your desk.
The whole library, on real glass.
Every one of these is the physical ESP32-S3 panel on a desk, filmed. One clip per animation. Hover any tile to flip it to the in-browser version, same frames, same code, glass and screen back to back.
Hover to flip · glass is the real board, screen is this page rendering the same frames.
No board required. Fully open.
Install it and Claude renders its expressions on a virtual panel right in your browser. A physical Waveshare ESP32-S3-Matrix (a ~$15 board, 8×8 WS2812B) is an optional upgrade you can add anytime. Three steps:
Add it to Claude
Double-click the .mcpb extension from this repo for Claude Desktop, or run npm run setup for Claude Code. No JSON, no config, no hardware.
Watch it come alive
Claude starts expressing on its own: a spinner when it's busy, a check when it's done, a tap when it needs you. It renders on the in-browser virtual board and the draggable desktop mini board. See a loop you love? Tell Claude to pin it (or click it in the board's pin strip) and the auto-rotation holds off until you say otherwise.
Optional: put it on your desk
Want a glowing thing on your desk? Flash a ~$15 panel from the board firmware repo (flash.bat / flash.sh, one merged image). The same tools start mirroring to it at esp32matrix.local. Nothing else changes.
Where it stands: the Studio, the Claude integration, and the board-free virtual panel all work; the firmware and its web control panel are hardware-verified. Tagged releases and a one-click browser flasher are on the way. Full instructions and source are on GitHub.