Жизненный цикл Gateway на macOS
Приложение macOS управляет Gateway через launchd по умолчанию и не запускает Gateway как дочерний процесс. Оно сначала пытается подключиться к уже запущенному Gateway на настроенном порту; если не находит доступного, оно включает сервис launchd через внешний CLI openclaw (без встроенного runtime). Это дает вам надежный автозапуск при входе в систему и перезапуск при сбоях.
Режим дочернего процесса (Gateway запускается непосредственно приложением) в настоящее время не используется. Если вам нужна более тесная связь с UI, запустите Gateway вручную в терминале.
Поведение по умолчанию (launchd)
- Приложение устанавливает LaunchAgent для каждого пользователя с меткой bot.molt.gateway (или bot.molt.<profile> при использовании --profile/OPENCLAW_PROFILE; устаревший com.openclaw.* поддерживается).
- Когда включен локальный режим, приложение гарантирует, что LaunchAgent загружен и запускает Gateway при необходимости.
- Логи записываются в путь лога launchd gateway (виден в настройках отладки).
Распространенные команды:
launchctl kickstart -k gui/$UID/bot.molt.gateway
launchctl bootout gui/$UID/bot.molt.gateway
Замените метку на bot.molt.<profile> при запуске именованного профиля.
Неподписанные dev-сборки
scripts/restart-mac.sh --no-sign предназначен для быстрых локальных сборок, когда у вас нет ключей подписи. Чтобы предотвратить указание launchd на неподписанный relay-бинарник, он:
- Записывает ~/.openclaw/disable-launchagent.
Подписанные запуски scripts/restart-mac.sh очищают это переопределение, если маркер присутствует. Для ручного сброса:
rm ~/.openclaw/disable-launchagent
Режим только подключения
Чтобы заставить приложение macOS никогда не устанавливать и не управлять launchd, запустите его с --attach-only (или --no-launchd). Это устанавливает ~/.openclaw/disable-launchagent, поэтому приложение только подключается к уже запущенному Gateway. Вы можете переключить то же поведение в настройках отладки.
Удаленный режим
Удаленный режим никогда не запускает локальный Gateway. Приложение использует SSH-туннель к удаленному хосту и подключается через этот туннель.
Почему мы предпочитаем launchd
- Автозапуск при входе в систему.
- Встроенная семантика перезапуска/KeepAlive.
- Предсказуемые логи и наблюдение.
Если когда-либо снова понадобится настоящий режим дочернего процесса, его следует документировать как отдельный, явный режим только для разработки.