Skip to content

tiny

Voice memos·

Voice memos from the ring to your inbox: the media door, storage, transcription and what the agent can do with them.

  • tiny users
  • 1 min read
  • 250 words

In 10 seconds

Four taps, a sentence, four taps → the phone pulls the memo → POST /api/health/media → transcribed at ingest → inbox item and one agent turn: a memo is a message to your tiny, and the one-sentence answer is pushed back. Proven on prod: "what is the battery level of my silver ring?""Your silver ring is at 99% battery." in 28 s.

The door·

POST /api/health/media — device-token auth, like ingest:

{"deviceId": "…", "token": "…",
 "kind": "audio_note", "mime": "audio/ogg",
 "started_at": "2026-09-19T15:51:40Z", "duration_s": 365.3,
 "device": {"name": "JY-Y3-011A"},
 "data_base64": "T2dnUwAC…"}
field value
limits ≤ 8 MB; sha256 dedupe — the same memo posted twice returns the first id (200), so gateways retry safely
storage R2 under the owner; inbox item ring_memo with attachments[{url, media_id, duration_s}] + push
transcript at ingest (≤ 25 s, OpenAI speech-to-text) — the push body is your first line, the reply carries transcript; a failed pass is retried by health_memos transcribe
owner routes GET /api/health/media · GET …/:id (streams) · PATCH {transcript} · DELETE (also removes the inbox item)
driver ring-cli audio-pullcaptures/memo.opus (+.wav) → ring-cli audio-post; the bridge echoes 0x36 only after a 2xx

A memo is a message·

Right after transcription the worker enqueues a one-shot agent job (ring-memo-<sha>, idempotent per memo): "act on it exactly as if the owner typed it, reply in one or two sentences". It runs within a minute with the full tool set (calendar, reminders, memory, devices, health) and the reply is pushed — ✅ 🎙 ring memo 17:45: …. Off switch: health_alert_rules {memo_agent: false}. Empty transcripts (charger rumble) never start a job.

The button as a hotkey — health_alert_rules {button_prompt}

Taps arrive as button samples (cmd 40) → ring_button event. Set a standing instruction and each tap runs one agent turn (ring-button-<sha>), reply pushed:

health_alert_rules {button_prompt: "tell me my next meeting"}

Proven on prod with a synthetic tap: "Your Black ring is at 100% battery, and you've taken 0 steps today." button_prompt: null turns it back into a plain event. Real tap codes (1|2) are still to be observed from a finger.

Two things real memos taught us

The ring may keep recording long after you stop talking — a 6-minute file held ~30 s of speech; duration is not content. And a local Whisper pass once called a real memo "no speech" while the server found the words — trust the server transcript.

"What did I note this morning?"health_memos. "Pull my memos"ring_command memo_pull. Memos are ordinary inbox items: forward, summarise, turn into calendar events.