Skip to content

Dictating code and technical vocabulary

Speech models are trained on speech, and nobody says kubectl in a podcast. Out of the box you will get "cube control", "cooper netties" and prose punctuation in a file that wanted symbols. All four fixes are one command each.

Everything here is local. Nothing on this page sends a word anywhere.

1. Teach it your words — yazses vocab

This is the highest-value thing you can do, and it takes seconds:

yazses vocab add kubectl
yazses vocab add Kubernetes
yazses vocab add PostgreSQL
yazses vocab list
yazses restart

The list lives at ~/.config/yazses/vocabulary.txt, one term per line, and is merged into the recogniser's prompt on every burst. Add colleagues' names, your repository names, library names, and any identifier you say often.

A larger model will not do this for you. small.en cuts the overall error rate by about a third and costs three times the latency (the numbers) — and it still has never heard of your internal service. The dictionary is free and targets exactly the words you care about.

2. Repair what it still mishears — [stt] vocab_correction

Priming helps; it is not perfect, and with [stt] engine = "parakeet" or "moonshine" it does nothing at all, because initial_prompt is a Whisper-only concept. Correction closes that gap after decoding:

[stt]
vocab_correction = true
yazses restart

Now "deploy to cooper netties" becomes "deploy to Kubernetes" — matched phonetically against your dictionary, including when the recogniser split one word into two.

It is off by default because it rewrites transcribed text, and it is deliberately cautious about when it fires:

  • a word that differs only in case is left alone, so yazses doctor in a terminal is never "corrected" into YazSes doctor;
  • short words are never touched — there is not enough signal in three letters;
  • ordinary words are not glued together to reach a term, so "from this" cannot become "Prometheus";
  • possessives keep their 's.

Every substitution is written to the log, so you can see what it changed:

yazses logs | grep "Vocabulary correction"

3. Get the punctuation you meant

Prose dictation adds commas and full stops. Code wants symbols, and you want to say them:

[commands]
voice_punctuation = true

Then "def sync open paren self close paren colon" arrives as def sync(self):. It is off by default because these words occur in ordinary speech — turn it on for coding, leave it off for prose. The full word list is in the configuration reference.

4. Prime one-off context — [stt] initial_prompt

For a session spent in one codebase, seed the vocabulary of that codebase:

[stt]
initial_prompt = "We are editing a Rust crate using tokio, serde and axum."

This biases recognition toward those words without adding them permanently to your dictionary. Whisper only — Parakeet and Moonshine ignore it, which is what step 2 is for.

What "working" looks like

Say: "run kubectl get pods in the yazses namespace"

Setting What you get
Nothing configured run cube control get pods in the yes says namespace
After yazses vocab add kubectl (+ the app name is built in) run kubectl get pods in the yazses namespace

Check your own setup rather than trusting the table:

yazses doctor          # model, vocabulary size, engine, injector
yazses vocab list      # the words it is priming

If a word is still wrong after adding it, that is worth reporting — include the word, what you heard back, and your [stt] model, and leave out anything private.

Applies to

YazSes 2.18+, all platforms. vocab_correction needs no extra dependency; voice_punctuation needs none either. Neither requires a specific engine.