Ciclo de vida del Gateway en macOS
La app de macOS gestiona el Gateway vía launchd por defecto y no genera
el Gateway como proceso hijo. Primero intenta conectarse a un Gateway en ejecución
en el puerto configurado; si no hay uno alcanzable, habilita el servicio launchd
vía el CLI externo openclaw (sin runtime embebido). Esto te da
un arranque automático fiable en el login y reinicio ante fallos.
El modo de proceso hijo (Gateway generado directamente por la app) no está en uso hoy. Si necesitas un acoplamiento más estrecho con la UI, ejecuta el Gateway manualmente en una terminal.
Comportamiento predeterminado (launchd)
- La app instala un LaunchAgent por usuario etiquetado
ai.openclaw.gateway(oai.openclaw.<profile>cuando se usa--profile/OPENCLAW_PROFILE; legacycom.openclaw.*es soportado). - Cuando el modo Local está habilitado, la app se asegura de que el LaunchAgent esté cargado y arranca el Gateway si es necesario.
- Los logs se escriben en la ruta de log del Gateway de launchd (visible en Debug Settings).
Comandos comunes:
launchctl kickstart -k gui/$UID/ai.openclaw.gateway
launchctl bootout gui/$UID/ai.openclaw.gateway
Reemplaza la etiqueta con ai.openclaw.<profile> cuando ejecutes un perfil con nombre.
Builds dev sin firmar
scripts/restart-mac.sh --no-sign es para builds locales rápidos cuando no tienes
claves de firma. Para evitar que launchd apunte a un binario relay sin firmar:
- Escribe
~/.openclaw/disable-launchagent.
Las ejecuciones firmadas de scripts/restart-mac.sh eliminan este override si el marcador está
presente. Para resetear manualmente:
rm ~/.openclaw/disable-launchagent
Modo solo conexión
Para forzar que la app de macOS nunca instale ni gestione launchd, iníciala con
--attach-only (o --no-launchd). Esto establece ~/.openclaw/disable-launchagent,
así que la app solo se conecta a un Gateway ya en ejecución. Puedes alternar el mismo
comportamiento en Debug Settings.
Modo remoto
El modo remoto nunca inicia un Gateway local. La app usa un túnel SSH al host remoto y se conecta a través de ese túnel.
Por qué preferimos launchd
- Arranque automático en el login.
- Semántica integrada de reinicio/KeepAlive.
- Logs y supervisión predecibles.
Si alguna vez se necesita de nuevo un verdadero modo de proceso hijo, debería documentarse como un modo separado, explícitamente para desarrollo.