{"slug": "voice-to-code-100-local-whisper-claude-code-zero-octet-au-cloud", "title": "Voice-to-code 100 % local : Whisper + Claude Code, zéro octet au cloud", "summary": "A developer built a fully local voice-to-code pipeline using faster-whisper for transcription and Claude Code's /voice command, ensuring no data leaves the machine. The setup, which runs on CPU with the medium model, achieves about 1.2 seconds latency per phrase on an M2 MacBook, trading cloud speed for privacy.", "body_md": "Coder à la voix avec ChatGPT, ça marche. Le hic tient en une ligne : chaque mot que tu dictes part chez OpenAI. Depuis le 23 juillet 2026, Codex se pilote à la voix — il ouvre une pull request, cherche l'origine d'un bug, tout ça dans une phrase. Pratique pour un side-project. Rédhibitoire quand le code appartient à un client.\n\nOn voulait le même confort sans la fuite. Le résultat est un pipeline 100 % local : **faster-whisper** pour la transcription, **Claude Code** et sa commande `/voice`\n\npour l'agent. Rien ne sort de la machine — ni la voix, ni le contexte, ni le code. Voici la config exacte, la latence qu'on mesure sur un M2, et les deux bugs qui nous ont coûté une demi-journée.\n\nParce que « coder à la voix » cache deux choses qu'on confond tout le temps. Le mode vocal de ChatGPT est fait pour *converser* : il répond, il temporise, il reformule. Dicter du code, c'est l'inverse — tu veux une transcription fidèle et muette, qui ne discute pas, ne reformule pas et n'ajoute rien à ce que tu dis. Deux gestes opposés.\n\nLe vrai stack n'est donc jamais « ChatGPT vocal seul ». C'est un outil de dictée précis d'un côté, un agent de code de l'autre. Codex vocal fait les deux dans le cloud pour 20 €/mois ; un setup local sépare les deux briques et garde tout sur ta machine. Le tour d'horizon complet — prix, outils, cas d'usage — est dans [le guide de référence](https://dev.to/coder-a-la-voix-avec-chatgpt/) ; ici, on reste sur le terrain technique.\n\n`/voice`\n\nDepuis mars 2026, Claude Code embarque un mode vocal. Tu tapes `/voice`\n\ndans le terminal, tu tiens la barre d'espace, tu parles, tu relâches. La transcription passe par un Whisper local, pas par une API distante.\n\n```\n> /voice\n[hold space to talk · release to send]\n```\n\nPour 90 % des cas, ça suffit. Tu dictes une intention, l'agent écrit le code, tu relis. Si tu veux garder la main sur le modèle, la langue et le vocabulaire technique, il faut descendre d'un cran et brancher ta propre transcription.\n\nTrois morceaux : capturer l'audio, le transcrire, l'injecter. On enregistre avec `sox`\n\n, on transcrit avec faster-whisper, on colle le texte dans le prompt de l'agent.\n\n```\nbrew install sox\npip install faster-whisper\n```\n\nEnregistrement à la volée, arrêté au Ctrl-C :\n\n```\nsox -d -q clip.wav\n```\n\nTranscription, en forçant le français :\n\n``` python\nfrom faster_whisper import WhisperModel\n\n# int8 pour tenir sur CPU Apple Silicon (pas de Metal via CTranslate2)\nmodel = WhisperModel(\"medium\", device=\"cpu\", compute_type=\"int8\")\n\nsegments, _ = model.transcribe(\"clip.wav\", language=\"fr\")\nprint(\"\".join(s.text for s in segments))\n```\n\nUn détail qui compte : sur Mac, faster-whisper tourne sur CPU, pas sur le GPU. Le modèle `large-v3`\n\nest le plancher de précision en français, mais il rame ; `medium`\n\nreste le bon compromis. Évite les modèles `distil-*`\n\n, optimisés pour l'anglais. Sur du français, ils inventent. Si tu veux le GPU, whisper.cpp l'exploite via Metal et va plus vite ; on est resté sur faster-whisper pour son API Python, plus simple à scripter et à biaiser.\n\nOn a mesuré le temps entre la fin d'une phrase de 8 secondes et le texte prêt à coller, sur un MacBook M2 16 Go :\n\n| Modèle | Type | Temps | Précision FR |\n|---|---|---|---|\n`medium` |\nint8 | ~1,2 s | correcte |\n`large-v3` |\nint8 | ~3,5 s | meilleure |\n| Codex vocal (cloud) | — | 200-450 ms | excellente |\n\nLe cloud gagne la course de vitesse, sans surprise. Mais 1,2 seconde par phrase ne casse pas un flux de code : tu ne dictes pas à 160 mots/minute en continu, tu réfléchis entre deux instructions. Le vrai coût du local n'est pas la latence, c'est la config initiale.\n\nVoilà le piège que personne ne teste. Dicte « crée une fonction getUserData » à un Whisper réglé en français, et tu récupères ça :\n\n```\ncrée une fonction get user data\n```\n\nTrois mots séparés, en minuscules, avec un point ajouté par le modèle. Multiplie ce raté par chaque `useState`\n\n, chaque `endpoint`\n\n, chaque nom de variable en anglais, et la transcription entière devient inutilisable au moment de la coller. Le réflexe — épeler, ou dicter la syntaxe à la main — tue alors tout le gain de vitesse. Retour à la case départ.\n\nLa bonne réponse tient en deux règles. D'abord, **on ne dicte jamais les identifiants** : on décrit l'intention (« crée une fonction qui récupère les données utilisateur ») et on laisse l'agent nommer. Ensuite, pour les termes inévitables, on biaise le décodeur avec un `initial_prompt`\n\n:\n\n```\nsegments, _ = model.transcribe(\n    \"clip.wav\",\n    language=\"fr\",\n    initial_prompt=\"Termes techniques : useState, getUserData, TypeScript, PostgreSQL, endpoint, refactor.\",\n)\n```\n\nCe prompt ne transcrit rien — il oriente le vocabulaire. Nos noms de variables anglais sont ressortis corrects dès qu'ils y figuraient. C'est le genre de détail qu'on ne trouve dans aucun tuto grand public, parce qu'aucun ne code réellement en français.\n\nAprès une semaine sur ce setup, le verdict est net. La voix excelle pour **prompter** l'agent et **naviguer** ; elle est mauvaise dès qu'il faut de la précision caractère par caractère.\n\n**Ce qui marche :**\n\n**Ce qui casse :**\n\nLa voix change l'interface, pas le métier. Elle déplace la frappe du clavier vers le micro, mais elle ne supprime ni la décision d'architecture, ni le choix des noms, ni la relecture ligne à ligne. L'agent génère, l'ingénieur tranche — et aucun micro ne tranchera à sa place.\n\nPour du code perso, Codex vocal est plus simple et plus rapide — assume juste que ta voix part dans le cloud. Tout dépend de l'enjeu. Pour du code client ou propriétaire, le pipeline local Whisper + `/voice`\n\nest le seul qui garantit que rien ne fuit, au prix d'une latence d'une seconde et d'une soirée de config.\n\nSi tu veux le monter proprement — modèle, vocabulaire, push-to-talk, intégration à ton éditeur — c'est exactement ce qu'on démonte étape par étape dans la [formation Claude Code](https://dev.to/formation-claude-code/). Et pour rester côté outils, on a comparé [Claude Code et Cursor](https://dev.to/claude-code-vs-cursor/) et détaillé le [mode vocal de Claude sur Gmail et l'agenda](https://dev.to/mode-vocal-claude-gmail-agenda/).", "url": "https://wpnews.pro/news/voice-to-code-100-local-whisper-claude-code-zero-octet-au-cloud", "canonical_source": "https://dev.to/hernanz/voice-to-code-100-local-whisper-claude-code-zero-octet-au-cloud-3420", "published_at": "2026-08-09 15:55:38+00:00", "updated_at": "2026-08-09 16:18:44.889389+00:00", "lang": "en", "topics": ["developer-tools", "natural-language-processing", "ai-tools"], "entities": ["faster-whisper", "Claude Code", "OpenAI", "Codex", "Whisper", "Apple Silicon", "M2 MacBook"], "alternates": {"html": "https://wpnews.pro/news/voice-to-code-100-local-whisper-claude-code-zero-octet-au-cloud", "markdown": "https://wpnews.pro/news/voice-to-code-100-local-whisper-claude-code-zero-octet-au-cloud.md", "text": "https://wpnews.pro/news/voice-to-code-100-local-whisper-claude-code-zero-octet-au-cloud.txt", "jsonld": "https://wpnews.pro/news/voice-to-code-100-local-whisper-claude-code-zero-octet-au-cloud.jsonld"}}