# v2.45.0 — your words no longer go missing

**Released 2026-10-23.** Upgrade:

```sh
sudo snap refresh yazses     # snap
pipx upgrade yazses          # or: uv tool upgrade yazses
scoop update yazses          # Windows
```

Restart the daemon afterwards (`yazses restart`).

## Windows: dictation that vanished without a word

- **A dictation into an administrator window is no longer lost.** Windows blocks a normal program from
  typing into a window that runs as administrator (Task Manager, an elevated PowerShell, many installers),
  and `SendInput` still reports every key as sent. YazSes now checks, right before typing, whether the
  window in front runs above its own privilege level; if it does, the dictation goes to the clipboard and a
  notification says to paste it with Ctrl+V. The check reads a fact Windows enforces, so it never fires on an
  ordinary window. Checked live on Windows 11 22H2 against an elevated Task Manager and an ordinary window.
- **A crashed daemon is restarted on pip, pipx and uv installs too.** The tray is what restarts it, and
  `yazses start` never launched the tray there: it looked for PySide6, which the Windows tray does not use.
  Measured on Windows 11 22H2: dictation used to stay gone after a crash; now the tray brings it back in
  about 7 seconds. You are also no longer offered a ~268 MB PySide6 download for a tray that never uses it.
- **`scoop update yazses` no longer turns off start-at-login**
  ([#79](https://github.com/MSKazemi/yazses/issues/79)). Watched on Windows 11 22H2: an update kept starting
  at sign-in, and `scoop uninstall` still removes the entry.
- Persian text injection was measured on Windows 11 for the first time: all 19 fixtures, with both typing
  backends, arrived code point for code point ([#517](https://github.com/MSKazemi/yazses/issues/517)).

## Edits that fail now give your words back

Spoken Edit ("change X to Y"), Punch-In and Interruptible Proofreading erase text with backspaces and then
type the new version. If typing failed after the erase, your words were gone, and the next "scratch that"
could delete text from before the dictation. All three now share one recovery rule: YazSes types the erased
words back; if that fails, it puts them on the clipboard and tells you; if that fails too, it suggests the
application's own undo. The undo records follow what is on screen in every outcome. A failed correction now
also names its cause, such as "YazSes is not allowed to type", with one notification for all three features.
Tested with a simulated text field, not on real hardware.

## `yazses status` says what is actually running

- After a fallback, `status` used to name the engine you asked for while another one decoded every word. It
  now prints the checkpoint and engine that came up (`model: base.en (faster-whisper)`) and a `FALLBACK:`
  line naming the engine that did not start and why ([#644](https://github.com/MSKazemi/yazses/issues/644)).
- With the experimental `[stt] idle_unload_s` set, `status` and the tray say whether the speech model is
  loaded and how long it has been idle.
- On macOS, the menu-bar menu gains status lines: state and engine, model memory and the most important
  warning. No one has opened this menu on a Mac yet.

## Send your dictation to an AI app, and connect any MCP client

- **"Send to Claude" (off by default).** Say "send to Claude", "send to Claude Code" or "send to Codex", or run
  `yazses send-to claude|claude-code|codex [TEXT]`, and that desktop app opens a new conversation with the text
  already in its prompt box. YazSes never presses Enter; you read it and send it yourself. It uses the apps'
  own `claude://` and `codex://` links, a fixed list with no web fallback, and the log records the app and a
  character count, never the words ([ADR-031](https://github.com/MSKazemi/yazses/blob/main/design/adr/adr-031-send-to-prefill-handoff.md)).
  Turn it on with `yazses features enable sendto`. It has **not yet been tried against the real Claude or Codex
  apps**, so the pre-fill behaviour is what the vendors document, not something observed here.
- **A one-click MCP bundle.** This is the first release to attach `yazses-2.45.0.mcpb`, an MCP Bundle a desktop
  client can install by double-click. It holds no copy of YazSes: it runs the `yazses mcp-server` you already
  have, so the model, config and microphone permission stay with that install. It is attested and listed in
  `SHA256SUMS.txt` like every other asset. A new guide,
  [Connect YazSes to an MCP client](../how-to/connect-mcp-client.md), covers the bundle and the manual
  config. Not yet tried in a real client.
- `ask_human` stops listening when you stop speaking, instead of holding the microphone for the agent's whole
  wait, and returns no answer without decoding if you say nothing
  ([#640](https://github.com/MSKazemi/yazses/issues/640)). `yazses mcp-server --help` lists the tools the
  server really offers ([#641](https://github.com/MSKazemi/yazses/issues/641)).

## Camera features download OpenCV once

The camera features (gaze, facegesture, headpointer, gesture, handsfree) installed two OpenCV builds that write
the same files. They now install only `opencv-contrib-python`, which mediapipe already requires: about 74 MB
less to download per camera feature on Linux x86_64 (150 MB of packages instead of 224 MB). The tray's Install update from 2.44.0 handles the
switch for you. If you upgrade another way and `yazses doctor` shows a broken **OpenCV** row, run the repair
command it prints, or `pip install --force-reinstall --no-deps opencv-contrib-python`.

## macOS, Linux and experimental features

- **macOS:** spoken "undo", "copy", "paste", "save" and "select all" send Cmd shortcuts instead of Ctrl ones,
  and named keys such as Return and the arrows no longer arrive as the letter "a". Editor command profiles
  follow the focused app on macOS and Windows too. This project has no Mac, so none of this has run on macOS;
  only stand-ins for the system APIs have checked it.
- **The microphone watcher** no longer goes blind while Vocal Morse, the Mouth-Sound Switch or the Vocal
  Joystick keeps a stream open: an unplugged microphone or a Bluetooth headset switch is noticed again. Its
  timings are new `[audio]` settings.
- **Experimental, off by default, untested on real hardware:** the Mouth-Sound Switch works without the
  overlay by announcing each step with earcons or speech (`[mouthswitch] speak_names`), keeps scanning after a
  selection, and leaves a full dwell to click after a spoken name. Vocal Morse ends on the SK prosign. Voice
  Pilot (Linux) re-checks every held click on "confirm", so a click cannot land on a control that changed
  while it waited, and "check" and "uncheck" no longer toggle a box already in the state you asked for.
- **A behaviour change for Predictive Completion (experimental):** only "take it", "accept suggestion" and
  "discard" answer a suggestion now, so a dictated "No." or "Keep it." is typed instead of vanishing. If you
  said "accept", say "take it".
- The Windows Store (MSIX) build no longer reads the desktop-apps microphone switch as a refusal
  ([#653](https://github.com/MSKazemi/yazses/issues/653)). The Store build is not published yet.

## Docs that say only what is true

macOS and Windows are labelled **preview** wherever support is stated, because the
[validation matrix](../validation-matrix.md) has no hardware-verified dictation on either yet; a test removes
the label per OS the day the matrix records it. The feature pages list only what `features enable` turns on,
with the 25 designed-but-unbuilt capabilities in their own section
([#646](https://github.com/MSKazemi/yazses/issues/646)), and `chords` and `gitvoice` no longer tell you to switch
on a key nothing reads. The README reads as one path from what YazSes does to how to contribute. Every CI job
has a time limit ([#537](https://github.com/MSKazemi/yazses/issues/537)), and GitPython is on 3.2.1 (a docs-only
dependency that no install ever contained).

The complete list is in the [changelog](https://github.com/MSKazemi/yazses/blob/main/CHANGELOG.md).
