← All projects

Murmur

A push-to-talk dictation app for the Mac. It learns how I write.

Role
Solo
Year
2026
Status
wip

Dictation gets the words right and the voice wrong. Every tool does this. I speak, it transcribes, and what lands on the page reads like a transcript. Not like me.

So I built the second part. Murmur builds a style profile out of my own writing: my finalized dictations, the edits I make after pasting, and samples I paste in and tag by channel. Email, X, LinkedIn, Slack. Tagging is the only way I can reach those, since the accessibility APIs can't read them directly.

Then it measures. Sentence length, contractions, punctuation habits, greetings, sign-offs, the phrases I lean on. All on-device, through Apple's NaturalLanguage framework. No LLM does the profiling. That part is deterministic, so I can read every number it produces.

The output is a Voice Card. A portable voice.md I paste into any assistant, so it writes like me instead of like an assistant.

The part I'm proudest of

Voice splits in two, and I think most tools miss it.

Identity is how I think. Rhythm, stance, contractions, the words I reach for. That barely moves between audiences.

Register is convention. Greetings, sign-offs, emoji, casing. That changes based on who I'm writing to.

Pool them together and you get leakage. A "Hi baby" learned from my chats surfaces in a work email. So I keep register in overlays built only from that group's own samples.

Four groups, not nine channels. Professional, messaging, social, and notes to myself. Slack sits in professional on purpose, so nothing from my chats can climb into a work email. A thin group borrows strength from its siblings rather than from strangers.

When it doesn't know where the writing is going, it drops to neutral. Never to the average.

What it taught me

Every measured trait ships as an instruction, not a fact. "Write sentences around 7 words" instead of "your sentences average 7 words." A model can obey the first one. The second is trivia.

The card also refuses to overclaim. A trait below its confidence floor gets dropped. Absence claims need a rule-of-three check first, so a thin corpus can never tell you "you don't use emoji" just because it hasn't seen one yet. A habit also has to turn up on separate days before it earns a line, so one long evening of writing can't define me.

It wrote this site, by the way. Every page you're reading came out of the card. Too cute, probably. I left it in anyway.

It runs daily as a personal tool. There's nothing to download.

Stack: Swift and SwiftUI, living in the menu bar. Speech-to-text is Apple's own, on device. The measuring is Apple's NaturalLanguage framework doing the tokenising, tagging and name detection. Audio never leaves the Mac.