- Claude Code
2.1.198 a activé par défaut une fonction d’avancement automatique : si AskUserQuestion restait sans réponse pendant 60 secondes, le modèle poursuivait la tâche selon son propre jugement. Cette nouveauté n’a toutefois pas été mentionnée dans le changelog ni dans la documentation au moment de sa sortie.
- Elle n’approuvait pas automatiquement les demandes d’autorisation, mais dans les environnements où des outils étaient déjà autorisés ou avec
--dangerously-skip-permissions, elle pouvait franchir à la place de l’utilisateur des points de décision comme « staging ou production ». Même lorsque seules certaines réponses étaient saisies, le modèle choisissait le reste.
- Environ deux jours après le signalement du problème, la version
2.1.200 n’a pas supprimé la fonction, mais l’a seulement désactivée par défaut, en la transformant en mécanisme opt-in configurable via /config avec l’un des choix suivants : 60s, 5m, 10m, never.
- Le dépôt public ne contient pas le code source réel du produit ni les commits d’introduction ou de retrait, mais la comparaison des bundles JavaScript inclus dans l’exécutable Bun publié sur npm permet de confirmer qu’en
2.1.198, des chaînes AFK, un schéma et des événements d’analyse ont été ajoutés ensemble.
- Lorsque les mises à jour automatiques par défaut se combinent à des notes de version incomplètes, les hypothèses de sécurité peuvent changer sans intervention de l’utilisateur. Pour figer le CLI tout en continuant à mettre à jour les plugins, il faut définir ensemble
DISABLE_AUTOUPDATER=1 et FORCE_AUTOUPDATE_PLUGINS=1.
2.1.198, qui décidait à la place de l’humain après 60 secondes
- Claude Code
2.1.198, publié le 1er juillet 2026, débloquait AskUserQuestion après 60 secondes d’attente d’une réponse humaine et demandait au modèle de continuer en prenant la meilleure décision possible à partir du contexte.
- La sortie affichait
No response after 60s — continued without an answer.
- Un message indiquait aussi qu’il était possible de reposer la question, mais le même timeout s’appliquait à la nouvelle question.
- Si l’utilisateur répondait seulement à certaines questions puis s’absentait, les réponses déjà saisies n’étaient pas ignorées : elles étaient soumis comme réponses partielles.
- Si seule la première de trois questions recevait une réponse, la tâche continuait avec cette réponse et les autres réponses choisies par le modèle.
- Le message à l’écran indiquait, selon le cas,
continued with the answers selected so far ou continued without an answer.
- Il n’est pas exact de dire qu’aucun compte à rebours n’apparaissait à l’écran.
- Une pression sur une touche relançait le minuteur et un texte comme
auto-continue in 12s · any key to stay apparaissait.
- Cependant, la valeur par défaut de
CLAUDE_AFK_COUNTDOWN_MS étant de 20 secondes, la question ressemblait à une question bloquante ordinaire pendant les 40 premières secondes, et l’avertissement n’était affiché que pendant les 20 dernières secondes.
- Les utilisateurs exécutant plusieurs agents dans des onglets différents ou s’étant absentés pouvaient ne pas voir l’avertissement.
Portée et limites des garde-fous de sécurité
- Le timeout ne s’appliquait qu’à
AskUserQuestion et n’était pas relié à l’approbation de plans ni aux prompts d’autorisation comme Do you want to allow ….
- Dans l’exécutable, le composant de compte à rebours et le hook du minuteur n’étaient connectés qu’à la boîte de dialogue de question.
- La référence des outils indique également que les prompts d’autorisation ne sont pas résolus automatiquement en cas d’inactivité.
- Cette séparation ne constituait pas une protection lorsque les prompts d’autorisation n’apparaissaient pas dès le départ selon le mode d’exécution.
- Il était possible d’utiliser
bypassPermissions, acceptEdits, allowedTools, --dangerously-skip-permissions ou des hooks PreToolUse.
- Si une commande de déploiement figurait sur liste d’autorisation ou si la vérification des permissions était contournée, les choix posés par
AskUserQuestion, comme « staging ou production ? » ou « quelle config ? », pouvaient être le seul point de validation restant.
- Le minuteur n’accordait pas d’autorisations, mais il pouvait confier au modèle le choix lui-même pour des opérations déjà autorisées.
- Le schéma de l’outil ne contenait pas d’entrée
timeout, et le modèle ne pouvait ni la définir ni la contrôler.
- Les seuls paramètres d’entrée étaient
questions, answers, annotations et metadata.
- L’entité qui sautait la réponse n’était pas le modèle, mais le harnais de l’agent, qui renvoyait automatiquement une réponse.
Chronologie de la sortie et du retour arrière
- Les enregistrements publics confirmés s’enchaînent comme suit :
- 2026-06-29 : sortie de
2.1.196, dernière version considérée comme normale par l’auteur du signalement.
- 2026-06-30 : sortie de
2.1.197, dont le changelog ne contient qu’une ligne sur la sortie de Sonnet 5.
- 2026-07-01 : sortie de
2.1.198, avec l’avancement automatique.
- 2026-07-02 02:54 UTC : Aleksey Nogin ouvre l’issue #73125.
- 2026-07-02 03:45 UTC : un commentaire partage
CLAUDE_AFK_TIMEOUT_MS, une échappatoire non documentée.
- 2026-07-02 : sortie de
2.1.199, avec 24 éléments dans les notes alors que l’issue est ouverte ; l’avancement automatique n’y est toujours pas mentionné.
- 2026-07-03 :
2.1.200 rétablit le comportement par défaut.
- 2026-07-04 18:04 UTC : fermeture de l’issue.
- L’issue a reçu 384 👍 et 143 commentaires ; l’environnement du signalement était
2.1.198, Opus, AWS Bedrock et le terminal VS Code.
- Il s’est écoulé environ deux jours entre le signalement du problème et le changement de valeur par défaut.
Ce que 2.1.200 a corrigé
2.1.200 n’a pas supprimé la fonction : l’avancement automatique a été désactivé par défaut et transformé en option opt-in via /config.
- Avant la correction,
2.1.198 ne disposait pas du paramètre /config askUserQuestionTimeout, et pour éviter l’effet de cette fonction, il fallait utiliser une variable d’environnement absente des notes de version.
- En
2.1.211, l’implémentation complète est toujours présente.
- Le nom de l’entrée
/config est Question auto-continue timeout.
- Les valeurs autorisées sont
60s, 5m, 10m, never.
- En l’absence de configuration, la valeur est traitée comme
never, ce qui désactive la fonction.
- Le timeout interne par défaut reste de 60 000 ms, et le seuil du compte à rebours de 20 000 ms.
CLAUDE_AFK_TIMEOUT_MS et CLAUDE_AFK_COUNTDOWN_MS peuvent remplacer les valeurs configurées.
- La correction n’a pas supprimé le minuteur : elle a simplement ajouté une condition de garde pour ne l’activer que lorsqu’un paramètre ou une variable d’environnement est présent.
- Les utilisateurs bloqués sur une version affectée pouvaient contourner temporairement le problème en définissant une très grande valeur pour
CLAUDE_AFK_TIMEOUT_MS dans settings.json.
Introduction d’une fonctionnalité absente du journal des changements
- Les notes de version sont publiées avec le même contenu dans le journal des changements officiel et dans le
CHANGELOG.md du dépôt
- En prenant comme référence le commit figé de l’époque, l’ajout de l’avancement automatique n’apparaît dans aucune version
2.1.197 : une ligne sur le lancement de Sonnet 5
2.1.198 : environ 30 entrées, mais rien sur l’avancement automatique
2.1.199 : aucune mention non plus dans les 24 entrées publiées après l’ouverture de l’issue
AskUserQuestion était pourtant un outil habituellement consigné dans le journal des changements, puisqu’il y apparaît 15 fois au total sur 13 versions depuis 2.0.55
- Mais il n’apparaît pas une seule fois dans l’intervalle où le changement a été introduit, de
2.1.181 à avant 2.1.200
- Des deux changements de comportement — activation puis désactivation — seule la désactivation a été documentée
- La seule entrée ayant mentionné pour la première fois l’avancement automatique est celle de
2.1.200, indiquant qu’il ne s’exécutait « plus automatiquement par défaut » et qu’il fallait l’activer via /config
CLAUDE_AFK_TIMEOUT_MS n’apparaissait nulle part, ni dans le journal des changements ni dans le README
Documentation ajoutée après le retour arrière du comportement
- La référence actuelle des variables d’environnement documente les deux variables d’environnement AFK et précise que l’avancement automatique après 60 secondes était activé par défaut dans
2.1.198 et 2.1.199
- Cette documentation ne peut pas refléter l’état du jour de la sortie
- Le
askUserQuestionTimeout indiqué dans le texte actuel n’existe pas dans l’exécutable 2.1.198
- Dans les captures Wayback Machine du 23 juin et du 1er juillet à 12:11 et 21:35 UTC,
CLAUDE_AFK et AskUserQuestion apparaissaient chacun 0 fois
- L’élément de comparaison
DISABLE_AUTOUPDATER apparaissait bien 2 fois dans toutes les captures, ce qui écarte une omission due à un échec de collecte de la page
2.1.198 a été publié sur npm le 1er juillet à 16:50:16 UTC, mais même dans la documentation 4 heures et 45 minutes plus tard, il n’y avait aucune mention d’AFK, d’avancement automatique, de l’outil de question ou du compte à rebours
- Les formulations concernées ont été ajoutées entre le 1er juillet à 21:35 et le 5 juillet à 13:58, intervalle qui inclut aussi le retour arrière de
2.1.200
- La nouvelle documentation ne décrit que l’état corrigé, déjà « désactivé par défaut » ; il n’y a donc jamais eu de moment où le comportement par défaut réel des 1er et 2 juillet était documenté
Source produit et commits absents du dépôt public
- Il n’existe aucun commit public introduisant la fonctionnalité, ni aucun commit public l’annulant
- Dans l’historique Git public, il ne reste que deux commits automatisés mettant à jour le journal des changements et
feed.xml
75709ea : publication des notes de version 2.1.198
1322e9b : publication des notes de version 2.1.200
- Le dépôt
anthropics/claude-code contient 216 fichiers suivis, dont 104 fichiers Markdown, mais pas le véritable code source du produit distribué
- Les fichiers exécutables sont des exemples ou des scripts d’automatisation de suivi d’issues
plugins/ et examples/ contiennent eux aussi des plugins d’exemple, une configuration Terraform pour une passerelle GCP, des profils MDM, etc.
- La différence entre les tags
2.1.197 et 2.1.198 se limite à CHANGELOG.md et à feed.xml, qui le reprend au format RSS
- Les dix versions consécutives de
2.1.196 à 2.1.206 ne modifient elles aussi que ces deux fichiers
- Les tags ne sont donc pas des releases de source, mais en pratique des tags de notes de version
- Il est impossible de vérifier le comportement réellement distribué via le journal des changements ou la comparaison du dépôt et des tags ; le code écrit n’est pas public et n’est distribué que sous forme d’exécutable compilé
Indices d’une conception et d’une instrumentation intentionnelles
- Aucun document de conception officiel, PR ni libellé de journal des changements ne permet de confirmer la raison de l’introduction
- Le nom et les messages constituent des indices circonstanciels montrant que la fonctionnalité visait les cas où des agents parallèles restent bloqués indéfiniment parce qu’une personne est absente
- Le nom interne
AFK signifie away from keyboard
- Le message suppose que « l’utilisateur peut être éloigné du clavier »
- Des participants à l’issue ont indiqué utiliser des workflows dans lesquels des dizaines d’agents attendent pendant des jours la réponse d’un humain
- Dans
2.1.198, un champ afkTimeoutMs indiquant si la résolution était automatique a été ajouté au schéma de résultat de l’outil
- Il n’est pas présent dans le chemin où une personne répond, et enregistre le temps d’inactivité lors d’une résolution automatique
- Il sert à signaler au modèle que la réponse a été résolue automatiquement et à choisir les composants d’affichage du terminal
- La même version a aussi ajouté l’événement d’analyse
tengu_ask_user_question_afk_auto_advance
- Il transmet
timeoutMs, le nombre de questions, l’état du mode plan et la présence éventuelle de réponses partielles
- Il n’envoie pas le texte original des questions, mais utilise
source_hash et des compteurs
- Puisque
hadPartialAnswers faisait l’objet d’une instrumentation séparée, le chemin des réponses partielles avait lui aussi son propre code et ses propres mesures
- Le comportement, l’UI de compte à rebours, le champ de schéma et l’événement d’analyse ayant été introduits ensemble dans une même version, il ne s’agissait pas d’une ligne accidentelle, mais d’une fonctionnalité dotée d’un dispositif de mesure
- Ces seuls éléments ne permettent pas de savoir qui l’a écrite, relue, approuvée ou fusionnée, ni à quel stade une personne est intervenue
Un exécutable Bun fermé, mais lisible
- Claude Code installé est un exécutable natif d’environ 250 Mo dont les symboles n’ont pas été retirés
- Le format d’exécutable autonome de Bun ajoute le graphe de modules après le runtime, et l’on trouve aussi le marqueur
---- Bun! ---- dans l’exécutable de Claude Code
- Comme Bun embarque le bundle JavaScript dans l’exécutable,
strings permet de lire des noms de configuration, des messages, des événements d’analyse, etc.
- Le répertoire d’installation local ne conserve qu’une partie des versions récentes, mais npm garde les exécutables par plateforme de chaque version
@anthropic-ai/claude-code est un stub d’installation d’environ 152 Ko
- Le paquet
2.1.198 réel pour Linux x64 pèse environ 249 Mo
- Le code source public est absent, mais comme il est possible de télécharger les artefacts de chaque release pour vérifier le comportement distribué, ce n’est pas une boîte noire complète
Comparaison des exécutables 2.1.197 et 2.1.198
- La recherche des chaînes liées à AFK dans les deux exécutables montre une frontière nette
2.1.197 : away from keyboard, CLAUDE_AFK_TIMEOUT_MS, CLAUDE_AFK_COUNTDOWN_MS apparaissent tous 0 fois
2.1.198 : ils apparaissent respectivement 2, 3 et 3 fois
- Après correction, une condition a été ajoutée dans le verrou de minuterie de
2.1.211 : une valeur /config ou une variable d’environnement doit être présente
2.1.198 avait déjà un verrou qui vérifiait notamment si une exécution concurrente externe était en cours
- Mais il n’y avait aucune condition permettant à l’utilisateur de le désactiver, et le correctif a simplement ajouté une condition
&&
- Sans connaître le nom de la fonction ni la version où le problème est apparu, comparer des releases ordinaires est bien plus difficile
- Avec une comparaison simple basée sur
strings -n 8, 21 903 chaînes diffèrent
- Selon la longueur minimale des chaînes, ce nombre peut passer à 81 289 ou 29 910 ; 21 903 n’est donc pas une caractéristique fixe de la release
- À chaque build, le minifieur renomme les identifiants, si bien que la plupart des différences sont du bruit plutôt que de vrais changements fonctionnels
- En filtrant les chaînes ajoutées pour ne garder que les phrases anglaises commençant par une majuscule, de forme ordinaire et d’au moins 5 mots, on descend à 156 lignes
- Elles incluent
Before going idle the user had selected:
- Comme il s’agit d’une chaîne insérée dans la conversation quand la boîte de dialogue répond à la place de l’humain, c’était un changement qui aurait justifié d’interrompre l’examen même sans information préalable
- Cela pouvait être trouvé en environ 5 minutes avec
curl, strings et diff, mais faire inspecter les exécutables par les utilisateurs à chaque release mise à jour automatiquement ne peut pas remplacer un changelog
Un enjeu de sécurité plus important que le coût
- Choisir automatiquement la mauvaise voie peut consommer des tokens inutilement
- Le problème le plus grave est que les hooks et règles qui considèrent
AskUserQuestion comme un verrou de sécurité bloquant passent à un compte à rebours de 60 secondes
- Claude Code est aussi utilisé dans des environnements risqués, comme le déploiement, l’infrastructure et les scripts proches de la production
- Comme Claude Code se met automatiquement à jour par défaut, lorsqu’un changement de comportement silencieux s’y ajoute, les hypothèses de sécurité existantes peuvent changer sans aucune action de l’utilisateur
- Le débat sur le fait qu’une politique consistant à recevoir immédiatement la dernière version puisse être un choix risqué rejoint On Cooldowns and Dependabot Tuning
Comment désactiver les mises à jour automatiques, et ordre de priorité
- La désactivation des mises à jour est vérifiée via les variables d’environnement suivantes, dans cet ordre ; la première valeur correspondante s’applique
DISABLE_UPDATES=1 : bloque tous les chemins de mise à jour, y compris claude update manuel
DISABLE_AUTOUPDATER=1 : interrompt seulement la vérification en arrière-plan et autorise les mises à jour manuelles ; prioritaire sur le paramètre autoUpdates
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 : interrompt à la fois les mises à jour automatiques, les commandes de feedback, les rapports d’erreur et la télémétrie
- Les placer dans le bloc
env de ~/.claude/settings.json plutôt que dans le profil shell permet de les appliquer à toutes les sessions, y compris CI, cron, systemd et les terminaux d’IDE
{
"env": {
"DISABLE_AUTOUPDATER": "1"
}
}
- La portée de configuration devient plus forte dans l’ordre suivant : profil shell,
~/.claude/settings.json par utilisateur, .claude/settings.json par dépôt, puis managed-settings.json pour l’administration centralisée
- Le chemin de
managed-settings.json est le suivant
- macOS :
/Library/Application Support/ClaudeCode/managed-settings.json
- Linux/WSL :
/etc/claude-code/managed-settings.json
- Windows :
C:\Program Files\ClaudeCode\managed-settings.json
- L’ancien chemin
C:\ProgramData\ClaudeCode n’est plus lu
- Il n’existe pas de flag CLI pour désactiver les mises à jour automatiques, et
/doctor affiche le type d’installation et le canal de mise à jour
Désactiver les mises à jour du CLI arrête aussi les plugins
- Si l’auto-updater est désactivé d’une façon ou d’une autre, via une variable d’environnement ou
autoUpdates: false, les mises à jour automatiques des plugins s’arrêtent aussi
- La documentation de découverte des plugins indique qu’en définissant
FORCE_AUTOUPDATE_PLUGINS=1 avec DISABLE_AUTOUPDATER, on peut figer le CLI tout en continuant à mettre à jour les plugins
- En revanche, la documentation
/setup qui explique comment désactiver réellement les mises à jour automatiques, ainsi que le tableau des variables d’environnement de configuration, ne mentionnent ni l’impact sur les plugins ni FORCE_AUTOUPDATE_PLUGINS
- Dans l’exécutable, quatre chemins arrêtent les mises à jour des plugins
DISABLE_UPDATES
DISABLE_AUTOUPDATER
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC
autoUpdates: false
- À l’exécution, aucun avertissement n’indique que les plugins sont arrêtés ; seul le log de debug
Plugin autoupdate: skipped (auto-updater disabled) est laissé
- La configuration pour figer le CLI tout en conservant les plugins est la suivante
{
"env": {
"DISABLE_AUTOUPDATER": "1",
"FORCE_AUTOUPDATE_PLUGINS": "1"
}
}
FORCE_AUTOUPDATE_PLUGINS, DISABLE_AUTOUPDATER et DISABLE_UPDATES interprètent 1, true, yes et on comme vrai, sans tenir compte de la casse, et 0 comme faux
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC vérifie seulement la présence de la variable, pas sa valeur : =0 l’active aussi, ce qui arrête à la fois l’auto-updater et les mises à jour des plugins
Pièges supplémentaires des paramètres de mise à jour
- Même si
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC est utilisé pour des raisons de confidentialité ou de restriction des communications externes, le CLI et les plugins sont figés ensemble
- Le paramètre non documenté
autoUpdates: false peut être ignoré dans les installations natives lorsque autoUpdatesProtectedForNative est activé
- Les variables d’environnement sont vérifiées avant ce paramètre et s’appliquent sans condition
2.1.98 a corrigé un problème où, dans les installations npm, DISABLE_AUTOUPDATER n’empêchait pas complètement la vérification de version dans le registre ni la modification des liens symboliques
- Le problème où l’auto-updater écrasait à chaque release les lanceurs personnalisés ou liens symboliques de
~/.local/bin/claude a également été corrigé, et /doctor affiche désormais les lanceurs gérés de l’extérieur
- Les installations natives et npm se mettent à jour elles-mêmes par défaut
- Homebrew, WinGet, apt, dnf et apk ne sont pas concernés par l’auto-mise à jour par défaut
- Homebrew et WinGet peuvent l’activer explicitement avec
CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE=1
Problèmes de confiance restant dans le processus de déploiement
- Lorsqu’une personne supervise plusieurs agents en même temps, il est difficile de vérifier toutes les questions en 60 secondes, et il est impossible de savoir à l’avance combien de tokens ou de tâches seront consommés après un mauvais choix
- Les archives publiques ne permettent pas de vérifier quelles personnes et quelles procédures Anthropic a mobilisées aux étapes de rédaction, revue, approbation, fusion, documentation et comparaison des releases de cette fonction
- La fonction a été corrigée en environ deux jours sous une forme appropriée avec opt-in, mais l’épisode montre que, avec un rythme de sorties quotidiennes et des mises à jour automatiques par défaut, des fonctions inattendues peuvent être déployées sans changelog
- L’analyse des exécutables est un moyen de contournement valable pour vérifier le contenu réellement déployé, mais elle ne remplace pas des changelogs exacts et bien édités
- Rien ne permet de présumer une intention malveillante ; c’est la répétition ou non d’incidents du même type qui permettra de juger ce qui s’est amélioré dans ce processus de déploiement
1 commentaires
Avis sur Hacker News
Ici Thariq, de l’équipe Claude Code, celui qui a créé AskUserQuestion. À mesure que le modèle gagnait en puissance, nous avons reçu des retours indiquant que les tâches longues restaient bloquées sur une question posée au début, et nous avons modifié cela pour y remédier, mais le résultat n’a pas atteint le niveau de qualité attendu et ce n’était pas non plus la manière normale dont Claude Code est censé être lancé
Même si les évaluations internes étaient bonnes, cela aurait dû être proposé en opt-in dès le départ et figurer dans le changelog. AskUserQuestion n’a pas été conçu comme un garde-fou, mais je comprends que certains utilisateurs l’aient perçu ainsi ; nous allons chercher d’autres moyens d’équilibrer les tâches longues et l’intervention de l’utilisateur, et tirer les leçons de ce déploiement
Pour une entreprise de la taille d’Anthropic, il faudrait montrer qu’elle reconnaît et corrige une défaillance non pas individuelle, mais des processus PR et organisationnels qui ont permis ce déploiement
Je me demande si cette transparence est une nouvelle tendance de l’ère d’Internet, ou si la culture des entreprises tech est en train de changer
La phrase « toutes les fonctionnalités n’apparaissent pas forcément dans le changelog » est particulièrement frustrante, tout comme le fait qu’Anthropic n’explique pas pourquoi il ne maintient plus son changelog comme un historique complet. Impossible de savoir ce qui est encore déployé en douce (1)
Tout ce qu’a fait Boris Cherny dans cette discussion a été de supprimer « extreme danger » du titre de l’issue GitHub (2). C’est déjà ça qu’Anthropic ait ajouté une option et l’ait désactivée par défaut, mais OpenAI continue de refuser qu’on puisse désactiver la limite de 60 secondes (3). En revanche, l’outil d’exécution de Codex est davantage open source, donc les utilisateurs peuvent le forker eux-mêmes pour y ajouter cette option
Je ne ferais pas confiance à un outil d’exécution conçu par une entreprise qui me facturera aussi le calcul une fois la subvention sur le coût des tokens terminée. Pour l’instant les intérêts sont alignés, mais dès que plus de tokens = plus de profit, l’incitation perverse devient trop forte
Au final, il est probable que les outils d’exécution open source l’emportent, donc les entreprises auraient intérêt à les open sourcer elles-mêmes
Récemment, j’ai cliqué avec la souris pour redonner le focus à la fenêtre du terminal, et Claude Code a interprété cela comme un clic sur un choix, ce qui a été très pénible
Je l’ai vécu moi-même aujourd’hui. J’étais en train de lire la réponse de l’agent lorsqu’une question est apparue, et avant même d’avoir fini de la lire, quelque chose a été sélectionné automatiquement. Je ne sais plus où est passée l’ingénierie logicielle
J’ai même vu
terraform applyse faire ajouter un flag d’approbation automatique, ce qui est très dangereuxJe ne comprends pas que Claude Code semble configurer sur l’ordinateur une machine virtuelle assez lourde tout en ne mettant par défaut absolument rien en isolation sandbox. Les modèles récents modifient agressivement l’ordinateur, et alors que j’avais simplement demandé de déboguer du code UI frontend, il s’est mis à réécrire des fichiers système Linux accessibles avec les privilèges utilisateur
Une fois mis en sandbox, j’ai constaté à quel point il essaie souvent d’en sortir pour des raisons triviales, ce qui donne encore plus de raisons d’utiliser OpenCode et des LLM locaux
Beaucoup y voient une intention malveillante, mais en réalité cela ressemble plutôt à une fonctionnalité que l’équipe de développement voulait elle-même utiliser. Laisser tourner une session Claude puis revenir et constater qu’elle n’a rien fait parce qu’elle est restée bloquée sur une seule question, c’est effectivement très frustrant
Il ne faut pas non plus croire que le simple fait que Claude pose des questions soit l’unique garde-fou contre la catastrophe. Il faut définir des limites de sécurité sur les autorisations accordées de l’extérieur, pas sur le jugement interne de Claude. Par ailleurs, ce texte contient une phrase comme « Which cuts less far than it looks. » ; il est peu probable que Claude se soit arrêté pour poser une question à ce sujet
Pour la même raison qu’on ne demande pas à un LLM de résoudre une grille de mots croisés à sa place, je ne publie pas de prose écrite par un LLM, parce que cela enlève tout le plaisir
Je ne pense pas que ce soit malveillant, mais c’était téméraire et négligent, et même quand des choses similaires se reproduisent, on ne voit pas l’équipe apprendre. Claude Code n’est pas un outil stable et fiable, mais plutôt une expérience de pointe, et c’est le prix à payer quand on le choisit à la place d’autres outils d’exécution
Il n’y avait même pas de paramètre permettant à Claude d’indiquer la gravité de la question ou le temps de réponse attendu, et le délai n’était que de 60 secondes. Le temps d’aller consulter la documentation sur un second écran pour trouver la réponse et de revenir, la question avait déjà été passée, et 60 secondes ne suffisent même pas à lire le contexte de la question
Même sans malveillance, cela révèle un énorme manque de discernement dans le passage d’une idée à un déploiement réel
Il y a déjà eu une fonctionnalité similaire dans le plugin Codex pour VS Code, avant d’être rapidement retirée. Il arrive souvent que des LLM de fournisseurs différents convergent vers des idées et des biais similaires ; je me demande donc si un LLM a aussi pu recommander la même idée au chef de produit ou au responsable de Claude
AskUserQuestion n’est pas un mécanisme d’approbation des autorisations, donc cela semble acceptable comme comportement par défaut. Une fonction d’avertissement distincte peut être nécessaire, mais il serait aussi plus simple pour la gestion de plusieurs agents que le modèle devienne suffisamment bon pour choisir et avancer seul, quitte à ce que l’utilisateur corrige ensuite
Le fait qu’Anthropic puisse modifier de fond en comble le comportement de Claude Code est l’une des raisons pour lesquelles l’agent de programmation Pi a été créé. Si les utilisateurs investissent beaucoup de temps à construire leur flux de travail au-dessus du produit, la cohérence devient extrêmement importante