context-window-manager
Visualise et gère la fenêtre de contexte — alertes à 40%, stratégies de compression, monitoring en temps réel.
Quand l'utiliser (Trigger)
Déclenchement standard selon le contexte de l'écosystème Hermès.
Mode d'emploi (Usage)
Mode d'emploi standard via l'agent Hermès. Context Window Manager
Gère proactivement la fenêtre de contexte d’Hermes pour éviter la dégradation de qualité et les dépassements. Combine visualisation en temps réel, alertes précoces, et stratégies d’action par palier.
🎯 Pourquoi c’est critique
La qualité des réponses se dégrade avant d’atteindre la limite de contexte :
| Usage | Impact |
|---|---|
| < 40% | ✅ Performance optimale |
| 40-60% | ⚠️ Dégradation légère — c’est le moment d’agir |
| 60-80% | 🔴 Perte de précision notable — compression ou /new recommandé |
| > 80% | 🚨 Risque élevé d’hallucinations et d’oublis |
⚙️ Setup (one-time)
1. Activer le footer de contexte dans les réponses
# Active le footer qui affiche model + % contexte utilisé
hermes config set display.runtime_footer.enabled true
# Configure les champs affichés
hermes config set display.runtime_footer.fields '[model, context_pct]'
✅ Après restart (ou /reset), chaque réponse inclut : [deepseek-v4-pro | ████████░░ 78%]
⚠️ Pitfall — fields format YAML
hermes config set stocke la valeur comme une chaîne YAML ('[model, context_pct]'), pas comme une vraie liste. Si le footer ne s’affiche pas, éditer le fichier directement :
# Corriger manuellement dans config.yaml
python3 -c "
import yaml
with open('/home/bf/.hermes/config.yaml') as f:
cfg = yaml.safe_load(f)
cfg['display']['runtime_footer']['fields'] = ['model', 'context_pct', 'cost']
cfg['display']['show_cost'] = True
with open('/home/bf/.hermes/config.yaml','w') as f:
yaml.dump(cfg, f, default_flow_style=None, sort_keys=False)
"
Format attendu : fields: [model, context_pct, cost] (pas de guillemets autour du crochet).
Champs disponibles pour fields
| Champ | Description |
|---|---|
model | Nom du modèle actif |
context_pct | % fenêtre de contexte utilisé |
cost | Coût estimé de la session |
cwd | Répertoire de travail courant |
Toggle via slash command
Alternative sans restart : /footer on / /footer off en session.
✅ Après restart, chaque réponse inclut : [deepseek-v4-pro | ████████░░ 78%]
2. Baisser le seuil de compression à 40%
# Hermes compresse automatiquement le contexte — on abaisse le seuil
hermes config set compression.enabled true
hermes config set compression.threshold 0.40
hermes config set compression.target_ratio 0.25
3. Définir la taille de contexte du modèle (si non-détectée)
# Pour deepseek-v4-pro (128K tokens)
hermes config set model.context_length 131072
# Pour deepseek-v4-flash (128K tokens)
hermes config set model.context_length 131072
Quick reference — Aide-mémoire rapide
Un script shell est disponible dans le skill (scripts/context-menu.sh) pour afficher les outils en un coup d’œil :
# Depuis le dossier du skill :
bash ~/.hermes/skills/devops/context-window-manager/scripts/context-menu.sh
# Ou via l'alias recommandé (à ajouter dans ~/.bashrc) :
alias ctx="bash ~/.hermes/skills/devops/context-window-manager/scripts/context-menu.sh"
Usage : ctx → affiche le menu des 5 outils de gestion de contexte.
Ou dans le chat Hermes : demander « menu contexte » ou « affiche les outils » pour obtenir la même liste sans quitter la conversation.
Animation du footer
Le footer Hermes affiche aussi le répertoire de travail courant (~/.hermes/hermes-agent par défaut). Si un autre dossier s’affiche (ex: ~/openclaw-workspace), c’est que Hermes a été lancé depuis ce répertoire. Solution : ajouter un alias qui cd automatiquement :
alias hermes="cd ~/.hermes/hermes-agent && /home/bf/.local/bin/hermes"
Le footer activé affiche context_pct à chaque réponse. C’est le signal le plus fiable.
Format typique : [deepseek-v4-pro | ████░░░░░░ 42%]
Commande /usage
/usage
Affiche la répartition détaillée : tokens input/output, coût, nombre de tours, et utilisation du cache.
Check manuel rapide
/status
Montre l’ID de session, le modèle, le nombre de tours.
🎮 Commandes d’action par palier
🟢 < 40% — Tout va bien
Aucune action nécessaire. Continue normalement.
🟡 40-60% — Vigilance
| Commande | Effet |
|---|---|
/compress | Compression manuelle immédiate — réduit le contexte au target_ratio défini |
/usage | Vérifier ce qui consomme le plus (system prompt ? outils ? historique ?) |
Stratégie : Si tu arrives à 50%+ régulièrement, active la compression auto avec le setup ci-dessus.
🟠 60-80% — Action recommandée
/compress
La compression Hermes garde :
- Le system prompt
- Les skills chargés
- La mémoire
- Un résumé de l’historique récent
Elle supprime les anciens messages et les résultats d’outils obsolètes.
⚠️ Après compression, rappelle brièvement le contexte si nécessaire.
🔴 > 80% — Urgence
/new
Démarre une session fraîche. Résume le contexte critique en premier message.
Alternative si tu veux garder la session :
/compress
Puis rappelle au modèle ce qui est important.
🛡️ Stratégies proactives
1. Limiter les fichiers chargés automatiquement
Le system prompt charge MEMORY.md, USER.md, SOUL.md, AGENTS.md, etc. Si ces fichiers sont trop volumineux, ils grèvent le budget avant même le premier message.
# Vérifier la taille des fichiers de contexte
wc -l ~/.hermes/hermes-agent/MEMORY.md ~/.hermes/hermes-agent/USER.md ~/.hermes/hermes-agent/SOUL.md ~/.hermes/hermes-agent/AGENTS.md 2>/dev/null
Règle : Chaque fichier < 100 lignes. Au-delà, résumer.
2. Skills : charger uniquement ce qui est nécessaire
Chaque skill chargé avec skill_view() ajoute du contenu au contexte. Pour les tâches simples, évite de charger des skills volumineux.
3. Utiliser /steer pour les rappels légers
Au lieu de répéter des instructions dans chaque message :
/steer N'oublie pas : on est en mode concis, réponse directe.
Le message est injecté après le prochain tool call, sans alourdir l’historique visible.
4. Déléguer les sous-tâches lourdes
delegate_task isole le contexte — le subagent travaille dans sa propre fenêtre, et seul le résumé revient.
delegate_task(goal="Analyser ce fichier de 5000 lignes", context="...")
5. /new préventif
Pour les longues sessions de travail, faire /new toutes les 10-15 interactions lourdes garde le contexte frais.
📐 Anatomie du contexte Hermes
Comprendre ce qui consomme des tokens :
| Composant | Poids typique | Contrôle |
|---|---|---|
| System prompt | ~3-8K tokens | AGENTS.md, config |
| Skills chargés | 0-15K tokens | /skill, -s |
| Mémoire persistante | 0.5-3K tokens | memory tool |
| User profile | 0.5-2K tokens | USER.md |
| Historique conversation | Variable | /compress, /new |
| Résultats d’outils | Variable | Délégation, filtrage |
| Tool schemas | ~2-5K tokens | hermes tools |
Optimisation ciblée :
- System prompt trop lourd → réduire AGENTS.md
- Skills trop lourds → ne charger que ceux nécessaires
- Mémoire trop verbeuse → condenser avec memory tool
- Historique qui déborde →
/compress
🔧 Dépannage
Le footer n’affiche pas le % ou a disparu après un changement de modèle
Causes possibles :
- Format YAML incorrect —
hermes config setstockefieldscomme une chaîne YAML ('[model, context_pct]') au lieu d’une vraie liste. - Changement de provider — Après un switch (openai-codex → deepseek), le footer peut ne plus apparaître même si la config est bonne. Un
/resetougateway restartsuffit souvent. show_costdésactivé — Le champcostne s’affiche pas sishow_cost: falsedans config.yaml.
Solution complète :
hermes config set display.runtime_footer.enabled true
hermes config set display.runtime_footer.fields '[model, context_pct]'
hermes config set display.show_cost true
# Vérifier le format YAML dans config.yaml — fields doit être une vraie liste
grep -A3 runtime_footer ~/.hermes/config.yaml
# Si fields: '[model, context_pct]' (avec guillemets) → corriger en fields: [model, context_pct]
hermes gateway restart
La compression ne se déclenche pas
# Vérifier la config
hermes config show | grep -i compression
hermes config show | grep threshold
# Forcer la compression manuelle
# Dans la session : /compress
Le % semble incorrect
Le context_pct est calculé par le provider (basé sur model.context_length). Vérifie que model.context_length correspond bien au modèle :
# Chercher dans la config
grep context_length ~/.hermes/config.yaml
# deepseek-v4 = 131072
# claude-sonnet-4 = 200000
# gpt-4o = 128000
La compression supprime des infos importantes
La compression Hermes utilise un résumé intelligent. Si des infos critiques sont perdues :
- Sauvegarde-les dans la mémoire persistante (
memorytool) avant de compresser - Ou utilise
/newet résume le contexte dans ton premier message
📚 Références
- Configuration Hermes
- Slash commands
hermes config edit— voir toutes les options de compression
Absorbed: Caveman Agent
references/caveman-agent.md — Alternative context management approach: aggressive compression, priority-based pruning, and context budget allocation. Previously a standalone skill (caveman-agent). Use as a complementary strategy when the standard compression triggers are too conservative.
Absorbed: Session Checkpoint
references/session-checkpoint.md — Context checkpointing: save session state to .md, threshold detection at 80%, suggest /compact, log sessions with duration and token counts. Previously a standalone skill (session-reset).