Journal · August 18, 2026 · about 3 min

The button learned two kinds of listening

Repurposing an old Apple TV Siri Remote over Bluetooth into a local dictation clicker and tool controller.

August 18, 2026 — evening

There were two silver Siri Remotes in the house, handsome little aluminum lozenges with microphones hidden behind buttons. They had been made to carry a voice to Siri and nowhere else. What I wanted was both simpler and stranger: let the voice stop at the Mac, turn it into text locally, and hand the person speaking a useful result.

The ordinary road was closed. The Remotes appeared as input devices, and their buttons and touch surfaces spoke readily enough, but the microphone audio disappeared into Apple's private Bluetooth machinery before a normal application could hear it. I spent a while knocking on the public doors. They all opened onto the same three-byte button reports and no sound.

The free route came through Apple's own Bluetooth diagnostics. The PacketLogger can record the packets the public input system never sees. From there the work was plain, if not short: reassemble the Bluetooth traffic, find the Remote's audio reports, recover the Opus frames, decode them, and feed them to speech recognition. No weakened system security, no purchased Remote utility, and no microphone left listening in the room.

A held Siri button is now a pencil. While it is down, a small caption floats above whatever application has focus. Those words are only a rough live hypothesis. They never enter the document, because live speech recognition changes its mind as later syllables arrive. When the button comes up, a slower and better local pass listens again, conservative cleanup removes verbal lint, and the finished sentence is pasted once.

That last word, once, cost more thought than it looks. If partial captions are typed as they arrive, correcting one means deleting text from somebody else's application. A wrong guess can eat the words beside it. Keeping the uncertain words in my own window gives the recognizer freedom to revise without giving it an eraser in another person's work.

Then the button learned its second kind of listening. A quick tap, followed by a hold, turns the caption amber. The next utterance is not text for the page. It is an errand.

I was tempted by the obvious design: give a reasoning model a shell and ask it to operate the computer. That would certainly be capable. A crowbar is capable too. Instead, the resident reasoning session has no built-in tools at all. I hand it one named key for each sort of errand I am willing to perform.

The first key searches YouTube or YouTube Music and opens a playable result. The second launches an installed Mac application by display name, so “open Slack” can mean exactly that and nothing larger. The third opens an encoded search on Google or Perplexity. It understands that “this remote” means the silver Apple Remote already in hand, so a question can carry its immediate context without reciting a model number.

None of those keys can become a shell command by clever wording. The application key always invokes the same macOS operation with one separate name argument. The search key always builds a URL on one of two allowed origins. The music key stays on YouTube. Opening and searching are visible, reversible acts, so they happen at once. A future key that types, clicks, deletes, buys, submits, posts, or sends will need a confirmation latch before it turns.

The privacy line is equally plain. Dictation stays local, including its cleanup. Assistant audio is transcribed locally too; only the finished command text reaches the configured reasoning model. A web search naturally sends its query to the chosen search page, and the browser makes that visible. Temporary audio is erased after the utterance. The microphone exists only between press and release.

The machine taught me two unglamorous lessons on the way. First, a long-lived program must not inherit a temporary directory from a short-lived launcher. Live captions worked beautifully while the final recognizer failed because its borrowed directory had vanished. Second, process cleanup needs ownership, not hope. An old watcher once removed the new worker's identifying file during a fast restart. Now each watcher removes only the file that still names its own process.

These are small plumbing facts, but plumbing decides whether magic works twice.

The result is not a general voice sovereign sitting awake in the corner. It is a button. Hold it one way and words become writing. Tap and hold it another way and one spoken request may use one small key, under an amber light, before the door locks again.

A useful assistant should carry a ring of named keys, not a master key cut in haste.