Voice transcript not injected into input field on Linux/WSL2
Bug Description
Voice mode (/voice) successfully captures audio and transcribes speech, but the transcribed text never appears in the input field. The debug log confirms the full pipeline works up to injection, then nothing happens in the UI.
Environment
- Claude Code version: 2.1.83
- OS: Ubuntu 24.04 on WSL2 (Windows 11, kernel 6.6.87.2-microsoft-standard-WSL2)
- Terminal: Windows Terminal (tested both inside and outside tmux)
- Audio setup: Logitech BRIO webcam microphone via USB/IP passthrough (usbipd-win), ALSA native capture via
audio-capture-napi - STT provider: Deepgram Nova 3
- Language: Dutch (
nl)
Steps to Reproduce
- Enable voice:
/voice→ "Voice mode enabled. Hold Space to record." - Hold Space, speak a sentence in Dutch, release Space
- Debug log shows successful transcription and injection
- Expected: Transcribed text appears in the input field
- Actual: Nothing appears — input field remains empty
Debug Log Evidence
The full pipeline works correctly up to the injection point:
[voice] startRecording called, platform=linux
[voice] audio-capture-napi loaded in 9ms
[voice_stream] Connecting to wss://api.anthropic.com/api/ws/speech_to_text/voice_stream?encoding=linear16&sample_rate=16000&channels=1&...&language=nl&stt_provider=deepgram-nova3
[voice_stream] WebSocket connected
[voice_stream] Sending audio chunk: 960 bytes
... (many audio chunks sent successfully)
[voice_stream] TranscriptText: "Goed, daar gaan we weer. Nu wordt het dan een nieuw debug-drie logo..."
[voice] onTranscript: isFinal=true text="Goed, daar gaan we weer..."
[voice] Accumulated final transcript: "Goed, daar gaan we weer..."
[voice] Final transcript assembled (182 chars): "Goed, daar gaan we weer..."
[voice] Injecting transcript (182 chars)
After "Injecting transcript", no further action occurs — no text in input field, no API call, no error. The session returns to idle.
What I've Ruled Out
- tmux rendering: Tested with
unset TMUX; TERM=xterm-256color—insideTmux=false,isInProcessEnabled: true— same result - Audio capture: Native ALSA capture works perfectly, strong signal levels (RMS 0.18, max 0.99)
- STT service: Deepgram Nova 3 returns accurate Dutch transcriptions every time
- Short press: Tested with 5-10 second holds, 100+ character transcripts — same result
- Pressing Enter after release: No submission occurs, confirming text was not placed in the input field
Additional Context
This was tested across 4 separate debug sessions with consistent results. The voice pipeline (audio capture → WebSocket → STT → transcript assembly) is fully functional. The failure point is specifically at the UI text injection step after "Injecting transcript (N chars)".
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗