Configuration
continuous_voice_enabled isn’t optional here even though it’s a separate key: the wake-word detector only fires, it doesn’t itself transcribe anything — the handoff to STT described below only happens when continuous listening is also enabled. Leaving it at its default (false) with only wake_word set produces a detector that logs a detection and does nothing else, with no error to indicate why.
Built-in wake words
Custom wake word
You can train a custom wake word model using OpenWakeWord’s training tools:- Record 50–200 samples of your phrase.
- Train with
openwakeword train. - Place the
.tflitemodel file in~/.neuralcleave/wakewords/. - Set
wake_word_model_path = "~/.neuralcleave/wakewords/my_phrase.tflite"(takes precedence overwake_word). Keepwake_wordset to any non-empty value too — it gates whether the detector is created at all.
Status indicators
In the chat toolbar, theVoiceStatusIndicator shows an amber Wake badge when the detector is active. The /voice dashboard page shows a larger animated indicator.
Tuning sensitivity
wake_word_threshold controls the detection threshold (0.0–1.0):
- Lower (e.g. 0.3): more responsive, more false positives
- Higher (e.g. 0.7): fewer false positives, may miss softer speech
0.5 and adjust based on your environment noise level.
Handoff
Requirescontinuous_voice_enabled = true (see Configuration above) — without it, this handoff never happens.
When the wake word is detected:
- The detector hands off to the VAD (Voice Activity Detection) layer.
- VAD waits for a full utterance (silence after speech).
- The audio chunk is passed to the STT backend.
- The transcript enters the NeuralCleave pipeline.
- The TTS reply plays back through the output device.
handoffActive flag is visible in the /voice dashboard during a handoff.