Das Problem

Du aktivierst /voice in Claude Code, hältst Leertaste und sprichst — und bekommst entweder gar nichts (no speech detected) oder irgendwelche halluzinierten Wortbrocken zurück. Dein Mikrofon ist nachweislich in Ordnung, Teams oder Zoom funktionieren tadellos.

> /voice
Voice mode enabled. Hold Space to record.

[Space halten, sprechen, Space loslassen]

processing...
no speech detected

TL;DR

Zwei Probleme treffen unter Linux gleichzeitig:

  1. Voice-Mode startet beim ersten Session-Start nicht sauber/voice zweimal toggeln (off → on) als Workaround.
  2. Default-Sprache ist hartcodiert Englisch — wer auf Deutsch spricht, bekommt Halluzinationen. Fix: "language": "de" in ~/.claude/settings.json ergänzen.

Ursache

Workaround 1: Init-Bug bei Session-Start

Mehrere offene GitHub-Issues (#36748, #33378, #30904) beschreiben, dass Voice trotz voiceEnabled: true in den Settings beim Session-Start nicht initialisiert wird. Push-to-Talk reagiert dann gar nicht oder Leertasten werden in den Chat-Buffer geschrieben statt aufgenommen.

Strace zeigt: Claude öffnet in dem Moment gar kein Audio-Device — kein /dev/snd/*, keinen PipeWire-Stream, keinen arecord-Subprozess. Das ist kein Audio-Pipeline-Problem deinerseits, sondern ein Client-Bug.

Workaround 2: Sprach-Default fehlt

Im Claude-Code-Binary findet sich:

let _ = new URLSearchParams({
  encoding: "linear16",
  sample_rate: "16000",
  channels: "1",
  endpointing_ms: "300",
  utterance_end_ms: "1000",
  language: $?.language ?? "en",   // <-- Fallback Englisch
  use_conversation_engine: "true",
  stt_provider: "deepgram-nova3"
});

Ist im Settings-File kein language gesetzt, geht Deepgram Nova 3 mit Englisch ins Rennen. Sprichst du Deutsch, halluziniert das STT-Modell — entweder no speech detected oder bizarre Wortfragmente wie Kleptosy aus deinem Klipp und klar.

Lösung

Schritt 1: Voice initialisieren

Im aktiven Claude-Code-Terminal:

/voice

Output: Voice mode disabled.

/voice

Output: Voice mode enabled. Hold Space to record.

Erst nach dem zweiten Toggle bindet Claude das Push-to-Talk-Listening sauber ein.

Schritt 2: Sprache setzen

Editiere ~/.claude/settings.json und ergänze einen language-Key auf Top-Level:

{
  "voiceEnabled": true,
  "voice": {
    "enabled": true,
    "mode": "hold"
  },
  "language": "de",
  ...
}

Unterstützte Codes (aus dem Binary extrahiert): de, en, en-US, es, fr, it, ja, nl, pl, pt, ru. Ein multi-Modus für gemischtes Deutsch/Englisch existiert leider nicht — man muss sich entscheiden. Für Tech-Anglizismen in deutschem Sprachfluss (Server, Docker, API) ist de aber robust genug.

Schritt 3: Claude Code neu starten oder /voice toggeln

Damit die neue Sprache aktiv wird:

/voice    # off
/voice    # on

Oder Terminal komplett neu öffnen.

Verifikation

Halte Leertaste und sprich "hallo das ist ein test" — der transkribierte Text sollte sauber im Input-Feld auftauchen. Wenn nicht, prüfe:

# 1. Default-Mic im PipeWire-Graph
wpctl status | grep -A 5 "Sources:"

# 2. Quick-Check ob das Default-Mic überhaupt liefert
arecord -d 3 -f S16_LE -c 1 -r 16000 /tmp/t.wav && aplay /tmp/t.wav

Hörst du dich beim aplay nicht: dein OS-Audio-Default-Routing ist kaputt (auf Ubuntu 24.04 z.B. fehlt manchmal pipewire-alsa, dann zeigt ALSA-Default auf das falsche Hardware-Device — typisch der Klinken-Mic-Eingang ohne gestecktes Headset → Stille oder Rauschen).

# Falls pipewire-alsa fehlt:
sudo apt install pipewire-alsa
systemctl --user restart pipewire wireplumber

Hörst du dich aber, und Claude Code macht trotzdem nichts beim /voice-Trigger, liegt es nicht an deinem Audio-Stack — dann ist es der oben beschriebene Init-Bug.

Fazit

Voice-Mode in Claude Code ist auf Linux noch holprig. Die zwei Workarounds (Toggle + language setzen) lösen die häufigsten Symptome. Wer ein gesundes OS-Audio-Setup hat, braucht nichts an PipeWire/ALSA zu reparieren — der Bug ist clientseitig, nicht in deiner Pipeline.

Zur Meta-Lehre: Bei jedem Bug in einem Drittprodukt erst eine Minute Google/GitHub-Issue-Suche, dann debuggen. Eine Stunde an Audio-Konfiguration zu schrauben, weil “klingt plausibel”, ist verschwendete Zeit, wenn Issue-Tracker das Problem schon längst kennen.

Referenzen