Skip to content

Set a tone per application

App profiles let you configure the tone of your dictated text depending on which application you are speaking into — casual in a chat window, formal in an email client, verbatim in a terminal. Like everything else in YazSes, it runs entirely offline.

Examples

You configure it in your config.toml file under the [profiles.app] section. You can match the window class using standard wildcard (*) patterns.

1. Casual Chat

When speaking into Discord or Slack, you might want the LLM to rewrite your text in a more casual, friendly tone.

[profiles.app]
"*discord*" = "casual"
"*slack*" = "casual"

2. Formal Emails

For an email client like Thunderbird or Outlook, or a professional word processor, you can enforce a formal tone.

[profiles.app]
"*thunderbird*" = "formal"
"*outlook*" = "formal"
"*winword*" = "formal"

3. Verbatim Mode for Terminals

For IDEs and terminals where you want dictation inserted exactly as heard with no formatting, you can use the verbatim mode. This bypasses all text formatting passes.

[profiles.app]
"*term*" = "verbatim"
"*code*" = "verbatim"
"*alacritty*" = "verbatim"

4. Custom Prompts

You can also supply your own custom LLM prompt directly in the configuration.

[profiles.app]
"*obsidian*" = "Format as a bulleted markdown list with short actionable items."

How It Works

When you stop holding the dictation key, YazSes resolves the window you are focused on and checks for a match. If [filters.disfluency] llm_enabled = true is set, YazSes will then run the rewrite pass using the specific tone you have configured. If verbatim is chosen, the engine skips any processing entirely. Unknown apps get the standard cleaning pass if enabled.


When the application rewrites what you dictated

A profile changes what YazSes sends. It cannot change what the application does with it after it arrives — and some applications rewrite it.

The clearest case, measured by injecting into a live window and reading the document back:

dictated kubectl get pods --namespace prod
arrived in LibreOffice Writer Kubectl get pods –namespace prod

Two of Writer's own defaults did that. AutoCapitalise made kubectl into Kubectl, a different command. AutoCorrect replaced the double hyphen with an en dash, so --namespace became –namespace — which no program accepts, and which is nearly invisible when you read it back.

No YazSes setting prevents this, because it happens inside the application. Turn the features off there:

Tools → AutoCorrect Options → Options       [ ] Capitalize first letter of every sentence
Tools → AutoCorrect Options → Localized     [ ] Replace dashes

How to tell whether your app does this: dictate --namespace and look closely at the dash, then dictate a lowercase command name at the start of a line. Word processors and chat clients are the usual offenders; terminals, code editors and browsers were verified not to touch the text at all (kitty, Alacritty, Konsole, GNOME Terminal, tmux, Neovim, Emacs, Sublime Text, VS Code, Zed, Firefox, Thunderbird, Obsidian).

When nothing arrives at all

A separate failure, and one that is easy to misread as YazSes being broken: the text is sent correctly and something in front of the window absorbs it.

  • A modal dialog. VS Code's first run opens on "Sign in to use GitHub Copilot"; every keystroke goes to the dialog and nothing appears in the editor. There is no error, in the log or on screen. Dismiss it once.
  • The wrong text field. VS Code's Chat panel, Thunderbird's subject line and a browser's address bar are all genuinely editable, so the "no text target" guard passes — it can only tell you whether a text target has focus, never whether it is the one you meant. Click where you want the words before holding the key.

Both were found by measurement, not from reports: an earlier version of this project's own test harness recorded "Electron never receives a keystroke" for exactly the first reason. It receives them fine.