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 (o ai.openclaw.<profile> cuando se usa --profile/OPENCLAW_PROFILE; legacy com.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.