"The microphone is the cheapest part. The product is everything that happens after you stop talking."
What You're Actually Building
It's tempting to describe a dictation app as "a chat window with a mic." That framing is wrong, and it will lead you to build the wrong thing. Firekeeper never opens a window you type into. You are already in Mail, or a terminal, or a browser text field. You hold a key, you talk, you let go, and the words appear where your cursor already was. There is no destination app called "Firekeeper." The app is invisible; the loop is the product.
The Loop
Every dictation is the same five-step pipeline. Memorize it — the rest of this quest is just each step in depth:
global hotkey -> microphone -> local STT -> cleanup -> insert into active app
Notice what's not in that line: no cloud, no account, no "send." The audio is captured locally, transcribed locally, and the only thing that might leave your machine is the cleanup pass — and even that is your choice, routed to your own Pippa or a local model, never a stranger's server.
A Surface, Not a Brain
Firekeeper is a client surface for Pippa, not a second Pippa. When it wants a smart cleanup, it asks cwkPippa; it does not stand up its own identity, memory, or model routing. That single rule is what keeps the family coherent: one brain in cwkPippa, many surfaces around it — Cinder for drawing, Rekindle for prose, Firekeeper for voice. A surface can be small and sharp because it borrows the brain instead of rebuilding it.