Voice transcript not injected into input field on Linux/WSL2

Resolved 💬 3 comments Opened Mar 25, 2026 by wpet Closed Mar 29, 2026

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

  1. Enable voice: /voice → "Voice mode enabled. Hold Space to record."
  2. Hold Space, speak a sentence in Dutch, release Space
  3. Debug log shows successful transcription and injection
  4. Expected: Transcribed text appears in the input field
  5. 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-256colorinsideTmux=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)".

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗