Hermes Agent (NousResearch/hermes-agent) поставляет утилиту trajectory_compressor.py, чтобы длинные запуски агента помещались в контекстное окно модели, не выбрасывая всё, что оператор только что сделал. На постоянно включённом Mac mini M4 с шлюзами, cron и многочасовыми research-циклами давление токенов проявляется обрезанным выводом инструментов, срывом следующих ходов и неожиданными счетами из-за повторной отправки целых транскриптов. Этот Type C материал разбирает upstream-дефолты, модель защищённой головы / сжатой середины / защищённого хвоста, различие интерактивной команды /compress и пакетного CLI, а также шестишаговый runbook на macOS перед выводом настроек сжатия в прод.
Если вы ещё выбираете harness, сначала прочитайте Hermes Agent vs OpenClaw на macOS и Mac mini M4 — сжатие имеет смысл после того, как определено, где живут сессии. Основные upstream-ссылки: trajectory_compressor.py на main, README Hermes Agent и спецификации Apple Mac mini для планирования RAM и unified memory.
Раскрытие: MacHTML предлагает опциональную облачную аренду Mac mini для always-on staging агентов, упомянутого ниже.
Почему лимиты токенов больно бьют на Mac mini
Agent harness не хранит диалог как чат-UI — при каждом вызове модели воспроизводится структурированный список сообщений. Один длинный день в Telegram плюс локальные tool-циклы легко накапливают десятки тысяч токенов из system-промптов, human-инструкций, ответов assistant и tool JSON. Когда провайдер жёстко обрывает или тихо обрезает, оператор винит модель; часто transcript просто превысил бюджет.
Выделенный Mac mini M4 полезен тем, что шлюзы могут работать 24/7 без сна ноутбука, но железо не расширяет контекст само по себе — сжатие это операционный контроль, а не функция чипа. Hermes решает это через trajectory_compressor.py, переписывая папку траектории в более короткий эквивалент с сохранением нужной семантики: исходный system-контракт, начальный human-замысел, раннее tool-grounding, точная сводка середины и последние ходы, где ошибки дороги.
Бюджет по умолчанию: target_max_tokens=15250 для сжатого transcript, около summary_target_tokens=750 на summary середины, последние protect_last_n_turns=4 хода дословно. Числа настраиваются, но кодируют практику: агрессивно сжимать середину, не ампутировать разговор, которым вы управляете прямо сейчас.
Оптимизация токенов пересекается со стоимостью. Даже через OpenRouter повторная отправка 40k trace на маленький follow-up сжигает деньги и latency. Сжатие дешевле, чем каждый ход переключать на модель с большим контекстом, особенно на staging Mac mini с почасовой итерацией промптов. Сверьтесь с сравнительным гайдом, чтобы не оптимизировать transcript на шлюзе, который замените на следующей неделе.
Память Apple Silicon unified: Mac mini 16 GB может держать Hermes gateway и лёгкие tools, но параллельные subagent, локальные Ollama sidecar и гигантские несжатые логи делят один пул. Сжатие снижает RAM-давление от огромных in-memory массивов сообщений при gateway fan-out, хотя главный выигрыш — окно модели. Смотрите спецификации Mac mini от Apple, прежде чем предполагать, что базовая конфигурация выдержит несжатый архив и локальные модели одновременно.
На практике команды теряют часы на «починку модели», игнорируя сжатие до первого hard-stop провайдера. Внутренний порог — например, /compress после N подряд tool-вызовов — экономит ложные расследования.
Базовая модель сжатия
Upstream trajectory_compressor.py реализует трёхзонную политику, удобную для post-audit:
- Защищённая голова: сохранить первые system, human, gpt и tool сообщения — persona, safety и начальная tool-схема переживают сжатие.
- Сжатая середина: всё между головой и хвостом сворачивается через summarization (по умолчанию OpenRouter) примерно в summary_target_tokens=750 narrative и ключевых фактов.
- Защищённый хвост: последние protect_last_n_turns=4 хода дословно, чтобы свежие правки оператора и tool-ошибки оставались доступны без реконструкции из summary.
Дефолт target_max_tokens=15250 — потолок post-compression transcript. Выравнивайте target_max_tokens с usable window прод-модели минус headroom для tools и completion — не с marketing context length на прайсинге.
Summarization по умолчанию google/gemini-3-flash-preview через OpenRouter, если не переопределите provider settings. Для compliance-sensitive нагрузок укажите одобренную модель и логируйте сжатые папки траекторий — summaries lossy by design: решения и blockers, не каждая строка stack trace.
Сжатие не заменяет curated memory Hermes или FTS5 session search; это аварийный тормоз на траекторию, когда один thread перерос окно. Memory на недели; trajectory compression, когда incident thread сегодня уже 30k tokens.
Два интерфейса: /compress и пакетный CLI
Hermes намеренно даёт два UX для сжатия:
| Интерфейс | Когда использовать | Что делает |
|---|---|---|
Slash /compress | В активной Hermes TUI или gateway-сессии, когда контекст сжимается mid-flight. | Интерактивное session-aware сжатие live траектории — для момента «мы тонем». |
python trajectory_compressor.py | Offline housekeeping на сохранённых runs в data/, CI fixtures, pre-migration archives. | Batch utility с явными флагами sample percent, token ceilings, input dirs — для воспроизводимых ops playbooks. |
Не путайте: slash — operator control surface; Python entrypoint retrofit исторических папок после gateway upgrade или перед attach огромной trace к тикету. CLI на live files пока gateway append может race — quiesce session или copy trajectory в scratch сначала.
Batch mode поддерживает sampling — например --sample_percent=15 при profiling качества сжатия на сотнях runs без оплаты summarize каждой папки в эксперименте. Поднимайте до 100% перед prod defaults.
Примеры и таблица дефолтов
| Параметр | Дефолт | Заметки |
|---|---|---|
target_max_tokens | 15250 | Потолок post-compression; повышать осторожно. |
summary_target_tokens | 750 | Бюджет middle summary segment. |
protect_last_n_turns | 4 | Последние ходы дословно в хвосте. |
| OpenRouter summarizer | google/gemini-3-flash-preview | Override через env/provider для compliance. |
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
В live session операторы вызывают /compress, когда tool chains удлинились, но задача не завершена — особенно перед attach subagent или retry failed tool с fresh model call. Зафиксируйте team norm: compress после major milestones, не после каждого tool success.
Runbook из шести шагов
- Клонируйте или обновите Hermes Agent на Mac mini и убедитесь, что
trajectory_compressor.pyлежит в корне репозитория (исходник). - Экспортируйте ключи OpenRouter (или выбранного провайдера) в той же оболочке, где запускаете пакетное сжатие; без них summarization сразу завершится ошибкой.
- Выберите тестовую траекторию в
data/с известным раздуванием токенов — скопируйте её для сравнения JSON или списков сообщений до и после. - Пробный пакетный прогон с дефолтами:
python trajectory_compressor.py --input=data/my_runи проверьте, что голова и хвост остались нетронутыми. - Настройте потолки, если прод-модели нужен запас — например
--target_max_tokens=16000— и перезапустите с--sample_percent=100перед фиксацией настроек. - Проверьте live-поведение: запустите сессию Hermes на Mac mini, намеренно раздуйте контекст, выполните
/compressи убедитесь, что агент помнит защищённые ходы в хвосте.
Зафиксируйте выбранные дефолты во внутреннем runbook рядом с портами шлюза и метками LaunchAgent, чтобы следующий оператор не «открывал» их заново через аварию в проде.
Устранение неполадок
Summarization падает или середина пустая
Проверьте учётные данные OpenRouter, allowlist моделей и rate limits. Повторите с меньшей входной папкой, чтобы исключить сбой парсера на битых tool payload. Если compliance блокирует google/gemini-3-flash-preview, переключитесь на одобренную модель и обновите документацию — не отключайте сжатие молча.
Агент «забывает» недавние правки после сжатия
Временно увеличьте protect_last_n_turns или снизьте агрессивность summary_target_tokens. Убедитесь, что пакетное сжатие не идёт по live-папкам, пока сообщения дописываются. Перезапустите на копии и сравните хвост с исходником.
Для круглосуточного Telegram без постоянно включённого Mac см. Hermes Agent Docker на дешёвом VPS + Telegram-бот.
Нужны чтение repo в scope, npm test и guarded auto-fix? Читайте Hermes Agent MCP для Claude Opus 4.8: локальная песочница кода 2026.
FAQ
Сжатие траектории заменяет файлы памяти Hermes?
Нет. Сжатие укорачивает один поток траектории; curated memory и skills остаются долгосрочным хранилищем. Используйте оба: memory на недели, сжатие для сегодняшней разросшейся сессии.
Нужно ли операторам OpenClaw этот скрипт?
Утилита поставляется с Hermes Agent. Транскрипты OpenClaw другой формы — мигрируйте или экспортируйте перед batch и держите шлюзы раздельно по нашему гайду Hermes vs OpenClaw.
Сколько стоит summarization?
Пакетная стоимость растёт с числом ходов в середине и тарифом OpenRouter. В экспериментах семплируйте 15%; в проде переходите на 100%, когда дефолты проверены.
Какой объём RAM Mac mini для сжатия плюс шлюз?
16 GB хватает для чисто пакетного сжатия; 24 GB безопаснее, если тот же Mac mini также крутит шлюзы, локальные модели и параллельных subagent — см. спецификации Apple.
Проверка сжатия Hermes на облачном Mac mini
Арендуйте всегда включённый Mac mini M4, чтобы пакетно сжимать длинные траектории, проверить /compress и удержать сессии шлюза в бюджете токенов до продакшена.