Шлюз обмена сообщениями
Общайтесь с Hermes через Telegram, Discord, Slack, WhatsApp, Signal, SMS, электронную почту, Home Assistant, Mattermost, Matrix, DingTalk, Feishu/Lark, WeCom, Weixin, BlueBubbles (iMessage), QQ, Yuanbao, Microsoft Teams, LINE или ваш браузер. Шлюз — это единый фоновый процесс, который поддерживает все настроенные платформы, управляет сессиями, запускает задачи по расписанию и отправляет голосовые сообщения.
Полный набор голосовых функций — включение режима микрофона в CLI, голосовые ответы в сообщениях и разговоры в голосовых каналах Discord — см. в разделах Голосовой режим и Использование голосового режима с Hermes.
Сравнение платформы
| Платформа | Голос | Изображения | Файлы | Ветки | Реакции | Печать | Потоковая передача |
|---|---|---|---|---|---|---|---|
| Телеграмма | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ |
| Раздор | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| слабый | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Google Чат | — | ✅ | ✅ | ✅ | — | ✅ | — |
| — | ✅ | ✅ | — | — | ✅ | ✅ | |
| Сигнал | — | ✅ | ✅ | — | — | ✅ | ✅ |
| СМС | — | — | — | — | — | — | — |
| Электронная почта | — | ✅ | ✅ | ✅ | — | — | — |
| Домашний помощник | — | — | — | — | — | — | — |
| Самое важное | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ |
| Матрица | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ДинТок | — | ✅ | ✅ | — | ✅ | — | ✅ |
| Фейшу/Жаворонок | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ВеКом | ✅ | ✅ | ✅ | — | — | ✅ | ✅ |
| Обратный звонок WeCom | — | — | — | — | — | — | — |
| Вэйсинь | ✅ | ✅ | ✅ | — | — | ✅ | ✅ |
| Синие пузыри | — | ✅ | ✅ | — | ✅ | ✅ | — |
| ✅ | ✅ | ✅ | — | — | ✅ | — | |
| Юаньбао | ✅ | ✅ | ✅ | — | — | ✅ | ✅ |
| Команды Майкрософт | — | ✅ | — | ✅ | — | ✅ | — |
| ЛИНИЯ | — | ✅ | ✅ | — | — | ✅ | — |
Голос = аудиоответы TTS и/или транскрипция голосовых сообщений. Изображения = отправка/получение изображений. Файлы = отправка/получение вложений. Ветки = обсуждение в видеоветок. Реакции = Состояние эмодзи сообщений. Печать = индикатор набора текста во время обработки. Потоковая связь = прогрессивные обновления сообщений посредством редактирования.
Архитектура
flowchart TB
subgraph Gateway["Шлюз Hermes"]
subgraph 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<br/>(совместимый с OpenAI)"]
wh[Webhooks]
end
store["Хранилище сессий<br/>на каждый чат"]
agent["AIAgent<br/>run_agent.py"]
cron["Планировщик Cron<br/>тикает каждые 60 с"]
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 # Интерактивная настройка для всех платформ обмена сообщениями
Это проведет вас через диапазон каждой платформы с выбором стрелок, определит, какая платформа уже настроена, и предложит запустить/перезапустить шлюз по завершении.
Команды шлюза
hermes gateway # Запуск в фореграунде
hermes gateway setup # Интерактивная настройка платформ обмена сообщениями
hermes gateway install # Установка как пользовательская служба (Linux) / служба launchd (macOS)
sudo hermes gateway install --system # Linux: установка системной службы, запускаемой при загрузке
hermes gateway start # Запуск службы по умолчанию
hermes gateway stop # Остановка службы по умолчанию
hermes gateway status # Проверка статуса службы по умолчанию
hermes gateway status --system # Linux: явная проверка системной службы
Команды чата (внутри обмена сообщениями)
| Команда | Описание |
|---|---|
/new или /reset |
Начать новый разговор |
/модель [провайдер:модель] |
Показать или изменить модель (поддерживается синтаксис провайдер:модель) |
/personality [имя] |
Установить личность |
/повторить |
Повторить последнее сообщение |
/отменить |
Удалить последний обмен |
/статус |
Показать информацию о сессии |
/воами |
Показать уровень вашего доступа к слэш-командам в этой области (администратор/пользователь/неограниченный) |
/стоп |
Остановить работающего агента |
/утвердить |
Подтвердить ожидаемую опасную команду |
/отказать |
Отклонить ожидаемую опасную команду |
/sethome |
Установить этот чат как домашний канал |
/сжать |
Вручную сжать контекст разговора |
/title [имя] |
Установить или название показать сессию |
/resume [имя] |
Возобновить ранее названную сессию |
/использование |
Показать использование токенов для этой сессии |
/insights [дни] |
Показать аналитику использования |
/рассуждение [уровень\|показать\|скрыть] |
Изменить уровень регулирования или переключить инструменты рассуждений |
/voice [вкл\|выкл\|tts\|присоединиться\|выйти\|статус] |
Управление голосовыми ответами в сообщениях и поведением в голосовых каналах Discord |
/rollback [число] |
Список или восстановление контрольных точек файловой системы |
/background <промпт> |
Запустить приглашение в отдельной фоновой сессии |
/перезагрузка-MCP |
Перезагрузить MCP-серверы из конфигурации |
/обновить |
Обновить Агент Гермес до последней версии |
/помощь |
Показать доступные команды |
/<имя-навыка> |
Вызовите любой установленный навык |
Управление сессиями
Сохранение сессий
Сессия переключается между сообщениями до сброса. Агент помнит контекст разговора.
Политики сброса
Сессии сбрасываются на основе настраиваемых политиков:
| Политика | По умолчанию | Описание |
|---|---|---|
| Ежедневно | 4:00 | Сброс в определенный час каждый день |
| Неактивность | 1440 мин | Сброс после N минут бездействия |
| Комбинированная | (объединено) | С осуществлением того, что происходит раньше |
Настройте переопределение для каждой платформы в ~/.hermes/gateway.json:
{
"reset_by_platform": {
"telegram": { "mode": "idle", "idle_minutes": 240 },
"discord": { "mode": "idle", "idle_minutes": 60 }
}
}
Безопасность
По умолчанию шлюз запрещает все пользователи, не входящие в белый список или не подключенные через личные сообщения. Это безопасное поведение по умолчанию для бота с доступом к терминалу.
# Ограничить определёнными пользователями (рекомендуется):
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
# Или разрешить
GATEWAY_ALLOWED_USERS=123456789,987654321
# Или явно разрешить всех пользователей (НЕ рекомендуется для ботов с доступом к терминалу):
GATEWAY_ALLOW_ALL_USERS=true
Состыковка через личные сообщения (альтернативно белым спискам)
Вместо ручной настройки идентификатора пользователя неизвестные пользователи получают одноразовый код состыковки, когда пишут боту в личку:
# Пользователь видит: "Код состыковки: XKGH5N7P"
# Вы подтверждаете его с помощью:
hermes pairing approve telegram XKGH5N7P
# Другие команды состыковки:
hermes pairing list # Просмотр ожидающих + подтверждённых пользователей
hermes pairing revoke telegram 123456789 # Удаление доступа
Коды состыковки истекают через 1 час, имеют ограничение скорости и обеспечивают криптографическую случайность.
Контроль доступа к слэш-командам
После того, как пользователи допущены, их можно разделить на администраторов (полный доступ к слэш-командам) и обычных пользователей (только те слэш-команды, которые вы явно разрешили). Это применимо для каждой платформы и каждой (личные области сообщений или группы/канала) и работает через команду реестра с первого раза, поэтому это происходит как со встроенными, так и с зарегистрированными плагинами слэш-команд без необходимости связывания для каждой функции.
gateway:
platforms:
discord:
extra:
allow_from: ["111", "222", "333"]
allow_admin_from: ["111"] # администраторы → все слэш-команды
user_allowed_commands: [status, model] # что могут выполнять обычные пользователи
# Опционально: отдельная область для группы/канала
group_allow_admin_from: ["111"]
group_user_allowed_commands: [status]
Поведение:
- Пользователь в
allow_admin_fromдля области может выполнять любую зарегистрированную слэш-команду. - Пользователь в
allow_from, но не вallow_admin_from, может выполнять только команды изuser_allowed_commands, а также всегда разрешенные:/helpи/whoami. - Обычный чат не затрагивается. Обычные пользователи могут по-прежнему общаться с агентом; они просто не могут запускать произвольные команды.
- Обратная конкуренция: если
allow_admin_fromне задан для области, шлюз слэш-команды для этой области отключён. Существующие установки продолжают работать без изменений. - Статус администратора в личных сообщениях не означает статус администратора в группе/канале. каждая область имеет свой собственный список администраторов.
Используйте /whoami на любой платформе, чтобы увидеть активную область, ваш уровень (администратор/пользователь/неограниченный) и какие слэш-команды вы можете выполнить. Примеры для конкретной платформы см. на страницах Telegram и Discord.
Прерывание агента
Отредактируйте любое сообщение, пока агент работает, чтобы прервать его. Ключевые особенности:
- Выполняющиеся команды терминала мгновенно завершаются (SIGTERM, затем SIGKILL через 1 с)
- Вызовы инструментов для замены — результат только текущего, остальные про результат.
- Несколько сообщений объединяются — сообщения, отправленные во время прерывания, объединяются за один раз.
- Команда
/stop— прерывает без подачи последовательное сообщение.
Очередь, прерывание и управление (режим занят-вход)
По умолчанию отправка сообщения занятому агенту прерывает его. Доступны два других режима:
- «очередь» — сообщение сообщения ожидает и выполняет следующий ход после завершения текущей задачи.
steer— последующие сообщения вводятся в текущий запуск через/steer, последующую агенту после следующего вызова инструмента. Без прерывания, без нового хода. Если агент ещё не запущен, переключается на поведение «очередь».
display:
busy_input_mode: steer # или queue, или interrupt (по умолчанию)
busy_ack_enabled: true # установите false, чтобы полностью отключить ответ ⚡/⏳/⏩ в чате
Когда вы впервые отправляете сообщение занятому агенту на любой платформе, Hermes добавил однострочное напоминание о busy-ack, объясняющее этап («💡 Совет для новичков — …»). Напоминание о выполнении один раз для установки — флажок подonboarding.seen.busy_input_prompt` фиксирует это. Удалите этот ключ, чтобы снова увидеть подсказку.
Если busy-ack кажется вам шумным — особенно при голосовом вводе или отправке сообщений — установите display.busy_ack_enabled: false. Ваш ввод по-прежнему происходит в свою очередь/управляется/прерывается как обычно, только ответ в чате скрыт.
Уведомления о прогрессивных инструментах
Управляйте активностями инструментов в ~/.hermes/config.yaml:
display:
tool_progress: all # off | new | all | verbose
tool_progress_command: false # установите true, чтобы включить /verbose в сообщениях
При включении бот отправляет сообщения о статусе по мере работы:
💻 `ls -la`...
🔍 web_search...
📄 web_extract...
🐍 execute_code...
Фоновые сессии
Запустите подсказку в отдельной фоновой сессии, чтобы агент работал над ним независимо, пока ваш основной чат остается отзывчивым:
/background Проверь все серверы в кластере и сообщи, какие не работают
Согласование Гермеса:
🔄 Фоновая задача запущена: "Проверь все серверы в кластере..."
ID задачи: bg_143022_a1b2c3
Как это работает
Каждый запрос /background блокчейнет отдельный экземпляр агента, который работает асинхронно:
- Изолированная сессия — фоновый агент имеет собственную сессию со своими собственными разговорами. Он не знает вашего текущего чата и получает только предоставленную подсказку.
- Та же конфигурация — наследует вашу модель, провайдера, наборы инструментов, настройку рассуждения и маршрутизацию провайдера из текущей настройки шлюза.
- Неблокирующий — ваш основной чат остается полностью интерактивным. Отправляйте сообщения, выполняйте другие команды или запускайте дополнительные фоновые задачи, пока он работает.
- Доставка результата — когда результат завершается, результат отправляется обратно в тот же чат или канал, где вы ввели команду с префиксом « ✅ Фоновая задача завершена». В случае страха вы увидите «❌ Фоновая задача не удалась» с ошибкой.
Уведомления фоновых процессов
Когда агент, выполняющий фоновую сессию, использует terminal(background=true) для запуска долгосрочных рабочих процессов (серверы, сборка и т.д.), шлюз может отправить запрос обновления в ваш чат. Управляйте этим с помощью display.background_process_notifications в ~/.hermes/config.yaml:
display:
background_process_notifications: all # all | result | error | off
| Режим | Что вы чувствуете |
|---|---|
все |
Обновление результатов во время работы и окончательное сообщение о завершении (по умолчанию) |
результат |
Единственное последнее сообщение о завершении (независимо от выхода кода) |
ошибка |
Только итоговое сообщение при ненулевом коде вывода |
выключено |
Никаких замечаний от наблюдателей за процессом |
Вы также можете задать это через переменное окружение:
HERMES_BACKGROUND_NOTIFICATIONS=result
Варианты использования
- Мониторинг серверов — "/background Проверь здоровье всех сервисов и предупреди меня, если что-то не работает"
- Долгие сборки — "/background Собери и разверни staging-окружение", пока вы продолжаете общаться
- Исследовательские задачи — "/background Исследуй цены конкуренты и обобщи в таблице"
- Работа с файлами — "/background Организуй фотографии в ~/Загрузки по дате в папках":::совет Фоновые задачи на платформах обмена сообщениями работают по принципу «запустил и забыл» — вам не нужно их ждать или проверять. Результаты автоматически поступают в тот же чат, когда задача решается.