voice--v0.0.3
This release brings full macOS compatibility: the entire setup flow — pairing, TLS cert pinning, and project-local state isolation — now works on macOS without manual workarounds. Both platforms also gain a new trigger-beep feature.
Changed
- compatibility: macOS support —
voice-dispatcherand/voice:configureare now fully tested and supported on macOS; pairing, cert-pinning, and state-isolation all work out of the box.
Added
- dispatcher: trigger beep — plays the OS notification sound immediately when a trigger phrase is matched, giving the operator an instant "got it" cue before TTS begins. Uses
afplayon macOS,pw-play/paplayon Linux, and a synthesized 880 Hz tone via sounddevice as a universal fallback. Enabled by default; disable withnotifications.trigger_beep: falseinconfig.yaml.
Fixed
- plugin: configure macOS PEM fix — decode and verify the pairing string in a single
buncommand so the cert check never hand-parses the PEM, eliminating the spurious "pem has lines of non-standard length" error on macOS. - plugin: project-local state dir —
/voice:configurenow pinsVOICE_STATE_DIRto<project>/.claude/channels/voicein the project'ssettings.local.json, automatically isolating each project's token and gitignoring the state dir so the token can't be committed by accident. - plugin: error hardening — a malformed pairing-string paste now emits a clean
ERRORline (no stack trace); the status skill and README explain the "works but shows not configured" case for installs that predate project-local state dirs.
Upgrade Instructions
Upgrade both dispatcher and plugin together. No re-pairing is required.
To gain per-project token isolation, re-run /voice:configure in each project — it will write a fresh settings.local.json entry pointing to a project-local state dir. Existing setups that skip this continue to work from the old global state dir.