2026-05-28 Hermes Agent Telegram на арендованном Mac mini M4 (HK / JP / KR / SG / US)
На том же Mac mini M4, где уже собираются iOS-приложения по SSH, можно запустить Hermes Agent как Telegram-бота. Процесс шлюза (hermes gateway) хранит токен BotFather, применяет allowlist числовых ID пользователей и пересылает чат в цикл инструментов Hermes—утверждайте правки CI или задавайте вопросы по архитектуре с телефона без постоянно включённого ноутбука.
Для serverless Modal/Daytona и near-idle: гайд Hermes Serverless Modal/Daytona.
Зачем Telegram на builder-Mac
Telegram подходит для headless-аренды: шлюз по умолчанию использует исходящий long polling—Mac инициирует HTTPS к API Telegram, не открывая входящие порты на общем builder (в отличие от webhook с публичным HTTPS).
Типичные причины подключить Hermes к Telegram на lease-хосте:
- дежурная triage—когда GitHub Actions или
xcodebuildпадает ночью, ответ с телефона, пока agent читает логи на NVMe. - разделение задач—OpenClaw для автоматизации репозитория, Hermes для личного/ops-чата; параллельно только если принимаете два процесса шлюза (RAM и изоляция токенов).
- миграция с messaging OpenClaw—в upstream README есть
hermes claw migrate; перед двумя шлюзами на хосте 16 GB прочитайте матрицу Hermes vs OpenClaw vs OpenHuman.
В спецификациях Mac mini указано 16–24 ГБ unified memory. Заложите ~1–2 ГБ на hermes gateway и рабочий набор модели до параллельных тестов Xcode. Не коммитьте bot token в git.
Как устроен Telegram-шлюз
Hermes разделяет CLI-чат (hermes TUI) и мессенджинг (hermes gateway). Конфиг Telegram попадает в ~/.hermes/.env (или вывод мастера), логи — ~/.hermes/logs/gateway.log, на macOS опционально сервис launchd.
| Компонент | Путь / команда | Роль |
|---|---|---|
| Установка | curl -fsSL …/install.sh | bash | Python 3.11 + hermes CLI |
| Модель / auth | hermes setup | API-ключи провайдера (BYO или Nous Portal) |
| Конфиг Telegram | hermes gateway setup | Bot Токен + + TELEGRAM_ALLOWED_USERS |
| Тест на переднем плане | hermes gateway | Long-polling bot до Ctrl+C |
| Служба | hermes gateway install → hermes gateway start | macOS launchd, Работает после logout |
| Проверки | hermes doctor, hermes gateway status | Проверка конфига и процессов |
Поток данных (режим polling):
- Вы пишете боту в Telegram.
- Шлюз получает обновление через Telegram Bot API (исходящий poll).
- Цикл agent Hermes запускает инструменты на настроенном terminal backend (локально, Docker или SSH на том же хосте).
- Текст ответа (и опциональные вложения
MEDIA:/path) возвращается через шлюз в Telegram.
Важные настройки безопасности: Upstream использует в TELEGRAM_ALLOWED_USERS числовые ID, а не @username. Любой с токеном бота может выдать себя за бота—относитесь как к API-ключу; при утечке — /revoke в BotFather.
Официально: документация Hermes Telegram (BotFather, режим приватности, webhooks).
BotFather и контроль доступа
Создать бота
- Открыть @BotFather →
/newbot. - Задать отображаемое имя (напр.
Builder Hermes) и username с окончаниемbot. - Скопировать токен вида
123456789:ABCdefGHIjklMNOpqrs…—в менеджер паролей, не в git.
Добавить ID в allowlist
Написать @userinfobot для числового ID (напр. 123456789). С TELEGRAM_ALLOWED_USERS Hermes отклоняет незнакомых.
Опциональное усиление на общих lease:
- только allowlist одного пользователя—без wildcard «командных» ID, пока не ясен scope инструментов.
- отдельный бот на среду (staging vs production lease)—утечка staging не должна затронуть prod workspace.
- отключить группы, пока не проверен DM.
Настроить Hermes для Telegram
Интерактивно (рекомендуется)
hermes setup # сначала провайдер модели при новой установке
hermes gateway setup # выбрать Telegram → вставить токен → разрешённые ID
Ручное редактирование ~/.hermes/.env
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrSTUvwxYZ
TELEGRAM_ALLOWED_USERS=123456789
# Опциональная команда: TELEGRAM_ALLOWED_USERS=111111111,222222222
Права файлов 600 и исключение из ненадёжной синхронизации dotfile.
Smoke-тест на переднем плане:
hermes gateway
Отправьте hello в Telegram; ответ за секунды. Остановите Ctrl+C перед launchd.
Восемь шагов headless-развёртывания на Mac mini M4
- Установить Hermes — Официальный install.sh в учётной записи аренды (не root).
- Запустить hermes setup — Настроить провайдера модели; убедиться, что
hermes doctorбез ошибок. - Создать токен BotFather — и получить числовой ID пользователя (разделы выше).
- Запустить hermes gateway setup — Выбрать Telegram; проверить токен и allowlist в
~/.hermes/.env. - Тест на переднем плане —
hermes gateway, сообщение боту, безвредный инструмент (напр.pwd); Ctrl+C. - Установить службу —
hermes gateway install, затемhermes gateway start(macOS launchd). - Сохранить окружение для daemon — Ключи API в
~/.hermes/.envчитаются launchd (тот же пользователь); при сбое только в фоне — заметки OpenClaw launchd PATH. - Мониторинг —
hermes gateway status,tail -f ~/.hermes/logs/gateway.log, после смены конфига — Telegram/newдля сброса сессий.
Цитируемое правило эксплуатации:Один процесс шлюза может обслуживать несколько платформ (Telegram, Discord, Slack и т.д.)—отдельный daemon на каждое чат-приложение не нужен.
launchd и lease только по SSH
На macOS-lease hermes gateway install регистрирует пользовательский job launchd—аналогично openclaw onboard --install-daemon на этом блоге.
hermes gateway install
hermes gateway start
hermes gateway status
tail -f ~/.hermes/logs/gateway.log
После разрыва SSH шлюз должен оставаться под тем же Unix-пользователем, что выполнял install. Если job остановился, проверьте:
launchctl list | grep -i hermes- ошибки
TELEGRAM_BOT_TOKEN/ auth в логе - убивает ли политика lease долгие user-agent при logout (редко на выделенном M4; чаще на общих shell)
Заметка Docker backend: При terminal.backend: docker файлы через MEDIA:/path должны быть на хостовом пути, читаемом шлюзом—not только в контейнере. Монтируйте тома, видимые с хоста, по upstream telegram.md.
Групповые чаты (опционально)
Режим приватности Telegram по умолчанию ВКЛ—в группе бот часто видит только /commands, ответы боту или трафик админов. Для большего контекста отключите приватность в BotFather (Bot Settings → Group Privacy → Turn off) и удалите/добавьте бота в каждой группе или сделайте его администратором.
Для «наблюдать, но не отвечать без @» см. TELEGRAM_OBSERVE_UNMENTIONED_GROUP_MESSAGES и разрешённые chat ID—сначала раздел групп в telegram.md.
Устранение неполадок
Симптом: бот не отвечает (тихий polling)
| Проверка | Команда / исправление |
|---|---|
| Шлюз запущен? | hermes gateway status; перезапуск hermes gateway start |
| Токен валиден? | вставить из BotFather; при утечке /revoke |
| Пользователь не в allowlist? | добавить числовой ID в TELEGRAM_ALLOWED_USERS и перезапустить шлюз |
| Сбой модели/auth? | hermes doctor; сначала протестировать CLI hermes локально |
| Логи | grep -i error ~/.hermes/logs/gateway.log | tail -20 |
Симптом: 401 Unauthorized или Conflict: terminated by other getUpdates
- 401: неверный или отозванный
TELEGRAM_BOT_TOKEN. - Conflict: два процесса poll одного бота—остановите дубли
hermes gatewayили второй хост с тем же токеном.
hermes gateway stop
pkill -f "hermes gateway" 2>/dev/null || true
hermes gateway start
Симптом: на переднем плане OK, под launchd сбой
- у launchd минимальное окружение—проверьте чтение
~/.hermes/.envи ключи провайдера. - сравните
PATHв SSH иlaunchctl print gui/$(id -u)(macOS); выровняйте Node, если плагины вызывают shell.
Симптом: в группе только /commands
- режим приватности BotFather всё ещё ON—выключить или сделать бота админом; заново добавить бота в группу.
FAQ
hermes claw migrate возможна, но два бота на одном хосте дублируют RAM и рискуют конфликтом автоматизации. Один владелец messaging на lease.memory_pressure на пиках archive + gateway; при необходимости приостанавливайте gateway во время больших матриц xcodebuild.Headless M4 для шлюза Hermes Telegram
SSH-first Apple Silicon в HK, JP, KR, SG и US—polling Telegram и launchd для работы 24/7.