Тюнинг Hermes Agent: модели, память и контроль расходов
Коротко. Тюнинг Hermes Agent — это три рычага, и все они настраиваются в одном файле ~/.hermes/config.yaml. Модели: у агента есть основная модель и около десятка служебных задач — сжатие истории, анализ картинок, проверка команд, заголовки сессий, фоновый разбор диалога. По умолчанию все они идут через основную модель, то есть по её цене. Плюс есть цепочка запасных моделей fallback_providers на случай сбоя. Память: два небольших файла, MEMORY.md (2 200 символов) и USER.md (1 375 символов), полнотекстовый поиск по прошлым сессиям и по желанию одно внешнее хранилище. Расходы: сначала измеряем командами /usage и hermes insights, потом сокращаем. Главные способы: дешёвая модель для служебных задач, сжатие длинных диалогов и аккуратность с кэшем промпта, который ломается при каждой смене модели посреди сессии. Ниже конкретные ключи, команды и значения по умолчанию. Всё сверено с исходным кодом и документацией проекта.
На чём это проверено
Все ключи конфигурации, команды и значения по умолчанию сверены с исходным кодом и документацией Hermes Agent v0.21.5 (релиз v2026.9.24 от 24 сентября 2026 года — последний стабильный на момент проверки, 2 октября 2026 года). Hermes обновляется часто, а значения по умолчанию иногда меняются между версиями. Поэтому перед правкой боевого конфига сверьтесь с официальным справочником по конфигурации для вашей версии. Узнать её можно командой /version в сессии.
Статья предполагает, что агент уже установлен и первично настроен: провайдер подключён, модель выбрана, мессенджер отвечает. Если нет, сначала пройдите установку Hermes Agent и первичную настройку: ключи, модель и мессенджер. Если вы пользуетесь OpenClaw, у нас есть отдельный разбор тюнинга OpenClaw: механика похожа, но ключи другие.
Два правила на весь текст.
- Правьте конфиг командами
hermes config set <ключ> <значение>илиhermes config edit(откроет файл в редакторе). Проверить текущее значение можно так:hermes config get <ключ>. Где лежит файл, покажетhermes config path. - Изменения применяются к новым сессиям. Уже открытый чат продолжает работать на том, с чем стартовал. Для мессенджеров новая настройка действует со следующей новой сессии. Чтобы применить её сразу ко всем, перезапустите шлюз:
hermes gateway restart. Исключение — ключи сжатияcompression.*иmodel.context_length: шлюз подхватывает их со следующего сообщения.
Часть 1. Модели
Основная модель и служебные задачи
В Hermes два вида «слотов» для моделей. Основная модель думает: через неё идёт каждое сообщение, каждый вызов инструмента, каждый ответ. Вспомогательные модели (auxiliary) выполняют служебную работу. У каждой задачи свой слот:
| Задача (ключ) | Что делает | Когда менять |
|---|---|---|
compression | Пишет резюме старой части диалога, когда история становится длинной | Почти всегда, если основная модель дорогая: для пересказа рассуждающая модель не нужна |
vision | Анализирует изображения и скриншоты | Когда основная модель не умеет работать с картинками |
approval | Решает, можно ли автоматически одобрить безопасную команду (режим умных подтверждений) | Здесь нужна быстрая и дешёвая модель, дорогая — пустая трата |
title_generation | Придумывает заголовки сессий | Если важны скорость и цена |
background_review | Фоновый разбор диалога: что сохранить в память, какой навык обновить | На загруженных агентах — об этом во второй части |
skills_hub, mcp, curator | Поиск навыков, маршрутизация инструментов MCP, ревизия навыков | Обычно можно оставить как есть |
Ключевая деталь: по умолчанию у всех служебных задач стоит provider: auto. Это значит «использовать основную модель». Если основная модель — дорогая рассуждающая, то и пересказ истории, и заголовок сессии оплачиваются по её тарифу. Документация Hermes прямо предупреждает, что на дорогих моделях служебные задачи заметно добавляют к счёту.
Как сменить основную модель
Основной способ — интерактивная команда:
hermes model
Она проведёт через выбор провайдера, авторизацию и выбор модели из рекомендованного каталога. Результат запишется в model.provider и model.default. Следом команда предложит выбрать уровень рассуждений (agent.reasoning_effort). Без явного значения используется medium, а более высокий уровень даёт лучшие ответы на сложных задачах ценой токенов и задержки. В этом же меню есть пункт Configure auxiliary models...: там можно назначить модель каждой служебной задаче, не открывая YAML.
Внутри сессии, в терминале или в Telegram, модель меняют slash-командой:
/model <модель> --provider openrouter # только текущая сессия
/model <модель> --provider openrouter --global # сессия + запись в config.yaml
/model <модель> --once # только на один следующий ответ
Флаг --once удобен, чтобы задать один трудный вопрос дорогой модели и сразу вернуться к обычной. Модель возвращается после ответа, ошибки или прерывания, и ничего не сохраняется в конфиг.
Почему не стоит менять модель посреди длинного разговора
Кэш промпта у провайдеров привязан к модели. Любая смена модели посреди диалога сбрасывает его: ручное переключение через /model, автоматический переход на запасную модель или смена аккаунта внутри пула ключей. После этого следующий запрос заново читает всю историю по полной цене входных токенов, а не со скидкой за кэш. На длинной сессии такое разовое перечитывание может стоить больше, чем вся разница в цене между моделями. Даже --once ломает кэш дважды: при переключении туда и обратно.
Поэтому Hermes переспрашивает, прежде чем сменить модель в сессии, где контекст уже больше 100 000 токенов. Порог задаётся ключом:
model:
switch_context_confirm_tokens: 100000 # 0 — не спрашивать
Практическое правило: менять модель лучше в начале разговора или сразу после /new.
Дешёвая модель для служебных задач
Самая выгодная правка в этой статье — увести сжатие истории и проверку команд на быструю недорогую модель. Пример для OpenRouter (модель взята из документации Hermes; на 2 октября 2026 года она есть в каталоге OpenRouter, но подставить можно любую быструю модель вашего провайдера):
auxiliary:
compression:
provider: openrouter
model: google/gemini-3-flash-preview
approval:
provider: openrouter
model: google/gemini-3-flash-preview
Для каждой служебной задачи можно отдельно снизить глубину рассуждений: ключ auxiliary.<задача>.reasoning_effort принимает значения от none до ultra. Например, low для сжатия. Основной диалог от этого не меняется.
Важное ограничение для модели сжатия. Её контекстное окно должно быть не меньше, чем у основной модели: в неё целиком отправляется средняя часть разговора. Если окно меньше, вызов упадёт с ошибкой длины контекста, и, по документации, средние реплики будут выброшены без резюме. Агент молча забудет кусок диалога. Перед тем как назначать модель для сжатия, проверьте её окно.
На этом этапе становится понятно, сколько здесь ручной работы. Нужно подобрать пары моделей, проверить их окна, перезапустить шлюз, а потом неделю смотреть на счёт и сверять, что сжатие не теряет нужное. Если на такие итерации нет времени, настроим Hermes Agent под предсказуемый счёт за модели и будем поддерживать эти настройки, когда меняются модели и нагрузка.
Запасные модели на случай сбоя
Если основной провайдер отвечает ошибками, Hermes может переключиться на другую пару «провайдер + модель», не теряя историю разговора. Проще всего настроить цепочку интерактивно:
hermes fallback add # тот же выбор провайдера и модели, что в hermes model
hermes fallback list # текущая цепочка (алиас: ls)
hermes fallback remove # убрать запись (алиас: rm)
hermes fallback clear # очистить всё
В конфиге это выглядит так:
fallback_providers:
- provider: openrouter
model: anthropic/claude-sonnet-4
У каждой записи обязательны оба поля, provider и model; запись без одного из них игнорируется. Переключение срабатывает при лимитах запросов (HTTP 429) и ошибках сервера (500, 502, 503), но только после того, как исчерпаны повторные попытки. При ошибках авторизации (401, 403) и «модель не найдена» (404) оно срабатывает сразу. Число повторов задаёт agent.api_max_retries, по умолчанию 3. Если запасная модель настроена и вы хотите, чтобы агент переключался быстрее, документация предлагает поставить 0.
Помните о цене переключения: переход на запасную модель тоже сбрасывает кэш промпта. Цепочка запасных моделей — это про надёжность, а не про экономию.
Если вы работаете через OpenRouter
OpenRouter перепродаёт одни и те же модели от разных площадок. Секция provider_routing управляет тем, кому уйдёт запрос:
provider_routing:
sort: "price" # price — дешевле; throughput — быстрее генерация; latency — быстрее первый токен
data_collection: "deny" # не отправлять запросы площадкам, которые сохраняют данные
Есть ещё белый и чёрный списки площадок (only, ignore) и явный порядок (order). Эта секция работает только с OpenRouter. При прямом подключении к провайдеру и через Nous Portal она игнорируется.
Подагенты и «удешевлённые» модели
Если агент раздаёт подзадачи подагентам, их можно запускать на модели дешевле основной: ключи delegation.provider и delegation.model. Пустые значения означают «как у родителя».
Отдельно о моделях с суффиксом -contributor. Они дешевле, потому что поставщик может обучаться на ваших запросах и ответах. При ручном выборе такой модели Hermes всегда показывает предупреждение. В задачах без человека (cron, рабочие процессы Kanban) такие модели по умолчанию не запускаются: подтвердить согласие там некому. Для агента, через которого идёт переписка с клиентами, это вопрос не экономии, а того, кому вы передаёте данные.
Часть 2. Память
Как устроена встроенная память
| Файл | Что хранит | Лимит |
|---|---|---|
MEMORY.md | Заметки агента: окружение, договорённости, усвоенные уроки | 2 200 символов (около 800 токенов) |
USER.md | Профиль пользователя: предпочтения, стиль общения, роль | 1 375 символов (около 500 токенов) |
Оба файла лежат в ~/.hermes/memories/. Агент сам ведёт их инструментом memory: добавляет, заменяет и удаляет записи. В начале каждой сессии содержимое загружается в системный промпт как замороженный снимок. Всё, что агент запишет по ходу разговора, сразу сохраняется на диск, но в промпт попадёт только в следующей сессии. Так задумано, чтобы не ломать кэш промпта.
Память не сжимается автоматически. Если новая запись не помещается в лимит, инструмент возвращает агенту ошибку, и тот в том же ходе сам объединяет или удаляет старые записи, а потом повторяет попытку. Лимиты меняются ключами:
memory:
memory_enabled: true
user_profile_enabled: true
memory_char_limit: 2200
user_char_limit: 1375
write_approval: false
Поднимать лимиты стоит осторожно. Память целиком входит в каждый промпт, поэтому каждый лишний символ оплачивается в каждом запросе. Для сведений, которые нужны только в конкретной задаче, документация советует оформить навык: он загружается, только когда нужен, и не занимает место в памяти.
Поиск по прошлым сессиям
Кроме двух файлов, у агента есть инструмент session_search. Все сессии из терминала и мессенджеров хранятся в SQLite-базе ~/.hermes/state.db с полнотекстовым поиском. Поиск возвращает исходные сообщения, без пересказа нейросетью, и не тратит ни одного вызова модели. Разделение такое: в память — то, что нужно всегда; в поиск — вопросы вида «что мы решили на прошлой неделе».
Почему агент «забыл», хотя обещал запомнить
Это самая частая жалоба. Пройдите по шагам в таком порядке:
- Проверьте, была ли запись на самом деле:
Память сохраняется, только когда модель вызывает инструмент. Фраза «Я это запомнил» — просто текст. По документации, небольшие локальные модели (примерно до 30 млрд параметров) и модели со слабым вызовом инструментов часто подтверждают сохранение, которого не было. Лечится это сильной моделью на этапе настройки, а не уговорами. Когда записи уже есть, небольшая модель читает их нормально.cat ~/.hermes/memories/MEMORY.md cat ~/.hermes/memories/USER.md - Проверьте, не ждёт ли запись одобрения. При
write_approval: trueзаписи из мессенджеров и фонового разбора не применяются, пока вы их не одобрите:/memory pending, затем/memory approve all. - Проверьте профиль. Память у каждого профиля своя. Бот в Telegram на профиле
workне видит заметок профиля по умолчанию. Список профилей:hermes profile list. - Проверьте, включена ли память:
memory.memory_enabled. - Начните новую сессию. Снимок памяти заморожен в начале сессии: запись, сделанную сейчас, увидит следующая.
Новая сессия — это настройка, а не каприз
В мессенджере чат по замыслу — одна непрерывная сессия. Она переживает перезапуски шлюза и машины. Если её не сбрасывать, разговор неделями тянется одной сессией. Выходит дорого: сжатие раз за разом прогоняется по всё более длинной истории. А цикл «забыл → вспомнил из памяти → нашёл в прошлых сессиях» почти не срабатывает. Документация советует отправлять /new на естественных границах: задача закончена, сменилась тема, начался новый день. В терминале это происходит само, в мессенджерах это ваша забота.
Кто решает, что запомнить: фоновый разбор
После ответов Hermes может запустить фоновый разбор диалога. Он решает, стоит ли сохранить что-то в память или обновить навык. Частоту задаёт memory.nudge_interval: по умолчанию раз в 10 ходов. О результате в чат приходит короткая строка вроде «💾 Memory updated». Подробность этих уведомлений настраивается ключом display.memory_notifications: off, on или verbose (последний показывает, что именно изменилось).
У фонового разбора есть цена: по документации, на загруженных агентах он съедает заметную долю токенов. Три способа ею управлять:
auxiliary:
background_review:
provider: openrouter
model: google/gemini-3-flash-preview # разбор на модели дешевле основной
max_input_tokens: 48000 # потолок входных токенов на один разбор
enabled: true # false — отключить автоматический разбор
На другой модели разбор получает не весь диалог, а сжатый дайджест. По замерам разработчиков, это в 3–5 раз дешевле, а сохранение в память работало так же, как при разборе на основной модели. Если не уверены, сначала включите write_approval: true и посмотрите, что агент пытается запомнить. Это заодно лечит ситуацию, когда агент сохранил о вас неверное предположение.
Посмотреть и почистить всё, чему агент научился, можно командами:
hermes journey list # идентификаторы навыков и записей памяти
hermes journey edit <id> # открыть запись в редакторе
hermes journey delete <id> # удалить (навыки архивируются, их можно вернуть)
hermes memory reset --target memory # стереть MEMORY.md (user — USER.md, all — оба)
Внешнее хранилище памяти
Если двух файлов мало, к Hermes подключается одно внешнее хранилище памяти. Встроенная память при этом продолжает работать рядом с ним.
hermes memory setup # выбор и настройка провайдера
hermes memory status # что сейчас активно
hermes memory off # вернуться только к встроенной памяти
В комплекте идут, среди прочих, Honcho, OpenViking, Mem0, Holographic, RetainDB и ByteRover. Hindsight ставится из каталога плагинов: hermes plugins install hindsight. Для старта без внешних сервисов самый простой вариант — Holographic: локальная база SQLite с полнотекстовым поиском и оценкой достоверности фактов, без зависимостей и без отправки данных наружу. Облачные варианты дают поиск по смыслу и общую память для нескольких агентов, но ваши данные будут храниться у их операторов. Это нужно учитывать до подключения, а не после.
Отдельное предупреждение из документации: не запускайте два процесса агента на одной домашней папке Hermes. Каждый будет дописывать память, и в промпт обоих попадут записи, которых никто из них не делал. Второму агенту нужен свой профиль. Если им нужна общая память, она делается через внешнее хранилище. Как устроить память под конкретные процессы компании — что хранить, что забывать, где разделять агентов, — это отдельная задача. Её мы решаем в рамках услуги проектирования агентной памяти — от MEMORY.md до внешнего хранилища.
Часть 3. Контроль расходов
Сначала измерить
Прежде чем что-то сокращать, посмотрите, куда уходят токены. Все три инструмента работают и в терминале, и в мессенджере:
/usage— токены, оценка стоимости, состояние контекстного окна и длительность сессии. Если провайдер отдаёт эти данные, ещё и остаток лимитов или кредитов аккаунта./insights 7— аналитика за последние 7 дней (без числа — за 30).hermes insights --days 30 --source telegram— то же из командной строки, с фильтром по платформе. Удобно, чтобы отделить расход бота от расхода терминала.
Если запущена веб-панель (hermes dashboard), на странице Models видны все модели, которые работали за период, с токенами и стоимостью. Там же любую из них можно одной кнопкой назначить основной или служебной.
Сжатие длинных диалогов
Hermes сам сжимает историю, когда она подходит к пределу окна модели. Порог по умолчанию — compression.threshold: 0.50, но у моделей с окном меньше 512 тысяч токенов Hermes поднимает его до 75%. Дополнительно действует абсолютный потолок threshold_tokens: 256000: сжатие начинается по меньшему из двух порогов. Когда диалог приближается к порогу, агент предупреждает: на 60% пути информационной строкой, на 85% — предупреждением.
Вручную историю сжимает команда /compress. Вариант /compress here 3 оставит дословно три последних обмена репликами, а остальное перескажет.
Два необязательных ключа полезны для агентов в мессенджерах:
compression:
idle_compact_after_seconds: 1800 # сжать историю, если к чату вернулись после 30 минут тишины
proactive_prune_tokens: 48000 # подрезать громоздкие старые результаты инструментов без вызова модели
Оба по умолчанию выключены (0). Первый нужен для ветки в Telegram, к которой возвращаются через несколько часов: без него каждый следующий ответ заново читает всю устаревшую историю. Второй пригодится на моделях с большим окном. Там основной порог срабатывает редко, и длинные выводы терминала и прочитанные файлы отправляются модели снова и снова. Полные результаты при этом не теряются, они остаются в хранилище сессий.
Кэш промпта
Где провайдер это поддерживает, Hermes включает кэширование промпта сам, без настройки, и выключать его незачем. Оно экономит даже на коротких разговорах, потому что системный промпт с памятью и навыками — заметная часть каждого запроса. Настраивается только срок жизни кэша для моделей Claude (через Anthropic напрямую, OpenRouter и Nous Portal):
prompt_caching:
cache_ttl: "auto" # "5m" (по умолчанию), "1h" или "auto"
Запись в часовой кэш дороже пятиминутной. Она окупается, только когда между репликами проходит больше пяти минут, то есть когда человек отходит и возвращается. Режим auto выбирает срок по тому, кто задаёт темп: час для сессий, где пишет человек (терминал, приложение, мессенджеры), и пять минут для машинных (подагенты, cron, вебхуки, API). Для агента, с которым сотрудники переписываются в течение дня, это разумный выбор.
Самое дорогое в работе с кэшем — то, что его ломает. Это смена модели посреди сессии, переход на запасную модель и смена аккаунта в пуле ключей. Подрезка старых результатов инструментов тоже ломает кэш, но редко: для этого и стоит минимальный порог экономии proactive_prune_min_reclaim_tokens.
Порядок действий, если счёт растёт
- Посмотреть
/usageв самом «тяжёлом» чате иhermes insights --days 7. Понять, какая модель и какая платформа тратят больше всего. - Увести на дешёвую модель служебные задачи
compressionиapproval, а на загруженном агенте — ещё иbackground_review. - Для чатов в мессенджерах ввести привычку
/newна границах задач и включитьidle_compact_after_seconds. - Не переключать модели внутри длинных сессий. Если нужна «умная» модель на один вопрос —
/model … --onceв начале разговора, а не в середине. - Через неделю снова посмотреть
hermes insightsи сравнить.
Что ломается чаще всего
- «Поменял служебную модель — ничего не изменилось». Три причины по документации: открыта старая сессия (конфиг читают только новые); у задачи по-прежнему
provider: auto; у выбранного провайдера нет рабочего ключа. В последнем случае ищите предупреждение вagent.log. - Агент забыл середину разговора после сжатия. Почти всегда виновата модель сжатия с окном меньше, чем у основной. Поменяйте её или верните
provider: auto. - Счёт вырос после настройки запасной модели. Основной провайдер периодически отвечал ошибками, агент уходил на запасную модель, и каждый такой переход перечитывал всю историю без кэша. Проверьте стабильность основного провайдера, а не только цену запасного.
- Задача в cron не стартует на дешёвой модели. Скорее всего, это модель с суффиксом
-contributor: без человека Hermes такие не запускает. Либо смените модель, либо, если обучение на этих данных для вас допустимо, явно разрешите:hermes config set security.allow_data_training_tiers_noninteractive true. - Память «чужая». Два агента работают на одной домашней папке. Разведите их по профилям.
Когда не стоит настраивать самому
Всё описанное выше реально сделать самостоятельно: инструкция полная, по ней всё работает, ничего специально не опущено. Граница проходит не в сложности отдельных ключей, а в том, что тюнинг — это цикл. Нужно измерить, поменять, подождать неделю, сверить счёт и проверить, что агент не стал хуже помнить и отвечать. Цикл приходится повторять, когда провайдер меняет модели, когда растёт число сотрудников, пишущих агенту, и когда появляется второй агент со своим бюджетом. Если в переписке с агентом есть клиентские данные, добавляется вопрос, каким провайдерам и площадкам эти данные уходят.
Если на это нет времени или цена ошибки высока, работу можно отдать нам. Работаем по подписке, а из чего складывается стоимость сопровождения, расписано на отдельной странице. Нейросеть и сервер оплачиваются поверх подписки: напрямую поставщикам или одним счётом через нас.
Если агент нужен в постоянной работе, а не как эксперимент, возьмём Hermes Agent на сопровождение вместе с моделями, памятью и расходами. Обновления и разбор инцидентов тоже на нашей стороне.
Частые вопросы
Что настроить первым, если время есть только на одну правку?
Назначить быструю недорогую модель для auxiliary.compression, предварительно проверив, что её контекстное окно не меньше, чем у основной. Это не трогает качество основного диалога и убирает самый частый «скрытый» расход — пересказ длинной истории дорогой рассуждающей моделью.
Можно ли пользоваться бесплатными моделями?
Технически да: Hermes работает с любым провайдером, которого вы подключили через hermes model, в том числе с бесплатными вариантами моделей у агрегаторов. В документации даже есть пример бесплатной модели как запасной для генерации заголовков. Но у дешёвого бывает цена в данных. Модели с суффиксом -contributor дешевле именно потому, что поставщик может обучаться на ваших запросах. На OpenRouter запросы к площадкам, которые сохраняют данные, отключаются ключом provider_routing.data_collection: "deny". Для служебных задач бесплатные модели подходят, для переписки с клиентами сначала проверьте политику данных. Если нужен вариант совсем без отправки данных наружу, локальная модель описана в статье о настройке Hermes Agent.
Можно ли увеличить память агента?
Да, ключами memory.memory_char_limit и memory.user_char_limit. Но память целиком входит в каждый запрос, и большой файл означает постоянный расход. Обычно лучше другое: сведения для конкретных задач вынести в навыки, а историю оставить поиску по сессиям, который ничего не стоит. Если и этого мало, подключите внешнее хранилище через hermes memory setup.
Как запретить агенту запоминать лишнее?
Включить memory.write_approval: true или отправить в чате /memory approval on. После этого каждая запись в память, включая фоновые, ждёт вашего «да»: /memory pending, /memory approve <id>, /memory reject <id>. Для навыков есть такой же переключатель, skills.write_approval.
Чем тюнинг Hermes Agent отличается от тюнинга OpenClaw?
Идеи те же: основная модель плюс дешёвые служебные, цепочка запасных моделей, сжатие истории, бережное отношение к кэшу. Отличаются ключи и устройство памяти. В Hermes это два жёстко ограниченных файла плюс поиск по прошлым сессиям и фоновый разбор, который сам решает, что запомнить. Подробно про OpenClaw — в отдельной статье о тюнинге OpenClaw.
Источники: официальная документация Hermes Agent — разделы Configuring Models, Configuration, Persistent Memory, Memory Providers, Fallback Providers, Provider Routing, Slash Commands, CLI Commands; значения по умолчанию сверены с исходным кодом в репозитории проекта на теге v2026.9.24. Проверено 2 октября 2026 года.