familiar

A self-hosted, local-network voice companion for the StackChan ESP32-S3 robot. No cloud: the little robot on your desk wakes when called, hears you, thinks, and speaks back — all on hardware you own.

→ Quickstart  ·  → Using your familiar


The name is the witch’s-companion kind: a familiar is a spirit bound to a person. This project is the two halves of ours:

They talk over one WebSocket on your network. Nothing leaves the house.

Meet the familiars

Say “be a cat” (or bat, toad, fox) and the face on the display changes — and stays changed across reboots. These are the actual sprite skins the firmware renders, blinking and speaking:

cat familiarbat familiar
“be a cat”“be a bat”
toad familiarfox familiar
“be a toad”“be a fox”

Where to start

I want to…Read
Get from a clean clone to a talking robotQuickstart
Learn what it can do day-to-dayUsing your familiar
Understand the firmware (the body)Poppet deep dive
Understand the server (the mind)Grimoire deep dive
Train a wake word for my own voiceWake word
Read the wire contract between the halvesProtocol v2
Meet the projects familiar descends fromSources & lineage

The stack at a glance

 "Hey Artemis…"                        your LAN, and only your LAN
┌──────────────┐   WebSocket   ┌──────────────┐   HTTP   ┌─────────────┐
│    poppet    │ ────────────► │   grimoire   │ ───────► │  LLM server │
│  (StackChan) │   Opus audio  │ (Go backend) │          │ (llama.cpp/ │
│ mic·face·srv │ ◄──────────── │ whisper ASR  │ ◄─────── │  vLLM/…)    │
└──────────────┘  audio+text   │ Kokoro TTS   │          └─────────────┘
                               └──────────────┘

License

Dual-licensed by subtree: grimoire/ is AGPL-3.0-or-later; everything else (poppet/, docs, tooling) is MIT. The two halves are separate programs talking over a socket, so the copyleft does not cross the wire. Full acknowledgements in the repository README.