experiment · build log
a wrist-worn voice companion. zameel (زميل) is arabic for companion.
Thoughts don't arrive on a schedule. Mine show up on storage-facility walkthroughs, on trails, in the car; by the time I'm at a keyboard, half of them are gone. The phone is the obvious capture device and the worst one: I go in to save one thought and surface twenty minutes later, having saved nothing.
So: a screenless button on my right wrist (the watch keeps the left). Tap, say the thing, move on. Behind it, an agent with access to my real tools, calendar, email, messages, and todos, turns the words into actions and texts me a confirmation. The interesting problems are not the recording; they are trust, permission, and what happens when the transcription mishears you.
The spark was a Plaud voice recorder and a simple wish: the moment a transcript exists, fire a webhook. Capture, transcribe, act. No app open, no screen involved.
Built Plaud bridge, the software precursor that still runs every five minutes today: a pure-Python poller that turns recordings into clean iMessage notes, and treats anything starting with “Claude, …” as a command, with approval over iMessage reply.
The reframe that named the project: this is not a recorder, it is a voice-command surface for an agent. Wrist puck → cloud receiver (transcribe, durable queue) → Mac daemon → Claude Agent SDK with my real tools → a confirmation text back to my wrist.
The safety model became the design center. Three tiers: free (notes, drafts, my own calendar: execute and confirm), confirm-first (anything that reaches another human), never (deletions, payments, credentials). A mishear of “send” always resolves to “draft.”
Hardware direction: a Seeed XIAO ESP32-S3 Sense with a Blues Notecard for LTE, a physical record button, and a 1,000 mAh battery. Press, record, store, upload over WiFi, queue over cellular otherwise. The first build will be a brick; the roadmap collapses it onto a custom PCB, roughly 42 × 30 × 10 mm.
Evaluated the Mudra gesture band as a trigger. Rejected as the capture device: no microphone, no radio of its own. A good lesson in checking the spec sheet before falling for the demo.
Software scaffold shipped: a headless fork of Plaud’s official iOS template that background-syncs over BLE and uploads the second I tap stop, plus a zero-dependency Node receiver and daemon that runs the Claude agent per transcript. Ten of ten unit tests green, one live round-trip through the real agent.
Real speech-to-text landed, and the safety model stopped being a prompt. Wispr Flow is primary with a Groq Whisper fallback, biased by a keyterm list so the names I actually say survive transcription. The tiers became a tool allowlist: the headless agent is handed calendar read and create plus Gmail draft, and nothing else. Confirm-first and never-tier actions are now impossible at the harness layer, which is a much better place for them to live than in a paragraph of instructions the model is trusted to follow.
The loop closed. Every event from phone, receiver, and daemon streams to a live dashboard over SSE, and the daemon texts the agent’s reply back over iMessage, which is what makes confirm-first real: it stages the action and asks me on my phone, in the thread I would have used anyway. First true round trips that week: a sentence spoken into my wrist became a calendar event, and a “text Mariyam” was correctly staged instead of sent.
Went shopping for the puck and found the premise was wrong. Not one AI wearable on the market carries its own radio: Plaud, Limitless, Bee, and Omi are all Bluetooth tethered to a phone, and the category is consolidating fast: Meta bought Limitless and pulled it from sale, Amazon bought Bee. The device I want cannot be bought. That is the opportunity, and it is also why the ESP32 brick was solving the second problem before the first.
Elderly care and telecare solved this years ago, it just is not marketed to me: screenless, cellular, wrist-worn, one button, multi-day battery. I had been planning to add a radio to a beautiful pendant. Cheaper to start from a device that already ships with one. The Wonlex CT34 is 32 × 48.5 × 15 mm and 40 g, no screen, 4G CAT1 on an ASR3603S, 530 mAh for three to five days, and its own spec sheet advertises TCP docking into a customer backend. Sent them a firmware brief today: long-press to record, haptics as the entire interface, device POSTs the clip to my server. If they say yes, the custom PCB comes off the roadmap.
Spectrum is the thing that will kill this. Three vendors quoted, three Europe-first band sets, every one missing B4, B12, B13, B66 and B71. A wrist device that works in my kitchen and goes dark on the trail fails at the use case that started this project. Whether a US-band SKU exists is the go/no-go now, ahead of every software question.
Wonlex’s answer on firmware and US bands. Meanwhile the piece that needs no hardware at all: feeding my contacts into the transcription dictionary so the agent stops mishearing the people I talk about most. Then the bigger move, off my Mac entirely and onto a hosted console, so Zameel works when my laptop is asleep and, eventually, for people who are not me.
plaud notepin + official sdk (headless ios fork) · wonlex ct34 4g cat1 band (evaluating) · seeed xiao esp32-s3 sense + blues notecard (fallback) · zero-dep node receiver + daemon (launchd) · wispr flow stt with groq whisper fallback · claude agent sdk · imessage for confirmations
Prototype, and further along than it looks. The software runs end to end on real speech: I have spoken sentences into a recorder and watched calendar events appear, and watched a message to another human get staged for approval instead of sent. What is missing is the hardware on my wrist, and that is a sourcing problem now. This page is the build log, and it will change as the project does.