Шлюз обмена сообщениями
Общайтесь с 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 | — | ✅ | ✅ | ✅ | — | ✅ | — |
| — | ✅ | ✅ | — | — | ✅ | ✅ | |
| Signal | — | ✅ | ✅ | — | — | ✅ | ✅ |
| SMS | — | — | — | — | — | — | — |
| — | ✅ | ✅ | ✅ | — | — | — | |
| Home Assistant | — | — | — | — | — | — | — |
| Mattermost | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ |
| Matrix | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| DingTalk | — | ✅ | ✅ | — | ✅ | — | ✅ |
| Feishu/Lark | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| WeCom | ✅ | ✅ | ✅ | — | — | ✅ | ✅ |
| WeCom Callback | — | — | — | — | — | — | — |
| Weixin | ✅ | ✅ | ✅ | — | — | ✅ | ✅ |
| BlueBubbles | — | ✅ | ✅ | — | ✅ | ✅ | — |
| ✅ | ✅ | ✅ | — | — | ✅ | — | |
| 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 час, имеют ограничение скорости запросов и используют криптографическую случайность.
Прерывание агента
Отправьте любое сообщение, пока агент работает, чтобы прервать его. Ключевые особенности:
-
Выполняющиеся терминальные команды немедленно завершаются (SIGTERM, затем SIGKILL через 1 секунду)
-
Вызовы инструментов отменяются — выполняется только текущий, остальные пропускаются
-
Несколько сообщений объединяются — сообщения, отправленные во время прерывания, соединяются в один запрос
-
Команда
/stop— прерывает без постановки следующего сообщения в очередь
Очередь, прерывание или управление (режим busy-input)
По умолчанию отправка сообщения занятому агенту прерывает его. Доступны два других режима:
-
queue— последующие сообщения ждут и выполняются следующим ходом после завершения текущей задачи. -
steer— последующие сообщения внедряются в текущий запуск через/steer, поступая агенту после следующего вызова инструмента. Без прерывания, без нового хода. Возвращается к поведениюqueue, если агент ещё не начал работу.
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 запускает отдельный экземпляр агента, который работает асинхронно:
-
Изолированная сессия — фоновый агент имеет собственную сессию с собственной историей разговора. Он не знает о текущем контексте вашего чата и получает только тот запрос, который вы предоставили.
-
Та же конфигурация — наследует вашу модель, провайдера, наборы инструментов, настройки рассуждений и маршрутизацию провайдеров из текущей конфигурации шлюза.
-
Неблокирующий — ваш основной чат остаётся полностью интерактивным. Отправляйте сообщения, выполняйте другие команды или запускайте новые фоновые задачи, пока он работает.
-
Доставка результатов — когда задача завершается, результат отправляется обратно в тот же чат или канал, где вы ввели команду, с префиксом «✅ Background task complete». В случае ошибки вы увидите «❌ Background task failed» с описанием ошибки.
Уведомления о фоновых процессах
Когда агент, выполняющий фоновую сессию, использует 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
Примеры использования
-
Мониторинг серверов — «/background Проверь работоспособность всех сервисов и сообщи, если что-то не работает»
-
Длительные сборки — «/background Собери и разверни staging-окружение», пока вы продолжаете общение
-
Исследовательские задачи — «/background Исследуй цены конкурентов и оформи сводку в виде таблицы»
-
Файловые операции — «/background Организуй фотографии в ~/Downloads по датам в папки»
Управление службой
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 становится неоднозначным.