Voice-to-code 100 % local : Whisper + Claude Code, zéro octet au cloud 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. 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. On 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 pour 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. Parce 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. Le 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. /voice Depuis mars 2026, Claude Code embarque un mode vocal. Tu tapes /voice dans 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. /voice hold space to talk · release to send Pour 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. Trois morceaux : capturer l'audio, le transcrire, l'injecter. On enregistre avec sox , on transcrit avec faster-whisper, on colle le texte dans le prompt de l'agent. brew install sox pip install faster-whisper Enregistrement à la volée, arrêté au Ctrl-C : sox -d -q clip.wav Transcription, en forçant le français : python from faster whisper import WhisperModel int8 pour tenir sur CPU Apple Silicon pas de Metal via CTranslate2 model = WhisperModel "medium", device="cpu", compute type="int8" segments, = model.transcribe "clip.wav", language="fr" print "".join s.text for s in segments Un détail qui compte : sur Mac, faster-whisper tourne sur CPU, pas sur le GPU. Le modèle large-v3 est le plancher de précision en français, mais il rame ; medium reste le bon compromis. Évite les modèles distil- , 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. On 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 : | Modèle | Type | Temps | Précision FR | |---|---|---|---| medium | int8 | ~1,2 s | correcte | large-v3 | int8 | ~3,5 s | meilleure | | Codex vocal cloud | — | 200-450 ms | excellente | Le 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. Voilà 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 : crée une fonction get user data Trois mots séparés, en minuscules, avec un point ajouté par le modèle. Multiplie ce raté par chaque useState , chaque endpoint , 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. La 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 : segments, = model.transcribe "clip.wav", language="fr", initial prompt="Termes techniques : useState, getUserData, TypeScript, PostgreSQL, endpoint, refactor.", Ce 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. Aprè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. Ce qui marche : Ce qui casse : La 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. Pour 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 est le seul qui garantit que rien ne fuit, au prix d'une latence d'une seconde et d'une soirée de config. Si 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/ .