Gateway en macOS (launchd externo)

OpenClaw.app ya no incluye Node/Bun ni el runtime del Gateway. La app de macOS espera una instalación externa del CLI openclaw, no genera el Gateway como proceso hijo, y gestiona un servicio launchd por usuario para mantener el Gateway ejecutándose (o se conecta a un Gateway local existente si ya hay uno en ejecución).

Instalar el CLI (requerido para modo local)

Node 24 es el runtime predeterminado en Mac. Node 22 LTS, actualmente 22.16+, aún funciona por compatibilidad. Luego instala openclaw globalmente:

npm install -g openclaw@<version>

El botón Install CLI de la app de macOS ejecuta el mismo flujo vía npm/pnpm (no se recomienda bun para el runtime del Gateway).

Launchd (Gateway como LaunchAgent)

Etiqueta:

  • ai.openclaw.gateway (o ai.openclaw.<profile>; legacy com.openclaw.* puede permanecer)

Ubicación del plist (por usuario):

  • ~/Library/LaunchAgents/ai.openclaw.gateway.plist (o ~/Library/LaunchAgents/ai.openclaw.<profile>.plist)

Gestor:

  • La app de macOS gestiona la instalación/actualización del LaunchAgent en modo Local.
  • El CLI también puede instalarlo: openclaw gateway install.

Comportamiento:

  • “OpenClaw Active” habilita/deshabilita el LaunchAgent.
  • Cerrar la app no detiene el Gateway (launchd lo mantiene vivo).
  • Si ya hay un Gateway ejecutándose en el puerto configurado, la app se conecta a él en lugar de iniciar uno nuevo.

Logging:

  • stdout/err de launchd: /tmp/openclaw/openclaw-gateway.log

Compatibilidad de versiones

La app de macOS verifica la versión del Gateway contra su propia versión. Si son incompatibles, actualiza el CLI global para que coincida con la versión de la app.

Verificación rápida

openclaw --version

OPENCLAW_SKIP_CHANNELS=1 \
OPENCLAW_SKIP_CANVAS_HOST=1 \
openclaw gateway --port 18999 --bind loopback

Luego:

openclaw gateway call health --url ws://127.0.0.1:18999 --timeout 3000