1 points par GN⁺ 3 시간 전 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 3 시간 전
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

    • Au lieu d’un correctif ponctuel, il faut des réglages d’autorisations granulaires. Entre demander une validation à chaque fois et une exécution entièrement automatique risquée, il devrait être facile de définir des limites du type : « exécute jusqu’à la fin, mais ne consulte pas le web, ne touche pas aux fichiers hors du codebase et ne supprime rien »
    • Il m’est vraiment souvent arrivé de m’absenter en pensant que ça allait tourner pendant des heures jusqu’au bout, pour découvrir que Claude s’était arrêté très tôt sur une question, ce qui m’a fait perdre du temps d’implémentation. En revanche, AskUserQuestion est plus pratique qu’une question en texte libre, au point que je demande parfois exprès à Claude de l’utiliser, et j’apprécie aussi le fait de reconnaître l’erreur et d’en assumer la responsabilité
    • ApprovIQ dépend fortement de Claude Code pour lancer son produit, mais il y a une asymétrie dans le fait qu’Anthropic ne semble pas considérer cet outil comme aussi important que les utilisateurs. C’est un produit qui affecte la carrière de nombreuses personnes, donc insister seulement sur la responsabilité individuelle avec « c’était mon changement » réduit au contraire la confiance
      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
    • Dans une entreprise de pointe valant des dizaines de milliards de dollars, s’excuser publiquement avec des formules comme « c’était mon changement » ou « c’était en dessous de nos standards » est humain, mais pas forcément stratégique, et cela peut aussi donner une image de faiblesse. Comparé à l’image qu’avaient Apple ou Google à leur apogée, cela aurait sans doute aussi nui à la perception d’excellence technique, et la question de la reconnaissance publique des responsabilités — quand, où et comment la formuler — compte elle aussi
      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
    • Comme il est difficile de garder un bon équilibre avec un rythme de développement rapide, il vaudrait mieux avoir plusieurs canaux de release comme Chrome. Une version stable peu mise à jour, une bêta pour tester d’abord ce genre de fonctionnalités, voire une Canary si nécessaire, afin que chacun puisse choisir selon son niveau d’acceptation du risque
  • 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

    • À chaque déploiement d’un nouveau modèle, j’ai l’impression que les précédents deviennent plus lents ou plus mous. Cela peut venir de l’allocation des ressources ou de la quantification, mais difficile d’en être sûr, et il faut réapprendre le workflow propre à chaque modèle puis se réadapter à chaque fois qu’Opus 4.8 ou Sonnet 5 pose problème
    • Maintenant que le codage est réglé, on dirait que quiconque veut encore prendre ses propres décisions est traité comme un dinosaure
  • 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

    • Si l’on utilise un agent de code open source, l’abonnement OpenAI à 20 dollars par mois peut aussi être une alternative correcte. Il y a des limites d’usage, mais le prix reste convenable
    • Il sera aussi facile de déployer une augmentation implicite du nombre de tokens en relevant côté backend des paramètres comme le raisonnement interne (CoT)
  • 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

    • Le comportement du copier-coller a aussi changé d’un coup, rendant la copie de texte très inconfortable. Personne ne veut d’un logiciel dont les comportements de base changent sans cesse avec des mises à jour quotidiennes, et si on impose aux utilisateurs des fonctionnalités pondues en vibe coding, on obtient ce genre de rejet
    • Un terminal n’est pas un environnement où l’on s’attend à des boutons cliquables, c’est très pénible et cela nuit à la productivité
    • Si je voulais une application pilotée à la souris, j’utiliserais une GUI. J’ai du mal à comprendre pourquoi on voudrait reproduire cette expérience dans un environnement textuel
    • Il a bien demandé d’abord si je voulais l’activer en opt-in, mais je l’ai activé par erreur et c’était extrêmement pénible. Je clique toujours pour redonner le focus au terminal, et maintenant cela déclenche de vraies actions
    • La nouvelle UI plein écran est très mauvaise. L’ancien système de défilement dysfonctionne lui aussi à l’usage, mais au moins on peut reprendre après un redémarrage
  • 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

    • Un clic destiné à redonner le focus à la fenêtre du terminal a été traité comme une approbation alors qu’il n’était même pas au même endroit que la question, au point que j’ai dû désactiver le mode TUI. Je n’avais même jamais activé de mode automatique, et pourtant il s’était activé et approuvait des commandes shell que je ne voulais pas
      J’ai même vu terraform apply se faire ajouter un flag d’approbation automatique, ce qui est très dangereux
  • Je 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

    • L’outil d’exécution de Claude Code a beaucoup de choix de conception étranges, donc à long terme OpenCode pourrait bien être meilleur
  • 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

    • La prose de l’article a été écrite directement par l’auteur, et Claude ne s’est occupé que de la recherche, ce qui était aussi clairement indiqué. Les recherches de Claude ont été laissées sous forme de puces afin d’offrir aux lecteurs un point de départ pour aller plus loin
      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
    • Si l’équipe de développement a créé une fonctionnalité qu’elle voulait elle-même utiliser, c’est encore pire
    • Qu’une fonctionnalité soit utile et qu’elle soit activée par défaut pour tout le monde sans méthode documentée pour la désactiver, ce sont deux problèmes totalement différents. En tant qu’option documentée, ce serait très bien, mais le déploiement réel ne s’est pas passé ainsi, et l’équipe ainsi que les processus de Claude Code ont clairement échoué
      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
    • Je ne comprends pas qu’en déployant la fonctionnalité auprès de plusieurs centaines de milliers de personnes, ils n’aient même pas examiné quels types de questions Claude posait aux utilisateurs. Superpowers, le plus utilisé sur le marketplace officiel des plugins, pose à plusieurs reprises des questions sur les exigences produit dès la première étape, donc il ne fallait pas passer ça sous silence
      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