Excessive token consumption: pre-push hook logs + Write vs Edit pattern
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-pushhook 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
- Hooks bash globaux verbeux : le hook
pre-pushexécutepnpm buildqui 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).
- Choix
WritevsEditsous-optimal : l'assistant ne minimise pas la taille des inputs. LesWritecomplets de fichiers > 500 lignes devraient être l'exception, pas la règle.
- Sous-agents qui rapportent verbeusement : un seul appel à un sub-agent peut renvoyer 23K chars d'un coup. Pas de cap par défaut.
- Multiples
system-reminderrépétés : la conversation contient de nombreux rappels système identiques injectés (TaskCreate reminder vu 8+ fois dans la session).
- 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)
- Filtrer/tronquer automatiquement les longs outputs de hooks (build logs, etc.) — par défaut garder seulement la dernière ligne ou les erreurs.
- Préférer Edit à Write dans les guidelines de l'assistant pour les fichiers > N lignes.
- Imposer une enveloppe de tokens par tool_result au-delà de laquelle on tronque ou on demande confirmation.
- Indicateur de quota visible : afficher une jauge "X% du quota 5h consommé" en bas du terminal (status line).
- 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 :
- Avoir un hook
pre-pushqui faitpnpm build(projet Vite). - Demander à Claude Code de faire 5-10 commits avec push dans une session.
- 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é.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗