Шлюз обмена сообщениями

Общайтесь с Hermes через Telegram, Discord, Slack, WhatsApp, Signal, SMS, Email, Home Assistant, Mattermost, Matrix, DingTalk, Feishu/Lark, WeCom, Weixin, BlueBubbles (iMessage), QQ, Yuanbao, Microsoft Teams, LINE или ваш браузер. Шлюз — это единый фоновый процесс, который подключается ко всем настроенным платформам, управляет сессиями, запускает задачи cron и доставляет голосовые сообщения.

Полный набор голосовых функций — включая режим микрофона в CLI, голосовые ответы в мессенджерах и голосовые беседы в голосовых каналах Discord — см. в разделах Voice Mode и Use Voice Mode with Hermes.

Сравнение платформ

Платформа Голос Изображения Файлы Треды Реакции Печать Стриминг
Telegram
Discord
Slack
Google Chat
WhatsApp
Signal
SMS
Email
Home Assistant
Mattermost
Matrix
DingTalk
Feishu/Lark
WeCom
WeCom Callback
Weixin
BlueBubbles
QQ
Yuanbao
Microsoft Teams
LINE

Голос = аудиоответы TTS и/или транскрипция голосовых сообщений. Изображения = отправка/получение изображений. Файлы = отправка/получение вложений. Треды = обсуждения в тредах. Реакции = emoji-реакции на сообщения. Печать = индикатор набора текста во время обработки. Стриминг = прогрессивное обновление сообщений через редактирование.

Архитектура

flowchart TB
    subgraph Gateway["Hermes Gateway"]
        subgraph Adapters["Platform adapters"]
            tg[Telegram]
            dc[Discord]
            wa[WhatsApp]
            sl[Slack]
            gc[Google Chat]
            sig[Signal]
            sms[SMS]
            em[Email]
            ha[Home Assistant]
            mm[Mattermost]
            mx[Matrix]
            dt[DingTalk]
    fs[Feishu/Lark]
    wc[WeCom]
    wcb[WeCom Callback]
    wx[Weixin]
    bb[BlueBubbles]
    qq[QQ]
    yb[Yuanbao]
    ms[Microsoft Teams]
    api["API Server<br/>(OpenAI-compatible)"]
    wh[Webhooks]
        end

        store["Session store<br/>per chat"]
        agent["AIAgent<br/>run_agent.py"]
        cron["Cron scheduler<br/>ticks every 60s"]
    end

    tg --> store
    dc --> store
    wa --> store
    sl --> store
    gc --> store
    sig --> store
    sms --> store
    em --> store
    ha --> store
    mm --> store
    mx --> store
    dt --> store
    fs --> store
    wc --> store
    wcb --> store
    wx --> store
    bb --> store
    qq --> store
    yb --> store
    ms --> store
    api --> store
    wh --> store
    store --> agent
    cron --> store

Каждый адаптер платформы принимает сообщения, маршрутизирует их через хранилище сессий (по одному на чат) и отправляет их AIAgent-у на обработку. Шлюз также запускает планировщик cron, который срабатывает каждые 60 секунд для выполнения отложенных задач.

Быстрая настройка

Самый простой способ настроить платформы обмена сообщениями — интерактивный мастер:

hermes gateway setup        # Interactive setup for all messaging platforms

Этот мастер проведёт вас через настройку каждой платформы с выбором с помощью стрелок, покажет, какие платформы уже настроены, и предложит запустить/перезапустить шлюз по завершении.

Команды шлюза

hermes gateway              # Run in foreground
hermes gateway setup        # Configure messaging platforms interactively
hermes gateway install      # Install as a user service (Linux) / launchd service (macOS)
sudo hermes gateway install --system   # Linux only: install a boot-time system service
hermes gateway start        # Start the default service
hermes gateway stop         # Stop the default service
hermes gateway status       # Check default service status
hermes gateway status --system         # Linux only: inspect the system service explicitly

Команды чата (в мессенджерах)

Команда Описание
/new или /reset Начать новый разговор
/model [provider:model] Показать или сменить модель (поддерживается синтаксис provider:model)
/personality [name] Установить личность
/retry Повторить последнее сообщение
/undo Удалить последний обмен
/status Показать информацию о сессии
/stop Остановить работающего агента
/approve Подтвердить ожидающую опасную команду
/deny Отклонить ожидающую опасную команду
/sethome Установить этот чат как домашний канал
/compress Вручную сжать контекст разговора
/title [name] Установить или показать название сессии
/resume [name] Возобновить ранее именованную сессию
/usage Показать использование токенов для этой сессии
/insights [days] Показать аналитику использования
/reasoning [level\|show\|hide] Изменить уровень рассуждений или показать/скрыть рассуждения
/voice [on\|off\|tts\|join\|leave\|status] Управление голосовыми ответами в мессенджерах и поведением в голосовых каналах Discord
/rollback [number] Список или восстановление контрольных точек файловой системы
/background <prompt> Запустить запрос в отдельной фоновой сессии
/reload-mcp Перезагрузить MCP-серверы из конфигурации
/update Обновить Hermes Agent до последней версии
/help Показать доступные команды
/<skill-name> Вызвать любой установленный навык

Управление сессиями

Постоянство сессий

Сессии сохраняются между сообщениями до момента сброса. Агент помнит контекст вашего разговора.

Политики сброса

Сессии сбрасываются в соответствии с настраиваемыми политиками:

Политика По умолчанию Описание
Ежедневно 4:00 Сброс в определённый час каждый день
По бездействию 1440 мин Сброс после N минут бездействия
Обе (комбинированно) Срабатывает та, что наступит раньше

Настройте переопределения для каждой платформы в ~/.hermes/gateway.json:

{
  "reset_by_platform": {
    "telegram": { "mode": "idle", "idle_minutes": 240 },
    "discord": { "mode": "idle", "idle_minutes": 60 }
  }
}

Безопасность

По умолчанию шлюз запрещает доступ всем пользователям, которые не находятся в белом списке или не прошли сопряжение через личные сообщения. Это безопасное значение по умолчанию для бота с доступом к терминалу.

# Restrict to specific users (recommended):
TELEGRAM_ALLOWED_USERS=123456789,987654321
DISCORD_ALLOWED_USERS=123456789012345678
SIGNAL_ALLOWED_USERS=+155****4567,+155****6543
SMS_ALLOWED_USERS=+155****4567,+155****6543
EMAIL_ALLOWED_USERS=trusted@example.com,colleague@work.com
MATTERMOST_ALLOWED_USERS=3uo8dkh1p7g1mfk49ear5fzs5c
MATRIX_ALLOWED_USERS=@alice:matrix.org
DINGTALK_ALLOWED_USERS=user-id-1
FEISHU_ALLOWED_USERS=ou_xxxxxxxx,ou_yyyyyyyy
WECOM_ALLOWED_USERS=user-id-1,user-id-2
WECOM_CALLBACK_ALLOWED_USERS=user-id-1,user-id-2
TEAMS_ALLOWED_USERS=aad-object-id-1,aad-object-id-2

# Or allow
GATEWAY_ALLOWED_USERS=123456789,987654321

# Or explicitly allow all users (NOT recommended for bots with terminal access):
GATEWAY_ALLOW_ALL_USERS=true

Сопряжение через DM (альтернатива белым спискам)

Вместо ручной настройки идентификаторов пользователей, неизвестные пользователи получают одноразовый код сопряжения, когда пишут боту в личные сообщения:

# The user sees: "Pairing code: XKGH5N7P"
# You approve them with:
hermes pairing approve telegram XKGH5N7P

# Other pairing commands:
hermes pairing list          # View pending + approved users
hermes pairing revoke telegram 123456789  # Remove access

Коды сопряжения действуют 1 час, имеют ограничение скорости запросов и используют криптографическую случайность.

Прерывание агента

Отправьте любое сообщение, пока агент работает, чтобы прервать его. Ключевые особенности:

Очередь, прерывание или управление (режим busy-input)

По умолчанию отправка сообщения занятому агенту прерывает его. Доступны два других режима:

display:
  busy_input_mode: steer   # or queue, or interrupt (default)
  busy_ack_enabled: true   # set to false to suppress the ⚡/⏳/⏩ chat reply entirely

Когда вы впервые отправляете сообщение занятому агенту на любой платформе, Hermes добавляет однострочную подсказку к уведомлению о занятости, объясняющую этот параметр ("💡 First-time tip — …"). Подсказка срабатывает один раз за установку — флаг onboarding.seen.busy_input_prompt фиксирует это. Удалите этот ключ, чтобы увидеть подсказку снова.

Если уведомления о занятости кажутся вам излишними — особенно при голосовом вводе или быстрой отправке сообщений — установите display.busy_ack_enabled: false. Ваш ввод по-прежнему будет поставлен в очередь, направлен или прерван как обычно, только ответ в чате будет отключён.

Уведомления о прогрессе инструментов

Управляйте тем, сколько активности инструментов отображается, в ~/.hermes/config.yaml:

display:
  tool_progress: all    # off | new | all | verbose
  tool_progress_command: false  # set to true to enable /verbose in messaging

Когда эта функция включена, бот отправляет статусные сообщения по мере работы:

💻 `ls -la`...
🔍 web_search...
📄 web_extract...
🐍 execute_code...

Фоновые сессии

Запустите запрос в отдельной фоновой сессии, чтобы агент работал над ним независимо, пока ваш основной чат остаётся отзывчивым:

/background Check all servers in the cluster and report any that are down

Hermes немедленно подтверждает:

🔄 Background task started: "Check all servers in the cluster..."
   Task ID: bg_143022_a1b2c3

Как это работает

Каждый запрос /background запускает отдельный экземпляр агента, который работает асинхронно:

Уведомления о фоновых процессах

Когда агент, выполняющий фоновую сессию, использует terminal(background=true) для запуска долгоживущих процессов (серверов, сборок и т. д.), шлюз может отправлять обновления статуса в ваш чат. Управляйте этим с помощью display.background_process_notifications в ~/.hermes/config.yaml:

display:
  background_process_notifications: all    # all | result | error | off
Режим Что вы получаете
all Обновления вывода во время выполнения и финальное сообщение о завершении (по умолчанию)
result Только финальное сообщение о завершении (независимо от кода возврата)
error Только финальное сообщение при ненулевом коде возврата
off Никаких сообщений от наблюдателя процессов

Вы также можете установить это через переменную окружения:

HERMES_BACKGROUND_NOTIFICATIONS=result

Примеры использования

Фоновые задачи в мессенджерах работают по принципу «отправил и забыл» — вам не нужно ждать или проверять их. Результаты автоматически приходят в тот же чат после завершения задачи.

Управление службой

Linux (systemd)

hermes gateway install               # Install as user service
hermes gateway start                 # Start the service
hermes gateway stop                  # Stop the service
hermes gateway status                # Check status
journalctl --user -u hermes-gateway -f  # View logs

# Enable lingering (keeps running after logout)
sudo loginctl enable-linger $USER

# Or install a boot-time system service that still runs as your user
sudo hermes gateway install --system
sudo hermes gateway start --system
sudo hermes gateway status --system
journalctl -u hermes-gateway -f

Используйте пользовательскую службу на ноутбуках и рабочих станциях. Используйте системную службу на VPS или безголовых хостах, которые должны запускаться при загрузке, не полагаясь на systemd linger.

Избегайте одновременной установки пользовательской и системной служб шлюза, если только это не необходимо намеренно. Hermes предупредит, если обнаружит обе, так как поведение команд start/stop/status становится неоднозначным.

info Несколько установок Если вы запускаете несколько установок Hermes на одной машине (с разными каталогами HERMES_HOME), каждая получит собственное имя службы systemd. Установка по умолчанию ~/.hermes использует hermes-gateway; другие установки используют hermes-gateway-<hash>. Команды hermes gateway автоматически обращаются к правильной службе для вашего текущего HERMES_HOME.

macOS (launchd)

hermes gateway install               # Install as launchd agent
hermes gateway start                 # Start the service
hermes gateway stop                  # Stop the service
hermes gateway status                # Check status
tail -f ~/.hermes/logs/gateway.log   # View logs

Сгенерированный plist находится по пути ~/Library/LaunchAgents/ai.hermes.gateway.plist. Он включает три переменные окружения:

tip Изменения PATH после установки plist-файлы launchd статичны — если вы установите новые инструменты (например, новую версию Node.js через nvm или ffmpeg через Homebrew) после настройки шлюза, выполните hermes gateway install заново, чтобы захватить обновлённый PATH. Шлюз обнаружит устаревший plist и перезагрузится автоматически.

info Несколько установок Как и в случае с systemd в Linux, каждый каталог HERMES_HOME получает собственный launchd-ярлык. Установка по умолчанию ~/.hermes использует ai.hermes.gateway; другие установки используют ai.hermes.gateway-<suffix>.

Наборы инструментов для платформ

Каждая платформа имеет собственный набор инструментов:

Платформа Набор инструментов Возможности
CLI hermes-cli Полный доступ
Telegram hermes-telegram Полные инструменты, включая терминал
Discord hermes-discord Полные инструменты, включая терминал
WhatsApp hermes-whatsapp Полные инструменты, включая терминал
Slack hermes-slack Полные инструменты, включая терминал
Google Chat hermes-google_chat Полные инструменты, включая терминал
Signal hermes-signal Полные инструменты, включая терминал
SMS hermes-sms Полные инструменты, включая терминал
Email hermes-email Полные инструменты, включая терминал
Home Assistant hermes-homeassistant Полные инструменты + управление устройствами HA (ha_list_entities, ha_get_state, ha_call_service, ha_list_services)
Mattermost hermes-mattermost Полные инструменты, включая терминал
Matrix hermes-matrix Полные инструменты, включая терминал
DingTalk hermes-dingtalk Полные инструменты, включая терминал
Feishu/Lark hermes-feishu Полные инструменты, включая терминал
WeCom hermes-wecom Полные инструменты, включая терминал
WeCom Callback hermes-wecom-callback Полные инструменты, включая терминал
Weixin hermes-weixin Полные инструменты, включая терминал
BlueBubbles hermes-bluebubbles Полные инструменты, включая терминал
QQBot hermes-qqbot Полные инструменты, включая терминал
Yuanbao hermes-yuanbao Полные инструменты, включая терминал
Microsoft Teams hermes-teams Полные инструменты, включая терминал
API Server hermes-api-server Полные инструменты (исключены clarify, send_message, text_to_speech — программный доступ не имеет интерактивного пользователя)
Webhooks hermes-webhook Полные инструменты, включая терминал

Следующие шаги