huh?

settling the plate

move your cursor — the plate is listening

Sand on a humming plate: it runs from the sound and settles where the plate is still. Switch your microphone on and talk to it — the pattern rearranges as you speak, and nothing is recorded. Called a Chladni figure, 1787.

huh?

Hold a key. Talk. The words land wherever your cursor is. Transcribed by the machine on your desk — not by a machine in someone else's building, and never onto a disk that someone else can lose. Free software, and every line of it open to read.

00:01what it actually does

This is the whole thing.

Hold the key, say the sentence, let go. Watch the overlay: the recogniser hears cuber netties, because that is what it sounds like. The dictionary knows what you meant. What lands in the document is already right — you never see the wrong version, and you never go back to fix it.

A rebuild of the overlay in the browser, drawn to the same numbers as the application and running at the same timings — not a screen recording. The window is TextEdit because the point is that it could be anything: the text goes wherever the cursor already is, in Slack, in Mail, in a terminal.

00:04about the name

huh?
interjection — the sound you make when you didn't catch what someone said. Also, apparently, the sound every dictation app makes when it hears a name it doesn't know.

It is named after the problem. Recognisers mishear — constantly, and worst of all on the words that matter most: people, products, the jargon your team invented last Tuesday. Everything in this app exists to close that gap.

00:38why this exists

The hardware is already yours.

There is a neural engine in your Mac. Right now it is doing nothing while you upload your voice to a rented computer to do a job it could have done.

Dictation became a subscription. Meeting notes became a service with a seat price, a retention policy and a terms-of-service page that can be edited after you agreed to it. None of that was ever a technical requirement — it was a business model wearing the costume of one.

Every Apple silicon Mac Apple has sold — every M1 through every M5, in every trim — carries a sixteen-core Neural Engine; the Ultra chips carry thirty-two. The speech models are already on your disk, put there by macOS. The only thing missing was an application willing to use them and stop.

So: no account. No server. No subscription. Nothing to sign in to, nothing to cancel, and nothing to leak.

16
Neural Engine cores already sitting in your Mac Every Apple silicon Mac ever sold has at least sixteen.
0
Accounts, identifiers, telemetry or update checks
1
Entitlement — the microphone. That is the whole list.

01:20the security case

The safest recording is the one that was never made.

A cloud dictation service is, structurally, a company holding your voice. Not because anyone there is careless — because that is what the architecture requires. Audio has to reach a server to be transcribed, and once it is there it is on a disk, in a backup, in a subprocessor's region, and subject to whatever the terms say next year. Every one of those is a place it can leak from. None of them exist here.

48%

of breaches now involve a third party — a 60% rise in one year, and the first time supply chain has been the story rather than a footnote. A transcription vendor is a third party.

Verizon DBIR 2026 →
$4.99M

average cost of a breach in 2026. The one in four that were AI-enabled averaged six million, and grew 56% year on year.

IBM Cost of a Data Breach 2026 →
1,000,000,000

meetings processed by a single note-taking service since 2016, across roughly 25 million users. A 2025 class action alleges it recorded participants who never agreed to it and used the audio to train its models. The claims are untested.

NPR, August 2025 →
3 seconds

of clean recorded speech is enough to clone a voice convincingly. A meeting archive is not just a record of what was said — it is a corpus of everyone who was in the room.

Microsoft Research, VALL-E →

Even Apple got this wrong. Siri recordings were reviewed by human contractors; Apple settled for $95 million in 2025, covering devices sold over a decade, without admitting wrongdoing. That is the relevant lesson, and it is why this app binds to SystemLanguageModel and never to PrivateCloudComputeLanguageModel — the one that would send your words to Apple's servers. The guarantee is in the type it is compiled against, not in a setting somebody can change later.

Which you do not have to take my word for.

That is the point of publishing the source under a licence that keeps it published. Every line below is something you can check in an afternoon, and the reason it is worth checking is that a claim nobody can verify is just advertising.

02:35what it heard, what it writes

Every recogniser mishears.

Flip the switch. One side is what a recogniser hands you; the other is what huh? writes instead.

Dictionary
3 corrections applied what huh? writes

And asked about once.

A word the recogniser did not know arrives here with the sentence it appeared in. Answer it and the answer is kept — a term goes to the dictionary, a name goes to People where nothing will revise it later, and a rejection is recorded too. Every outcome is written down, so the same word is never put in front of you twice.

Rebuilt from the proposal rows in the application. “It's a name” files it under People instead, where a settled spelling is never revised by a later pass.

03:30the long form

An hour of talking, kept.

Record a meeting and it transcribes the whole thing on the same silicon — timestamps, speakers, and a summary you can actually use. Nothing is uploaded, because there is nowhere to upload it to.

So where did we land on the migration?

Can we push it to next sprint?

I'd rather not — the schema change blocks two other things.

Fine. I'll take the migration, you take the rollback.

Agreed. Written up before Thursday.

And nobody touches production on a Friday.

04:10when the meeting is too long

A bigger model, still on your Mac.

Apple's on-device model reads about two thousand words at a time. An hour-long meeting is five times that, so summarising it means reading in pieces and stitching the notes together — which loses something at every join. Rather than do that quietly, the app says so, and offers a model big enough to read the whole thing in one pass. Qwen3 4B, 2.5 GB, downloaded once, then offline forever. It is the one moment the app asks you to decide anything.

Rebuilt from the card the application actually shows, with its own wording and numbers. The download figure is real: 2.5 GB, once, and never again.

04:58recordings and names

An hour of audio.
Ninety seconds of waiting.

Drop in a file — roughly forty times realtime on Apple silicon. Back come timecoded segments you can click to seek the original. Search returns the moment, not the file.

Afterwards it reads the whole transcript again, in passages, hunting for names it doesn't know. Point at one: Ada Okonkwo is what it writes now, because you told it once.

Names live apart from the dictionary — a name settles once and shouldn't move again. Every answer is remembered. A word you have already ruled on is never raised again.

05:44under the hood

How it actually works.

Audio never touches the disk. The dictionary enters the pipeline twice, at two different strengths, because a hint and a guarantee are not the same thing.

capture
AVAudioEngine
Converted to the engine's format. Memory only.
recognise
SpeechAnalyzer
or Parakeet TDT
On the Neural Engine. Models supplied by macOS.
correct
CorrectionEngine
Whole-word, longest match first, separator tolerant.
tidy
TextCleanup
Fillers and stutters, by pattern — no model.
insert
Accessibility API
Pasteboard fallback, clipboard restored.
the dictionary feeds in twice — as recogniser bias before step 2 (a hint), and as substitution rules at step 3 (a guarantee)
Context window
Apple's on-device model holds 4,096 tokens per session — instructions, prompt and response together. An hour of speech is roughly 12,000, so summaries are chunked, deduplicated in code, then written once.
Name extraction
Transcripts are read in 320-word passages. NSSpellChecker and NLTagger find candidates locally; only passages containing unknowns reach a model at all.
Guardrails
Every proposed correction passes a normalised Levenshtein plausibility check and a mode-collapse detector before you ever see it. Nothing is applied without a click.
Search
An inverted index over every transcript, rebuilt on change. Final term matched by prefix so results update as you type.
Storage
Plain JSON in ~/Library/Application Support/Huh — pretty-printed, sorted keys, watched for external edits. Edit it in a text editor if you like.
Hardening
Hardened Runtime, one entitlement, no JIT, no library-validation bypass. Four verification suites compile the shipping sources directly — no mocks.

07:10where your words go

Everywhere they can
possibly end up.

Most apps say "private" and stop. This is the entire list — including the one path that leaves, which happens only because you asked it to.

Microphone audio
memory only — never written to disk
stays
Transcripts
~/Library/Application Support/Huh
stays
Dictionary & names
plain JSON, editable by hand
stays
Speech & summary models
downloaded once, only if you choose them
download only
Send to ChatGPT or Claude
your clipboard, then wherever you paste it
leaves — you paste it

08:02install

Three lines.

No Xcode. No build. Nothing to compile.

Terminal — ~/Downloads
$ unzip huh-0.3.0.zip
$ xattr -cr "huh-0.3.0/huh?.app"
$ mv "huh-0.3.0/huh?.app" /Applications/
 
# the xattr line is required — signed on the machine that
# built it, not by Apple, so macOS quarantines it

Free software, GPLv3

Use it, read it, change it, and share what you change — on as many machines as you like, for as long as you like.

The licence carries one obligation, and it runs in your favour: anyone who distributes a modified version has to keep it free software too, with its source. Nobody can take this closed.

09:31find me

Say hello.

Bugs, questions, or permission to fork it into something of your own — all of it reaches the same inbox.

There is one person here. No team, no support desk, no ticket number. A reply might take a day or two, and it will be from me.

huh?
00:00about the name
Download