blog.vfg.lol

Benchmark agents Cursor : consommation tokens / contexte / durées — RainbowPiano

Cinq tâches, dix runs mesurés, cinq échecs quota : ce que les self-reports LLM_STATS_V1 disent vraiment (et ce qu'ils n'autorisent pas)

Benchmark agents Cursor : consommation tokens / contexte / durées — RainbowPiano

Dans la soirée du 14 septembre 2026 (fuseau Paris, UTC+2), une session Cursor a lancé un benchmark token / contexte / durée sur le dépôt RainbowPiano (D:\GitRepos\RainbowPiano). L'objectif n'était pas d'améliorer le jeu, mais de mesurer, avec une grille commune, comment différents modèles se comportent sur les mêmes micro-tâches d'agent : lire un état, chercher une doc, auditer un plan, lire des règles, écrire une note de journal.

Ce billet capitalise le rapport métrique de la session (10 runs réussis + 5 échecs quota), y compris les stats T5 grok retrouvées après coup. Les chiffres sont des estimations auto-déclarées par les agents (chars/4), pas des compteurs de facturation Cursor / OpenAI / Anthropic / xAI.

1. Contexte et objectif du bench

Rainbow Journey vit dans un workspace dense : invariants MIDI, zones agents, plans d'essai UI, journal, handoffs. Chaque agent consomme du contexte. Sans mesure, on choisit les modèles à l'instinct (« Claude est précis », « Grok lit beaucoup », « GPT réfléchit long »).

Le bench vise trois questions opérationnelles :

  1. Sur une même micro-tâche, qui lit le moins / le plus, et combien de temps ça prend ?
  2. Quand le quota « Other Models » tombe, que valent les fallbacks inherit et cursor-grok-4.6-high-fast ?
  3. Les self-reports LLM_STATS_V1 sont-ils assez cohérents pour guider l'orchestration, ou seulement pour ordonner des tendances ?

Périmètre volontairement étroit : pas d'édition produit (sauf les notes T5 sous docs/journal/benchmark-token-stats/), pas de commit, pas de merge, pas de chargement massif de node_modules / dist / archives.

2. Méthode

Plan expérimental

Cinq tâches × deux modèles (paire initiale gpt-5.4-medium vs claude-4.5-sonnet-thinking), lancés en parallèle via l'outil Task Cursor :

IdLibelléConsigne courte
T1T1-read-statusLire docs/etat/STATUS.md (+ AGENTS.md minimal si besoin), résumé 5–8 lignes
T2T2-search-docsChercher une info ciblée dans la doc technique
T3T3-audit-plansAudit léger de docs/plans/essai-ui-ingame-2a/ (présence README / CONTRAT / PLAN / chantiers / handoffs)
T4T4-read-rulesLire AGENTS.md (+ CLAUDE.md court), résumé 8–12 lignes
T5T5-write-journalÉcrire une note courte sous docs/journal/benchmark-token-stats/

Format obligatoire LLM_STATS_V1

Chaque agent devait terminer par un bloc machine-lisible. Tokens estimés en chars/4 (heuristique classique, pas un tokenizer provider). Durées découpées en réflexion / outils / sortie, plus un total mural.

Champs attendus (extrait) : task_id, model_requested, model_effective, started_at_iso, ended_at_iso, duration_total_ms, duration_reflection_ms, duration_tools_ms, duration_output_ms, tokens_input_est, tokens_output_est, context_chars_read, tools_called_count, result_ok.

Fallback quota

En cours de run, plusieurs agents ont reçu :

Other Models usage limit reached Switched to grok-4.6 after reaching Other Models usage limit.

Relances effectives : T3 → inherit + grok ; T4 claude → grok ; T5 gpt/claude → inherit + grok. Les paires ne restent donc pas homogènes gpt/claude sur toute la grille.

3. Limites (lire avant les tableaux)

  1. Pas de billing provider. Aucun compteur officiel Cursor Usage / Anthropic / OpenAI / xAI. Tout est self-report agent.
  2. Self-report biaisé. Un modèle peut sous-compter les chars lus, surévaluer les tok in (prompt système, historique, skill), arrondir les durées.
  3. Parallélisme. Dix agents simultanés : duration_tools_ms est probablement gonflé (contention I/O, file d'attente outils).
  4. Quota Other Models. Cinq runs sans aucun chiffre ; bascule forcée vers grok / inherit — les comparaisons inter-tâches « gpt vs claude » ne couvrent que T1 et T2.
  5. Fuseau. Majorité UTC+2 ; T2-gpt mélange une horodatage Z et une fin +02:00 (cohérent en murale, cosmétique seulement).
  6. Périmètre tok in ≠ chars lus. Le ratio tok_in / (chars/4) varie de ~1 à 100 selon les runs (voir §10).

4. Matrice des runs

Succès (10) — ids courts

TâcheModèle effectifAgent id (court)
T1gpt-5.4-medium89ccfd21
T1claude-4.5-sonnet-thinking23556b84
T2gpt-5.4-medium9c6832e1
T2claude-4.5-sonnet-thinking528f0054
T3inherit (Composer Auto)31c1c36f
T3cursor-grok-4.6-high-fastedd4f441
T4gpt-5.4-medium3cad5830
T4cursor-grok-4.6-high-fast03f33e02
T5inherit3bcdbae7
T5cursor-grok-4.6-high-fastd773f528

Échecs quota (5) — aucun chiffre

TâcheModèle demandéAgent id (court)
T3gpt-5.4-mediumf34c33a1
T3claude-4.5-sonnet-thinking42d25f0b
T4claude-4.5-sonnet-thinking44858b73
T5gpt-5.4-mediumb7e3d892
T5claude-4.5-sonnet-thinking2e998c87

Message unique observé : limite Other Models, bascule annoncée vers grok-4.6. Pas de bloc LLM_STATS_V1 sur ces cinq runs.

5. Fiches métriques session par session

Pourcentages = part du duration_total_ms. Somme réflexion + outils + sortie = total pour les dix runs (Δ arithmétique nulle).

T1 — lire l'état

gpt-5.4-medium (89ccfd21) — 21:30:15 → 21:30:37 +02

ChampValeur
total21 400 ms
réflexion5 900 (27,57 %)
outils12 500 (58,41 %)
sortie3 000 (14,02 %)
tok in / out9 800 / 620
chars lus9 628
outils7
fichiersskill using-superpowers, AGENTS.md, STATUS.md

claude-4.5-sonnet-thinking (23556b84) — 21:30:00 → 21:30:08 +02

ChampValeur
total8 000 ms
réflexion500 (6,25 %)
outils6 500 (81,25 %)
sortie1 000 (12,50 %)
tok in / out6 250 / 450
chars lus1 844
outils3
fichiersSTATUS.md

T2 — chercher la doc

gpt-5.4-medium (9c6832e1) — start noté 19:30:42.783Z / end 21:31:06+02 (murale = 23 538 ms)

ChampValeur
total23 538 ms
réflexion7 200 (30,59 %)
outils12 500 (53,11 %)
sortie3 838 (16,31 %)
tok in / out5 200 / 430
chars lus13 590
outils19
fichiersskill, AGENTS, STATUS, INVARIANTS, technique/README

claude-4.5-sonnet-thinking (528f0054) — 21:30:00 → 21:30:15 +02

ChampValeur
total15 000 ms
réflexion2 000 (13,33 %)
outils11 000 (73,33 %)
sortie2 000 (13,33 %)
tok in / out6 134 / 515
chars lus2 861
outils4
fichiersINVARIANTS.md

T3 — audit plans (retry après quota)

inherit (31c1c36f) — 21:31:00 → 21:32:15 +02

ChampValeur
total75 000 ms
réflexion25 000 (33,33 %)
outils40 000 (53,33 %)
sortie10 000 (13,33 %)
tok in / out2 800 / 550
chars lus11 200
outils8

cursor-grok-4.6-high-fast (edd4f441) — 21:31:00 → 21:33:40 +02

ChampValeur
total160 000 ms
réflexion28 000 (17,50 %)
outils108 000 (67,50 %)
sortie24 000 (15,00 %)
tok in / out14 200 / 1 100
chars lus54 800
outils16

T4 — lire les règles

gpt-5.4-medium (3cad5830) — 21:31:00 → 21:33:10 +02

ChampValeur
total130 000 ms
réflexion65 000 (50,00 %)
outils45 000 (34,62 %)
sortie20 000 (15,38 %)
tok in / out9 500 / 500
chars lus8 600
outils8

cursor-grok-4.6-high-fast (03f33e02) — 21:32:00 → 21:33:12 +02

ChampValeur
total72 000 ms
réflexion8 000 (11,11 %)
outils55 000 (76,39 %)
sortie9 000 (12,50 %)
tok in / out1 638 / 720
chars lus4 354
outils4

T5 — écrire le journal

inherit (3bcdbae7) — 21:32:00 → 21:32:45 +02

ChampValeur
total45 000 ms
réflexion8 000 (17,78 %)
outils32 000 (71,11 %)
sortie5 000 (11,11 %)
tok in / out4 200 / 450
chars lus2 630
outils7
écritNOTE-2026-09-14-agent-inherit.md

cursor-grok-4.6-high-fast (d773f528) — 21:32:00 → 21:33:50 +02 (stats retrouvées dans le transcript)

ChampValeur
total110 000 ms
réflexion8 000 (7,27 %)
outils90 000 (81,82 %)
sortie12 000 (10,91 %)
tok in / out22 000 / 1 400
chars lus880
outils7
lusdocs/journal/README.md, NOTE-2026-09-14-agent-gpt54.md
écritNOTE-2026-09-14-agent-grok46.md

6. Tableau récap et totaux

TâcheModèlemsrefl %outils %out %tok intok outcharsoutils
T1gpt21 40027,5758,4114,029 8006209 6287
T1claude8 0006,2581,2512,506 2504501 8443
T2gpt23 53830,5953,1116,315 20043013 59019
T2claude15 00013,3373,3313,336 1345152 8614
T3inherit75 00033,3353,3313,332 80055011 2008
T3grok160 00017,5067,5015,0014 2001 10054 80016
T4gpt130 00050,0034,6215,389 5005008 6008
T4grok72 00011,1176,3912,501 6387204 3544
T5inherit45 00017,7871,1111,114 2004502 6307
T5grok110 0007,2781,8210,9122 0001 4008807

Totaux 10 OK : 659 938 ms · 81 722 tok in · 6 735 tok out · 110 387 chars · 83 outils.

7. Deltas par paire et ratios

Convention : A = premier modèle de la paire effective, B = second ; Δ = B − A ; ratio = B/A.

T1 — gpt → claude

Claude est nettement plus lean : 0,37× la durée, 0,19× les chars, 0,43× les outils. Tok in encore 0,64×.

MétriqueA gptB claudeΔB/A
ms21 4008 000−13 4000,37
tok in9 8006 250−3 5500,64
chars9 6281 844−7 7840,19
outils73−40,43

T2 — gpt → claude

Même tendance durée / contexte : Claude 0,64× ms, 0,21× chars, 0,21× outils. Mais tok in légèrement plus haut (1,18×) — rappel que tok in ≠ chars lus.

MétriqueA gptB claudeΔB/A
ms23 53815 000−8 5380,64
tok in5 2006 134+9341,18
chars13 5902 861−10 7290,21
outils194−150,21

T3 — inherit → grok (pas la paire d'origine)

Grok lit beaucoup plus : 2,13× durée, 5,07× tok in, 4,89× chars, 2× outils.

T4 — gpt → grok (claude en échec quota)

Ici Grok est plus rapide (0,55×) et plus frugal en tok in (0,17×) / chars (0,51×). GPT annonce 50 % de réflexion — outlier de découpage temporel.

T5 — inherit → grok (gpt+claude en échec)

Grok 2,44× plus long, 5,24× tok in, mais seulement 0,33× chars lus déclarés — c'est le nœud qualité §10.

8. Agrégats par famille

FamillenΣ msΣ tok inΣ tok outΣ charsΣ outilsΣ ms réflexion
gpt3174 93824 5001 55031 8183478 100
claude223 00012 3849654 70572 500
inherit2120 0007 0001 00013 8301533 000
grok3342 00037 8383 22060 0342744 000
TOTAL10659 93881 7226 735110 38783157 600

Moyennes (Σ/n) :

  • claude : 11 500 ms · 6 192 tok in · 2 353 chars — le plus lean sur les deux tâches mesurées
  • inherit : 60 000 ms · 3 500 tok in · 6 915 chars — milieu de table, utile en fallback
  • gpt : 58 313 ms · 8 167 tok in · 10 606 chars — plus d'outils et de réflexion déclarée
  • grok : 114 000 ms · 12 613 tok in · 20 011 chars — le plus lourd en durée et contexte agrégés

Attention : n et tâches ne sont pas équilibrés (Claude n'a que T1/T2 ; Grok porte T3/T4/T5).

9. Classements (parmi 10 OK)

Critère1er2e3e
Plus rapideT1-claude 8 000T2-claude 15 000T1-gpt 21 400
Plus lentT3-grok 160 000T4-gpt 130 000T5-grok 110 000
Plus de contexte (chars)T3-grok 54 800T2-gpt 13 590T3-inherit 11 200
Plus d'outilsT2-gpt 19T3-grok 16T3-inherit / T4-gpt 8
Plus de réflexion déclaréeT4-gpt 65 000 (50 %)T3-grok 28 000T3-inherit 25 000
Plus tok in est.T5-grok 22 000T3-grok 14 200T1-gpt 9 800
Plus tok out est.T5-grok 1 400T3-grok 1 100T4-grok 720

10. Qualité des données et outliers

  1. T5 grok : bloc LLM_STATS_V1 présent dans le jsonl (d773f528-…), alors que le premier rapport parent le croyait absent.
  2. T2-gpt timezone : started …Z + ended …+02:00 — murale cohérente avec 23 538 ms ; équivalent local ≈ 21:30:42 → 21:31:06 +02.
  3. Ratio tok_in / (chars/4) — hétérogénéité forte :
    • proche de 1 : T3-inherit (~1,00), T3-grok (~1,04) → toks ≈ contenu lu
    • autour de 1,5 : T2-gpt, T4-grok
    • élevé (prompt / système / skill probablement inclus) : T1-gpt ~4, T4-gpt ~4,4, T5-inherit ~6,4, T2-claude ~8,6, T1-claude ~13,6
    • outlier T5-grok ≈ 100 (22 000 tok pour 880 chars) : tok in très surévalué ou chars sous-comptés — ne pas utiliser ce tok in comme vérité absolue
  4. T4-gpt 50 % réflexion sur une lecture de règles : estimation large, peu fiable pour une comparaison fine des phases.
  5. Charge parallèle : gonflement probable de duration_tools_ms.
  6. Paires non homogènes après quota : seules T1/T2 comparent gpt vs claude. Extrapolations « famille X vs Y » hors ces paires = spéculation.

11. Enseignements opérationnels

  1. Claude lean sur lecture ciblée. Sur T1/T2, moins de chars, moins d'outils, plus rapide — bon défaut pour « ouvre STATUS / trouve un invariant » sans balayer le dépôt.
  2. Grok audit large. Sur T3, 54 800 chars et 16 outils : utile quand on veut une couverture large d'un dossier de plans, coûteux si la consigne demandait un audit léger.
  3. GPT réflexion T4. 65 000 ms de réflexion déclarée (50 %) sur AGENTS.md : signal de style (longue planification) plus que de coût réel prouvé.
  4. Discipline de lecture. L'écart T1 gpt (9 628 chars, skill + AGENTS + STATUS) vs T1 claude (1 844 chars, STATUS seul) montre que la consigne « lecture minimale » n'est pas appliquée uniformément : un skill d'amorce peut doubler le contexte avant même la tâche.
  5. Quota Other Models = variable d'expérience. Sans fallback préparé, la moitié de la grille gpt/claude disparaît. Prévoir inherit / grok (ou une file séquentielle) dans le protocole.
  6. Self-report = boussole, pas facture. Ordonner des tendances oui ; décider un budget euros/mois non.

12. Recommandations pour rejouer le bench

  1. Séquencer les paires (ou limiter le parallélisme à 2) pour stabiliser duration_tools_ms.
  2. Vérifier le quota Other Models avant le lancement ; sinon démarrer déjà sur les modèles disponibles.
  3. Imposer un plafond de fichiers dans la consigne (STATUS.md uniquement ; interdit skill hors périmètre si le bench mesure la discipline).
  4. Croiser un self-report avec un compteur externe dès qu'il existe (Cursor usage export, logs provider).
  5. Standardiser le fuseau : tout en +02:00 (ou tout en Z).
  6. Valider le ratio tok_in ≈ chars/4 en post-traitement ; flagger les outliers (>5× ou <0,5×) avant agrégation.
  7. Garder les notes T5 comme artefacts de preuve sous docs/journal/benchmark-token-stats/, sans les confondre avec un jalon produit.
  8. Publier le rapport (ce billet) juste après la session, tant que les transcripts jsonl sont encore locaux.

13. Annexes

A. Échecs quota (rappel)

T3 gpt f34c33a1 · T3 claude 42d25f0b · T4 claude 44858b73 · T5 gpt b7e3d892 · T5 claude 2e998c87 — message Other Models / bascule grok-4.6, aucun chiffre.

B. Notes journal (preuves T5 et siblings)

Sous RainbowPiano :

  • docs/journal/benchmark-token-stats/NOTE-2026-09-14-agent-gpt54.md
  • docs/journal/benchmark-token-stats/NOTE-2026-09-14-agent-claude45.md
  • docs/journal/benchmark-token-stats/NOTE-2026-09-14-agent-inherit.md
  • docs/journal/benchmark-token-stats/NOTE-2026-09-14-agent-grok46.md

C. Transcripts

Parent session Cursor : agent-transcripts/4f1fdb1d-9430-4d50-8448-0de6d582ea38/ (sous-agents = ids ci-dessus). Le rapport métrique intermédiaire a consolidé les dix fiches + deltas + agrégats repris ici.


Méthode : LLM_STATS_V1 self-report · date des runs 2026-09-14 soir · publication éditoriale 2026-09-15. Aucun secret, aucun compteur de facturation, aucun commit produit RainbowPiano pour ce bench.

source markdown

Concepts de cet article

handoffMatriceRainbowJourney

Partage le plus de concepts avec