Claude Code 2.1.277-278 : AGENTS.md, sandbox refermé, mode auto côté serveur

La 2.1.277 lit AGENTS.md par défaut, durcit la défense anti-injection sur trois fronts et referme un contournement du sandbox Bash. La 2.1.278 facture le mode auto côté serveur, sauf derrière certaines passerelles.

claude-code changelog permissions digest-dossier

Les 2.1.277 et 2.1.278 de Claude Code, sorties les 18 et 19 septembre 2026, se lisent comme deux versions très différentes. La 2.1.277 est une centaine de correctifs d'un coup, dont trois qui durcissent la défense contre l'injection de prompt, un qui referme un contournement du sandbox Bash et un qui change le fichier que Claude Code lit par défaut pour tes instructions de projet. La 2.1.278, sortie le lendemain, ne contient qu'un seul changement, mais il touche directement ta facture si tu es sur l'API Claude, en Enterprise, ou derrière Bedrock, Vertex ou Foundry. Voici ce qui compte.

AGENTS.md, un fichier de moins à écrire

Depuis la 2.1.277, Claude Code sait lire un fichier AGENTS.md comme instructions de projet, au même titre qu'un CLAUDE.md. La doc sur la mémoire résume l'intérêt : « a repository already set up for other coding agents works without adding a CLAUDE.md, an import, or a setting ». Si ton dépôt a déjà un AGENTS.md pour un autre agent de code, Claude Code s'en sert directement.

Le comportement par défaut mérite d'être lu deux fois : Claude ne lit AGENTS.md que si aucun CLAUDE.md, .claude/CLAUDE.md ou CLAUDE.local.md n'existe dans ton dossier de travail ou au-dessus, ce dernier y compris pour tes seules notes perso. Ne comptent pas pour ce test, et continuent de se charger à côté : ton ~/.claude/CLAUDE.md, le CLAUDE.md géré par ton organisation, et tes fichiers .claude/rules/. Ce choix se change dans « Project instructions » sous /config : le défaut claude-md-or-agents-md, claude-md-and-agents-md pour charger les deux à chaque fois, claude-md pour ne jamais lire AGENTS.md, ou managed-only pour t'en tenir au seul CLAUDE.md d'organisation.

Deux limites : la lecture directe d'AGENTS.md n'existe pas sur Bedrock, Vertex, Foundry, ni dans une session sans les feature flags d'Anthropic, télémétrie désactivée comprise ; il faut alors l'importer depuis un CLAUDE.md avec @AGENTS.md. Et un AGENTS.md ainsi chargé n'apparaît pas dans /memory ni dans Memory files sous /context : pour confirmer la lecture, cherche AGENTS.md loaded en début de session.

Sécurité : trois durcissements contre l'injection de prompt

Trois correctifs distincts de la 2.1.277 visent le même risque : qu'un texte lu par Claude, pas écrit par toi, se fasse passer pour une instruction légitime.

Le premier nettoie le prompt lui-même : les caractères Unicode invisibles, de formatage ou de balisage sont retirés avant l'envoi, et le prompt nettoyé s'affiche pour relecture. Le deuxième renforce une protection en place depuis la 2.1.210, le scan de sortie des sous-agents, qui « inserts a backslash into text that imitates Claude Code's own output » et alerte quand un rapport de sous-agent imite une balise système. La 2.1.277 va plus loin : le résultat d'un sous-agent arrive désormais sous un en-tête qui le marque explicitement comme tel, indenté, pour qu'aucune phrase à l'intérieur ne se fasse passer pour une instruction de la session elle-même.

Le troisième ne concerne que Bedrock, Vertex et Foundry : les prompts qu'un script de workflow calcule via agent() arrivent désormais au sous-agent encadrés comme du texte écrit par le script, pas comme une demande de l'utilisateur. Sur ces plateformes, le classificateur de sécurité pouvait auparavant lire ce texte généré comme si tu l'avais tapé toi-même. La doc sécurité parle d'analyse contextuelle pour repérer les instructions cachées : ces trois correctifs en sont une nouvelle couche, pas un mécanisme séparé.

Un sandbox qui laissait passer une commande entière

Le sandbox Bash confine ce qu'une commande peut toucher, fichiers et réseau, au niveau du système. Le réglage excludedCommands sert d'échappatoire volontaire : tu y listes les commandes, docker * par exemple, qui doivent tourner hors sandbox parce qu'elles sont de toute façon incompatibles avec l'isolation.

Le bug corrigé dans la 2.1.277 touchait les commandes composées, reliées par &&, ; ou un pipe. Si un seul segment correspondait à un motif d'excludedCommands, la commande entière sortait du sandbox, y compris les segments sans rapport avec le motif exclu. Une règle pensée pour laisser passer git status pouvait ainsi exempter tout un git status && rm -rf /chemin/sensible collé derrière. Depuis la 2.1.277, chaque segment doit correspondre à un motif exclu. La doc sur le sandbox le rappelle sans détour : sans isolation réseau ou fichier appliquée, « a compromised agent could exfiltrate sensitive files », exactement le scénario que ce contournement ouvrait. Si tu as des excludedCommands configurés, cette version vaut le détour.

Mode auto : le classificateur passe côté serveur, et ça change qui paie

En mode auto, un classificateur vérifie chaque commande shell ou requête réseau avant exécution, à la place de tes validations manuelles. Jusqu'ici, cette vérification passait toujours par une requête modèle à part, facturée comme le reste. La 2.1.278 change ça par défaut sur l'API Claude, en Enterprise, et sur Bedrock, Vertex et Foundry : le classificateur tourne désormais côté serveur, intégré à la requête modèle du tour en cours, sans facturation additionnelle.

Le hic apparaît derrière une passerelle réseau ou un proxy qui réécrit les en-têtes, laisse tomber des champs inconnus ou modifie les réponses : le serveur ne reçoit jamais la demande, et Claude Code retombe sur ses propres requêtes de classificateur, facturées comme avant. La doc dédiée est claire sur ce cas : rien ne casse, la session continue en mode auto, seule la facturation change, avec un avertissement affiché une fois par session. /status affiche désormais une ligne Auto mode server qui indique si les vérifications passent bien côté serveur pour la session en cours.

Si ta passerelle ne peut pas relayer ces vérifications, CLAUDE_CODE_AUTO_MODE_SERVER=0 revient directement à la facturation classique, sans l'avertissement. À noter : sur Bedrock, Vertex, Foundry et les passerelles Claude apps connectées, le mode auto ne fonctionne qu'avec Sonnet 5, Opus 4.7 ou plus récent, et Fable. Pro, Max et Team ne voient jamais cet avertissement.

Le reste, en vrac

  • claude -p et les sessions Agent SDK qui pouvaient rester bloquées sans résultat après une erreur interne signalent désormais l'erreur et sortent avec le code 1.
  • Des conversations qui échouaient à chaque requête avec « text content blocks must be non-empty », quand un tour assistant plus haut contenait un bloc de texte vide à côté d'autre contenu, y compris après un --resume ; corrigé.
  • L'outil Write ne termine plus silencieusement le tour comme une permission refusée quand le chemin cible est un dossier existant : il renvoie une erreur claire.
  • Grep et Glob renvoient une erreur explicite, plutôt que « aucun résultat », quand la recherche ne peut pas démarrer par manque de processus, de mémoire ou de descripteurs de fichiers.
  • Les messages tapés pendant que Claude travaille encore étaient parfois ignorés par le modèle ; ce n'est plus le cas.
  • L'outil TaskOutput est retiré : pour lire la sortie d'une tâche en tâche de fond, Claude utilise désormais Read sur son fichier de sortie. Les réglages taskOutputMaxChars et TASK_MAX_OUTPUT_LENGTH n'ont plus d'effet.
  • Les skills de projet ne se chargeaient pas dans les sessions --worktree quand .claude/skills n'était pas suivi par git ; corrigé.
  • Une reprise de session headless (claude -p --resume, le SDK, une fenêtre VS Code rechargée) partait avec un coût et un usage remis à zéro ; les totaux sont désormais sauvegardés à la sortie.
  • Trois pertes de cache de prompt sont corrigées : les sous-agents et coéquipiers repris réaffichaient les définitions d'outils MCP déjà chargées, les pièces jointes plus anciennes étaient réaffichées après une reprise, ce qui faisait aussi sauter le raisonnement étendu, et une session continuée après /clear perdait une partie de son premier message quand un hook SessionStart affichait du texte.
  • Une entrée malformée dans strictKnownMarketplaces ou blockedMarketplaces désactivait toute la politique de marketplace d'entreprise ; elle est désormais ignorée sans neutraliser le reste.

Ce qu'il faut retenir

Si tu ne retiens qu'une chose de la 2.1.277 : la défense contre l'injection de prompt gagne trois couches d'un coup, du nettoyage du prompt jusqu'à l'encadrement des sorties de sous-agents, plus un vrai contournement de sandbox refermé. AGENTS.md change une habitude pour qui migre depuis un autre agent de code, mais vérifie lequel de tes fichiers gagne avant de compter sur lui. La 2.1.278 ne demande aucune action sur un plan Pro, Max ou Team : seule une passerelle non conforme, ou Bedrock, Vertex et Foundry, garde la facturation du mode auto à surveiller.

Pierre Rondeau

Pierre Rondeau

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

LinkedIn