FAQ и устранение неполадок
Команды для Python-зависимостей на этой странице рассчитаны на checkout исходников, подготовленный через PM. После изменения зависимостей заново активируйте checkout и перезапустите Hermes.
Быстрые ответы и решения для самых распространённых вопросов и ситуаций.
Часто задаваемые вопросы
С какими провайдерами LLM работает Hermes?
Hermes Agent работает с любым OpenAI-совместимым API. Поддерживаются следующие провайдеры:
- OpenRouter — доступ к сотням моделей через один API-ключ (рекомендуется для гибкости)
- Nous Portal — подписочный шлюз Nous Research — 300+ моделей плюс веб/изображения/TTS/браузер через единый OAuth-вход (рекомендуется для новых пользователей)
- OpenAI — GPT-5.4, GPT-5-codex, GPT-4.1, GPT-4o и др.
- Anthropic — модели Claude (прямой API, OAuth через
hermes auth add anthropic, OpenRouter или совместимый прокси) - Google — модели Gemini (прямой API через провайдер
gemini, OpenRouter или совместимый прокси) - z.ai / ZhipuAI — модели GLM
- Kimi / Moonshot AI — модели Kimi
- MiniMax — глобальный и китайский эндпоинты
- Локальные модели — через Ollama, vLLM, llama.cpp, SGLang или любой OpenAI-совместимый сервер
Выберите провайдера через hermes model или отредактируйте ~/.hermes/.env. Все ключи провайдеров — в справочнике Переменных окружения.
Работает ли на Windows / Android / моей платформе?
См. Поддержка платформ — полную матрицу доступности по платформам.
Я использую Hermes в WSL2. Как лучше управлять обычным Chrome в Windows?
Предпочтительнее MCP-мост вместо /browser connect.
Рекомендуемый паттерн:
- запустите Hermes внутри WSL2
- продолжайте использовать обычный Chrome с вашими аккаунтами на стороне Windows
- добавьте
chrome-devtools-mcpкак MCP-сервер черезcmd.exeилиpowershell.exe - пусть Hermes использует полученные MCP-инструменты браузера
Это надёжнее, чем попытки заставить транспорт браузера Hermes напрямую присоединяться через границу WSL2/Windows.
См.:
Отправляются ли мои данные куда-то?
API-вызовы идут только к тому провайдеру LLM, который вы настроили (например, OpenRouter, локальный инстанс Ollama). Hermes Agent не собирает телеметрию, данные об использовании или аналитику. Ваши разговоры, память и навыки хранятся локально в ~/.hermes/.
Можно ли использовать в офлайн-режиме / с локальными моделями?
Да. Запустите hermes model, выберите Custom endpoint и введите URL вашего сервера:
hermes model
# Select: Custom endpoint (enter URL manually)
# API base URL: http://localhost:11434/v1
# API key: ollama
# Model name: qwen3.5:27b
# Context length: 64000 ← минимум Hermes; задайте равным реальному окну контекста вашего сервера
Или настройте напрямую в config.yaml:
model:
default: qwen3.5:27b
provider: custom
base_url: http://localhost:11434/v1
Hermes сохраняет эндпоинт, провайдер и базовый URL в config.yaml, так что они переживут перезапуск. Если на вашем локальном сервере загружена ровно одна модель, /model custom авто-определит её. Можно также задать provider: custom в config.yaml — это первоклассный провайдер, а не псевдоним.
Работает с Ollama, vLLM, llama.cpp server, SGLang, LocalAI и другими. Подробности — в руководстве по конфигурации.
Если вы задали пользовательский num_ctx в Ollama (например, ollama run --num_ctx 64000), задайте соответствующую длину контекста в Hermes — /api/show Ollama сообщает максимальный контекст модели, а не эффективный num_ctx, который вы настроили.
Hermes авто-определяет локальные эндпоинты и снимает жёсткие ограничения на таймауты стриминга (таймаут чтения увеличивается с 120 до 1800 с, обнаружение устаревшего стрима отключается). Если таймауты всё равно возникают на очень больших контекстах, задайте HERMES_STREAM_READ_TIMEOUT=1800 в .env. Подробности — в руководстве по локальному LLM.
Сколько это стоит?
Сам Hermes Agent — бесплатный и открытый исходный код (лицензия MIT). Вы платите только за использование LLM API у выбранного провайдера. Локальные модели запускаются полностью бесплатно.
Могут ли несколько человек использовать один инстанс?
Да. Шлюз сообщений позволяет нескольким пользователям взаимодействовать с одним инстансом Hermes Agent через Telegram, Discord, Slack, WhatsApp или Home Assistant. Доступ контролируется через списки допуска (конкретные ID пользователей) и сопряжение в ЛС (первый написавший получает доступ).
В чём разница между памятью и навыками?
- Память хранит факты — то, что агент знает о вас, ваших проектах и предпочтениях. Воспоминания извлекаются автоматически по релевантности.
- Навыки хранят процедуры — пошаговые инструкции о том, как делать те или иные вещи. Навыки активируются, когда агент сталкивается с похожей задачей.
Оба вида сохраняются между сессиями. Подробности — в Память и Навыки.
Можно ли использовать Hermes в собственном Python-проекте?
Да. Импортируйте класс AIAgent и используйте Hermes программно:
from run_agent import AIAgent
agent = AIAgent(model="anthropic/claude-opus-4.7")
response = agent.chat("Explain quantum computing briefly")
Полное описание API — в руководстве по Python Library.
Устранение неполадок
Проблемы с установкой
hermes: command not found после установки
Причина: Ваш shell не перезагрузил обновлённый PATH.
Решение:
# Перезагрузите профиль shell
source ~/.bashrc # bash
source ~/.zshrc # zsh
# Или откройте новую сессию терминала
Если не помогло, проверьте расположение установки:
which hermes
ls ~/.local/bin/hermes
Установщик добавляет ~/.local/bin в PATH. Если вы используете нестандартный конфиг shell, добавьте export PATH="$HOME/.local/bin:$PATH" вручную.
Неподдерживаемая версия Python
Текущим официальным установкам нужен именно Python 3.14, а не любая более новая
версия. Диапазон >=3.11,<3.15 в pyproject.toml позволяет старым установкам запустить
апдейтер, прежде чем переключиться на 3.14; это не значит, что текущая среда выполнения
поддерживает 3.11–3.13. Установщик и упакованные дистрибутивы приносят свой закреплённый
интерпретатор.
Для ручного окружения из исходников смотрите
настройку окружения разработки.
Не подменяйте интерпретатор внутри установленного приложения или контейнера.
При ошибке в управляемой установке запустите hermes doctor и воспользуйтесь
способом обновления этой установки.
Команды терминала выдают node: command not found (или nvm, pyenv, asdf, …)
Причина: Hermes строит снимок окружения для сессии, запуская bash -l один раз при старте. Bash login shell читает /etc/profile, ~/.bash_profile и ~/.profile, но не подключает ~/.bashrc — поэтому инструменты, которые устанавливают себя туда (nvm, asdf, pyenv, cargo, пользовательские экспорты PATH), остаются невидимы для снимка. Чаще всего это проявляется при запуске Hermes под systemd или в минимальном shell, где интерактивный профиль не загружен заранее.
Решение: По умолчанию Hermes авто-подключает ~/.bashrc. Если этого недостаточно — например, вы пользователь zsh, чей PATH живёт в ~/.zshrc, или вы инициализируете nvm из отдельного файла — перечислите дополнительные файлы для подключения в ~/.hermes/config.yaml:
terminal:
shell_init_files:
- ~/.zshrc # пользователям zsh: тянет zsh-управляемый PATH в bash-снимок
- ~/.nvm/nvm.sh # прямая инициализация nvm (работает независимо от shell)
- /etc/profile.d/cargo.sh # системные rc-файлы
# Когда этот список задан, авто-подключение ~/.bashrc по умолчанию НЕ добавляется —
# включите его явно, если нужны оба:
# - ~/.bashrc
# - ~/.zshrc
Отсутствующие файлы тихо пропускаются. Подключение происходит в bash, поэтому файлы с zsh-специфичным синтаксисом могут давать ошибки — если это проблема, подключайте только часть, устанавливающую PATH (например, nvm.sh напрямую), а не весь rc-файл.
Независимо от init-файлов, PATH каждой команды терминала дополняется стандартными системными каталогами (/usr/local/bin, /opt/homebrew/bin, …), каталогами среды выполнения, которыми управляет Hermes, и ~/.local/bin, если он существует (туда ставят pip --user / pipx / uv tool). Всё это дописывается после ваших собственных записей, так что порядок приоритетов не меняется. Тем самым покрываются бэкенды, стартующие с куцым неинтерактивным PATH (systemd, GUI-лаунчеры, удалённый SSH-бэкенд десктопа), — без какой-либо настройки.
Чтобы отключить авто-подключение (только строгая семантика login-shell):
terminal:
auto_source_bashrc: false
uv: command not found
Причина: Пакетный менеджер uv не установлен или отсутствует в PATH.
Решение:
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc
Ошибки Permission denied при установке
Причина: Недостаточно прав для записи в директорию установки.
Решение:
# Не используйте sudo с установщиком — он устанавливается в ~/.local/bin
# Если ранее установили через sudo, удалите:
sudo rm /usr/local/bin/hermes
# Затем запустите стандартный установщик
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
Проблемы с провайдерами и моделями
Агент говорит, что запрос отклонён «политикой Hermes» или «guardrails Hermes»
Модель не может достоверно определить причину собственного отказа. Если отказ звучит только в прозе ассистента, его заявление о том, что причина — скрытая runtime-политика Hermes, может быть галлюцинацией или ограничением, применённым выбранной моделью или провайдером.
Правоприменение в Hermes устроено явно: заблокированное действие инструмента возвращает ошибку инструмента с указанием запрещённой команды или пути, а действие, требующее подтверждения, показывает запрос на подтверждение. Hermes не превращает эти механизмы контроля выполнения в общий слой отказа по содержанию молча. Провайдерские механизмы контроля по-прежнему могут применяться, если настроены — например, Amazon Bedrock Guardrails.
Чтобы найти источник:
- Выполните
/statusдля проверки активной модели и провайдера. - Проверьте, содержит ли отказ реальную ошибку инструмента Hermes или запрос на подтверждение. Если это только проза — не считайте объяснение модели runtime-доказательством.
- Повторите в новой сессии с другой настроенной моделью или провайдером. Отказ, который меняется вместе с моделью, — это поведение модели/провайдера, а не механизм контроля выполнения Hermes.
- Если появляется явная ошибка инструмента, используйте её точный текст при сообщении о проблеме.
См. Безопасность — документированные механизмы контроля выполнения Hermes, и Провайдеры — настройка провайдеров.
«…refused this request because of a policy on your account»
Что это значит: провайдер отклонил запрос по причине на уровне аккаунта, которую повтор не исправит: настройки данных/приватности у агрегатора исключили все эндпоинты для этой модели, или апстрим-провайдер модели заблокировал аккаунт (например, this user has been blocked for a previous policy violation — OpenRouter может передать это внутри в остальном успешного потока с HTTP 200). Hermes отправляет запрос один раз, не повторяет его и не ротирует учётные данные, а если настроена цепочка фолбэков — переходит к ней.
Решение: проверьте статус аккаунта и настройки данных/приватности у провайдера, названного в ответе, или переключитесь на другую модель либо провайдера через /model. hermes fallback add будет автоматически отправлять будущие блокировки на запасной вариант.
«Could not open a stream to <host> after N attempts (request X KB)»
Что это значит: все попытки подключиться к этому эндпоинту сорвались до того, как пришло хоть одно событие потока, поэтому ничего не списано; обычная цепочка повторов и фолбэков после этого всё равно запускается. В строке указаны хост, к которому реально обращались, число попыток и размер сериализованного запроса — ровно три вещи, по которым сбой сервиса отличается от лимита на размер запроса.
Решение: если запрос большой (сотни КБ — долгие сессии программирования доходят до этого, когда контекст разрастается), а короткие новые чаты работают, то, скорее всего, эндпоинт или прокси перед ним отклоняет тела такого размера: поднимите его лимит на размер тела или выполните /compress, чтобы ужать контекст. Если запрос маленький, эндпоинт недоступен — проверьте base_url и повторите через /retry. Цепочку исключений по каждой попытке записывает logs/agent.log.
Ответы в мессенджерах: «interrupted mid-request», «not running or is unreachable» и «could not reach»
Чат-поверхности (Telegram, Discord, Slack, …) никогда не показывают сырое исключение транспорта: шлюз сводит его к одному из трёх коротких ответов, и по разнице между ними понятно, куда смотреть:
| Ответ | Что произошло | Что делать |
|---|---|---|
| «The connection to the AI model service was interrupted mid-request — usually transient.» | Установленное соединение оборвалось (Connection reset by peer, EOF, RemoteProtocolError). Эндпоинт ответил на подключение, значит, он работает. | /retry. Если повторяется на больших запросах, см. пункт про «stream» выше. |
| «The AI model service isn’t reachable right now — the configured model endpoint is not running or is unreachable.» | Соединение никто не принял (Connection refused, нет маршрута до хоста, сбой DNS). | Запустите сервер модели / проверьте base_url, затем /retry; hermes doctor на хосте. |
| «Hermes could not reach the AI model service (no further detail from the SDK).» | SDK сообщил об общем APIConnectionError и не сохранил причину; ни один из вариантов выше не установлен точно. | /retry; если не проходит — hermes doctor. Сырое исключение есть в hermes logs. |
/model показывает только одного провайдера / не удаётся переключить провайдера
Причина: /model (внутри сессии чата) переключает только между провайдерами, которых вы уже настроили. Если настроен только OpenRouter, только он и будет показан.
Решение: Выйдите из сессии и используйте hermes model из терминала для добавления новых провайдеров:
# Сначала выйдите из сессии Hermes (Ctrl+C или /quit)
# Запустите полный мастер настройки провайдера
hermes model
# Здесь можно: добавить провайдеров, выполнить OAuth, ввести API-ключи, настроить эндпоинты
После добавления нового провайдера через hermes model начните новую сессию чата — /model теперь покажет всех настроенных провайдеров.
| Что нужно сделать | Команда |
|---|---|
| Добавить нового провайдера | hermes model (из терминала) |
| Ввести/изменить API-ключи | hermes model (из терминала) |
| Переключить модель в сессии | /model <name> (внутри сессии) |
| Переключиться на другого настроенного провайдера | /model provider:model (внутри сессии) |
API-ключ не работает
Причина: Ключ отсутствует, истёк, задан неверно или относится к другому провайдеру.
Решение:
# Проверьте конфигурацию
hermes config show
# Перенастройте провайдера
hermes model
# Или задайте напрямую
hermes config set OPENROUTER_API_KEY sk-or-v1-xxxxxxxxxxxx
Убедитесь, что ключ соответствует провайдеру. Ключ OpenAI не работает с OpenRouter и наоборот. Проверьте ~/.hermes/.env на наличие конфликтующих записей.
Модель недоступна / модель не найдена
Причина: Идентификатор модели задан неверно или модель недоступна у вашего провайдера.
Решение:
# Просмотрите доступные модели провайдера
hermes model
# Задайте корректную модель
hermes config set model.default anthropic/claude-opus-4.7
# Или укажите для отдельной сессии
hermes chat --model openrouter/meta-llama/llama-3.1-70b-instruct
Превышение лимита запросов (ошибки 429)
Причина: Вы превысили лимиты частоты запросов провайдера.
Решение: Подождите немного и повторите. Для постоянного использования рассмотрите:
- Обновление плана провайдера
- Переключение на другую модель или провайдера
- Использование
hermes chat --provider <alternative>для маршрутизации к другому бэкенду
Превышена длина контекста
Причина: Разговор стал слишком длинным для контекстного окна модели, или Hermes определил неверную длину контекста для вашей модели.
Решение:
# Сжать текущую сессию
/compress
# Или начать новую сессию
hermes chat
# Использовать модель с большим контекстным окном
hermes chat --model openrouter/google/gemini-3-flash-preview
Если это происходит в первом длинном разговоре, возможно Hermes определил неверную длину контекста для вашей модели. Проверьте, что было определено:
Обратите внимание на строку запуска CLI — там показана определённая длина контекста (например, 📊 Context limit: 128000 tokens). Также можно проверить через /usage во время сессии.
Локальные серверы (llama.cpp, Ollama), которые вместо ошибки просто замолкают. Когда провайдер отклоняет запрос как слишком большой, Hermes сжимает переписку и собирает запрос заново. Перед повтором пересобранный запрос перемеряется целиком — системный промпт, схемы инструментов и сообщения, — и, если он всё ещё выше порога, запускаются дополнительные ограниченные проходы сжатия. Когда запрос так и не помещается, ход завершается сообщением Context length exceeded: compression could not reduce the rebuilt request below the safe threshold вместо отправки переростка, который llama.cpp молча обрежет (в логе сервера это выглядит как stop processing: n_tokens = 65535, truncated = 1). Увидели такое сообщение — почти всегда дело в настроенном context_length выше: приведите его в соответствие с реальным -c / --ctx-size сервера.
«The model server rejected this request as too large, but this conversation is only about N tokens…»: локальный сервер (localhost, LAN, Tailscale) сообщил «context exceeded», не приведя никаких замеров, а собственная оценка запроса у Hermes намного меньше окна, которое он знает для этой модели. Поэтому Hermes не сжимает переписку и не винит её, а ход остаётся доступным для повтора. На локальных серверах с одним слотом (LM Studio, Ollama) это почти всегда значит, что контекст сервера в этот момент занят другим запросом — обычно фоновым просмотром памяти из прошлой сессии (thread=bg-review в logs/agent.log). Подождите немного и выполните /retry. Если это повторяется, хотя других процессов Hermes нет, сервер загружает модель с меньшим окном, чем предполагает Hermes: поднимите настройку контекста на сервере или уменьшите model.context_length до её значения. У хостинговых провайдеров такого сообщения не бывает: общего слота, освобождения которого можно дождаться, у них нет, так что там тот же отказ означает, что реальное окно маршрута меньше, чем предполагает Hermes, и Hermes вместо этого сжимает контекст и повторяет запрос.
Для исправления задайте длину контекста явно:
# В ~/.hermes/config.yaml
model:
default: your-model-name
context_length: 131072 # реальное контекстное окно вашей модели
Или для пользовательских эндпоинтов укажите на уровне записи провайдера:
providers:
my-server:
api: "http://localhost:11434/v1"
models:
qwen3.5:27b:
context_length: 64000
(В старых конфигах используется устаревший список custom_providers: — он по-прежнему поддерживается и автоматически мигрирует в providers:.)
Подробности об авто-определении — в Context Length Detection.
Проблемы с терминалом
Команда заблокирована как опасная
Причина: Hermes обнаружил потенциально деструктивную команду (например, rm -rf, DROP TABLE). Это функция безопасности.
Решение: При появлении запроса проверьте команду и введите y для подтверждения. Также можно:
- Попросить агента использовать более безопасную альтернативу
- Просмотреть полный список опасных паттернов в документации по безопасности
Это штатное поведение — Hermes никогда не запускает деструктивные команды молча. Запрос подтверждения показывает ровно то, что будет выполнено.
sudo не работает через шлюз сообщений
Причина: Шлюз сообщений работает без интерактивного терминала, поэтому sudo не может запросить пароль.
Решение:
- Избегайте
sudoв мессенджерах — попросите агента найти альтернативы - Если
sudoнеобходим, настройте sudo без пароля для конкретных команд в/etc/sudoers - Или переключитесь на терминальный интерфейс для административных задач:
hermes chat
Бэкенд Docker не подключается
Причина: Docker-демон не запущен или у пользователя нет прав.
Решение:
# Проверьте, запущен ли Docker
docker info
# Добавьте пользователя в группу docker
sudo usermod -aG docker $USER
newgrp docker
# Проверьте
docker run hello-world
Проблемы с мессенджерами
Бот не отвечает на сообщения
Причина: Бот не запущен, не авторизован, или ваш пользователь не в списке допуска.
Решение:
# Проверьте, запущен ли шлюз
hermes gateway status
# Запустите шлюз
hermes gateway start
# Проверьте логи на ошибки
cat ~/.hermes/logs/gateway.log | tail -50
Сообщения не доставляются
Причина: Сетевые проблемы, истёкший токен бота или неверная настройка вебхука платформы.
Решение:
- Проверьте токен бота через
hermes gateway setup - Проверьте логи шлюза:
cat ~/.hermes/logs/gateway.log | tail -50 - Для платформ на вебхуках (Slack, WhatsApp) убедитесь, что ваш сервер доступен публично
Путаница со списком допуска — кто может писать боту?
Причина: Режим авторизации определяет, кто получает доступ.
Решение:
| Режим | Как работает |
|---|---|
| Allowlist | Взаимодействовать могут только ID пользователей из конфига |
| DM pairing | Первый написавший в ЛС получает эксклюзивный доступ |
| Open | Может взаимодействовать кто угодно (не рекомендуется для продакшна) |
Настройте в ~/.hermes/config.yaml в настройках вашего шлюза. См. документацию по мессенджерам.
Шлюз не запускается
Причина: Отсутствующие зависимости, конфликты портов или неверно настроенные токены.
Решение:
# Установите основные зависимости шлюза сообщений
cd ~/.hermes/hermes-agent && python -c "import pm; pm.sync_venv(['messaging'], explicit=True)" # Telegram, Discord, Slack и общие зависимости шлюза
# Проверьте конфликты портов
lsof -i :8080
# Проверьте конфигурацию
hermes config show
WSL: Шлюз постоянно отключается или hermes gateway start падает
Причина: Поддержка systemd в WSL ненадёжна. Многие установки WSL2 не имеют включённого systemd, и даже при включении сервисы могут не пережить перезапуски WSL или переходы Windows в режим ожидания.
Решение: Используйте режим переднего плана вместо systemd-сервиса:
# Вариант 1: Прямой запуск на переднем плане (проще всего)
hermes gateway run
# Вариант 2: Постоянный через tmux (переживает закрытие терминала)
tmux new -s hermes 'hermes gateway run'
# Повторное подключение: tmux attach -t hermes
# Вариант 3: В фоне через nohup
nohup hermes gateway run > ~/.hermes/logs/gateway.log 2>&1 &
Если хотите попробовать systemd, убедитесь, что он включён:
- Откройте
/etc/wsl.conf(создайте, если не существует) - Добавьте:
[boot] systemd=true - Из PowerShell:
wsl --shutdown - Снова откройте терминал WSL
- Проверьте:
systemctl is-system-runningдолжен показать “running” или “degraded”
Для надёжного авто-запуска используйте Планировщик задач Windows для запуска WSL + шлюза при входе в систему:
- Создайте задачу, запускающую
wsl -d Ubuntu -- bash -lc 'hermes gateway run' - Настройте триггер при входе пользователя
macOS: Node.js / ffmpeg / другие инструменты не найдены шлюзом
Причина: Сервисы launchd наследуют минимальный PATH (/usr/bin:/bin:/usr/sbin:/sbin), который не включает Homebrew, nvm, cargo и другие директории пользовательских инструментов. Это обычно ломает мост WhatsApp (node not found) или голосовую транскрипцию (ffmpeg not found).
Решение: Шлюз захватывает PATH вашего shell при запуске hermes gateway install. Если вы установили инструменты после настройки шлюза, перезапустите установку для захвата обновлённого PATH:
hermes gateway install # Создаёт новый снимок текущего PATH
hermes gateway start # Обнаруживает обновлённый plist и перезагружает
Можно проверить, что plist содержит верный PATH:
/usr/libexec/PlistBuddy -c "Print :EnvironmentVariables:PATH" \
~/Library/LaunchAgents/ai.hermes.gateway.plist
Проблемы с производительностью
Медленные ответы
Причина: Большая модель, далёкий API-сервер или тяжёлый системный промпт со множеством инструментов.
Решение:
- Попробуйте более быструю/лёгкую модель:
hermes chat --model openrouter/meta-llama/llama-3.1-8b-instruct - Сократите активные наборы инструментов:
hermes chat -t "terminal" - Проверьте сетевую задержку до провайдера
- Для локальных моделей убедитесь, что у вас достаточно VRAM GPU
Высокое потребление токенов
Причина: Длинные разговоры, многословные системные промпты или накапливающийся контекст от множества вызовов инструментов.
Решение:
# Узнать, во что обходится фиксированный промпт — разбивка по блокам
# (системный промпт, индекс навыков, память, схемы инструментов). Работает офлайн.
hermes prompt-size
# Сжать разговор для снижения количества токенов
/compress
# Проверить использование токенов сессии
/usage
Если базовый расход выглядит высоким ещё до того, как вы что-то написали, — это фиксированный бюджет промпта: системный промпт плюс схемы инструментов, отправляемые при каждом вызове. Запустите hermes prompt-size, чтобы измерить его, а затем сократите: отключите неиспользуемые наборы инструментов (hermes tools) и удалите или отключите ненужные навыки (hermes skills).
Регулярно используйте /compress в длинных сессиях. Команда суммаризирует историю разговора и значительно снижает расход токенов, сохраняя контекст.
Сессия становится слишком длинной
Причина: Длительные разговоры накапливают сообщения и вывод инструментов, приближаясь к лимитам контекста.
Решение:
# Сжать текущую сессию (сохраняет ключевой контекст)
/compress
# Начать новую сессию со ссылкой на старую
hermes chat
# Возобновить конкретную сессию позже при необходимости
hermes chat --continue
Проблемы с MCP
MCP-сервер не подключается
Причина: Бинарный файл сервера не найден, неверный путь команды или отсутствующий рантайм.
Решение:
# Убедитесь, что MCP-зависимости установлены (уже включены в стандартную установку)
cd ~/.hermes/hermes-agent && python -c "import pm; pm.sync_venv(['mcp'], explicit=True)"
# Для серверов на npm убедитесь в наличии Node.js
node --version
npx --version
# Протестируйте сервер вручную
npx -y @modelcontextprotocol/server-filesystem /path/to/allowed/dir
Проверьте настройку MCP в ~/.hermes/config.yaml:
mcp_servers:
filesystem:
command: "npx"
args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/docs"]
Инструменты MCP-сервера не появляются
Причина: Сервер запустился, но обнаружение инструментов не удалось, инструменты отфильтрованы конфигом, или сервер не поддерживает ожидаемую возможность MCP.
Решение:
- Проверьте логи шлюза/агента на ошибки подключения MCP
- Убедитесь, что сервер отвечает на RPC-метод
tools/list - Проверьте все настройки
tools.include,tools.exclude,tools.resources,tools.promptsилиenabledдля этого сервера - Помните, что утилитарные инструменты resource/prompt регистрируются только когда сессия реально поддерживает эти возможности
- Используйте
/reload-mcpпосле изменения конфига
# Проверьте настройку MCP-серверов
hermes config show | grep -A 12 mcp_servers
# Перезапустите Hermes или перезагрузите MCP после изменений конфига
hermes chat
См. также:
Ошибки таймаута MCP
Причина: MCP-сервер слишком долго отвечает или упал в процессе выполнения.
Решение:
- Увеличьте таймаут в конфигурации MCP-сервера, если поддерживается
- Проверьте, запущен ли процесс MCP-сервера
- Для удалённых HTTP MCP-серверов проверьте сетевое соединение
Если MCP-сервер падает в середине запроса, Hermes сообщает о таймауте. Для диагностики корневой причины проверьте собственные логи сервера (не только логи Hermes).
Проблемы с навыками
Страница Skills Hub не загружается в десктопном приложении (403 / блокировка)
Причина: сайт документации (hermes-agent.nousresearch.com) отдаётся через Vercel, а его WAF блокирует некоторые жилые диапазоны IP, которые считает подозрительными. Если ваша сеть попала в такой диапазон, любой запрос к домену возвращает страницу с ошибкой 403.
Решение: выбор в Skills Hub сначала обращается к основному домену, а при неудаче автоматически переключается на такую же копию на GitHub Pages (nousresearch.github.io/hermes-agent) с тем же каталогом. Если страница не открывается ни там, ни там, проверьте, не блокирует ли оба хоста прокси, DNS-фильтр или файрвол. О затронутом диапазоне сообщите мейнтейнерам: его пересмотрят на стороне развёртывания.
Профили
Чем профили отличаются от простого задания HERMES_HOME?
Профили — это управляемый слой поверх HERMES_HOME. Можно вручную задавать HERMES_HOME=/some/path перед каждой командой, но профили берут на себя всю рутину: создание структуры директорий, генерацию shell-псевдонимов (hermes-work), отслеживание активного профиля в ~/.hermes/active_profile и автосинхронизацию обновлений навыков во всех профилях. Плюс они интегрируются с автодополнением вкладкой — не нужно помнить пути.
Могут ли два профиля использовать один токен бота?
Нет. Каждая платформа сообщений (Telegram, Discord и др.) требует эксклюзивного доступа к токену бота. Если два профиля попытаются использовать один токен одновременно, второй шлюз не сможет подключиться. Создайте отдельного бота для каждого профиля — в Telegram обратитесь к @BotFather для создания дополнительных ботов.
Разделяют ли профили память или сессии?
Нет. У каждого профиля собственное хранилище памяти, база данных сессий и директория навыков. Они полностью изолированы. Если хотите начать новый профиль с существующими воспоминаниями и сессиями, используйте hermes profile create newname --clone-all для копирования всего из текущего профиля, или добавьте --clone-from <profile> для копирования из конкретного исходного профиля.
Эта изоляция — ещё и причина никогда не запускать двух агентов на одном и том же профиле или Hermes-home: оба автоматически пишут в память, и каждый при старте сессии подхватывает записи другого, так что хранимое состояние деградирует с каждой сессией. Один агент на профиль; для по-настоящему общей памяти между агентами используйте внешний провайдер памяти.
Что происходит при hermes update?
hermes update скачивает последний код и переустанавливает зависимости один раз (не для каждого профиля). Затем автоматически синхронизирует обновлённые навыки во всех профилях. Запустить hermes update нужно только раз — команда охватывает все профили на машине.
Сколько профилей можно запустить?
Жёсткого ограничения нет. Профиль — это директория в ~/.hermes/profiles/, в которой есть хотя бы один файл-идентификатор (config.yaml, .env, SOUL.md, profile.yaml, auth.json или state.db); голая директория без такого файла (остаток от ротации логов или тика cron) профилем не считается: она не выводится в списке и не обслуживается, -p <name> сообщает, что профиля нет, а hermes profile create <name> отказывается её перезаписывать, пока вы её не переместите или не удалите. Практический предел определяется дисковым пространством и тем, сколько одновременных шлюзов выдержит система (каждый шлюз — лёгкий Python-процесс). Десятки профилей — без проблем; каждый неактивный профиль не потребляет ресурсов.
Рабочие процессы и паттерны
Разные модели для разных задач (мультимодельные рабочие процессы)
Сценарий: Вы используете GPT-5.4 как основную модель, но Gemini или Grok лучше пишет контент для соцсетей. Вручную переключать модели каждый раз утомительно.
Решение: конфиг делегирования. Hermes может автоматически маршрутизировать подагентов на другую модель. Задайте в ~/.hermes/config.yaml:
delegation:
model: "google/gemini-3-flash-preview" # подагенты используют эту модель
provider: "openrouter" # провайдер для подагентов
Теперь когда вы говорите Hermes «напиши мне Twitter-тред о X» и он порождает подагент через delegate_task, тот подагент работает на Gemini вместо вашей основной модели. Основной разговор остаётся на GPT-5.4.
Можно быть явным в промпте: «Делегируй задачу написания постов в соцсетях о нашем запуске продукта. Используй подагент для самого написания.» Агент вызовет delegate_task, который автоматически подхватит конфиг делегирования.
Для разовых переключений модели без делегирования используйте /model в CLI:
/model google/gemini-3-flash-preview # переключить для этой сессии
# ... пишите контент ...
/model openai/gpt-5.4 # вернуться обратно
Каждое переключение /model сбрасывает кэш промпта — ключ кэша включает модель, поэтому первое сообщение после каждого переключения перечитывает весь разговор по полной цене входных токенов. В длинных сессиях предпочитайте делегирование (у подагентов свой чистый контекст) или новую сессию вместо частых переключений туда-сюда.
Подробности о делегировании — в Делегирование подагентам.
Несколько агентов на одном номере WhatsApp (привязка к чату)
Сценарий: В OpenClaw у вас было несколько независимых агентов, привязанных к конкретным чатам WhatsApp — один для группы семейного списка покупок, другой для личного чата. Может ли Hermes так же?
Текущее ограничение: Профили Hermes требуют отдельного номера WhatsApp/сессии. Нельзя привязать несколько профилей к разным чатам на одном номере WhatsApp — мост WhatsApp (Baileys) использует одну аутентифицированную сессию на номер.
Обходные пути:
-
Используйте один профиль с переключением личности. Создайте разные контекстные файлы
AGENTS.mdили используйте команду/personalityдля смены поведения в зависимости от чата. Агент видит, в каком он чате, и может адаптироваться. -
Используйте cron-задания для специализированных задач. Для трекера списка покупок настройте cron-задание, которое следит за конкретным чатом и управляет списком — отдельный агент не нужен.
-
Используйте отдельные номера. Если нужны по-настоящему независимые агенты, привяжите каждый профиль к своему номеру WhatsApp. Виртуальные номера от сервисов вроде Google Voice для этого подходят.
-
Используйте Telegram или Discord. Эти платформы лучше поддерживают привязку к чату — каждая группа Telegram или канал Discord получает свою сессию, и можно запускать несколько токенов ботов (один на профиль) на одном аккаунте.
Подробности — в Профили и Настройка WhatsApp.
Управление тем, что показывается в Telegram (скрытие логов и рассуждений)
Сценарий: Вы видите логи выполнения шлюза, рассуждения Hermes и детали вызовов инструментов в Telegram вместо финального ответа.
Решение: Настройка display.tool_progress в config.yaml управляет объёмом отображаемой активности инструментов:
display:
tool_progress: "off" # варианты: off, new, all, verbose
off— Только финальный ответ. Никаких вызовов инструментов, рассуждений, логов.new— Показывает новые вызовы инструментов по мере их появления (краткие однострочники).all— Показывает всю активность инструментов включая результаты.verbose— Полная детализация включая аргументы и вывод инструментов.
Для мессенджеров обычно нужно off или new. После редактирования config.yaml перезапустите шлюз для применения изменений.
Также можно переключать для отдельной сессии командой /verbose (если включено):
display:
tool_progress_command: true # включает /verbose в шлюзе
Управление навыками в Telegram (ограничение slash-команд)
Сценарий: В Telegram есть ограничение в 100 slash-команд, и ваши навыки его превышают. Вы хотите отключить ненужные навыки в Telegram, но настройки hermes skills config не работают.
Решение: Используйте hermes skills config для отключения навыков на конкретной платформе. Это записывается в config.yaml:
skills:
disabled: [] # глобально отключённые навыки
platform_disabled:
telegram: [skill-a, skill-b] # отключены только в telegram
После изменений перезапустите шлюз (hermes gateway restart или остановите и запустите заново). Меню команд Telegram перестраивается при запуске.
Навыки с очень длинными описаниями усекаются до 40 символов в меню Telegram для соответствия ограничениям размера полезной нагрузки. Если навыки не появляются, возможно проблема в общем размере нагрузки, а не в лимите 100 команд — отключение неиспользуемых навыков помогает в обоих случаях.
Общие сессии в тредах (несколько пользователей, один разговор)
Сценарий: У вас есть тред в Telegram или Discord, где несколько человек упоминают бота. Вы хотите, чтобы все упоминания в этом треде были частью одного общего разговора, а не отдельных сессий на пользователя.
Текущее поведение: Hermes создаёт сессии с ключом по ID пользователя на большинстве платформ, поэтому каждый получает свой контекст разговора. Это намеренно — для приватности и изоляции контекста.
Обходные пути:
-
Используйте Slack. Сессии Slack привязаны к треду, а не к пользователю. Несколько пользователей в одном треде разделяют один разговор — именно то поведение, которое вы описываете. Это самый подходящий вариант.
-
Используйте группу с одним пользователем. Если один человек — назначенный «оператор», который транслирует вопросы, сессия остаётся единой. Остальные могут наблюдать.
-
Используйте канал Discord. Сессии Discord привязаны к каналу, поэтому все пользователи в одном канале разделяют контекст. Создайте выделенный канал для общего разговора.
Экспорт Hermes на другую машину
Сценарий: Вы накопили навыки, cron-задания и воспоминания на одной машине и хотите перенести всё на новый выделенный Linux-сервер.
Решение:
-
Установите Hermes Agent на новой машине:
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -
На исходной машине создайте полную резервную копию:
hermes backupКоманда сохраняет zip-архив в
~/hermes-backup-<timestamp>.zip. Полный бэкап охватывает конфигурацию, учётные данные, воспоминания, навыки, сессии и профили в корневом каталоге данных Hermes. Образом приложения или среды выполнения он не является. -
Скопируйте zip на новую машину и импортируйте:
# На исходной машине scp ~/hermes-backup-<timestamp>.zip newmachine:~/ # На новой машине hermes import ~/hermes-backup-<timestamp>.zip -
На новой машине запустите
hermes setupдля проверки работы API-ключей и конфига провайдера.
Перенос одного профиля на другую машину
Сценарий: Вы хотите перенести или передать один конкретный профиль — не всю установку.
# На исходной машине
hermes profile export work ./work-backup.tar.gz
# Скопируйте файл на целевую машину, затем:
hermes profile import ./work-backup.tar.gz work
Импортированный профиль будет содержать весь конфиг, воспоминания, сессии и навыки из экспорта. Возможно, потребуется обновить пути или повторно пройти аутентификацию у провайдеров, если на новой машине другая конфигурация.
hermes backup vs hermes profile export
| Функция | hermes backup | hermes profile export |
|---|---|---|
| Сценарий | Полная миграция машины | Перенос/совместное использование конкретного профиля |
| Охват | Корневой каталог данных Hermes с исключениями, перечисленными ниже | Директория одного профиля |
| Включает | Все профили, глобальный конфиг, API-ключи, сессии | Один профиль: SOUL.md, воспоминания, сессии, навыки |
| Учётные данные | Включены (.env и auth.json) | Исключены (убраны для безопасного обмена) |
| Формат | .zip | .tar.gz |
В полный бэкап не попадают:
- checkout исходников, окружения зависимостей, скачанные инструменты, модели и среды выполнения;
- кэши сборки, чекпоинты, прежние бэкапы и быстрые снимки;
- профили браузера, включая копии учётных данных из настоящего браузера;
- байт-код, служебные файлы SQLite,
gateway.pid,cron.pidи.backup.lock.
hermes backup --quick вместо полного архива сохраняет выбранные файлы состояния.
Перед переездом на другую машину полный бэкап он не заменяет.
Полный бэкап сообщает о файлах, которые не удалось скопировать, — то есть архив может
существовать, но без части данных. Прежде чем удалять исходную установку, просмотрите
отчёт о пропущенных файлах. По восстановленным объявлениям пакетов PM заново скачает
зависимости. Байт-код и служебные файлы SQLite пересоздаются локально. .env и
auth.json из полного бэкапа эти исключения не убирают.
Ручной запасной вариант (rsync): Если предпочитаете копировать файлы напрямую, исключите репозиторий кода:
rsync -av --exclude='hermes-agent' ~/.hermes/ newmachine:~/.hermes/
hermes backup создаёт согласованный снимок даже пока Hermes активно работает. В восстановленном архиве исключены локальные файлы рантайма вроде gateway.pid и cron.pid.
Permission denied при перезагрузке shell после установки
Сценарий: После запуска установщика Hermes source ~/.zshrc выдаёт ошибку permission denied.
Причина: Обычно это происходит, когда у ~/.zshrc (или ~/.bashrc) неверные права доступа, или установщик не смог записать в него. Это не специфичная для Hermes проблема — это проблема прав на конфиг shell.
Решение:
# Проверьте права
ls -la ~/.zshrc
# Исправьте при необходимости (должно быть -rw-r--r-- или 644)
chmod 644 ~/.zshrc
# Затем перезагрузите
source ~/.zshrc
# Или просто откройте новое окно терминала — изменения PATH подхватятся автоматически
Если установщик добавил строку PATH, но права неверные, можно добавить вручную:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
Ошибка 400 при первом запуске агента
Сценарий: Настройка завершается нормально, но первая попытка чата завершается с HTTP 400.
Причина: Обычно несоответствие имени модели — настроенной модели не существует у провайдера, или у API-ключа нет доступа к ней.
Решение:
# Проверьте, какая модель и провайдер настроены
hermes config show | head -20
# Перезапустите выбор модели
hermes model
# Или протестируйте с заведомо рабочей моделью
hermes chat -q "hello" --model anthropic/claude-opus-4.7
При использовании OpenRouter убедитесь, что на аккаунте есть кредиты. Ошибка 400 от OpenRouter часто означает, что модель требует платного плана или в ID модели опечатка.
Всё ещё не получается?
Если ваша проблема не описана здесь:
- Поищите в существующих ишью: GitHub Issues
- Спросите в сообществе: Discord Nous Research
- Создайте баг-репорт: Укажите ОС, версию Python (
python3 --version), версию Hermes (hermes --version) и полное сообщение об ошибке