Skip to content

Navigation Menu

Sign in
Sign up

Latest commit

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Puck 🪄

Open-source portable voice for Home Assistant — the "02" to Open Interpreter's sunset 01.

Take that little 01 device gathering dust in a drawer (or any cheap ESP32 mic board) and turn it into Puck: a portable, push-to-talk voice assistant backed by Claude through Home Assistant — one that holds real conversations, controls your smart home, searches the web, remembers things across days, and speaks in a persona voice of your choosing.

Puck: a hockey-puck-sized device, and a quick, mischievous little sprite. Fitting for a small companion that runs your house.

Tap a button → talk → Claude answers, out loud or on a tiny screen.


Why this exists

Open Interpreter's 01 was a lovely idea — a handheld, open voice interface to an AI. When it was sunset, a lot of us were left with the hardware (M5 Atom Echo, M5StickC) and nowhere to point it.

It turns out the 01's guts are just a microphone + button + ESP32 with WiFi — exactly what Home Assistant's Assist voice pipeline runs on, via ESPHome. And Home Assistant can now use Claude as its conversation agent. So the same hardware becomes a satellite for something considerably more capable than the original:

  • Real conversations — not just "turn on the lights". Ask it anything; it answers with substance, in a voice-friendly length.
  • Full smart-home control — it is your Home Assistant, so it can actually do things.
  • Web search — current prices, news, weather beyond your sensors.
  • Persistent, shared memory — a small MCP server (below) lets it remember facts and preferences across conversations, and even share that memory with Claude Code / Claude Desktop on your computer.
  • A custom persona + voice — this repo ships "Rocky" (the Eridian engineer from Project Hail Mary: short, broken, sincere English), but the persona is just a prompt you can rewrite.

You do not need an ex-01 device. Any ESPHome-supported mic board works — an M5 Atom Echo (~13,ドル has a speaker) is the easiest starting point.


What you can build

This repo documents two device builds and one server. Mix and match:

Piece Hardware Role
Talk-back speaker M5Stack Atom Echo Press → speak → Claude replies out loud on the device.
Screen terminal M5StickC PLUS2 Press → speak → reply rendered on the screen (+ optionally spoken on a HomePod/speaker).
Shared memory any always-on box (a Raspberry Pi) An MCP server giving Claude durable remember / recall / forget tools, shared across the voice assistant and your computer.

Architecture

flowchart LR
 subgraph Device["ESP32 voice satellite (ex-01 / Atom Echo / StickC)"]
 MIC[Mic + button] --> ESP[ESPHome<br/>voice_assistant]
 end
 ESP -- audio --> HA
 subgraph HA["Home Assistant — Assist pipeline"]
 STT[Speech-to-text] --> AGENT[Claude conversation agent]
 AGENT --> TTS[Text-to-speech<br/>your cloned/persona voice]
 end
 AGENT -- controls --> DEVICES[Lights, scenes, media...]
 AGENT -- web_search --> WEB[(Web)]
 AGENT <-- MCP tools --> MEM[(Puck memory server<br/>Pi · SQLite)]
 MEM <-- same MCP server --> CC[Claude Code / Desktop<br/>on your computer]
 TTS -- reply audio --> ESP
Loading

The device is a thin satellite: it just streams mic audio to Home Assistant and plays/displays the answer. All the intelligence lives in HA's pipeline (Claude + your tools). That's what makes it portable and cheap.


Repo layout

firmware/ ESPHome YAML for the two device builds (+ Rocky sprites)
 stickc-claude/ M5StickC PLUS2 screen terminal
 atom-echo-claude/ M5Stack Atom Echo talk-back speaker
 secrets.yaml.example
home-assistant/ The Rocky persona prompt + the rocky_say.py grammar reference
memory-server/ The shared-memory MCP server (Node + SQLite) + systemd unit
docs/ Step-by-step guides — start here ↓

Start here (docs)

  1. docs/hardware.md — the devices, what to buy, flashing your first board.
  2. docs/home-assistant.md — the Assist pipeline: Claude agent, STT/TTS, exposing your home, web search.
  3. docs/persona.md — the Rocky persona & voice, and how to make your own.
  4. docs/memory-server.md — the shared-memory MCP server, wired to both HA and your computer.
  5. docs/homepod-output.md — the reliable way to speak replies on a HomePod / AirPlay2 speaker (genuinely hard to find documented — this recipe just works).
  6. docs/troubleshooting.md — every hard-won gotcha (mic/OOM crashes, the HA↔MCP transport, and more). Read this if something misbehaves — it will save you hours.

Just want basic voice control?

You can absolutely flash one of these boards, point it at Home Assistant's built-in Assist agent, and get plain local voice control ("turn on the kitchen lights") with no Claude, no persona, no memory, no cloud — the firmware here works fine that way, and HA's own voice docs cover it well.

But — being honest — that's not the point of this project. The whole reason 02 exists is everything on top of basic voice: real conversation, web search, persistent shared memory, and a custom persona voice. If all you want is offline light-switching, use stock HA Assist and skip most of this repo. If you want a little AI companion that happens to also run your house, read on.


What you need

  • Home Assistant (any recent version; these builds were validated on a bleeding-edge one).
  • The Anthropic integration in HA (needs an Anthropic API key) — this is the Claude conversation agent.
  • A speech-to-text and text-to-speech engine. Home Assistant Cloud (Nabu Casa) is the easiest; the persona voice here uses a cloned voice via Fish Audio (optional, see persona doc).
  • An ESPHome-flashable mic board (ex-01 hardware, Atom Echo, StickC PLUS2, ...) and the esphome CLI (pip install esphome).
  • (Optional, for memory) an always-on Linux box — a Raspberry Pi is perfect.

Credits, licenses & honesty

  • "Rocky" is a character from Andy Weir's Project Hail Mary. The persona prompt and the pixel sprites in this repo are fan work, shared non-commercially for personal use. Bring your own persona if you'd rather.
  • The cloned voice used in the author's setup is a personal Fish Audio voice (CC BY-NC, personal use) and is not included — you supply your own TTS.
  • The firmware is built on ESPHome and Home Assistant's Assist — huge thanks to those projects and the M5Stack ecosystem.
  • Everything original in this repo (firmware config, the memory server, the docs) is MIT licensed — see LICENSE.

Built by Alkemist. Contributions and forks welcome — if you revive your own 01 with this, open an issue and tell us. 🪨

About

Open-source portable Claude voice for Home Assistant — the '02' to Open Interpreter's sunset 01. Conversation, web search, shared MCP memory, custom persona. Revive your 01 (or any ESP32 mic).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /