Claude Code 2.1.295 autorise un bloc de crochet échoué, et sa documentation dit toujours de ne pas s’en fier à un

L’article ne peut pas être activé avec JavaScript. Vous pouvez également activer JavaScript dans votre navigateur et sur la nouvelle page.

Claude Code 2.1.295 ajoute un paramètre appelé onFailure : « block ». Lorsqu’il est défini, une commande ou un hook HTTP « qui ne peut pas démarrer, expirer ou se terminer avec un code inattendu bloque l’action au lieu de la laisser passer », indique le journal des modifications. Sans cela, un crochet qui tombe n’arrête rien. Le registre npm place la version 2.1.295 à 18:22:58 UTC le 8 octobre.

Les hooks sont les commandes shell et les points de terminaison HTTP que Claude Code appelle avant et après qu’il fasse des choses, et l’une des raisons courantes d’en écrire un est d’empêcher quelque chose de se produire.

La documentation en direct décrit l’ancien comportement, et seulement cela

La référence des hooks d’Anthropic, lue à 21h04 UTC le 8 octobre, vous dit toujours de ne pas vous appuyer sur un seul : « Une commande expirée, un http ou un hook mcp_tool ne bloque pas l’appel de l’outil. L’appel continue tout au long du flux d’autorisation normal, alors ne comptez pas sur un hook bloqué pour agir comme une porte. » Pour les hooks HTTP, c’est plus direct : un statut non-2xx est une « erreur non bloquante, l’exécution continue », tout comme un échec de connexion.

Cette page ne contient aucune occurrence de onFailure, pas plus que le guide des hooks distincts d’Anthropic, tous deux lus à 21h04 UTC le 8 octobre. Deux documents Anthropic donnent des réponses différentes sur le même produit le même jour : l’un dit que le paramètre existe, l’autre dit qu’un hook échoué ne bloque pas.

Les délais d’attente par défaut rendent l’écart concret. La référence donne 600 secondes pour les hooks de commande, http et mcp_tool, 30 secondes pour les hooks d’invite et 60 pour les hooks d’agent, les trois premiers tombant à 30 lors de la soumission d’invite et des changements de modèle et à 10 sur l’affichage des messages. Les codes de sortie sont leur propre piège : Anthropic prévient que sans JSON valide sur la sortie standard, Claude Code traite le code de sortie 1 comme une erreur non bloquante « et poursuit l’action, même si 1 est le code d’échec Unix conventionnel ». Une famille de hooks n’a jamais eu ce problème, car un hook de rappel du SDK de l’agent qui dépasse son délai d’attente bloque l’appel de l’outil.

Deux sorties le 8 octobre ont toutes deux renforcé la garde

La version 2.1.294 a livré deux correctifs à 03:42:57 UTC le 8 octobre. Le premier : « Correction des invites et des hooks d’agent écrits sous forme d’instructions (telles que ‘Bloquer les commandes qui…’) autorisant ce qu’ils devraient bloquer. » La seconde ajuste la manière dont les hooks d’invite sur Stop et SubagentStop sont jugés, de sorte que Claude est moins susceptible de s’arrêter tôt.

La version 2.1.295 est arrivée 14 heures et 40 minutes plus tard, et il s’agit d’une version bien plus importante : les propres décomptes d’Anthropic sont de 13 améliorations et 97 corrections de bugs. Plusieurs autres d’entre eux sont des gardes qui ne tenaient pas. Le crochet d’un mod recevait une entrée d’outil profondément imbriquée coupée sans erreur, « afin qu’un garde puisse transmettre un contenu qu’il n’a jamais vu ». Les indicateurs –tools et –restricted ne s’appliquaient pas aux outils intégrés qui s’enregistraient après le lancement. Une règle de refus de site écrite avec le port 80 n’était pas appliquée par Claude dans Chrome aux pages HTTP simples sur cet hôte.

Le nouveau paramètre est opt-in. Rien sur les pages d’Anthropic n’indique que la valeur par défaut a changé, donc un hook écrit le mois dernier se comporte sur la version 2.1.295 de la même manière qu’il s’est comporté sur la version 2.1.294, à moins que son auteur ne revienne en arrière et ajoute la ligne. Les versions précédentes corrigeaient les gardes de la même manière, en renforçant une vérification plutôt qu’en modifiant une valeur par défaut : 2.1.288 fermait une route où un wrapper bash -c passait devant la garde sur des commandes rm destructrices, et les mods sont arrivés dans 2.1.287 avec un avertissement indiquant qu’ils ne sont pas en bac à sable.

Les numéros de version et les heures de publication ont été lus à partir du registre npm à 21h03 UTC le 8 octobre. Anthropic édite ses propres notes de version après la publication, donc une entrée datée du 8 octobre n’était pas nécessairement là le 8 octobre, et les citations ci-dessus sont ce que disait le journal des modifications lors de sa lecture à 21h04 UTC le 8 octobre.