Claude Code v2.1.199 est sortie le 2026-07-02 à 23:35:18 UTC, un jour après v2.1.198 (la version Chrome GA + auto-PR des agents en arrière-plan + /dataviz + Gateway sur AWS) et deux jours après v2.1.197 qui faisait de Sonnet 5 le modèle par défaut. Les notes de version sont inhabituellement longues pour un cycle d'un jour: 24 entrées au changelog, une nouvelle fonctionnalité et 23 correctifs, avec la liste des correctifs concentrée sur la même surface que ce que la v2.1.198 a étendu (agents en arrière-plan, sous-agents, le flux d'auto-PR, plan mode) plus une longue traîne de petits correctifs UX. Le motif correspond aux deux versions précédentes: Anthropic itère la ligne v2.1.19x au même rythme que le modèle sous-jacent, et la surface produit pour Sonnet 5 est durcie version après version.
La seule nouvelle fonctionnalité : les invocations slash-skill empilées
La seule nouvelle fonctionnalité de la v2.1.199 est une petite extension utile de la surface slash-skill. Dans la v2.1.198 et antérieur, un prompt du type /skill-a /skill-b do XYZ ne chargeait que la première skill, skill-a; le second /skill-b était traité comme une partie du texte du prompt, pas comme une autre invocation de skill. La v2.1.199 change la règle: le parseur parcourt les tokens de tête du prompt et charge jusqu'à 5 slash-skills avant de retomber sur le reste du message. Une commande comme /plan /review /dataviz do XYZ charge désormais plan, review, et dataviz comme l'ensemble de skills actives, au lieu de ne charger que plan et de laisser silencieusement tomber le reste.
Le plafond de 5 skills est un garde-fou, pas un plafond de fonctionnalité: les skills portent leur propre contexte et leur propre surface d'outils, et une 6e skill serait le type de forme de prompt qui justifie déjà un sous-agent personnalisé au lieu d'une chaîne de skills inline. Le plafond est généreux pour les cas courants (2 à 3 skills pour combiner une étape de planification, une étape de revue de code et une étape de visualisation) et conservateur pour les cas limites (un agent trop zélé qui sinon se laisserait dériver dans une demi-douzaine de contextes de skills qui se chevauchent). Le changement est additif: les invocations single-skill existantes sont inchangées, et un utilisateur qui ne veut qu'une seule skill en contexte peut toujours écrire /skill-a do XYZ et obtenir le même comportement qu'avant.
Rapport d'erreurs des sous-agents et récupération du travail partiel
Le cluster le plus profond de correctifs de la v2.1.199 se trouve sur la surface sous-agents / agents en arrière-plan, et trois d'entre eux concernent la visibilité des échecs pour l'agent parent. Dans la v2.1.198 et antérieur, trois modes d'échec indépendants cachaient le travail partiel à l'orchestrateur :
- Les sous-agents coupés par une limite de débit ou une erreur serveur échouaient silencieusement. Un sous-agent qui tombait à court de contexte, touchait un 429, ou recevait un 5xx de l'API ne renvoyait rien au parent. Le parent n'avait aucun moyen de distinguer une tâche inachevée d'une tâche qui n'avait jamais commencé, et le travail partiel que le sous-agent avait déjà fait était perdu.
- Les sous-agents déclaraient les erreurs API comme des résultats réussis. Un sous-agent qui touchait une erreur API en milieu de tâche (erreur de limite d'usage, 529 overloaded, erreur modèle) renvoyait une enveloppe de résultat au parent, avec l'erreur exposée comme du texte à l'intérieur du résultat. Le parent traitait l'enveloppe comme un succès et utilisait le texte d'erreur comme réponse.
SendMessageroutait silencieusement à côté quand un agent ré-spawné réutilisait le nom d'un agent précédent. Quand un agent mourait et qu'un nouvel agent reprenait son nom dans le panneau d'agents, unSendMessagede suivi touchait parfois l'enregistrement de l'agent mort et routait vers une conversation périmée. Le parent n'avait pas d'erreur, juste une réponse manquante.
La v2.1.199 corrige les trois. Les sous-agents coupés par une limite de débit ou une erreur serveur renvoient désormais leur travail partiel au parent, avec l'erreur attachée. Les sous-agents qui touchent une erreur API déclarent désormais l'erreur au parent, avec le travail partiel conservé dans un champ séparé sur l'enveloppe de résultat. SendMessage détecte le mismatch de nom et demande à l'appelant de recibler, en exposant le problème de routage comme une erreur d'outil plutôt qu'un miss silencieux. Le motif est le même que le correctif v2.1.198 sur les équipes d'agents (un coéquipier qui meurt sur une erreur API déclare désormais failed au lead), et les deux versions transforment ensemble le mode d'échec « les sous-agents ont l'air d'avoir réussi mais en réalité non » de l'ère v2.1.196 en un mode visible et récupérable.
Boucle de crash du daemon des agents en arrière-plan sur Linux
Le correctif le plus douloureux opérationnellement dans la version est la boucle de crash du daemon des agents en arrière-plan sur Linux. Avant la v2.1.199, un arrêt brutal du daemon (un kill -9, un OOM de l'hôte, une coupure de courant, un crash dans un processus enfant) pouvait laisser un enregistrement de worker corrompu sur disque dans le répertoire d'état du daemon. Le code de récupération du daemon au démarrage suivant tentait de lire l'enregistrement, échouait sur la corruption, loggait une erreur et sortait; le superviseur respawnait le daemon, qui échouait sur le même enregistrement; et le cycle se répétait toutes les ~50 secondes. Tous les agents en arrière-plan en cours dans l'espace de travail de l'utilisateur mouraient avec le daemon.
La boucle de crash est le type de bug qui se manifeste sur des agents CI de longue durée et des agents en worktree sous tableau de bord, plutôt que sur de l'usage interactif en session unique, ce qui explique pourquoi elle arrive deux versions après que la v2.1.198 a fait du flux d'auto-PR le défaut pour les agents en arrière-plan. La v2.1.199 corrige le code de récupération pour que l'enregistrement corrompu soit détecté et remplacé par un enregistrement frais au lieu de crasher le daemon; le respawn du superviseur est désormais une action de récupération, pas un échec qui se répète. La version corrige aussi une régression liée de la v2.1.196: les agents en arrière-plan qui tentaient de faire un cold-start sur SSH macOS échouaient avec Could not switch to audit session, ce qui rendait le chemin de lancement SSH-sur-macOS inutilisable pour les équipes qui font tourner Claude Code sur un Mac distant. Le correctif est un changement d'une ligne dans le wrapper de lancement SSH qui commute explicitement la session d'audit avant que l'agent tente de s'y lier.
Préservation des réponses en streaming sur erreurs API en cours de flux
Deux correctifs liés ciblent le moment où un appel modèle est en vol et l'API le coupe. Le premier est le bug de perte de réponse en streaming: quand l'API Anthropic émettait une erreur overloaded (529) ou serveur (5xx) en milieu de flux après que le modèle avait déjà produit une sortie partielle, Claude Code 2.1.198 et antérieur jetait la réponse partielle avec l'erreur, laissant l'utilisateur sans rien. La v2.1.199 conserve la sortie partielle et lui ajoute une mention incomplete-response. Le changement compte surtout pour les générations longues: une exécution Sonnet 5 en contexte 1M, un refactor multi-fichiers avec des milliers d'appels d'outils, un graphique /dataviz avec une longue explication, peuvent tous perdre plusieurs secondes de travail sur un seul 529 tardif dans le flux sous v2.1.198. Le correctif est associé à la nouvelle politique de retry (voir plus bas): un tour partiel n'est plus gaspillé sur la première erreur transitoire, et la partielle est conservée quand les retries sont épuisés.
Le second est la gestion des erreurs SSL/TLS derrière les proxies d'entreprise. Dans la v2.1.198 et antérieur, un échec de handshake SSL causé par un proxy d'inspection TLS, un NODE_EXTRA_CA_CERTS manquant, ou un certificat expiré, brûlait le budget complet de retries avant d'afficher le moindre diagnostic. La v2.1.199 change le chemin: les erreurs SSL échouent immédiatement avec un indice de correction qui nomme la cause la plus probable (NODE_EXTRA_CA_CERTS pour un bundle CA manquant, vérification de certificat pour un certificat expiré, trust store du proxy pour un MITM d'entreprise). Le changement est une amélioration de la qualité d'erreur, pas un changement de comportement: la même erreur est désormais diagnostiquée en un tour au lieu de cinq, et le budget de retry est préservé pour les erreurs transitoires qui méritent vraiment des retries.
Plan mode, stderr des hooks, et la vue claude agents
Les correctifs du plan mode dans la v2.1.199 sont plus petits mais couvrent deux irritants distincts. Premièrement, le plan mode ne demandait pas l'autorisation pour les appels d'outils navigateur à changement d'état; une session en plan mode qui tentait d'appeler une action navigateur à changement d'état auto-allowait silencieusement l'appel au lieu de demander à l'utilisateur. La v2.1.199 conserve l'auto-allow existant pour les appels browser_batch en lecture seule (le chemin sûr, lecture seule, à travers l'extension Chrome) et ajoute l'invite manquante pour les appels d'outils navigateur à changement d'état. La découpe correspond au correctif v2.1.198 qui auto-allowait les appels d'outils en lecture seule quand une session démarre en plan mode, et elle ferme le traitement asymétrique des outils navigateur en lecture seule et à changement d'état.
Deuxièmement, les hooks SessionStart, Setup, et SubagentStart cachaient silencieusement le stderr quand ils sortaient avec le code 2. Un hook qui échouait avec une dépendance manquante, une erreur de parse, ou une exception runtime, loggait sur stderr, sortait en 2, et laissait l'utilisateur avec un résultat de hook qui avait l'air réussi. La v2.1.199 affiche le stderr dans le transcript quand un hook sort non-zéro, donc un hook qui se comporte mal est visible pour l'utilisateur au lieu d'être un échec silencieux. Le changement compte pour la même raison que le correctif de confiance MCP de la v2.1.197 comptait: un hook est un script contrôlé par l'utilisateur, et un échec silencieux d'un script contrôlé par l'utilisateur est un gouffre de temps de debug.
La version corrige aussi un bug de la vue claude agents: les sous-agents idle disparaissaient du panneau d'agents pendant que d'autres sous-agents étaient encore en train de travailler, laissant l'utilisateur avec une vue partielle de ses agents en cours. La v2.1.199 replie les sous-agents idle en surplus dans une ligne de résumé dépliable, donc l'utilisateur voit toujours les agents actifs et peut déplier la ligne pour voir les idle. La même vue reçoit un correctif où taper /model ou /fast en regardant un sous-agent ouvrait silencieusement le sélecteur de modèle du lead; la v2.1.199 affiche une notice expliquant que la commande s'applique au lead, et le même correctif empêche le sélecteur de modèle d'être ouvert dans le mauvais contexte. Les lignes de session de claude agents reçoivent aussi un correctif cosmétique: les liens de pull request s'affichent désormais comme un simple #N sans le label « PR » redondant.
Politique de retry, watchdog, et 429 transitoires
Le changement de comportement le plus visible pour l'utilisateur dans la v2.1.199 est la politique de retry. La version relève le nombre de retries par défaut pour les erreurs transitoires hors capacité (429 non liés à la limite d'usage de l'utilisateur, erreurs serveur 500-class, 529 overloaded) d'une petite valeur fixe à 300, avec backoff. La version lève aussi l'ancien plafond de 15 sur la variable d'environnement CLAUDE_CODE_MAX_RETRIES, donc les utilisateurs et les scripts CI peuvent fixer un plafond plus élevé sans qu'il soit silencieusement clampé. Le changement est ciblé: les erreurs de type capacité (la propre limite de débit de l'utilisateur, le plafond d'usage Pro/Max) ne sont pas affectées, et les abonnés obtiennent un retry automatique tandis qu'une session sur un plafond d'usage continue à signaler le plafond comme avant. La variable CLAUDE_CODE_RETRY_WATCHDOG, qui borne le temps total passé à retenter sur un tour, est inchangée, donc une boucle de retry qui dérape reste attrapée par le watchdog.
Le correctif s'accompagne du retry sur coupure réseau de la v2.1.198 (les erreurs transitoires comme ECONNRESET retentent désormais avec backoff au lieu d'annuler le tour), et les deux transforment ensemble le mode d'échec « une coupure réseau transitoire annule une génération longue » en « la coupure transitoire est retentée, la partielle est conservée si les retries sont épuisés, le plafond est toujours respecté ». Pour les flux CI qui font tourner Claude Code contre une flotte de dépôts, le changement est une amélioration stricte: une génération longue qui touche un 529 à la minute 8 d'une exécution de 10 minutes n'a plus besoin d'être relancée depuis zéro.
Petits correctifs à signaler
Les notes de version de la v2.1.199 ferment une longue traîne de petits correctifs. Les indicateurs de progression des jobs en arrière-plan ne bloquent plus pendant des minutes pendant que le job exécute de longues commandes. Les sessions en arrière-plan sur des machines à mémoire faible indiquent désormais une mémoire faible et suggèrent de libérer des ressources, au lieu d'afficher une erreur générique. Les sessions distantes ne flapent plus entre Working et Idle dans la vue d'agent quand un agent en arrière-plan se termine. claude stop n'est plus silencieusement annulé par un respawn d'agent en arrière-plan en course; le respawn honore désormais l'arrêt. L'ouverture ou la reprise d'une session sans nouveau message ne grossit plus le fichier de transcript. Le passage en arrière-plan d'une session avec ← ou /background ne perd plus son /color de la ligne de la vue d'agents. La réinitialisation d'un fichier de configuration corrompu depuis la boîte de récupération au démarrage ne détruit plus le fichier irrémédiablement; elle le sauvegarde d'abord. claude --dangerously-skip-permissions daemon <subcommand> n'est plus traité comme un prompt de chat; la sous-commande est désormais exécutée. Claude in Chrome n'ouvre plus en boucle la page de reconnexion quand les sessions tournent depuis des builds ou répertoires de configuration différents.
Pourquoi c'est important pour les utilisateurs de Claude Code
La v2.1.199 est la troisième version consécutive de Claude Code cette semaine, et la troisième version consécutive à durcir la même surface: le flux agents en arrière-plan et sous-agents que la v2.1.198 a fait devenir le défaut pour le travail de code dans un worktree, par-dessus le défaut Sonnet 5 que la v2.1.197 a introduit deux jours plus tôt. Le motif est cohérent: le modèle est stabilisé, le flux d'auto-PR est stabilisé, et le travail se porte sur les modes d'échec que le flux d'auto-PR fait remonter en production. La boucle de crash du daemon des agents en arrière-plan sur Linux, le bug de perte de réponse en streaming, les échecs silencieux des sous-agents, la gestion des erreurs SSL derrière les proxies d'entreprise, et l'asymétrie du plan mode sont exactement le type de problèmes qui n'apparaissent que quand le flux tourne sans surveillance dans une pipeline CI ou dans un worktree sous tableau de bord de longue durée, pas dans l'usage interactif en session unique qui a dominé la première année de Claude Code.
Pour les utilisateurs de Claude Code, le takeaway pratique est une fenêtre claude update plus calme un vendredi matin. La version est additive; les flux en session unique existants sont inchangés. La seule nouvelle fonctionnalité (les invocations slash-skill empilées) est un sur-ensemble strict du comportement précédent. La politique de retry est une valeur par défaut qui peut être annulée avec la variable d'environnement CLAUDE_CODE_MAX_RETRIES existante. Et les correctifs de modes d'échec (erreurs de sous-agents, préservation des réponses en streaming, asymétrie du plan mode) sont le type de changement qu'un utilisateur actif de Claude Code ne remarque que quand ils ne se déclenchent pas, ce qui est le but.



