ワンクリックで
hermes-voice-debugging
Debug TTS silence, voice mode failures, and audio playback issues in Hermes Agent CLI and gateway modes.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Debug TTS silence, voice mode failures, and audio playback issues in Hermes Agent CLI and gateway modes.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | hermes-voice-debugging |
| description | Debug TTS silence, voice mode failures, and audio playback issues in Hermes Agent CLI and gateway modes. |
Diagnostic procedures for when TTS is enabled but users don't hear responses, or voice recording fails silently.
Verify edge-tts works:
edge-tts --voice en-US-JennyNeural --text "Hello world" | mpv --no-video -
If this doesn't play, the issue is system-level (audio server, mpv, permissions).
Verify mpv works:
mpv /path/to/tts_file.mp3 --no-video
Try with --volume=50 flag matching what cli.py uses.
Check if TTS tool generates files:
python3 -c "from tools.tts_tool import text_to_speech_tool; print(text_to_speech_tool('test'))"
voice.auto_tts: true is set in configtext_to_speech_tool() generates audio files successfullympv plays files correctly when called manuallyThe function _cli_speak_response_async(self, text) at cli.py ~line 8576 generates TTS audio and plays it via mpv — but has zero callers in the codebase. It was written but never wired into the response handler.
Verify: grep -cn '_cli_speak_response_async(' cli.py — should return 1 (only definition).
The inline MANDATORY TTS at cli.py ~line 9758 calls TTS + mpv for every response, but both stdout and stderr go to subprocess.DEVNULL. Errors become invisible.
Debug: Temporarily replace subprocess.DEVNULL with subprocess.PIPE and read stderr to spot failures.
The _cli_auto_tts flag was added to the config loader but the response handler may not check it. The flow is:
_cli_auto_tts set in HermesCLI.__init__ from config_voice_speak_response_async checks both _voice_tts AND _cli_auto_tts_voice_speak_response_async at allFix checklist:
self._cli_auto_tts = True in __init__ by grepping for the config load_voice_speak_response_async gets called from the response handlerresponse variable actually has content when TTS would triggerSoundDevice not installed or no audio devices:
python3 -c "import sounddevice as sd; print(sd.query_devices())"
Fix: pip install sounddevice or check pavucontrol is running.
Permissions issue:
audio group: sudo usermod -a -G audio $USERsystemctl --user status pipewire pulseaudioSTT provider not configured:
stt.enabled: true in configfaster-whisper, groq needs GROQ_API_KEY)_cli_speak_response_async (~8576)DEVNULL → invisible failures/tmp/hermes_voice/ or $HERMES_HOME/cache/audio/MEDIA: tags in response textWhen a user reports voice issues, follow this order:
mpv test.mp3 --no-video work? If no → audio system issue.text_to_speech_tool("hello") produce a file? If no → provider/key issue._cli_auto_tts being set? Check init logs. Is it being called? Check grep.DEVNULL with PIPE in MANDATORY TTS block temporarily.voice_compatible flag is True in TTS response.To make _cli_speak_response_async the canonical TTS path, add to the response handler at ~line 9757:
# After MANDATORY TTS block or as its replacement:
if self._cli_auto_tts and response and not use_streaming_tts:
self._cli_speak_response_async(response)
Or, use _voice_speak_response_async instead if voice mode infrastructure is preferred.
tui_gateway/server.py — completely separate from cli.py code paths_voice_tts_enabled() (line ~5488) was ONLY checking HERMES_VOICE_TTS env var — never read voice.auto_tts from config.yamlvoice.auto_tts: true in config.yaml have ZERO effect in TUI mode_voice_tts_enabled() now checks BOTH HERMES_VOICE_TTS env var AND voice.auto_tts from config via _voice_cfg_dict()When a user reports voice issues, follow this order:
mpv test.mp3 --no-video work? If no → audio system issue.text_to_speech_tool("hello") produce a file? If no → provider/key issue._cli_auto_tts being set? Check init logs. Is it being called? Check grep._voice_tts_enabled() reading config? If not, patch it (see TUI section above).DEVNULL with PIPE in MANDATORY TTS block temporarily.voice_compatible flag is True in TTS response.Some users configure Hermes as voice-first: the SOUL.md says "always speak your responses", config has voice.auto_tts: true, and TTS is the primary output channel (headless, CLI, no terminal needed to see responses).
For voice-first users:
_cli_speak_response_async as it's cleaner than inline MANDATORY TTS