Stenograf is a desktop application now. Bare steno in a terminal opens the
Qt window, as do the app icon on macOS, the Start-menu entry on Windows and the
application-menu entry on Linux. The terminal UI is gone: one real UI, and one
thin line-oriented CLI for scripts and SSH.
Upgrade with uv tool install --upgrade stenograf, or re-run the install
one-liner. steno setup retires the old terminal launcher on its own.
Breaking changes
- The Textual terminal UI is removed. Every screen it had exists in the
desktop app.steno start,steno transcribeand the other subcommands
still work exactly as before and now always stream plain lines, which is what
headless and SSH use should use.--plainis accepted and does nothing. - PySide6 is a base dependency, which raises the install floor on Linux:
glibc 2.34 on x86_64, glibc 2.39 on arm64, and no musl (Alpine) — Qt ships no
wheels for those. If you are on one of them, stay on 0.4.0. macOS and Windows
are unaffected. The download is about 110 MB larger. - Notes are generated as markdown against a template instead of as JSON.
The template is now the schema, so a protocol layout can vary per meeting and
per language. Consequences:transcript.notes.jsonis no longer written, and a stale one from an
earlier version is removed when notes are regenerated.- Action items are no longer grouped by owner in the vault note; they
appear as the model wrote them. - The vault note gains the Highlights section and inline
[h:mm:ss]
timestamps, both of which it used to drop. - A meeting with no decisions now gets an empty
## Decisionsheading rather
than no heading at all, because the template asks the model for every
section. Empty sections are reported as warnings.
New
- Meeting presets. A recurring kind of meeting becomes one named section in
settings.toml—[meetings.controlling]— carrying its title, language,
vocabulary, notes backend, template and instructions, and selected per run
with--preset controllingonstart,transcribeandnotes.steno presetslists what is defined. A preset's vocabulary reaches decode-time
biasing, so it changes the transcript, not only the notes. - Per-run notes setup without editing settings.toml:
--notes-backend,
--notes-modeland--instructions FILEonsteno startandsteno transcribe, plus--instructionsonsteno notes. - A menu-bar / tray mode. Closing the window keeps a running meeting alive
and leaves the icon in the menu bar;steno --gui --traystarts with no
window at all. Quitting mid-meeting waits for the transcript to finalize and
says so. - The notes command backend gets its position, not its payload: it runs in
the meeting folder withSTENOGRAF_MEETING_DIRandSTENOGRAF_OUTPUT_HOME
set, so an agentic CLI can fetch whatever context its instructions point at.
Fixed
- Clipped word onsets. A word belonged to the window containing its
midpoint, so the leading word of an utterance the VAD noticed late was
dropped even though it had already been decoded — "Eine Frage habe ich noch"
arrived as "Habe ich noch". Measured across six meetings: +147 words per
61 000, 133 added regions, one removed. Purely additive. - Echo cancellation on Windows was effectively dead. WASAPI's loopback tap
is the slower transport and both channels were stamped on arrival, so the
canceller was handed a reference labelled after its own echo, and its delay
estimator only searches backwards. 2.6 dB → 13.7 dB ERLE, and two lines of
far-end speech attributed to the local speaker → none. - The notes input budget ignored the system prompt, so a large
instructions file silently overran the declared ceiling on every call. It is
now charged against the budget, and too little remaining room is a loud error
naming the instructions file rather than a silent overrun. - Windows launcher identity. The Start-menu and Desktop entries are real
shortcuts now, and the app sets its AppUserModelID, so a finish notification
arrives as a toast titled Stenograf rather than pythonw.exe. - Closing the desktop window no longer waits out a notes run that can take
half an hour; the transcript is already saved andsteno notes --last
regenerates. steno settings showwas missing two rows it claimed to print:
[asr] boostand[output] record_audio— the latter being the setting that
decides whether raw audio is kept on disk.
Known gaps
- The markdown notes path has been exercised on macOS (mlx) and on the command
backend, but not yet against Ollama, which is the notes default on Linux
and Windows. A notes failure is non-fatal and self-labelling — the transcript
is written first andsteno notesretries — but if you generate notes
through Ollama, this release is where that path is new. - Linux echo cancellation may have the same arrival-timestamp misalignment that
was just fixed on Windows. It is unmeasured; the AEC numbers in the docs are
all macOS.
Full changelog: v0.4.0...v0.5.0