by raullenchai
A multi-model Muse: personal AI voice assistant on ESP32 - wake word or knob, any OpenAI-compatible brain (STT/chat/TTS mix-and-match), streaming replies, out of the box. Built on muse-gadget-sdk.
# Add to your Claude Code skills
git clone https://github.com/raullenchai/esp32-thinksLast scanned: 10/18/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-10-18T08:34:54.901Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how esp32-thinks compares with popular alternatives.
esp32-thinks is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by raullenchai. A multi-model Muse: personal AI voice assistant on ESP32 - wake word or knob, any OpenAI-compatible brain (STT/chat/TTS mix-and-match), streaming replies, out of the box. Built on muse-gadget-sdk. It has 102 GitHub stars.
Yes. esp32-thinks passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/raullenchai/esp32-thinks" and add it to your Claude Code skills directory (see the Installation section above).
esp32-thinks is primarily written in Shell. It is open-source under raullenchai on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh esp32-thinks against similar tools.
No comments yet. Be the first to share your thoughts!
30 days in the Featured rail · terms & refunds
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Automated security scan — not a certification.
A multi-model Muse — a personal AI assistant on ESP32, talking out of the box.
Think of it as a Muse that thinks with your models: say "Hi, ESP" (or press the knob), ask anything, and it answers out loud — streaming sentence-by-sentence while the model is still writing, in English, Chinese or Korean, on a small gadget with a mic, a speaker and a round display.
No vendor lock on the brain: speech, transcription and chat are three independent endpoints, each pointed at any OpenAI-compatible server — one provider for all three, or a different one per task.
Cloud assistants rent you a brain: one vendor's models, one vendor's pricing, one vendor's uptime, and your voice on their servers. The gadget hardware is fine — the lock is in the firmware.
esp32-thinks flips that. The device runs your stack: pick the cheapest transcription, the smartest chat model, the voice you like — per task, changeable in one config line and a rebuild. The implementation is a reviewable patch against a pinned open-source SDK, so you can read it, change it, or point it at a local server.
QuickSilver preset: qwen3.7-flash chat, whisper-large-v3-turbo STT and chatterbox-turbo / qwen3-tts speech. v0.2.10 allows one or two natural sentences, rather than the old 15-character answers. Longer replies take longer to synthesize.
| Pre-release language check | SDK turn duration |
|---|---|
| English | 3.9 s |
| Chinese | 8.7 s |
| Korean, fresh history | 3.2 s |
These are individual samples, not latency guarantees. The final flashed firmware returned a 29-word English answer in 7.1 s, 72 Chinese characters in 15.1 s and 76 Korean characters in 10.3 s. A greeting took 1.7 s and an immediate post-wake question took 1.9 s. The Chinese sample contained 66 Han characters: the prompt’s approximate length bound can be exceeded. Typed timings include chat, speech fetch and decoding; the console drains audio without playing it through the speaker. They do not measure voice-to-first-sound latency.
See v0.2.10 validation and known limits for exact test coverage, and REFERENCE for the configuration and historical latency receipts. Earlier 2–3 s figures used much shorter replies and should not be applied to the new default persona.
openai, quicksilver, custom.| Device | Seeed SenseCAP Watcher W1-B (ESP32-S3, 1.45" 412×412 round LCD, ES8311 speaker codec, ES7243E mic, PTT knob) — more boards the SDK supports are candidates |
| Base firmware | muse-gadget-sdk @ 812c46f (2026-10-09) + patches/muse-brain.patch (see what's theirs, what's ours) |
| ESP-IDF | v6.0.1 (esp32s3 target) |
| Brain | Any OpenAI-compatible servers: STT (/audio/transcriptions), chat (/chat/completions, SSE streaming), speech (/audio/speech) |
| Presets | openai (all three) · quicksilver (qwen3.7-flash + whisper-large-v3-turbo + chatterbox/qwen3-tts) · custom — multilingual STT, language-following replies, Chinese/Korean TTS routing |
| Wake word | esp-sr WakeNet10 wn10_hiesp ("Hi, ESP", on-chip, model flash partition) — custom phrases trainable via Espressif's TTS Pipeline V3 |
| Build host | Linux or macOS with ESP-IDF v6.x |
# 0) One-time: ESP-IDF v6.x for esp32s3 (docs/REFERENCE.md §Prerequisites)
git clone https://github.com/facebookincubator/muse-gadget-sdk.git
git -C muse-gadget-sdk checkout 812c46f
git clone https://github.com/raullenchai/esp32-thinks.git
cd esp32-thinks
# 1) Back up the factory NVS once — your restore path if anything goes sideways
./scripts/backup-nvs.sh ../muse-gadget-sdk /dev/ttyACM1
# 2) Apply the patch + configure your brain (pick a preset)
./apply.sh ../muse-gadget-sdk --preset quicksilver # or openai / custom
# 3) Build + flash (CH342-safe pacing; allow several minutes)
./build-and-flash.sh ../muse-gadget-sdk /dev/ttyACM1
With a preset + headless Wi-Fi in step 2, that's the whole setup: unplug, re-plug, and talk — press the knob, or just say "Hi, ESP".
| Command | Does |
|---|---|
./scripts/backup-nvs.sh <sdk> [port] |
Dump the factory NVS partition (0x9000, 0x32000) — do this once |
./apply.sh <sdk> [--preset ...] |
Copy pinned CAs, apply patches/muse-brain.patch, generate provider_config.h (asks for keys, Wi-Fi, wake word) |
./build-and-flash.sh <sdk> [port] |
idf.py build + paced flash (firmware + wake-word model); never interrupt it |
python3 scripts/tts_probe.py <sdk> [port] ["question"] |
Typed chat/TTS probe; opens a serial reader and resets the device |
"Hi, ESP" / knob ──▶ record (pre-roll holds the last second)
│ ends: voice VAD (~1.4 s silence) or knob release
▼
trim to speech ──▶ POST WAV/ADPCM ─▶ STT endpoint
│ (¼-size upload, keep-alive)
▼
POST /chat/completions (SSE) ──────────────▶ chat endpoint
│ split at sentence boundaries (ASCII + 。!?…)
▼
per sentence: POST /audio/speech ─▶ MP3 appends to the buffer
│ already decoding + playing
▼
first word out loud while the model is still writing
Connection preparation starts after Wi-Fi comes up. A first question can still pay connection costs if preparation has not finished, or when a longer reply needs a separate speech connection. See REFERENCE for historical measurements and connection behavior.
The USB serial port (/dev/ttyACM1) is a full console, handy for bench testing:
| Input | Does |
|---|---|
hold knob / d…u |
simulate PTT down/up |
k |
audible self-test: plays the wake phrase through the speaker, then a full voice turn |
>chat=hello? |
typed turn — same chat/TTS pipeline |
>tasks |
dump every task backtrace (works even while wedged) |
>status |
heartbeats: Wi-Fi, heap, DMA, tunnel |
z / w |
sle |