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 и другими. Подробности — в руководстве по конфигурации.

совет
Пользователям Ollama

Если вы задали пользовательский 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.

Чтобы найти источник:

  1. Выполните /status для проверки активной модели и провайдера.
  2. Проверьте, содержит ли отказ реальную ошибку инструмента Hermes или запрос на подтверждение. Если это только проза — не считайте объяснение модели runtime-доказательством.
  3. Повторите в новой сессии с другой настроенной моделью или провайдером. Отказ, который меняется вместе с моделью, — это поведение модели/провайдера, а не механизм контроля выполнения Hermes.
  4. Если появляется явная ошибка инструмента, используйте её точный текст при сообщении о проблеме.

См. Безопасность — документированные механизмы контроля выполнения 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, убедитесь, что он включён:

  1. Откройте /etc/wsl.conf (создайте, если не существует)
  2. Добавьте:
    [boot]
    systemd=true
  3. Из PowerShell: wsl --shutdown
  4. Снова откройте терминал WSL
  5. Проверьте: systemctl is-system-running должен показать “running” или “degraded”
совет
Авто-запуск при загрузке Windows

Для надёжного авто-запуска используйте Планировщик задач Windows для запуска WSL + шлюза при входе в систему:

  1. Создайте задачу, запускающую wsl -d Ubuntu -- bash -lc 'hermes gateway run'
  2. Настройте триггер при входе пользователя

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) использует одну аутентифицированную сессию на номер.

Обходные пути:

  1. Используйте один профиль с переключением личности. Создайте разные контекстные файлы AGENTS.md или используйте команду /personality для смены поведения в зависимости от чата. Агент видит, в каком он чате, и может адаптироваться.

  2. Используйте cron-задания для специализированных задач. Для трекера списка покупок настройте cron-задание, которое следит за конкретным чатом и управляет списком — отдельный агент не нужен.

  3. Используйте отдельные номера. Если нужны по-настоящему независимые агенты, привяжите каждый профиль к своему номеру WhatsApp. Виртуальные номера от сервисов вроде Google Voice для этого подходят.

  4. Используйте 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 пользователя на большинстве платформ, поэтому каждый получает свой контекст разговора. Это намеренно — для приватности и изоляции контекста.

Обходные пути:

  1. Используйте Slack. Сессии Slack привязаны к треду, а не к пользователю. Несколько пользователей в одном треде разделяют один разговор — именно то поведение, которое вы описываете. Это самый подходящий вариант.

  2. Используйте группу с одним пользователем. Если один человек — назначенный «оператор», который транслирует вопросы, сессия остаётся единой. Остальные могут наблюдать.

  3. Используйте канал Discord. Сессии Discord привязаны к каналу, поэтому все пользователи в одном канале разделяют контекст. Создайте выделенный канал для общего разговора.

Экспорт Hermes на другую машину

Сценарий: Вы накопили навыки, cron-задания и воспоминания на одной машине и хотите перенести всё на новый выделенный Linux-сервер.

Решение:

  1. Установите Hermes Agent на новой машине:

    curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
  2. На исходной машине создайте полную резервную копию:

    hermes backup

    Команда сохраняет zip-архив в ~/hermes-backup-<timestamp>.zip. Полный бэкап охватывает конфигурацию, учётные данные, воспоминания, навыки, сессии и профили в корневом каталоге данных Hermes. Образом приложения или среды выполнения он не является.

  3. Скопируйте zip на новую машину и импортируйте:

    # На исходной машине
    scp ~/hermes-backup-<timestamp>.zip newmachine:~/
    
    # На новой машине
    hermes import ~/hermes-backup-<timestamp>.zip
  4. На новой машине запустите 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 backuphermes 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 модели опечатка.


Всё ещё не получается?

Если ваша проблема не описана здесь:

  1. Поищите в существующих ишью: GitHub Issues
  2. Спросите в сообществе: Discord Nous Research
  3. Создайте баг-репорт: Укажите ОС, версию Python (python3 --version), версию Hermes (hermes --version) и полное сообщение об ошибке
перевод и редактура:

обновлено

⌕ ESC