Repository navigation
Release v9.0.0
Added
conch(action="heartbeat")now reportsgrantedandclaim_window_remaining, so a
queued remote agent sees its grant without an extrastatuscall. (VM-2078)voicemode service install mlx-audiowarns when the espeak-ng data path is 160+
characters, which crashes the server on the first Kokoro request. (VM-2338)
Changed
- Voice names resolve completely or fail: a
voice=(or aVOICEMODE_VOICESdefault)
the resolver cannot place is now an error naming the cause, not silent Alloy. See
Migration. (VM-1901) - The
conversetool description is cut from ~2,400 to ~190 tokens; the MCP connect
cost of the default tool set falls from ~4,400 to ~2,170 tokens. (VM-2442) listen_duration_maxis unset in theconverseschema by default, so your
VOICEMODE_DEFAULT_LISTEN_DURATIONsets the listening ceiling. (VM-2442)- The transcript echo (
ASSISTANT/USER (voicemode)blockquotes) is gone from the tool
description and the skill; the Talk app already shows the conversation. (VM-2442) - One VoiceMode skill:
converse,impressionsandvoicemode-djare folded into
voicemode, with the detail in its references. (VM-2442) - STT on mlx-audio needs no model setting: with
VOICEMODE_STT_MODELunset it is sent
mlx-community/whisper-large-v3-turbo-asr-4bitinstead ofwhisper-1. (VM-2342) - With
VOICEMODE_WHISPER_LANGUAGE=auto, mlx-audio is sent nolanguageand detects
it; whisper.cpp still getsauto. (VM-2342) - STT 4xx get their own
listen_and_transcribeerror_kindandask_turnsstop reason:
stt_model_not_found(HTTP 404) andstt_request_rejected(other 4xx). (VM-2342) - mlx-audio STT no longer drops whisper's
""/"."/"..."silence segments (the
old patch did); default whisper.cpp installs are unaffected. (VM-2338) - mlx-audio answers clients that omit
response_formatwith ndjson, not json;
converseandimpressionsalways send it. (VM-2338, VM-2346) - The mlx-audio install result has a
warningslist in place of itspatchkey.
(VM-2338)
Removed
converse(conch_mode=...)andVOICEMODE_CONCH_MODE: callback mode never delivered
its turn and could wedge the conch queue. See Migration. (VM-2078)timeoutfrom theconverseMCP schema (no effect since LiveKit left); passing it
is now a validation error. The CLI keeps it. See Migration. (VM-2442)- VoiceMode Connect docs and the
voicemode-connectskill: the product was abandoned.
voicemode connect authstays for now; its removal is VM-2314. (VM-2290) - The bundled mlx-audio
server.pypatch: upstream servesresponse_formatnatively
since 0.4.4. (VM-2338)
Fixed
- All 67 Kokoro voices work in
converseagain, not just a 7-name whitelist; a voice
no configured endpoint serves still fails loudly. (VM-2190) voicemode service install mlx-audioinstalls current mlx-audio again: the pin is
nowmlx-audio>=0.5.7,<0.6(was>=0.4.3,<0.4.4). (VM-2338)- STT: an HTTP 4xx is no longer reported as "STT service connection failed"; a 404
names the model and endpoint and points atVOICEMODE_STT_MODELS. (VM-2342) - Impressions voice-profile transcription asks the STT server for JSON, so it works on
mlx-audio 0.4.4 and later. (VM-2346) - The docs no longer tell assistants to pass their own listening limit, which silently
overrode yourVOICEMODE_DEFAULT_LISTEN_DURATIONand cut you off. (VM-2099) - The parameter reference is one document for assistants and the docs site, and
listen_duration_max/listen_duration_minhave real descriptions. (VM-2099) - A silent
converse(hold_conch=true)no longer holds the channel indefinitely: the
hold is kept only when the turn spoke. (VM-2045) - Every conch grant is covered by the
VOICEMODE_CONCH_GRANT_TTLself-heal, so an
unclaimed grant can no longer wedge the queue. (VM-2078) conch give/summonto a session not in the queue grants only on a confirmed
nudge; otherwise it returnsgranted: falseand the operator relays. (VM-2078)- A grant issued mid-turn is no longer evicted as wedged before the floor frees;
remote grantees get a heartbeat-scaled claim window. (VM-2078) - The provider registry no longer advertises
tts-1for mlx-audio, and selection
never sends a model id the provider cannot load. (VM-2156) - Three dead voicemode.dev links in the
voicemode://docs/parametersresource now
point at the docs on GitHub. (VM-2290) - Contributors:
pytestcan no longer reach the real microphone or speakers;
pytest -m audioruns muted. Seedocs/reference/audio-test-isolation.md. (VM-2072) VOICEMODE_TEST_AUDIO_GUARD=offlifts the test audio guard. Tool-call soundfonts
(VOICEMODE_SOUNDFONTS_ENABLED, on by default) are separate and unchanged. (VM-2072)
Security
- Cleared 67/67 Dependabot and 17/17 CodeQL alerts. The
uv.lockrefresh pins dev and
CI only; apiporuvxinstall resolves its own dependency versions. (VM-2484) - Provider URLs are matched by parsed hostname, not substring, and the whisper.cpp
temp WAV is created withmkstemp. (VM-2484) scripts/conversation_browser.pyserves/audio/only from inside AUDIO_DIR, and
Flask debug is off unlessVOICEMODE_BROWSER_DEBUG=1. (VM-2484)
Migration
- Stop passing
conch_modetoconverse. To avoid blocking your turn, run a
wait_for_conch=trueconversecall in the background. (VM-2078) - Delete
VOICEMODE_CONCH_MODEfrom~/.voicemode/voicemode.env; it has no effect.
(VM-2078) - Replace
conch(action="callback")withaction="queue";"callback"now returns
an error naming"queue". (VM-2078) - To queue past the 25 s
conch(action="wait")cap, useaction="queue"plus a
periodicaction="heartbeat". (VM-2078) - MCP callers: stop passing
timeouttoconverse; it is now a validation error.
(VM-2442) - If
conversenow fails with a voice-resolution error, fix the name it points at:
qualifygroup/member, declaredefault:in the group'svoice.md, or add
default.wav. For undeclared groups only,VOICEMODE_CAST_UNDECLARED_SEVERITY=warn
makes it a warning (the group's first member speaks) for one release. (VM-1901)
Installation
Quick Start (Recommended)
# Install UV package manager (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install VoiceMode and configure services
uvx voice-mode-install
# Add to Claude Code MCP
claude mcp add --scope user voicemode -- uvx --refresh voice-modeAlternative: Direct Installation
# With UV
uv tool install voice-mode
# With pip
pip install voice-mode==9.0.0For detailed documentation, visit https://getvoicemode.com