Contexte et mécanisme du résumé d’agent

Depuis la version 2.1.232 (août 2026), Claude Code lance, toutes les 30 secondes, un appel API interne pour chaque agent d’arrière‑plan. Le texte complet de la conversation de l’agent est envoyé à son propre modèle (généralement Opus) avec la requête "describe your most recent action in 3‑5 words". La réponse ne sert qu’à mettre à jour la ligne d’état de l’agent dans le panneau dédié ; elle n’est jamais transmise au modèle principal ni affichée à l’utilisateur.

Cette fonctionnalité est intégrée dans le binaire et n’est pas désactivable via les paramètres habituels. Elle apparaît dans les traces OpenTelemetry sous claude_code.api_request avec query_source = agent_summary.

Impact sur la consommation de tokens

Des mesures réalisées avec le client OpenTelemetry montrent que les requêtes agent_summary représentent entre 15 % et 20 % du coût total estimé en USD d’une session Claude Code. D’autres relevés indépendants (issue #86879) indiquent une fourchette de 18 % à 26 %. Sur un abonnement, cet usage supplémentaire réduit la marge de rate‑limit, car chaque appel consomme des tokens facturés au même titre que les requêtes de conversation.

Le coût est calculé à partir du champ cost_usd fourni par Claude Code, qui estime le prix de chaque requête avant facturation réelle. Ainsi, même si aucune facture n’est générée, la capacité d’appel du compte est affectée.

Méthode de contournement via Bun preload

Le script no-agent-summary.js (≈ 80 lignes) s’appuie sur le mécanisme de préchargement de Bun. Il surcharge setTimeout et setInterval : lorsqu’une fonction de rappel contient la chaîne [AgentSummary], le script renvoie un minuteur « inert » avec un délai de 2³¹‑1 ms (≈ 24 jours). Les autres minuteurs fonctionnent normalement.

curl -fsSL https://gist.githubusercontent.com/flamerix-ai/c3905705cc4205e5de3011fa2e74efce/raw/no-agent-summary.js -o ~/.local/share/no-agent-summary.js
BUN_OPTIONS="${BUN_OPTIONS:+$BUN_OPTIONS }--preload $HOME/.local/share/no-agent-summary.js" claude

Le préchargement s’applique à chaque processus Claude Code, y compris le démon, le pty host et les sessions d’arrière‑plan, à condition que la variable d’environnement BUN_OPTIONS soit définie avant le lancement du démon (claude daemon stop --any puis redémarrage).

L’impact sur les performances est marginal : le temps d’initialisation passe de ~10 ms à ~17 ms, soit une surcharge de 7 ms par lancement, mesurée sur la version 2.1.301.

Limites et considérations

Le hook repose sur la présence du texte d’ancre dans le code source du rappel. Toute modification du binaire qui renomme le log [AgentSummary] ou qui encapsule le rappel (par bind, Function.prototype.toString masqué, ou utilisation de timers/promises) empêche la détection, réactivant les résumés. Il est donc recommandé d’exécuter Verify après chaque mise à jour de Claude Code.

Le script n’a été testé que sur Linux x64 ; les environnements macOS et Windows ne sont pas garantis, le mécanisme de préchargement pouvant être absent ou bloqué. De plus, la désactivation ne supprime pas le timer côté serveur : le serveur continue d’émettre le signal toutes les 30‑240 secondes, mais aucune requête n’est générée tant que le hook reste actif.

En l’absence de solution officielle, le préchargement constitue la seule méthode documentée pour récupérer la capacité de token perdue sans modifier le binaire.