CLI del Gateway
El Gateway es el servidor WebSocket de OpenClaw (canales, nodos, sesiones, hooks). Los subcomandos de esta página viven bajoopenclaw gateway ….
Documentación relacionada:
Ejecutar el Gateway
Ejecuta un proceso local del Gateway:- De forma predeterminada, el Gateway se niega a iniciarse a menos que
gateway.mode=localesté configurado en~/.openclaw/openclaw.json. Usa--allow-unconfiguredpara ejecuciones ad hoc/de desarrollo. - Se espera que
openclaw onboard --mode localyopenclaw setupescribangateway.mode=local. Si el archivo existe pero faltagateway.mode, trátalo como una configuración dañada o sobrescrita y repárala en lugar de asumir implícitamente el modo local. - Si el archivo existe y falta
gateway.mode, el Gateway lo trata como un daño sospechoso en la configuración y se niega a “asumir local” por ti. - Se bloquea enlazar más allá del loopback sin autenticación (medida de seguridad).
SIGUSR1activa un reinicio en proceso cuando está autorizado (commands.restartestá habilitado de forma predeterminada; establececommands.restart: falsepara bloquear el reinicio manual, mientras que las operaciones de herramienta/configuración de gateway apply/update siguen permitidas).- Los controladores
SIGINT/SIGTERMdetienen el proceso del gateway, pero no restauran ningún estado personalizado del terminal. Si envuelves la CLI con una TUI o entrada en modo raw, restaura el terminal antes de salir.
Opciones
--port <port>: puerto WebSocket (el valor predeterminado viene de config/env; normalmente18789).--bind <loopback|lan|tailnet|auto|custom>: modo de enlace del listener.--auth <token|password>: sobrescritura del modo de autenticación.--token <token>: sobrescritura del token (también estableceOPENCLAW_GATEWAY_TOKENpara el proceso).--password <password>: sobrescritura de contraseña. Advertencia: las contraseñas en línea pueden quedar expuestas en listados locales de procesos.--password-file <path>: lee la contraseña del gateway desde un archivo.--tailscale <off|serve|funnel>: expone el Gateway mediante Tailscale.--tailscale-reset-on-exit: restablece la configuración serve/funnel de Tailscale al apagarse.--allow-unconfigured: permite iniciar el gateway singateway.mode=localen la configuración. Esto omite la protección de inicio solo para arranque ad hoc/de desarrollo; no escribe ni repara el archivo de configuración.--dev: crea una configuración + espacio de trabajo de desarrollo si faltan (omiteBOOTSTRAP.md).--reset: restablece la configuración de desarrollo + credenciales + sesiones + espacio de trabajo (requiere--dev).--force: mata cualquier listener existente en el puerto seleccionado antes de iniciar.--verbose: registros detallados.--cli-backend-logs: muestra solo registros del backend de la CLI en la consola (y habilita stdout/stderr).--claude-cli-logs: alias en desuso de--cli-backend-logs.--ws-log <auto|full|compact>: estilo de registro de websocket (predeterminadoauto).--compact: alias de--ws-log compact.--raw-stream: registra eventos sin procesar del flujo del modelo en jsonl.--raw-stream-path <path>: ruta del jsonl del flujo sin procesar.
Consultar un Gateway en ejecución
Todos los comandos de consulta usan RPC por WebSocket. Modos de salida:- Predeterminado: legible para humanos (con color en TTY).
--json: JSON legible por máquina (sin estilo/spinner).--no-color(oNO_COLOR=1): desactiva ANSI manteniendo el diseño legible para humanos.
--url <url>: URL WebSocket del Gateway.--token <token>: token del Gateway.--password <password>: contraseña del Gateway.--timeout <ms>: tiempo de espera/presupuesto (varía según el comando).--expect-final: espera una respuesta “final” (llamadas de agente).
--url, la CLI no recurre a credenciales de configuración ni de variables de entorno.
Pasa --token o --password explícitamente. La ausencia de credenciales explícitas es un error.
gateway health
gateway usage-cost
Obtiene resúmenes de costo de uso a partir de los registros de sesión.
--days <days>: número de días a incluir (predeterminado30).
gateway status
gateway status muestra el servicio del Gateway (launchd/systemd/schtasks) junto con un sondeo RPC opcional.
--url <url>: añade un destino de sondeo explícito. Se siguen sondeando el remoto configurado + localhost.--token <token>: autenticación por token para el sondeo.--password <password>: autenticación por contraseña para el sondeo.--timeout <ms>: tiempo de espera del sondeo (predeterminado10000).--no-probe: omite el sondeo RPC (vista solo del servicio).--deep: analiza también servicios a nivel del sistema.--require-rpc: sale con código distinto de cero cuando falla el sondeo RPC. No puede combinarse con--no-probe.
gateway statussigue disponible para diagnóstico incluso cuando falta o es inválida la configuración local de la CLI.gateway statusresuelve SecretRefs de autenticación configurados para la autenticación del sondeo cuando es posible.- Si un SecretRef de autenticación requerido no se resuelve en esta ruta del comando,
gateway status --jsoninformarpc.authWarningcuando falla la conectividad/autenticación del sondeo; pasa--token/--passwordexplícitamente o resuelve primero el origen del secreto. - Si el sondeo se realiza correctamente, se suprimen las advertencias de referencias de autenticación no resueltas para evitar falsos positivos.
- Usa
--require-rpcen scripts y automatización cuando no basta con un servicio en escucha y necesitas que el propio RPC del Gateway esté en buen estado. --deepañade un análisis de mejor esfuerzo para instalaciones adicionales de launchd/systemd/schtasks. Cuando se detectan varios servicios tipo gateway, la salida legible para humanos imprime sugerencias de limpieza y advierte que la mayoría de instalaciones deberían ejecutar un solo gateway por máquina.- La salida legible para humanos incluye la ruta resuelta del archivo de registro más una instantánea de las rutas/validez de la configuración de CLI frente al servicio para ayudar a diagnosticar desajustes de perfil o de directorio de estado.
- En instalaciones Linux con systemd, las comprobaciones de desajuste de autenticación del servicio leen los valores
Environment=yEnvironmentFile=de la unidad (incluidos%h, rutas entre comillas, varios archivos y archivos opcionales con-). - Las comprobaciones de desajuste resuelven SecretRefs de
gateway.auth.tokenusando el entorno de ejecución combinado (primero el entorno del comando del servicio, luego el entorno del proceso como respaldo). - Si la autenticación por token no está efectivamente activa (modo
gateway.auth.modeexplícito depassword/none/trusted-proxy, o modo no definido donde puede ganar password y ningún candidato de token puede ganar), las comprobaciones de desajuste de token omiten la resolución del token configurado.
gateway probe
gateway probe es el comando de “depurar todo”. Siempre sondea:
- tu gateway remoto configurado (si existe), y
- localhost (loopback) aunque haya un remoto configurado.
--url, ese destino explícito se añade por delante de ambos. La salida legible para humanos etiqueta los
destinos como:
URL (explícita)Remoto (configurado)oRemoto (configurado, inactivo)Loopback local
Reachable: yessignifica que al menos un destino aceptó una conexión WebSocket.RPC: oksignifica que las llamadas RPC de detalle (health/status/system-presence/config.get) también se realizaron correctamente.RPC: limited - missing scope: operator.readsignifica que la conexión se realizó correctamente, pero el RPC de detalle está limitado por alcance. Esto se informa como accesibilidad degradada, no como error total.- El código de salida es distinto de cero solo cuando no se puede alcanzar ningún destino sondeado.
--json):
- Nivel superior:
ok: se puede alcanzar al menos un destino.degraded: al menos un destino tenía RPC de detalle limitado por alcance.primaryTargetId: mejor destino para tratarlo como el ganador activo en este orden: URL explícita, túnel SSH, remoto configurado y luego loopback local.warnings[]: registros de advertencia de mejor esfuerzo concode,messageytargetIdsopcionales.network: sugerencias de URL de loopback local/tailnet derivadas de la configuración actual y de la red del host.discovery.timeoutMsydiscovery.count: el presupuesto/cantidad real de detección usado para esta pasada del sondeo.
- Por destino (
targets[].connect):ok: accesibilidad tras conectar + clasificación degradada.rpcOk: éxito completo del RPC de detalle.scopeLimited: el RPC de detalle falló por falta del alcance de operador.
ssh_tunnel_failed: falló la configuración del túnel SSH; el comando volvió a sondeos directos.multiple_gateways: se podía alcanzar más de un destino; esto es poco habitual salvo que ejecutes intencionalmente perfiles aislados, como un bot de rescate.auth_secretref_unresolved: no se pudo resolver un SecretRef de autenticación configurado para un destino con error.probe_scope_limited: la conexión WebSocket se realizó correctamente, pero el RPC de detalle quedó limitado por falta deoperator.read.
Remoto por SSH (paridad con la app de Mac)
El modo “Remote over SSH” de la app de macOS usa un reenvío de puerto local para que el gateway remoto (que puede estar enlazado solo a loopback) sea accesible enws://127.0.0.1:<port>.
Equivalente en la CLI:
--ssh <target>:user@hostouser@host:port(el puerto predeterminado es22).--ssh-identity <path>: archivo de identidad.--ssh-auto: elige el primer host de gateway detectado como destino SSH desde el endpoint de detección resuelto (local.más el dominio de área amplia configurado, si existe). Se ignoran las sugerencias solo-TXT.
gateway.remote.sshTargetgateway.remote.sshIdentity
gateway call <method>
Asistente RPC de bajo nivel.
--params <json>: cadena de objeto JSON para parámetros (predeterminado{})--url <url>--token <token>--password <password>--timeout <ms>--expect-final--json
--paramsdebe ser JSON válido.--expect-finales principalmente para RPC de tipo agente que transmiten eventos intermedios antes de una carga útil final.
Gestionar el servicio del Gateway
gateway status:--url,--token,--password,--timeout,--no-probe,--require-rpc,--deep,--jsongateway install:--port,--runtime <node|bun>,--token,--force,--jsongateway uninstall|start|stop|restart:--json
gateway installadmite--port,--runtime,--token,--force,--json.- Cuando la autenticación por token requiere un token y
gateway.auth.tokenestá gestionado por SecretRef,gateway installvalida que el SecretRef pueda resolverse, pero no persiste el token resuelto en los metadatos del entorno del servicio. - Si la autenticación por token requiere un token y el SecretRef del token configurado no se resuelve, la instalación falla en modo cerrado en lugar de persistir un respaldo en texto plano.
- Para autenticación por contraseña en
gateway run, prefiereOPENCLAW_GATEWAY_PASSWORD,--password-fileo ungateway.auth.passwordrespaldado por SecretRef en lugar de--passworden línea. - En modo de autenticación inferida,
OPENCLAW_GATEWAY_PASSWORDsolo en shell no relaja los requisitos de token para la instalación; usa configuración duradera (gateway.auth.passwordoenvde configuración) al instalar un servicio gestionado. - Si tanto
gateway.auth.tokencomogateway.auth.passwordestán configurados ygateway.auth.modeno está definido, se bloquea la instalación hasta que el modo se establezca explícitamente. - Los comandos de ciclo de vida aceptan
--jsonpara scripts.
Detectar gateways (Bonjour)
gateway discover busca beacons del Gateway (_openclaw-gw._tcp).
- Multicast DNS-SD:
local. - Unicast DNS-SD (Bonjour de área amplia): elige un dominio (ejemplo:
openclaw.internal.) y configura split DNS + un servidor DNS; consulta /gateway/bonjour
role(sugerencia de rol del gateway)transport(sugerencia de transporte, por ejemplogateway)gatewayPort(puerto WebSocket, normalmente18789)sshPort(opcional; los clientes usan por defecto22como destino SSH cuando falta)tailnetDns(hostname de MagicDNS, cuando está disponible)gatewayTls/gatewayTlsSha256(TLS habilitado + huella digital del certificado)cliPath(sugerencia de instalación remota escrita en la zona de área amplia)
gateway discover
--timeout <ms>: tiempo de espera por comando (browse/resolve); predeterminado2000.--json: salida legible por máquina (también desactiva estilo/spinner).
- La CLI busca en
local.más el dominio de área amplia configurado cuando uno está habilitado. wsUrlen la salida JSON se deriva del endpoint resuelto del servicio, no de sugerencias solo-TXT comolanHostotailnetDns.- En mDNS
local.,sshPortycliPathsolo se difunden cuandodiscovery.mdns.modeesfull. DNS-SD de área amplia sigue escribiendocliPath;sshPortsigue siendo opcional allí también.