Tuto Claude Code

Claude Code qui te répond avec ta voix

Quand Claude a fini d'écrire, il te lit sa réponse à voix haute. Avec la voix de ton choix, la tienne si tu veux. Tout tourne sur ton Mac : pas d'API, pas d'abonnement, et ton forfait Claude n'est pas touché.

Ce qu'il te faut

Compte 15 minutes, dont la moitié pour enregistrer ta voix.

Les commandes des étapes se tapent dans le Terminal, et chaque bloc a un bouton pour copier. Tu n'utilises pas le Terminal ? Laisse faire Claude, juste en dessous.

Sans toucher au Terminal

Claude Code sait lancer les commandes lui-même. Tu peux lui confier toute l'installation.

Colle ce message dans Claude Code :

Installe claude-speaks pour moi en suivant le tuto https://a-foutoyet.github.io/claude-speaks/
Fais les étapes 1 à 4, puis arrête-toi : je vais enregistrer ma voix et te dire où est le fichier.
Ensuite tu feras les étapes 5 à 8. À l'étape 5, montre-moi le texte transcrit pour que je le vérifie.

Claude te demandera d'autoriser chaque commande : c'est normal. Seule exception, Homebrew : s'il n'est pas encore sur ton Mac, installe-le toi-même depuis brew.sh, parce qu'il demande ton mot de passe.

Pour l'enregistrement, fais-le au dictaphone de l'iPhone, envoie-le sur le Mac par AirDrop, et donne à Claude le nom du fichier (il arrive dans Téléchargements). Les conseils de l'étape 5 valent aussi dans ce cas.

1

Installer Python et ffmpeg

Python fait tourner le modèle. ffmpeg convertit ton enregistrement dans le bon format.

brew install python ffmpeg
2

Installer le moteur de voix

Le script, ta voix et un environnement Python à part vont dans un seul dossier, ~/.claude-speaks, lisible par toi seul. Le modèle, lui, ira dans le cache de Hugging Face (~/.cache/huggingface).

mkdir -m 700 -p ~/.claude-speaks && cd ~/.claude-speaks
"$(brew --prefix)/bin/python3" -m venv venv
venv/bin/pip install mlx-audio==0.5.7

Le tuto a été testé avec la version 0.5.7 de mlx-audio.

3

Télécharger les modèles

Deux modèles, téléchargés une seule fois depuis Hugging Face :

  • Qwen3-TTS, qui clone ta voix à partir de quelques secondes d'enregistrement. Le tuto utilise sa version légère : 2,4 Go.
  • Whisper, d'OpenAI, qui écrira pour toi le texte de ton enregistrement à l'étape 5 : 1,6 Go.
cd ~/.claude-speaks
venv/bin/hf download mlx-community/Qwen3-TTS-12Hz-0.6B-Base-bf16
venv/bin/hf download openai/whisper-large-v3-turbo

Compte quelques minutes, selon ta connexion.

4

Récupérer le script

Un seul fichier Python fait le lien entre Claude Code et le modèle. Il garde le modèle en mémoire pour parler vite, et il retire de la réponse ce qui ne se lit pas bien à l'oral.

cd ~/.claude-speaks
curl -fsSLO https://a-foutoyet.github.io/claude-speaks/claude_speaks.py

Tu peux le lire avant : environ 290 lignes commentées, sans aucun appel réseau.

5

Enregistrer ta voix

C'est l'étape qui compte. Le modèle copie tout ce qu'il entend : ton timbre, ton débit, ton énergie, et le bruit de la pièce avec.

  • 10 à 30 secondes, une seule personne qui parle.
  • Une pièce calme et sans écho. Un placard rempli de vêtements vaut mieux qu'un salon vide. Le bruit de fond et la réverbération se clonent avec la voix, et impossible de les retirer ensuite.
  • Parle comme tu veux que Claude parle. Ton débit et ton énergie se retrouveront dans toutes les réponses.
  • Parle dans la langue que Claude utilisera.
  • Ne retouche pas le son. Débruiteur, compresseur et normalisation abîment le timbre, et le clone en hérite. Monter le volume, ça, pas de souci.
  • Le dictaphone de l'iPhone suffit. Envoie-toi le fichier par AirDrop.

Ensuite, convertis l'enregistrement (remplace le chemin par le tien), puis laisse Whisper écrire le texte que tu prononces dedans :

cd ~/.claude-speaks
ffmpeg -y -i ~/Downloads/ma-voix.m4a -ac 1 -ar 24000 voix.wav
venv/bin/python claude_speaks.py transcrire

Le texte s'affiche et part dans voix.txt. Relis-le : il doit coller mot pour mot à ce que tu dis. Pour corriger un mot, ouvre le fichier :

open -e ~/.claude-speaks/voix.txt

Si le texte ne correspond pas à l'enregistrement, la voix se met à inventer des sons ("heu heu", "sh sh") au lieu de lire la réponse. C'est la cause numéro un d'une voix qui déraille : vérifie ce fichier en premier.

Clone uniquement ta voix, ou celle de quelqu'un qui t'a donné son accord.

6

Tester

cd ~/.claude-speaks
venv/bin/python claude_speaks.py say "Salut, c'est Claude. Tu m'entends ?"

La toute première fois, il faut 10 à 20 secondes pour charger le modèle. Ensuite il reste en mémoire et la voix part tout de suite. Si ton enregistrement fait moins de 8 secondes, le script te prévient.

Le script lit en français par défaut. Pour une autre langue, ouvre ~/.claude-speaks/claude_speaks.py et change la ligne LANGUE = "french" (english, german, italian, portuguese, spanish, japanese, korean, russian, chinese).

7

Brancher sur Claude Code

Il reste à ajouter un hook : une commande que Claude Code lance tout seul quand il a fini de répondre. Il se règle dans le fichier ~/.claude/settings.json.

Le plus simple : demande-le à Claude Code lui-même. Colle-lui ce message :

Fais une copie de ~/.claude/settings.json en settings.json.bak, puis ajoute ce hook dans la liste hooks.Stop, sans rien modifier d'autre. Crée la liste si elle n'existe pas :
{"hooks": [{"type": "command", "command": "\"$HOME/.claude-speaks/venv/bin/python\" \"$HOME/.claude-speaks/claude_speaks.py\" hook", "timeout": 10}]}

À la main, si tu préfères : fais une copie du fichier, puis ajoute ce bloc au premier niveau, entre les accolades du fichier. Si tu as déjà une section "hooks", ajoute seulement la partie "Stop" dedans. Et si tu as déjà une liste "Stop", ajoute l'objet à la suite des autres. Si le fichier n'existe pas, crée-le avec ce bloc entouré d'une paire d'accolades { }.

"hooks": {
  "Stop": [
    {
      "hooks": [
        {
          "type": "command",
          "command": "\"$HOME/.claude-speaks/venv/bin/python\" \"$HOME/.claude-speaks/claude_speaks.py\" hook",
          "timeout": 10
        }
      ]
    }
  ]
}

Vérifie que le fichier est toujours valide :

python3 -m json.tool ~/.claude/settings.json > /dev/null && echo "fichier valide"

Relance Claude Code et pose-lui une question. Il lit sa réponse finale, pas les petites notes du genre "je regarde le fichier". Le hook rend la main en moins d'un dixième de seconde : la voix se génère à côté, sans ralentir Claude.

8

Ajouter la commande /talk

Pour couper ou remettre la voix directement dans le chat de Claude Code, sans passer par le Terminal :

mkdir -p ~/.claude/commands
curl -fsSL -o ~/.claude/commands/talk.md https://a-foutoyet.github.io/claude-speaks/talk.md

Relance Claude Code : la commande /talk apparaît quand tu tapes /.

Au quotidien

PourDans Claude CodeDans le Terminal, depuis ~/.claude-speaks
Couper la voix/talk offvenv/bin/python claude_speaks.py off
Remettre la voix/talk onvenv/bin/python claude_speaks.py on
Couper la phrase en cours/talk stopvenv/bin/python claude_speaks.py stop
Libérer la mémoire/talk quittervenv/bin/python claude_speaks.py quitter

Changer de voix : refais l'étape 5 avec un autre enregistrement, puis /talk quitter. La nouvelle voix se charge à la réponse suivante. Tu peux aussi le demander à Claude : "Refais l'étape 5 de claude-speaks avec ~/Downloads/nouvelle-voix.m4a".

Changer de langue : demande à Claude de remplacer LANGUE = "french" par la langue voulue dans ~/.claude-speaks/claude_speaks.py, puis /talk quitter.

Faire mieux sonner Claude

Claude écrit pour un écran. Tu peux lui demander d'écrire pour l'oreille.

Ajoute ces lignes dans ton CLAUDE.md :

## Réponses lues à voix haute
Mes réponses sont lues par une synthèse vocale. Quand c'est possible :
- phrases courtes, une idée par phrase ;
- l'essentiel dans les deux premières phrases ;
- pas d'abréviations (écris "par exemple", pas "ex.") ;
- les nombres importants écrits comme on les dit.

Sans rien demander, le script saute les blocs de code, les tableaux, les adresses web en http, les balises HTML et les emojis. Pour un lien, il lit le texte du lien. Un chemin de fichier écrit entre accents graves (`comme ça`) est sauté, mais un chemin écrit en clair dans une phrase est lu.

Quand la voix déraille sur une réponse, dis-le à Claude. La dernière lecture est gardée dans ~/.claude-speaks/derniere.wav, avec son texte à côté. Par exemple :

La voix a déraillé sur ta dernière réponse. Analyse ~/.claude-speaks/derniere.wav (hauteur de voix, débit, silences) et dis-moi ce qui cloche.

Claude sait mesurer la hauteur de voix, le débit et les silences dans ce fichier. Si la voix invente des sons, vérifie d'abord ton voix.txt : c'est la cause la plus fréquente.

Limites et vie privée

Chiffres mesurés sur un MacBook Pro M5 : premier mot entre 0,3 et 0,5 seconde après la fin de la réponse, démarrage du serveur entre 4 et 18 secondes.

Désinstaller

Retire d'abord le hook de ~/.claude/settings.json (ou demande à Claude de le faire), sinon Claude Code signalera une erreur à chaque réponse. Si tu l'as ajouté, retire aussi le bloc "Réponses lues à voix haute" de ton CLAUDE.md. Ensuite, dans le Terminal (ou demande à Claude de lancer ces commandes) :

pkill -f "claude_speaks.py serve"
rm -f ~/.claude/commands/talk.md
rm -rf ~/.claude-speaks
rm -rf ~/.cache/huggingface/hub/models--mlx-community--Qwen3-TTS-12Hz-0.6B-Base-bf16
rm -rf ~/.cache/huggingface/hub/models--openai--whisper-large-v3-turbo

La copie ~/.claude/settings.json.bak faite à l'étape 7 reste là : supprime-la quand tout va bien.