Taurus 0.4.0 — Voice, Markdown preview & security hardening
What's new in 0.4.0
The voice release — and the release where Taurus grew up on security. A full code review of the codebase produced sixteen tracked issues (#68–#83); everything actionable landed here.
🎙 Voice: your agents talk, you talk back
- Text-to-speech — Taurus can announce "<session> is ready" the moment an agent in a background tab finishes, using Windows-native voices (WinRT natural voices incl. e.g. Dutch Frank, with classic SAPI as backup). Right-click a tab to have the selected terminal text read aloud. Voice and speaking rate are configurable; everything runs offline. (#65)
- Speech-to-text — hold F9 (or click the mic above the DROPZONE) and dictate straight into the active terminal. Recognition runs fully local via a sherpa-onnx sidecar with NVIDIA's Parakeet v3 model (EN + European languages, incl. Dutch): a one-click download in Settings → Voice, no cloud, no account. Live mic level on the record button; optional auto-send with Enter. (#66)
- Model downloads are now SHA-256-verified before extraction — the engine is an executable, so archives must match a pinned checksum. (#69)
📝 Markdown preview
.mdfiles render inline in the preview pane — escape-first, so raw HTML inside a Markdown file can never execute — with a raw/rendered toggle. Click any.md/.htmlpath an agent prints to open it. (#61)
🧭 UX
- Settings reorganized into tabs (General / Theme / HTML preview / Terminal / Voice) with an explanation panel that follows your mouse — every setting now tells you what it does. (#58)
- Compact sidebar cards — the drive tag
(C:)/(X:)sits after the agent name, so more agents fit on screen. - The default UI language now follows your OS locale (Dutch system → Dutch UI, everything else → English); a saved choice always wins. (#46)
🚀 Launching
- npm-installed Claude Code now works out of the box. If
PATHonly has theclaude.cmdshim (noclaude.exe), Taurus launches it viacmd.exe /cautomatically — native installs keep winning when both exist. (#40) - The per-project command override understands double quotes, so programs under
C:\Program Files\...launch too. (#76)
🔒 Security hardening
- A strict Content-Security-Policy now guards the main window: remote scripts, object embedding and form posts are blocked, while the sandboxed HTML preview keeps working. Verified end-to-end with WebView2 remote-debugging probes. (#68)
- Dropper refuses to move/copy a folder into itself (previously: runaway recursion until the disk filled up). (#70)
- Branding theme values are sanitized consistently (no
;injection). (#78)
🛠 Robustness & performance
- No more orphaned processes. Every agent runs inside a Windows Job Object with kill-on-close: closing a tab, restarting, quitting — or even Taurus crashing — now cleans up the entire process tree, including MCP servers the agent spawned. (#77)
- A restart can no longer be falsely marked "session ended" by a late exit event from the killed process (generation counter on all pty events). (#71)
- Terminal output travels as base64 instead of JSON byte arrays — roughly 3–4× smaller IPC payloads on the hottest path in the app. (#73)
- The 2 MB preview cap is enforced before reading the file, not after shipping it over IPC. (#72)
- A corrupt
projects.json/sessions.jsonis backed up to a timestamped.invalid-*file instead of being silently replaced by an empty list on the next save. (#74) - Microphone failures surface immediately when you start dictating (#75); F9 is only claimed system-wide when STT is actually installed (#79); temp WAV files get unique names and are cleaned up (#80).
- First unit tests landed for the pure Rust helpers — 11 tests covering base64, command parsing, session-path encoding, flag mapping, checksum verification and more. (#82)
📥 Download (Windows x64)
- Installer:
Taurus_0.4.0_x64-setup.exe - MSI:
Taurus_0.4.0_x64_en-US.msi - Portable (no install):
Taurus_0.4.0_x64_portable.exe
White-label note: rebrand Taurus without touching code — drop a branding.json (name, logo, colours, skin, font) next to the exe or in %APPDATA%\Taurus\. See the README.