Excessive token consumption: pre-push hook logs + Write vs Edit pattern

Resolved 💬 3 comments Opened May 1, 2026 by CodBad25 Closed May 5, 2026

Bug report — Consommation de tokens excessive (quota 5h cramé)

Date : 2026-05-01
Plan Anthropic : Pro/Max
Claude Code version : 2.1.118
OS : macOS Darwin 25.4.0

---

Symptôme

Augmentation importante et inhabituelle de la consommation de tokens dans le quota 5h, coïncidant avec :

  • Plusieurs fenêtres de terminal actives en parallèle (5 projets différents le même jour)
  • Réponses très longues de l'agent (parfois > 13K chars en un seul tool_result)
  • Builds pre-push hook qui spamment des logs de bundle à chaque commit

---

Mesures objectives sur 1 session

Projet : projet Vite + React (frontend)
Taille du transcript .jsonl : 11.9 MB
Approximation tokens : ~312 000 tokens (chars/4) sur cette seule session

Répartition

| Composante | Items | Chars | % | ≈ Tokens |
|---|---|---|---|---|
| Mes textes assistant | 263 | 162 522 | 13.0% | 40 630 |
| tool_use (mes inputs aux outils) | 583 | 397 141 | 31.8% | 99 285 |
| tool_result (sorties des outils) | 583 | 665 994 | 53.3% | 166 498 |
| Messages utilisateur | 114 | 23 229 | 1.9% | 5 807 |
| TOTAL | | 1 248 886 | 100% | 312 221 |

Plus de 50% du quota consommé par les sorties des outils, dont une grande partie redondante.

Top 10 tool_results les plus volumineux (en chars)

23 467  →  Réponse d'un sub-agent explore (1 seul appel)
13 665  →  Read d'un composant React (1214 lignes)
13 587  →  Build pre-push hook (commit 1)
13 433  →  Build pre-push hook (commit 2)
13 245  →  Build pre-push hook (commit 3)
13 244  →  Build pre-push hook (commit 4)
13 242  →  Build pre-push hook (commit 5)
13 240  →  Build pre-push hook (commit 6)
13 228  →  Build pre-push hook (commit 7)
12 660  →  Build pre-push hook (commit 8)

8 builds pre-push quasi-identiques = ~106 000 chars (~26 500 tokens) pour des logs Vite répétitifs qui ne servent qu'à confirmer "build OK".

Top tool_use (inputs aux outils)

29 573 chars  ·  Write fichier TypeScript (réécriture complète au lieu d'Edit)
27 958 chars  ·  Write composant React (réécriture complète)
21 427 chars  ·  Write composant React (re-réécriture)
13 379 chars  ·  Write fichier APEX
 9 604 chars  ·  Edit fichier TypeScript (gros patch)

Pattern problématique : l'assistant choisit Write (réécriture totale) au lieu de Edit (patch ciblé) sur des fichiers de plusieurs centaines de lignes. Coût × 10 à × 50 par opération.

---

Sessions parallèles le 1er mai 2026

11.9 MB  ·  projet A  (session principale)
 8.6 MB  ·  projet B
 4.4 MB  ·  projet C
 3.5 MB  ·  projet D
 1.3 MB  ·  projet E
─────────
~29.7 MB de transcripts sur la journée, soit ~7M tokens approx

→ Plusieurs sessions actives en parallèle peuvent expliquer une consommation totale élevée du quota 5h, mais l'utilisateur reporte aussi avoir vu les mêmes blocs de texte se répéter entre fenêtres, suggérant un possible comportement de duplication de l'agent entre instances.

---

Hypothèses sur la cause de l'inflation

  1. Hooks bash globaux verbeux : le hook pre-push exécute pnpm build qui sort tous les chunks Vite (~13K chars). À chaque push. Pas de filtrage. Cette sortie remplit le contexte sans valeur ajoutée (un "Build OK" suffirait).
  1. Choix Write vs Edit sous-optimal : l'assistant ne minimise pas la taille des inputs. Les Write complets de fichiers > 500 lignes devraient être l'exception, pas la règle.
  1. Sous-agents qui rapportent verbeusement : un seul appel à un sub-agent peut renvoyer 23K chars d'un coup. Pas de cap par défaut.
  1. Multiples system-reminder répétés : la conversation contient de nombreux rappels système identiques injectés (TaskCreate reminder vu 8+ fois dans la session).
  1. Pas d'avertissement quand le quota approche d'une limite : pas de "tu as consommé 80% de ton quota 5h" pour permettre à l'utilisateur d'arrêter à temps.

---

Demandes pour Anthropic

Côté Claude Code (CLI)

  1. Filtrer/tronquer automatiquement les longs outputs de hooks (build logs, etc.) — par défaut garder seulement la dernière ligne ou les erreurs.
  2. Préférer Edit à Write dans les guidelines de l'assistant pour les fichiers > N lignes.
  3. Imposer une enveloppe de tokens par tool_result au-delà de laquelle on tronque ou on demande confirmation.
  4. Indicateur de quota visible : afficher une jauge "X% du quota 5h consommé" en bas du terminal (status line).
  5. Alerte avant duplication : si l'utilisateur ouvre une nouvelle fenêtre Claude Code, signaler "Vous avez déjà N sessions actives. Risque de duplication de réponses."

---

Reproduction

Difficile à reproduire sans accès aux mêmes transcripts. Mais le scénario typique :

  1. Avoir un hook pre-push qui fait pnpm build (projet Vite).
  2. Demander à Claude Code de faire 5-10 commits avec push dans une session.
  3. Vérifier la consommation : chaque push ajoute ~3K-5K tokens de logs identiques au contexte.

Le scénario Write vs Edit se reproduit aussi facilement : demander à l'assistant de modifier 2 lignes dans un fichier de 600 lignes — il choisit souvent Write (réécriture totale) plutôt que Edit ciblé.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗