Comment arrêter les phrases récurrentes de Claude (et pourquoi ça compte)
Ce qui s’est passé. Johanna Larsson a publié un script qui intercepte l’output de Claude Desktop et remplace les phrases récurrentes (« load-bearing », « honest take », « you’re absolutely right ») par des variantes au choix. Le mécanisme utilise le hook MessageDisplay de Claude Desktop : un script Python dans ~/.claude/hooks/ qui lit chaque delta de texte et le réécrit avant qu’il n’arrive à l’écran. La configuration va dans ~/.claude/settings.json. Le post a récolté 378 points et 429 commentaires sur Hacker News.
Pourquoi ça te concerne. Si tu utilises Claude dans des conversations longues, tu reconnais le problème : certaines formules reviennent des dizaines de fois, et après un moment elles distraient. La méthode fonctionne pour neutraliser le symptôme, mais elle dit quelque chose de plus grand : le ton d’un modèle est un choix de design, pas un fait naturel. Les tics linguistiques que tu vois sont le résultat du post-training (comme nous l’expliquions dans le paper sur Constitutional AI), et celui qui les trouve insupportables peut les corriger localement au lieu d’attendre qu’Anthropic les lisse. Sur le plan pratique, le hook est intéressant pour un autre usage : traiter l’output avant qu’il n’arrive à l’utilisateur — par exemple ajouter des timestamps, traduire à la volée, ou archiver une copie.
Si tu veux l’essayer. Le script original est sur jola.dev/posts/how-to-stop-claude-from-saying-load-bearing. Copie le Python dans ~/.claude/hooks/wordswap.sh, le rendre exécutable (chmod +x), et ajoute le bloc JSON dans ~/.claude/settings.json. Ça fonctionne sur macOS, Linux et Windows (avec WSL ou Git Bash). Le script ci-dessus ne remplace pas les phrases dans le code ou le JSON : les substitutions se font sur du texte naturel.
En détail
D’où vient le problème
Les modèles de langage apprennent à écrire en observant des milliards de textes, puis reçoivent un second entraînement (le RLHF ou Constitutional AI) qui les pousse à préférer certains tons. Claude a été entraîné à être courtois, réfléchi et prudent, et ces caractéristiques se manifestent dans des formules linguistiques récurrentes. « Load-bearing » est un terme technique que Claude utilise dans des contextes génériques pour dire « important » ; « honest take » est une façon de marquer une déclaration personnelle ; « you’re absolutely right » est un signal d’accord qui peut sonner surabondant. Aucun de ces éléments n’est une erreur, mais la fréquence les transforme en bruit.
Le post-training n’élimine pas les tics : il les déplace. Anthropic pourrait réduire la fréquence de certaines phrases en mettant à jour les poids ou le system prompt, mais chaque intervention a des compromis (moins de « load-bearing » pourrait signifier moins de précision dans les architectures logicielles, par exemple). Le problème est étudié : le paper sur la sycophancy montre que les modèles entraînés à être d’accord développent des patterns linguistiques qui les trahissent.
Comment fonctionne le hook
Claude Desktop supporte les hooks d’extension : des scripts externes qui lisent et transforment le contenu avant qu’il n’arrive à l’interface. Le type MessageDisplay capture chaque « delta » de texte (Claude génère en streaming) et permet de le remplacer par autre chose. Le script de Larsson est un filtre regex qui cherche les phrases clés et les remplace par des alternatives définies dans un dictionnaire Python. Le JSON retourné contient hookSpecificOutput.displayContent, que Claude Desktop utilise à la place du texte original.
Le mécanisme ne touche pas la réponse du modèle : le cache et la fenêtre de contexte continuent de voir le texte original. La substitution se fait uniquement dans l’affichage, donc si tu copies l’output ou le réutilises dans un prompt, tu obtiens la version modifiée. C’est une limite pour certains flux (par exemple si tu archives les conversations) et un avantage pour d’autres (le modèle continue de se comporter comme il a été entraîné, tu vois juste une traduction superficielle).
Ce que dit la discussion sur Hacker News
Les 429 commentaires se divisent sur trois fronts :
- Ceux qui le voient comme un workaround nécessaire : des utilisateurs qui utilisent Claude pour des sessions longues (refactoring, analyse technique) et trouvent les formules répétées agaçantes au point de préférer un filtre plutôt que de changer de modèle.
- Ceux qui préfèrent corriger à la source : ils suggèrent qu’Anthropic devrait offrir un contrôle de ton dans les paramètres, au lieu de forcer les utilisateurs à écrire des scripts.
- Ceux qui défendent le ton original : ils trouvent que les phrases récurrentes sont inoffensives et que la perception du désagrément est subjective. Certains citent le phénomène de l’« illusion de fréquence » (tu commences à remarquer une chose et puis tu la vois partout).
La discussion touche aussi un thème plus large : la voix d’un modèle est-elle modifiable par l’utilisateur final ? Dans un système fermé, la réponse est non, mais un hook local comme celui-ci ouvre une voie intermédiaire. Ça ne change pas le modèle, mais ça change l’expérience, et pour beaucoup c’est suffisant.
Implications pratiques
La méthode vaut aussi au-delà du cas spécifique. Un hook MessageDisplay peut :
- Traduire à la volée l’output dans une autre langue, utile pour les équipes multilingues qui travaillent sur la même session.
- Ajouter des métadonnées à chaque réponse (timestamp, ID de session) pour l’audit ou l’archivage.
- Filtrer le contenu sensible avant l’affichage, par exemple en masquant les clés API ou les informations personnelles que le modèle a signalées par erreur.
Le hook n’est pas documenté de façon extensive dans le guide officiel de Claude Desktop, et il n’y a pas de garanties de stabilité entre les versions : Anthropic pourrait changer ou supprimer l’interface sans préavis. Celui qui l’utilise pour des cas en production devrait surveiller les mises à jour.
Ça compte vraiment combien
Le fait qu’un script aussi simple ait généré près de 400 upvotes dit deux choses. Première : les gens qui utilisent Claude intensément ont des opinions fortes sur son ton, et elles ne sont pas toutes positives. Deuxième : il existe une demande pour des outils qui modifient l’expérience utilisateur sur les modèles propriétaires sans attendre que le fournisseur change de direction.
Mais le problème fondamental persiste : si un modèle a besoin d’un filtre pour être supportable dans des sessions longues, c’est peut-être que le post-training a optimisé pour la conversation brève et a négligé la résistance dans le temps. Les utilisateurs signalent des patterns similaires sur d’autres modèles (GPT a ses tics, Gemini aussi), donc ce n’est pas une faiblesse unique de Claude. C’est une caractéristique des modèles entraînés à sonner humains : ils ont tendance à converger vers des formules qui fonctionnent moyennement bien, et ces formules deviennent visibles quand tu en génères des milliers de lignes.
Si tu veux éviter le problème sans écrire de hook, une solution est de demander explicitement un ton différent dans le system prompt ou dans le premier message : « Réponds de manière directe, sans formules de courtoisie ou marqueurs d’accord. » Ça fonctionne, mais ça doit être répété à chaque nouvelle session, et l’effet se dégrade dans les threads longs. Le hook est plus stable parce qu’il opère après que le modèle a déjà généré, donc ça ne dépend pas de la qualité du suivi de tes instructions initiales par le modèle.