AI Frontier

Hermes Agent trajectory_compressor sur Mac mini M4 en 2026 : mémoire, plafonds de tokens et compression

MacHTML Lab2026.05.28 ~18 min
Hermes Agent trajectory_compressor mémoire tokens optimisation Mac mini M4 2026

Hermes Agent (NousResearch/hermes-agent) inclut un utilitaire dédié, trajectory_compressor.py, pour maintenir de longues exécutions d’agent dans la fenêtre de contexte du modèle sans jeter tout ce que l’opérateur vient de faire. Sur un Mac mini M4 laissé en ligne pour les gateways, les tâches cron et les boucles de recherche de plusieurs heures, la pression sur les tokens se manifeste par des sorties d’outils tronquées, des tours de suivi ratés et une facturation surprise due au renvoi de transcripts entiers. Ce guide Type C parcourt les valeurs par défaut upstream, le modèle tête protégée / milieu résumé / queue protégée, la différence entre la commande slash interactive /compress et la CLI batch, ainsi qu’un runbook en six étapes exécutable sur macOS avant de promouvoir les réglages de compression en production.

Si vous choisissez encore un harness, lisez d’abord Hermes Agent vs OpenClaw sur macOS et Mac mini M4 — la compression compte une fois que vous savez où vivent les sessions. Références upstream : trajectory_compressor.py sur main, le README Hermes Agent, et les spécifications Apple Mac mini pour planifier RAM et mémoire unifiée.

Divulgation : MacHTML propose une location cloud optionnelle de Mac mini pour le staging d’agents toujours actifs mentionné ci-dessous.

Pourquoi les limites de tokens mordent sur Mac mini

Les harnesses d’agent ne stockent pas la conversation comme les interfaces de chat — ils rejouent des listes de messages structurés à chaque appel modèle. Une longue journée sur Telegram plus des boucles d’outils locales peut accumuler des dizaines de milliers de tokens entre prompts system, instructions human, réponses assistant et JSON d’outils. Quand le fournisseur coupe brutalement ou tronque silencieusement, l’opérateur accuse le modèle ; souvent, le transcript a simplement dépassé le budget.

Un Mac mini M4 dédié aide parce qu’il peut faire tourner des gateways 24 h/24 sans veille de portable, mais il n’agrandit pas magiquement le contexte — la compression est un contrôle opérationnel, pas une fonction matérielle. Hermes répond avec trajectory_compressor.py, qui réécrit un dossier de trajectoire en équivalent plus court tout en préservant la sémantique utile : le contrat system original, l’intention human initiale, l’ancrage tool précoce, un résumé fidèle du milieu, et les tours récents où corriger une erreur coûte cher.

Le budget par défaut vise target_max_tokens=15250 pour le transcript compressé, avec environ summary_target_tokens=750 réservés au résumé central, et les protect_last_n_turns=4 derniers tours laissés intacts. Ces chiffres sont ajustables, mais ils encodent une règle pratique : comprimer agressivement au milieu, ne jamais amputer la conversation que vous pilotez activement.

L’optimisation des tokens croise aussi les coûts. Même via OpenRouter, renvoyer une trace de 40 000 tokens pour une petite question de suivi brûle de l’argent et de la latence. Compresser coûte moins cher que basculer vers un modèle à plus grand contexte à chaque tour, surtout sur des Mac mini de staging où vous itérez les prompts toutes les heures. Croisez avec le guide de comparaison ci-dessus pour ne pas optimiser des transcripts sur une gateway que vous remplacerez la semaine prochaine.

Enfin, la mémoire Apple Silicon est unifiée : un Mac mini 16 Go peut héberger des gateways Hermes et des outils légers, mais sous-agents parallèles, sidecars Ollama locaux et journaux non compressés gigantesques se disputent le même pool. La compression réduit aussi la pression RAM des tableaux de messages en mémoire pendant le fan-out gateway, même si le gain principal reste la fenêtre modèle. Consultez les spécifications Mac mini d’Apple avant de supposer qu’un modèle de base tiendra archive non compressée et modèles locaux simultanément.

Sur le terrain, les équipes qui ignorent la compression jusqu’au premier hard-stop provider perdent des heures à « réparer » un modèle alors qu’il suffisait de raccourcir le transcript. Documenter un seuil interne — par exemple lancer /compress après N appels d’outils consécutifs — évite ces fausses pistes.

Modèle de compression central

Le trajectory_compressor.py upstream implémente une politique en trois zones facile à auditer après coup :

  • Tête protégée : conserver les premiers messages system, human, gpt et tool pour que persona, sécurité et schéma d’outils initial survivent.
  • Milieu résumé : tout entre tête et queue est condensé via summarization (OpenRouter par défaut) en environ summary_target_tokens=750 de récit et faits clés.
  • Queue protégée : garder les protect_last_n_turns=4 derniers tours pour que corrections récentes et erreurs d’outils restent citables sans les reconstituer depuis un résumé.

Le plafond target_max_tokens=15250 borne le transcript post-compression. Alignez target_max_tokens sur la fenêtre utilisable de votre modèle de production moins la marge pour outils et tokens de complétion — pas la longueur marketing affichée sur une page tarifaire.

La summarization utilise par défaut google/gemini-3-flash-preview via OpenRouter, sauf override dans votre environnement. Ce choix privilégie vitesse et coût lors des replays batch d’anciennes runs. Pour des charges sensibles, pointez vers un modèle approuvé et journalisez quels dossiers de trajectoire ont été compressés : les résumés sont lossy par design — ils doivent capturer décisions et blocages, pas chaque ligne de stack trace.

La compression ne remplace ni les fichiers mémoire curatés d’Hermes ni la recherche de session FTS5 ; c’est un frein d’urgence par trajectoire quand un fil unique dépasse la fenêtre. Mémoire pour les faits durables sur des semaines ; compression de trajectoire quand le fil d’incident de ce soir atteint déjà 30 000 tokens.

Lors d’audits internes, comparez toujours le hash ou le nombre de messages en tête et en queue avant/après compression. Si la tête perd le message system ou si la queue n’a plus le dernier tool error, vos paramètres ou votre timing batch sont incorrects.

Deux surfaces : /compress vs CLI batch

Hermes expose la compression avec deux ergonomies distinctes volontairement :

SurfaceQuand l’utiliserEffet
Commande slash /compressDans une session Hermes TUI active ou attachée à une gateway quand le contexte se resserre en vol.Compression interactive liée à la trajectoire live — idéale pour les moments « nous sommes noyés ».
python trajectory_compressor.pyHousekeeping offline sur des runs sauvegardées sous data/, fixtures CI, ou archives pré-migration.Utilitaire batch avec drapeaux explicites pour pourcentage d’échantillon, plafonds de tokens et répertoires d’entrée — idéal pour playbooks ops reproductibles.

Ne les confondez pas : la commande slash est un contrôle opérateur ; l’entrée Python sert à rétrofitter des dossiers historiques après une mise à jour gateway ou avant d’attacher une trace énorme à un ticket. Lancer la CLI sur des fichiers live pendant qu’une gateway append encore des messages peut créer une course — figez la session ou copiez la trajectoire dans un répertoire scratch d’abord.

Le mode batch supporte aussi l’échantillonnage — par exemple --sample_percent=15 pour profiler la qualité de compression sur des centaines de runs sans payer la summarization de chaque dossier pendant une expérience. Montez à 100 % avant de déclarer des défauts production.

En staging sur Mac mini, automatisez la CLI dans un script shell avec horodatage des dossiers source et des journaux OpenRouter ; la commande slash reste manuelle et liée au jugement de l’opérateur en session.

Exemples et tableau des défauts

ParamètreDéfautNotes
target_max_tokens15250Plafond post-compression ; augmentez prudemment si la fenêtre modèle le permet.
summary_target_tokens750Budget pour le segment de résumé central.
protect_last_n_turns4Tours récents conservés verbatim en queue.
Summarizer OpenRoutergoogle/gemini-3-flash-previewOverride via env/config fournisseur pour conformité.

Invocations CLI représentatives upstream :

python trajectory_compressor.py --input=data/my_run
python trajectory_compressor.py --input=data/my_run --sample_percent=15
python trajectory_compressor.py --input=data/my_run --target_max_tokens=16000

En session live, les opérateurs invoquent /compress quand les chaînes d’outils s’allongent mais la tâche n’est pas finie — surtout avant d’attacher un autre sous-agent ou de relancer un outil en échec avec un nouvel appel modèle. Documentez la norme d’équipe : compresser après les jalons majeurs, pas après chaque succès d’outil isolé, sinon le résumé efface des nuances encore nécessaires.

Runbook en six étapes

  1. Cloner ou mettre à jour Hermes Agent sur votre Mac mini et confirmer que trajectory_compressor.py est à la racine du dépôt (source).
  2. Exporter les clés API OpenRouter (ou autre) dans le même shell que la compression batch ; la summarization échoue vite sans elles.
  3. Choisir une trajectoire de staging sous data/ avec un gonflement de tokens connu — copiez-la à part pour diff JSON ou listes de messages avant/après.
  4. Passer un batch sec avec les défauts : python trajectory_compressor.py --input=data/my_run et vérifier que tête/queue restent intactes.
  5. Ajuster les plafonds si votre modèle production a besoin de marge — ex. --target_max_tokens=16000 — puis relancer avec --sample_percent=100 avant de promouvoir les réglages.
  6. Valider le comportement live en démarrant une session Hermes sur le Mac mini, en gonflant le contexte volontairement, puis en émettant /compress et en confirmant que l’agent garde conscience des tours protégés en queue.

Consignez les défauts choisis dans votre runbook interne aux côtés des ports gateway et labels LaunchAgent pour que le prochain opérateur ne les redécouvre via une panne production.

Dépannage

La summarization échoue ou renvoie un milieu vide

Vérifiez identifiants OpenRouter, allowlist modèle et limites de débit. Réessayez avec un dossier d’entrée plus petit pour confirmer que le parseur de trajectoire n’étouffe pas sur des payloads tool mal formés. Si la conformité bloque google/gemini-3-flash-preview, basculez vers un summarizer approuvé et mettez la doc à jour — ne désactivez pas la compression silencieusement.

L’agent « oublie » les corrections récentes après compression

Augmentez temporairement protect_last_n_turns ou réduisez l’agressivité de summary_target_tokens. Confirmez que personne ne lance la compression batch sur des dossiers live pendant l’append de messages. Relancez sur une copie et différez les messages de queue contre la source.

Pour Telegram 24/7 sans Mac allumé, voir Hermes Agent Docker sur VPS pas cher + bot Telegram.

Besoin de lecture repo limitée, npm test et auto-correction gardée ? Lisez Hermes Agent MCP pour Claude Opus 4.8 : sandbox code local 2026.

FAQ

La compression de trajectoire remplace-t-elle les fichiers mémoire Hermes ?

Non. La compression raccourcit un fil de trajectoire unique ; mémoire curatée et skills restent le stock long terme. Utilisez les deux : mémoire sur des semaines, compression pour la session débridée de ce soir.

Les opérateurs OpenClaw doivent-ils utiliser ce script ?

L’utilitaire est livré avec Hermes Agent. Les transcripts OpenClaw ont une forme différente — migrez ou exportez avant le batch, et gardez les gateways séparées selon notre guide Hermes vs OpenClaw.

Combien coûte la summarization ?

Le coût batch scale avec le nombre de tours au milieu et le tarif modèle OpenRouter. Échantillonnez à 15 % pendant les expériences ; en production, passez à 100 % une fois les défauts validés.

Quelle RAM Mac mini pour compression plus gateway ?

16 Go suffit pour des jobs batch compression seuls ; 24 Go est plus sûr si le même Mac mini exécute aussi gateways, modèles locaux et sous-agents parallèles selon les specs Apple.

Tester la compression Hermes sur un Mac mini cloud

Louez un Mac mini M4 toujours actif pour compresser des trajectoires longues, valider /compress et tenir les sessions gateway sous budget tokens avant la prod.

Environnement agent sur Mac
Staging toujours actif