YazSes Privacy Statement¶
Last updated: 2026-07-10
YazSes is designed from the ground up to keep your voice and text on your device. By default, no audio, transcripts, editor context, or usage data ever leave your machine. There is no cloud dependency, no telemetry, and no account. Everything below describes local behaviour; the only outbound path is the SSH remote feature you turn on yourself, and even then only the final typed text is sent.
Audio¶
Audio is captured from your microphone only while you hold the hold-to-talk key (or squeeze a connected EMG device). It is held in a short in-memory buffer, fed directly to the on-device transcription model, and then discarded. Because YazSes is push-to-talk, nothing is recorded while the key is up. Audio is never written to disk, never logged, and never transmitted anywhere — unless you explicitly opt in to the learning corpus (below) with audio capture enabled.
Transcription (speech-to-text)¶
Transcription runs entirely on your device using faster-whisper (CPU, int8; no GPU required). The model weights are downloaded once to ~/.local/share/yazses/ (Linux), ~/Library/Application Support/yazses/ (macOS), or %APPDATA%\yazses\ (Windows) and run offline thereafter. The resulting transcript is held in memory only long enough to inject the text (and, if commands are enabled, to check whether you spoke a command). It is not written to any log file and is not transmitted anywhere.
The diagnostic log (yazses logs) records metadata only — timing and state, never your dictated text.
The learning corpus (opt-in, off by default)¶
YazSes can improve its accuracy for your voice over time, but only if you opt in. The [learning] feature is disabled by default; when it is off, nothing is captured.
When you enable it (yazses features enable learning), the daemon records one event per hold-release into a machine-bound, encrypted local corpus at ~/.local/share/yazses/corpus.db (with audio clips under clips/). The transcript text and any stored audio are encrypted with AES-256-GCM using a key derived from your machine — there is no passphrase to remember and no cloud backup. Only coarse metadata is kept in the clear. Capture happens on a background thread and nothing is ever uploaded.
You stay in control of the corpus:
| Action | How |
|---|---|
| Never capture anything | Leave [learning] disabled (the default) |
| Turn capture off again | yazses features disable learning |
| Store text but not audio | Set capture_audio = false under [learning] |
| Auto-expire old events | retention_days / max_corpus_mb under [learning] |
| Inspect what is stored | yazses corpus status |
| Erase everything | yazses corpus destroy (or delete corpus.db) |
The recall and scratch note features read from this same local corpus and never leave the machine.
Configuration file¶
YazSes reads a TOML configuration file at startup:
| Platform | Path |
|---|---|
| Linux | ~/.config/yazses/config.toml |
| macOS | ~/Library/Application Support/yazses/config.toml |
| Windows | %APPDATA%\yazses\config.toml |
It holds your preferences (hotkey, microphone device, model selection, optional EMG port, feature toggles, and so on). It is read locally and never transmitted anywhere.
IPC (inter-process communication)¶
The daemon communicates with the CLI and tray through a local, host-only channel: a Unix domain socket on Linux/macOS, a named pipe on Windows. YazSes does not open a network port or listen on any external interface for this.
Editor context (optional)¶
When the LSP editor-context feature is enabled (lsp_enabled = true under [commands]; off by default), YazSes reads the active file path, language, and cursor line from your editor and uses them only as a prefix to the transcription prompt, so code identifiers from your current file are recognised. This context is never transmitted outside your device and is discarded after each transcription.
On-device language models (optional)¶
Two optional features use a local language model, loaded from a model file on your disk via llama-cpp-python. Both run entirely on-device — there is no cloud LLM, no OpenAI/Azure backend, and no HTTP API call:
- SLM intent router (
[commands] slm_model_path) — a small local model that resolves a spoken command when the fast regex grammar is unsure. - Offline dictation cleanup (
[filters.disfluency] llm_enabled) — a local model that lightly reformats dictation. Off by default.
If you do not configure a model path, neither feature is active and no model runs.
Remote mode (yazses remote <host>)¶
Remote mode lets you dictate into an application on another machine you control. Your speech is still captured and transcribed locally — only the final typed text is forwarded over an SSH tunnel to the remote host, where yazses-agent injects it. Your audio never leaves your machine. The target host is always specified by you on the command line; YazSes never connects anywhere automatically. Ensure you trust and control the remote host before using this feature.
What leaves your device¶
| Data | Default (local-only) | Remote mode (yazses remote) |
|---|---|---|
| Audio | Stays on device | Stays on device (never forwarded) |
| Transcript / typed text | Stays on device | Final text forwarded over SSH to your host |
| Editor context | Stays on device | Not forwarded |
| Learning corpus | Stays on device | Not forwarded |
| Telemetry / usage stats | Never collected | Never collected |
In the default configuration, nothing leaves your device.
Telemetry, analytics, and updates¶
YazSes collects no telemetry, no usage analytics, and no crash reports, and makes no automatic outbound connections. Update checks are a manual, explicit action (yazses update); YazSes does not phone home on its own.
Third-party dependencies¶
YazSes builds on open-source libraries — faster-whisper, sounddevice, and (optionally) llama-cpp-python, among others — all of which run on your device. You can audit them through the project's dependency manifest (pyproject.toml).
Your rights and controls¶
| Action | How |
|---|---|
| Disable the learning corpus | Leave [learning] off (default), or yazses features disable learning |
| Erase all captured data | yazses corpus destroy (or delete corpus.db) |
| Disable editor context | Set lsp_enabled = false under [commands] (the default) |
| Disable the offline cleanup LLM | Set llm_enabled = false under [filters.disfluency] (the default) |
| Inspect stored data | yazses corpus status |
Because all data is stored locally and no account is required, there is no server-side data to request deletion of. You have full control over every file YazSes writes.
Contact¶
YazSes is an open-source project. If you find a privacy concern or a discrepancy between this statement and the software's actual behaviour, please open an issue on the project's GitHub repository so it can be investigated and corrected.