Когда OpenClaw Gateway работает круглосуточно на bare metal Mac CALMVPS, две операции доминируют в day-two: переключение модели по умолчанию или таблицы маршрутизации без обрыва каждого webhook и исправление OPENCLAW_GATEWAY_TOKEN, который работает в SSH, но не под launchd. OpenClaw 2026.4.x добавляет gateway.reload.mode=hybrid, чтобы многие правки маршрутизации обходились без полного рестарта процесса; 2026.5.x улучшает подсказки gateway status --deep для устаревших job ai.openclaw.update.* после обновлений macOS.
Руководство для команд с уже здоровым удалённым gateway. Вы получите воспроизводимый hybrid workflow, чеклист границ token, матрицы ошибок и путь launchd после обновлений. После прочтения будет ясно, когда хватает hybrid reload, когда нужен рестарт daemon и куда смотреть первым, если pairing падает после update. Матрицы ниже рассчитаны на runbook и architecture review, а не на маркетинговый чеклист.
01 Полный рестарт и дрейф token на удалённых gateway
На арендованных хостах Apple Silicon изменение конфигурации стоит дороже первой установки. Типичные болевые точки в production:
- Недооценка частоты смены маршрутов: переключение модели по умолчанию с провайдера A на B или добавление workspace override часто вызывает полный
launchctl kickstart -k. Сессии Slack и webhook падают в окне рестарта, и дежурный ошибочно трактует это как отказ модели. - Двойная среда: вы экспортируете
OPENCLAW_GATEWAY_TOKENв SSH-сессии, локальный curl успешен, а gateway под launchd возвращает unauthorized, потому что plist так и не получил переменную. - Дрейф корня конфигурации: редакторы правят одно дерево YAML, а
OPENCLAW_HOMEилиWorkingDirectoryв plist указывает в другое место. Hybrid reload читает не тот файл, который вы только что изменили. - Шум launchd после обновлений: около 2026.5.12-beta на части хостов оставался submitted job
ai.openclaw.update.*с exit 127, многократно дергая сервис gateway, пока устаревший updater job не удаляли. - Разрыв long-lived соединений: каждый полный bounce обрывает каналы, которые уже держали состояние — именно здесь hybrid reload снижает операционный риск на удалённом узле без физического доступа.
Production нуждается и в hybrid reload для рутинной маршрутизации, и в едином источнике истины для token в plist LaunchAgent — не только в интерактивной shell. Шаги ниже предполагают loopback (обычно 127.0.0.1:18789) с SSH-туннелем или reverse proxy для удалённого доступа. Зафиксируйте в runbook стандартный порт SSH-туннеля команды, чтобы healthcheck и ручной curl били в один endpoint.
Команды с несколькими окружениями должны отдельно описать, какие правки config допустимы без окна обслуживания, а какие требуют hard restart. Без этого дежурный смешивает routing-эксперименты с ротацией token и увеличивает MTTR.
Успешный curl из SSH не доказывает корректность среды daemon — валидируйте против процесса launchd, а не login-сессии.
02 Режимы reload: hybrid, off и жёсткий рестарт
Согласуйте в команде, какие правки допустимы через hybrid reload, прежде чем менять gateway.reload.mode. Решение должно быть в runbook, а не только в голове последнего дежурного.
| Изменение | Hybrid reload | Полный рестарт / refresh daemon |
|---|---|---|
| ID модели по умолчанию, таблица маршрутов, map провайдеров workspace | Обычно поддерживается | При invalid-key из validate: исправить схему, затем restart |
| Ротация OPENCLAW_GATEWAY_TOKEN | Только так — не рекомендуется | Обновить plist, bootout/bootstrap; клиенты после gateway |
| Адрес прослушивания, порт, TLS-терминация | Не поддерживается | Restart; перепроверить firewall и туннели |
| Major-переход Node или версии OpenClaw | N/A | Использовать managed Node gateway; избегать нескольких установок Node |
| Первое включение hybrid с off | Записать config и validate | Перезапустить LaunchAgent, если daemon читает старый файл |
hybrid применяет поля, связанные с маршрутизацией, не рвя long-lived соединения при валидной конфигурации. Границы auth, сокеты и смена runtime по-прежнему требуют полного refresh сервиса. Зафиксируйте эту границу в team runbook, чтобы никто не пытался ротировать token только через hybrid reload.
Дополнительно ведите короткий журнал изменений: дата, пути config, вывод validate, выбор hybrid или hard restart. Это ускоряет postmortem, когда несколько редакторов правят параллельные копии. На уровне планировщика macOS launchd любое расхождение между shell и daemon быстро превращается в ложные 401 — поэтому матрица режимов reload должна быть частью onboarding новых SRE.
03 Архитектура 2026.4.x и предварительные условия
На bare metal CALMVPS устойчивая схема — один удалённый Mac с daemon gateway, ноутбуки достигают control plane через ssh -L 18789:127.0.0.1:18789 или Tailscale. Тяжёлые job можно вынести на параллельные worker-инстансы, но аудируйте token на primary gateway — не переиспользуйте один token на экспериментальных клонах.
- Runtime: документация 2026.4.x часто требует Node 22.16+; фиксация Node 24 LTS на хосте снижает расхождение с Node managed-сервиса gateway.
- Путь установки:
openclaw onboard --install-daemonсоздаёт LaunchAgent; production-изменения должны попадать в plistEnvironmentVariables, а не только в.zshrc. - Валидация: запускать
openclaw config validateперед reload, если доступно; сначала исправлять путиinvalid-key. - Видимость версии: status JSON 2026.5 может включать running gateway version для согласования ожиданий протокола CLI.
Схема и команды эволюционируют по релизам — после фиксации версии снова откройте upstream-репозиторий и сверьте runbook. Не полагайтесь на устаревшие вторичные заметки без проверки официального репозитория.
На уровне Metal и планировщика macOS launchd остаётся ключевым механизмом для gateway на Apple Silicon — именно поэтому bare metal Mac CALMVPS предпочтительнее generic Linux VPS, где этот стек недоступен. Перед первым hybrid reload убедитесь, что мониторинг разделяет метрики gateway и latency модели.
04 Шесть шагов hybrid reload и укрепление token в plist
- Baseline health: выполнить
openclaw gateway status; добавить--deep, если подозреваются устаревшие updater job. - Включить hybrid: установить
gateway.reload.modeвhybridв config root, который читает daemon; validate до чистого результата. - Править маршрутизацию: изменить ID модели по умолчанию, map провайдеров или workspace overrides на том же пути, что plist
WorkingDirectory/OPENCLAW_HOME. - Reload и доказать маршрут: вызвать reload по документации версии; отправить короткий запрос, который обязан попасть в новую модель; подтвердить через логи провайдера или метаданные.
- Зафиксировать token в plist: поместить
OPENCLAW_GATEWAY_TOKENи URLgateway.remoteв LaunchAgentEnvironmentVariables; bootout/bootstrap — не полагаться только на SSH export. - End-to-end probe: с хоста вне gateway вызвать ту же URL и token, что production; loopback healthcheck на Mac с документированным probe path.
openclaw config validate
openclaw gateway status
openclaw gateway status --json
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/ai.openclaw.gateway.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.openclaw.gateway.plist
Перед bootout перечислите реальные имена plist в ~/Library/LaunchAgents/ — имя файла выше иллюстративно. Архивируйте snapshot plist и config перед ротацией token для rollback без угадывания.
После шага четыре выполните узкий channel-тест без inference модели: auth, routing и persist новой map. Если этот путь зелёный, большинство сюрпризов уже исключено до реальной нагрузки.
05 Triage launchd после обновлений и gateway.remote
| Симптом | Проверить сначала | Первое исправление |
|---|---|---|
| Probe --deep падает, agent loaded | ai.openclaw.update.* высокий RUN_COUNT, exit 127 |
Удалить устаревший updater job; починить plist; bootstrap gateway |
| 401 / mismatch token | Token SSH vs plist | Унифицировать на plist; ротация gateway до клиентов |
| gateway.remote доступен, pairing падает | Split-DNS, SAN сертификата туннеля | Согласовать remote URL с front hostname туннеля |
| Reload, но старая модель | Отредактирована неверная копия config | Выровнять OPENCLAW_HOME; validate; hard restart при необходимости |
| Skew протокола CLI/gateway после update | Несколько бинарников Node | Managed service Node для последующих команд |
Issue #81859 документирует последствия beta upgrade с устаревшими updater job; новые сборки дают подсказки в status --deep и doctor. Сопоставьте шаги с заметками установленной версии. При нескольких симптомах одновременно начинайте с launchd-остатков и дрейфа token — не с outage провайдера модели, который часто вторичен. Сохраните датированный транскрипт launchctl print до удаления job, чтобы rollback был прослеживаемым.
openclaw/openclaw Issue #81859 (остатки updater launchd macOS)
06 Размерность, цитируемые параметры и CALMVPS
- Порт control plane по умолчанию:
18789на loopback; удалённо — только через туннель или proxy плюс token. - Ключ reload:
gateway.reload.mode=hybrid(вложенность подтвердить выводом validate). - Среда auth:
OPENCLAW_GATEWAY_TOKENдолжен быть в LaunchAgentEnvironmentVariables. - Размерность хоста gateway: M4 24GB для multi-channel плюс cron; M4 Pro для тяжёлых экспериментов Skills; 1TB/2TB до апгрейда CPU, когда растут логи и workspace.
Держать gateway на засыпающем ноутбуке связывает окна reload с закрытием крышки и token только в shell. Generic Linux VPS не имеет macOS launchd и channel-поведения, которые вы уже валидировали. Shared-хостинг дополнительно делит ресурсы и усложняет воспроизводимые состояния launchd под нагрузкой.
Для предсказуемых hybrid ops и token на уровне plist bare metal Mac CALMVPS multi-region обычно лучший production-хост: выделенный Apple Silicon, доставка около 120 секунд и параллельные day/week worker для пиков сборки без upsize control plane. Для iOS CI/CD и автоматизации AI Agent стабильное железо и чёткая граница token важнее экономии на VPS. Помесячная аренда вместо CapEx делает параллельные worker доступными без апгрейда primary gateway. См. страницу цен CALMVPS.