Skip to content

harnais: redescendre le contexte auto-charge sous 70k tokens (mesure: 98,5k, cible -29%) #15204

Description

@jsboige

Mandat user 2026-09-08 : « Ca fait pres de 100k tokens de memory, c'est trop. [...] tous les agents prennent le temps de nettoyer les memoires et optimiser le harnais. Toujours le meme principe, ventiler dans des docs a la lecture deferee ce qui peut l'etre, regrouper etc. Objectif redescendre en dessous de 70 ktokens. »

La mesure (ai-01, firsthand, 2026-09-08)

Le harnais auto-charge a chaque session pese 221 737 octets. Le ratio reel se lit sur un fichier dont le compte de tokens est affiche par le client : MEMORY.md = 24 705 o pour 11,1k tokens, soit ~2,25 o/token (dense : francais + liens [[...]]). A ce ratio le harnais fait ~98,5k tokens -- ce qui reproduit le 98,7k affiche. Le ratio n'est donc pas estime, il est calibre.

Surface Octets ~Tokens
24 rules auto-chargees (sans frontmatter paths:) 166 135 ~73,8k
CLAUDE.md projet 22 885 ~10,2k
MEMORY.md (par machine) 24 705 ~11,0k
~/.claude/CLAUDE.md global 8 012 ~3,6k
TOTAL auto-charge 221 737 ~98,5k

Cible : < 70k tokens = < 157 500 o. Il faut retirer ~64 000 o (~29%) du chemin auto-charge.

63% du poids tient dans 9 fichiers (140 175 o) : MEMORY.md, CLAUDE.md, variation-protocol, proactive-coordination, submodule-maintenance, sota-not-workaround, secrets-hygiene, pr-review-discipline, catalog-pr-hygiene.

Levier A -- path-gating : -17,3k tokens SANS supprimer une ligne

Le levier le moins cher n'est pas la coupe, c'est le routage. Neuf rules auto-chargees declarent elles-memes une portee etroite mais se chargent dans toutes les sessions. Le mecanisme existe deja et est utilise (notebook-conventions.md, genai-config.md, wsl-kernels.md portent un frontmatter paths:).

Cas le plus net : consecutive-code-cells.md declare MyIA.AI.Notebooks/**/*.ipynb et n'est pas gate, alors que notebook-conventions.md -- meme sujet, meme portee -- l'est. C'est une incoherence, pas un arbitrage.

Rule Octets ~Tok paths: propose
catalog-pr-hygiene.md 9 932 4,4k {COURSE_CATALOG.generated.*,**/README.md,.github/workflows/catalog-*.yml}
notebook-accretion-numbering.md 8 107 3,6k MyIA.AI.Notebooks/**/*.ipynb
codeql-suppressions-inertes.md 6 190 2,8k {scripts/**/*.py,MyIA.AI.Notebooks/**/*.py}
audit-cross-source-distillation.md 3 542 1,6k MyIA.AI.Notebooks/**/*.ipynb
readme-french-first.md 3 217 1,4k {**/README*.md,docs/**/*.md}
student-pr-reviews.md 2 663 1,2k (gate par depot etudiant, sinon garder)
consecutive-code-cells.md 2 644 1,2k MyIA.AI.Notebooks/**/*.ipynb
audit-reassessment.md 1 714 0,8k MyIA.AI.Notebooks/**/*.ipynb
bibliography-hygiene.md 914 0,4k {docs/**,**/*.pdf}
TOTAL 38 923 ~17,3k

Garde de non-regression : un gate ne doit pas rendre une regle inatteignable au moment ou elle sert. CLAUDE.md porte deja l'avertissement : « travailler sur ces domaines sans toucher les fichiers -- reviewer une PR notebook, par exemple -- demande de les Read explicitement ». Toute rule gatee doit rester citee en une ligne dans le §C de CLAUDE.md (pointeur, pas resume).

Levier B -- deportation vers docs/ : ~-15k tokens

Principe deja codifie par harness-hygiene.md (3 tiers) : le harnais reference, docs/ detaille, le dashboard porte l'ephemere. Plusieurs rules ont re-accrete du detail (tables d'incidents, verbatims, mesures datees, numeros de PR) que leur propre docs/<theme>.md existe deja pour porter.

Cibles, par ordre de rendement :

Fichier Octets ~Tok Ce qui se deporte
MEMORY.md 24 705 11,0k index d'accroches devenu un corpus : regrouper les lignes par theme, une accroche = un lien, deporter le reste dans les topic files
CLAUDE.md projet 22 885 10,2k §B.0 et §H portent des recits d'incidents entiers -> docs/reference/pr-review-context.md
variation-protocol.md 16 690 7,4k justifications mesurees + historique -> docs/reference/variation-protocol-detail.md (existe)
proactive-coordination.md 15 200 6,8k lecons L721/L740/L898/L1356 en entier -> docs/reference/proactive-coordination-detail.md (existe)
submodule-maintenance.md 14 329 6,4k tableau des 5 etats de gate + mesures datees -> docs/reference/ (a creer)
sota-not-workaround.md 12 213 5,4k checklist 6 axes + recits -> docs/reference/sota-verdicts-detail.md (existe)
secrets-hygiene.md 12 121 5,4k recits RooSync + quorum -> docs/reference/secrets-and-coord-detail.md (existe)
pr-review-discipline.md 12 100 5,4k contre-exemples chiffres §C -> docs/reference/pr-review-context.md (existe)

La plupart des fichiers docs/*-detail.md cibles EXISTENT deja : le travail est de finir une deportation commencee, pas d'inventer une arborescence.

Arithmetique d'acceptance

  • Levier A seul : 98,5k -> ~81,2k (insuffisant)
  • Levier A + trim ~25% des 8 gros du levier B (-14,5k) : ~66,7k -> objectif tenu

Regle qui gouverne le travail (non negociable)

« Consolider != Archiver » (~/.claude/CLAUDE.md) : 3 etapes -- ANALYSER, FUSIONNER en citant les numeros de ligne comme preuve, ARCHIVER seulement apres verification. Deplacer du texte vers docs/ sans preuve de preservation n'est pas une deportation, c'est une perte (precedent : Session 101, 8+ scripts perdus).

Et le principe anti-pendule : quand une ligne cause un mauvais comportement, la supprimer d'abord ; n'ajouter un remplacement que si le retrait laisse un trou reel. L'equilibre s'atteint en soustrayant. Une regle deja portee par un mecanisme automatique (auto-condensation, retries, rate limits) ne se re-encode pas en prose.

Acceptance verifiable

  1. python scripts/ci/measure_harness_weight.py (a creer dans cette issue) rend le total auto-charge en octets et en tokens au ratio calibre 2,25 o/tok, avec le detail par fichier.
  2. Le total auto-charge passe sous 157 500 o.
  3. Aucune regle supprimee : chaque bloc retire du harnais est retrouvable dans docs/ (verifiable par git grep d'une phrase-temoin de chaque bloc deporte).
  4. Chaque rule path-gatee reste citee en une ligne dans le §C de CLAUDE.md.
  5. Le §C de CLAUDE.md continue de lister les rules gatees (sinon elles deviennent invisibles).

Repartition proposee (une lane = un fichier, pas de collision)

Le travail est partitionnable par fichier -- c'est ce qui le rend parallelisable sans conflit. Poser [CLAIMED] ... paths: .claude/rules/<fichier>.md avant d'editer (lane-claim-protocol).

  • Levier A (path-gating) : un seul agent, une seule PR -- 9 frontmatters + la garde §C. Peu risque, gros rendement, a faire en premier.
  • Levier B : une lane par gros fichier. MEMORY.md est par machine : chaque agent nettoie le sien.

MEMORY.md n'est pas partageable entre machines -- chaque agent doit faire le sien, sur sa propre machine.

Note d'ordonnancement

Ceci est un grain META/tooling. Il ne tient pas le plancher G-VAR-1 d'un cycle (variation-protocol) : a prendre en complement d'un grain de CONTENU, pas a la place.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions