Claude Code 2.1.235 à 2.1.238 : ce qui échouait en silence te le dit enfin

Quatre versions sorties en trois jours, 93 entrées de changelog, et un fil rouge très net : une douzaine de correctifs transforment des échecs muets en erreurs explicites. Plus l'arrivée de headersHelper sur les marketplaces de plugins et un Remote Control enfin fiable.

claude-code changelog securite

Quatre versions de Claude Code sont sorties entre le 18 et le 20 août : les 2.1.235 à 2.1.238, 93 entrées de changelog au total. Les reprendre une par une donnerait une liste illisible, alors voici la lecture par thèmes, avec ce qui mérite vraiment ton attention.

Un fil rouge traverse les quatre versions, et il est plus intéressant que n'importe quelle nouveauté prise isolément.

Le fil rouge : ce qui échouait en silence le dit maintenant

Une douzaine de correctifs, répartis sur les quatre versions, corrigent tous la même classe de problème. Quelque chose ne marchait pas, et Claude Code te laissait croire que si.

  • Messagerie inter-sessions. Un message trop gros pour la livraison inter-sessions était silencieusement abandonné, il est maintenant refusé d'entrée (2.1.235). Une rafale de messages dépassant ce que la boîte de la session cible accepte était rapportée comme envoyée alors qu'elle était jetée (2.1.236). Envoyer à une session qui refuse les messages entrants, avec crossSessionInbound: "refuse", renvoyait un succès silencieux et rend désormais un « refused » (2.1.238). Et une boîte qui jette tes messages, sur limite de débit ou file pleine, le signale maintenant à la session émettrice au lieu de les faire disparaître (2.1.238).
  • Coquille dans une commande slash. Appuyer sur Entrée sur une commande mal orthographiée, ou indisponible dans la session, lançait la correspondance floue la plus proche. Autrement dit, tu tapais une chose et Claude en exécutait une autre. La commande est maintenant signalée comme inconnue, les préfixes et alias continuant de fonctionner (2.1.236).
  • Dialogues de permission. Les boîtes de validation de suppression ou de remplacement de cellule de notebook omettaient sans rien dire le contenu existant quand la cellule n'était pas lisible : elles expliquent maintenant pourquoi (2.1.235). Et l'option « ne plus demander » est désormais retirée quand le contenu ne peut pas être affiché en entier, plutôt que de te faire accorder en aveugle une permission plus large que ce que tu vois (2.1.235).
  • Réseau. Le refus d'une connexion par un proxy était rapporté comme une erreur réseau générique : le proxy est maintenant nommé (2.1.238). Les dialogues d'élicitation MCP n'affichaient rien du tout pour les URL de plus de 4 096 caractères (2.1.238).
  • Interface. Le moteur de rendu plein écran, après un seul démarrage raté, échouait définitivement à chaque lancement suivant. Il bascule maintenant sur le rendu classique au lieu de sortir (2.1.236). Une liste d'environnements cloud vide ou malformée donnait une erreur incompréhensible (2.1.236).

Rien de spectaculaire pris un par un. Mis bout à bout, c'est la différence entre un outil auquel tu peux faire confiance quand il ne dit rien, et un outil dont le silence ne prouve rien. Si tu pilotes plusieurs sessions Claude Code en parallèle, la partie messagerie justifie à elle seule la mise à jour : jusqu'ici, un message perdu ressemblait exactement à un message livré.

headersHelper arrive sur les marketplaces de plugins

C'est la vraie nouveauté de fond de la 2.1.238. Le mécanisme existait déjà pour les serveurs MCP : headersHelper désigne une commande que Claude Code exécute pour générer des en-têtes HTTP au moment de la connexion, ce qui permet de gérer un jeton à durée de vie courte, du Kerberos ou un SSO interne, là où OAuth ne s'applique pas.

La 2.1.238 étend ce mécanisme aux marketplaces de plugins : headersHelper peut désormais être posé sur une marketplace de type url ou sur une entrée de catalogue, et sert alors à récupérer le catalogue et les archives de même origine. En clair, héberger une marketplace de plugins privée derrière une authentification maison devient possible.

Ce qui rend cet ajout intéressant, c'est le périmètre de sécurité livré avec, parce qu'une marketplace qui peut faire exécuter une commande arbitraire est une jolie surface d'attaque :

  • le headersHelper d'une entrée de catalogue ne tourne qu'à l'installation ou à la mise à jour de ce plugin, après affichage de la commande, et claude plugin install comme claude plugin update demandent une confirmation [y/N], contournable par -y ;
  • un headersHelper déclaré dans un .mcp.json de projet, ou des serveurs MCP inline dans des fichiers d'agent de projet ou passés par --add-dir, exigent maintenant que le dialogue de confiance du dossier ait été accepté, y compris sous claude -p ;
  • un headersHelper venant d'un projet, d'un plugin ou d'un fichier d'agent s'exécute sans hériter des variables d'environnement de credentials. Les helpers de portée utilisateur, managed ou claude.ai tournent depuis le répertoire de configuration de Claude.

La logique est claire : le code qui vient de ton projet ne doit pas pouvoir se servir dans tes secrets d'environnement. À noter, cette extension aux marketplaces n'est pour l'instant décrite que dans le changelog, la page de doc des marketplaces ne la documente pas encore.

Remote Control : la version qui le rend fiable

La 2.1.238 contient une douzaine de correctifs Remote Control. Pris ensemble, ils racontent le passage d'une fonctionnalité qui marche quand tout va bien à une fonctionnalité qui tient la route.

Le plus utile au quotidien : une brève coupure réseau qui retardait le renouvellement de ta session provoquait une déconnexion avec un « login expired » trompeur, alors que ta session était parfaitement valide. Claude Code réessaie maintenant et reste connecté. Dans le même esprit, les refus HTTP 403 brefs venus d'un edge réseau, d'un VPN ou d'un proxy sont tolérés jusqu'à 3 minutes, et la partie qui bloque est nommée quand le blocage persiste.

Le reste comble des trous qui se remarquaient vite :

  • les messages envoyés depuis le web ou l'app Desktop pendant que Claude est en plein tour disparaissaient du transcript une fois le tour terminé ;
  • un changement de modèle fait depuis le téléphone ou le web ne se répercutait pas dans le terminal ;
  • une session dont le processus avait planté restait indisponible jusqu'au redémarrage de claude remote-control, elle est maintenant réutilisable au message suivant ;
  • le Stop par tâche depuis le panneau des tâches ne faisait rien sur les sessions hébergées par le CLI ;
  • ListAgents et SendMessage annonçaient « Remote Control is not connected » dans les sessions lancées en mode serveur ou hébergées par Desktop et l'IDE, alors qu'ils pouvaient parfaitement joindre les pairs.

Un détail qui vaut d'être noté parce qu'il touche à la confidentialité : ListAgents et SendMessage exposaient le worker inactif que la vue agents préchauffe pour ta prochaine session en arrière-plan. Il n'apparaît maintenant qu'une fois réclamé par une tâche.

Choisir ton modèle de démarrage sans confisquer /model

La 2.1.236 ajoute la variable d'environnement ANTHROPIC_DEFAULT_MODEL. Sur le papier ça ressemble à ANTHROPIC_MODEL, en pratique la différence est exactement l'inverse de ce qu'on attend d'une variable d'environnement, et c'est ce qui la rend utile.

ANTHROPIC_MODEL impose le modèle : au prochain lancement, Claude Code revient à ce modèle quoi que tu aies choisi dans /model. ANTHROPIC_DEFAULT_MODEL ne fait que fournir un point de départ. Selon la documentation officielle, c'est la source de priorité la plus basse : elle ne s'applique que si le drapeau --model, ANTHROPIC_MODEL, une valeur model dans un fichier de réglages (y compris celle que /model enregistre) et le modèle par défaut de l'organisation ne décident rien. Ton choix fait dans /model gagne, y compris aux lancements suivants.

Traduction concrète : c'est la variable à poser dans ton shell si tu veux un défaut d'équipe ou de machine sans retirer la main à personne.

Deux pièges documentés valent le détour. La variable est ignorée si tu lui donnes default, inherit, opusplan ou haiku, si enforceAvailableModels est actif, si availableModels ou les restrictions de l'organisation excluent le modèle, ou si le modèle n'est pas disponible pour ton compte. Et surtout : quand une nouvelle session démarrerait sur le modèle de la variable, une session reprise avec --resume, --continue ou le sélecteur /resume démarre dessus aussi, sans restaurer le modèle enregistré dans le transcript de cette session. Si tu reprends une vieille session en espérant retrouver son modèle, tu ne l'auras pas.

Le correcteur orthographique, et ce qu'il ne fait pas

La 2.1.235 ajoute un réglage spellcheck qui souligne les fautes dans la zone de saisie pendant que tu tapes. Il ne s'appuie sur aucun service distant : Claude Code utilise le correcteur que tu as installé, aspell, hunspell ou ispell, en prenant le premier des trois trouvé sur ton PATH, dans cet ordre.

La doc précise plusieurs limites que le changelog ne mentionne pas et qui évitent une mauvaise surprise. La fonction est désactivée par défaut. Elle ne vérifie que la zone de saisie, jamais les réponses de Claude ni tes fichiers. Elle ne vérifie rien en mode shell, dans la recherche d'historique Ctrl+R, en dictée vocale, ni en mode lecteur d'écran. Enfin, d'après la référence des réglages, spellcheck n'est lu que depuis les réglages utilisateur, le drapeau --settings et les réglages managed : le poser dans les réglages de projet ne servira à rien.

Deux durcissements discrets côté sécurité

Sandbox macOS (2.1.236). Les règles de refus de lecture avec joker, du type **/.env, prennent maintenant le dessus à l'intérieur des zones de lecture autorisées, couvrent le contenu des répertoires correspondants, et ne peuvent plus être contournées en renommant le fichier refusé. Les trois points comptent : une règle de deny qui saute dès qu'elle tombe dans une zone allow ne protège rien.

Mode auto (2.1.236). Trois changements dans la même direction. Les règles d'autorisation de Monitor sont mises de côté tant que le mode auto est actif, si bien que les commandes Monitor passent par la même relecture que les commandes Bash. Le classifieur utilise désormais les mêmes réglages par défaut sur Bedrock, Vertex AI et Foundry, et quand la télémétrie est désactivée, que sur l'API Claude, classification par score de sévérité comprise. Et la vérification de l'état git ne peut plus être trompée par un dépôt réglé sur status.showUntrackedFiles=no, qui lui faisait annoncer un arbre propre.

Ce dernier point est le genre de détail qui décide de la fiabilité d'un garde-fou : un mode auto qui croit l'arbre de travail propre parce qu'un réglage local lui cache les fichiers non suivis prend des décisions sur une image fausse du dépôt.

Trois habitudes qui changent

Ctrl+L et Cmd+K en plein écran (2.1.238) se contentent maintenant de repeindre l'écran. Le raccourci /clear par double appui a été supprimé, ce qui met fin aux boucles de /clear automatiques déclenchées dans les terminaux nvim d'une seule ligne. Si tu avais pris l'habitude du double appui pour vider la conversation, il faut taper /clear.

Ctrl+W peut se comporter comme dans Bash (2.1.238). Le nouveau réglage keybindingFlavor accepte la valeur "readline", qui fait supprimer jusqu'à l'espace précédent au lieu du seul mot précédent. Le défaut, "classic", ne bouge pas.

claude mcp list et claude mcp get (2.1.238) affichent les serveurs désactivés comme ⊘ Disabled au lieu de s'y connecter pour un test de santé. Plus rapide, et plus honnête sur ce qui tourne vraiment.

Le reste, en vrac utile

  • Fuite mémoire en session longue (2.1.238) : la croissance mémoire non bornée des sessions interactives longues est corrigée, les résultats d'outils des subagents étant libérés dès qu'ils sortent de la fenêtre d'affichage récente. Dans le même esprit, la 2.1.235 réduit la mémoire et le CPU consommés par les sessions cloud en arrière-plan, dont leurs flux d'événements n'étaient plus rescannés et réaffichés à chaque mise à jour.
  • Style de sortie « Concise » (2.1.237) : un style intégré où Claude commence par le résultat et saute le préambule et la narration, sans travailler moins. À choisir dans « Output style » de /config. La 2.1.238 corrige au passage les styles de sortie personnalisés, de projet et de plugin qui repartaient vers la voix par défaut en cours de session.
  • Démarrage (2.1.236 et 2.1.238) : le compteur de sessions s'écrit en arrière-plan, claude seul démarre plus vite sur macOS, et la vérification automatique de mise à jour attend une dizaine de secondes après le lancement au lieu de disputer le CPU au démarrage.
  • /goal (2.1.236) : une session inactive dont le goal attend un travail de fond long fait maintenant un point automatique après 30 minutes, puis 1 h, puis 2 h.
  • /usage (2.1.236) : affiche la ligne de dépense en crédits d'usage pour les membres Team et Enterprise, avec une ligne plafonnée à 0 % avant toute dépense.
  • Runners auto-hébergés (2.1.238) : --defer-shutdown-max-min <minutes> garde les sessions attachées servies à la réception d'un SIGTERM, puis gare le reste passé ce délai avant de sortir. --proxy-authorization-command et --proxy-authorization-file couvrent les proxys de sortie qui exigent un en-tête Proxy-Authorization fraîchement émis à chaque connexion. La 2.1.238 corrige aussi des runners retirés par le serveur après un seul sondage lent ou perdu, qui donnaient leur session en bonne santé à un autre runner.
  • Accessibilité (2.1.236) : l'extension VSCode gagne un support lecteur d'écran pour le transcript, avec annonces en direct des réponses, demandes de permission, erreurs et changements d'état, plus une navigation par titre de tour.
  • Résumés de session (2.1.236) : les recaps automatiques et /recap sont plafonnés à 400 caractères, coupés à la limite d'un mot, ce qui met fin aux recaps qui partaient en roue libre.
  • Régressions refermées (2.1.236) : le presse-papiers, les tâches de fond, les sessions en arrière-plan et les logs MCP locaux cassaient quand le répertoire dans lequel une session avait basculé était supprimé, depuis la 2.1.229. Et les rejets de promesse non gérés au démarrage raté d'un sous-processus, par exemple powershell.exe sur WSL avec l'interop Windows désactivée, étaient une régression de la 2.1.234.

Faut-il mettre à jour

Oui, et sans hésiter si tu es dans un des trois cas suivants.

Si tu fais tourner plusieurs sessions Claude Code qui se parlent, la série de correctifs sur la messagerie inter-sessions change la nature de l'outil : jusqu'ici un message perdu était indiscernable d'un message livré. Si tu utilises Remote Control, la 2.1.238 est la mise à jour qui le fait passer de fonctionnel à fiable, en particulier la fin des déconnexions « login expired » sur un simple hoquet réseau. Si tu laisses tourner des sessions interactives très longues, le correctif de fuite mémoire de la 2.1.238 est pour toi.

Pour tout le monde, le durcissement des règles de deny de la sandbox macOS et celui du mode auto valent la mise à jour, même si rien n'est visible au quotidien.

Un seul changement demande une adaptation : le double appui sur Ctrl+L ou Cmd+K ne vide plus la conversation en mode plein écran. Si c'était un réflexe, c'est /clear désormais.

Source : changelog officiel Claude Code, complété par la documentation de configuration des modèles, la référence des réglages et le mode interactif.

Pierre Rondeau

Pierre Rondeau

Développeur et indie builder. Je construis des produits et automatisations avec l'IA. Créateur de Claude Hub.

LinkedIn