Lorsqu’un agent IA enchaîne une vingtaine d’appels d’outils (lecture de logs, inspection Git, requêtes API via Model Context Protocol) au cours d’une même session, deux sources de gaspillage dégradent rapidement sa fenêtre de contexte et la facture API :
- En entrée (Tool Output Bloat) : les serveurs MCP et commandes CLI renvoient des payloads JSON verbeux, des en-têtes répétitifs et des centaines de lignes non pertinentes qui polluent l’attention du modèle ;
- En sortie (LLM Sycophancy & Fluff) : par défaut, le modèle entoure chaque diagnostic de formules de politesse, d’introductions paraphrasant la demande et de récapitulatifs redondants.
L’association du skill open-source Caveman (JuliusBrussee/caveman) et d’un filtre de compression MCP Caveman attaque ces deux goulets d’étranglement simultanément pour économiser jusqu’à 70 % de tokens sans perdre un seul octet de précision technique.
Caractéristiques
| Paramètre | Agent LLM Standard (Non filtré) | Agent avec Caveman + MCP Caveman |
|---|---|---|
| Sortie texte (Output LLM) | Paraphrases, formules de politesse, transitions génériques | -75 % de verbiage, 100 % des faits techniques conservés |
| Retour d’outils MCP (Input LLM) | JSON brut indenté, champs null et métadonnées inutiles | Élagage structurel (champs actifs, diff compact, troncature intelligente) |
| Économie moyenne de tokens | Référence (100 %) | -60 % à -70 % sur une session multi-étapes |
| Impact sur le Prompt Caching | Fenêtre saturée rapidement (éviction du cache) | Contexte stable et compact (taux de Cache Hit > 85 %) |
| Lisibilité humaine (Mobile / CLI) | Nécessite de scroller plusieurs écrans | Diagnostic, diff et preuve de test lisibles en un seul scan |
1. Caveman en sortie : -75 % de blabla, 100 % de précision technique
Créé par Julius Brussee (JuliusBrussee/caveman), le mode Caveman part d’un constat simple : le langage fleuri n’apporte aucune valeur ajoutée lors d’un débogage SRE ou d’une revue de code.
Concrètement, nous l’intégrons directement aux côtés de Ponytail dans .agents/rules/ponytail.md. L’agent reçoit l’interdiction formelle de produire du remplissage conversationnel, mais l’obligation stricte de conserver 100 % des preuves d’ingénierie :
- Ce qui est supprimé : les phrases d’accueil robotiques (« Bien sûr, je vais regarder cela avec plaisir ! »), la reformulation de la question et les conclusions génériques ;
- Ce qui est sanctuarisé : les liens cliquables vers les fichiers et lignes exactes, la cause racine (Root Cause), le
git diffchirurgical, les commandes exécutées et leurs codes retour (0).
–> En réduisant de 75 % la longueur des réponses générées, vous divisez par trois la latence de génération (Time-to-Last-Token), car les tokens de sortie (output tokens) sont à la fois les plus lents à produire et les plus coûteux (souvent 3x à 5x plus chers que les tokens d’entrée sur les modèles de pointe).
2. MCP Caveman en entrée : compresser les sorties d’outils avant le contexte
Dans une boucle agentique utilisant le Model Context Protocol (MCP), ce ne sont pas les messages de l’utilisateur qui consomment le plus de tokens, mais les réponses brutes des outils (git log, inspection Docker/Kubernetes, payloads REST/GraphQL).
Le pattern MCP Caveman consiste à appliquer un middleware d’élagage déterministe sur la sortie de chaque outil MCP avant de la renvoyer au LLM :
- Suppression des champs vides et du bruit JSON : retrait automatique des clés à valeur
null,"",[]ou{}et des métadonnées de pagination inutiles ; - Sérialisation compacte (YAML plat ou TSV) : remplacement des tableaux d’objets JSON répétitifs par un en-tête unique suivi de lignes tabulées (gain immédiat de 45 % sur les listes de conteneurs, de pods ou de tickets) ;
- Filtrage différentiel des logs : déduplication des lignes identiques consécutives avec compteur (
[x42]) et extraction ciblée autour des marqueurs d’erreur (ERROR,Traceback,panic).
# Exemple de filtre MCP Caveman appliqué aux retours d'outils JSON/Listes
def compress_mcp_payload(data: list[dict], keep_keys: tuple[str, ...]) -> str:
"""Convertit une liste JSON verbeuse en tableau compact sans clés répétées."""
if not data:
return "EMPTY"
header = " | ".join(keep_keys)
rows = [
" | ".join(str(item.get(k, "-")) for k in keep_keys if item.get(k) not in (None, "", [], {}))
for item in data
]
return f"{header}\n" + "\n".join(rows)
–> Combiné avec Graphify (qui remplace la lecture brute de dizaines de fichiers par une requête sur le graphe AST local), ce filtrage empêche la dégradation cognitive du modèle en milieu de session (Lost in the Middle).
3. Règle prête à l’emploi pour CLAUDE.md ou .agents/rules/
Voici le bloc déclaratif que vous pouvez ajouter directement dans vos règles d’agent pour activer la double compression :
# RÈGLE CAVEMAN & COMPRESSION CONTEXTUELLE
- Coupe 75 % de la verbosité en sortie sans perdre un seul octet de précision technique.
- Zéro introduction robotique, zéro formule de politesse, zéro paraphrase de la demande.
- Préserve 100 % des faits : chemins de fichiers cliquables, cause racine exacte, commandes exécutées, codes retour et métriques vérifiées.
- Lors des appels CLI/MCP, filtre les sorties à la source (options `--quiet`, `--no-pager`, projections JSON ciblées) pour ne jamais saturer la fenêtre de contexte.
| Commande | Description |
|---|---|
`JuliusBrussee/caveman`
| Skill open-source imposant des réponses ultra-denses (-75 % de verbiage en sortie). |
`git diff --stat / git log --oneline -n 10`
| Toujours préférer les drapeaux CLI compacts aux sorties brutes non bornées. |
`compress_mcp_payload()`
| Élague les champs null et convertit les listes JSON MCP en lignes tabulées compactes. |
`Graphify + MCP Caveman`
| Combo optimal : graphe AST pour cibler le fichier exact + retour d'outil compressé. |
4. Dépôts GitHub & Ressources Associées
- Caveman (Ultra-compressed LLM communication skill) : https://github.com/JuliusBrussee/caveman
- Anthropic Agent Skills & MCP : https://github.com/anthropics/skills
- Voir aussi sur le blog :
Si vous voulez plus d’information sur l’infrastructure vous pouvez voir mon repo à ce sujet : https://github.com/ravindrajob/InfraAtHome
