CLI commands

Gateway

Le Gateway est le serveur WebSocket d’OpenClaw (canaux, nœuds, sessions, hooks). Les sous-commandes de cette page se trouvent sous openclaw gateway ….

Exécuter le Gateway

Exécuter un processus Gateway local :

openclaw gateway

Alias de premier plan :

openclaw gateway run
Startup behavior
  • Par défaut, le Gateway refuse de démarrer sauf si gateway.mode=local est défini dans ~/.openclaw/openclaw.json. Utilisez --allow-unconfigured pour les exécutions ponctuelles/de développement.
  • openclaw onboard --mode local et openclaw setup sont censés écrire gateway.mode=local. Si le fichier existe mais que gateway.mode est absent, considérez cela comme une configuration cassée ou écrasée et réparez-la au lieu de supposer implicitement le mode local.
  • Si le fichier existe et que gateway.mode est absent, le Gateway considère cela comme un dommage de configuration suspect et refuse de « deviner local » à votre place.
  • La liaison au-delà du loopback sans authentification est bloquée (garde-fou de sécurité).
  • SIGUSR1 déclenche un redémarrage dans le processus lorsqu’il est autorisé (commands.restart est activé par défaut ; définissez commands.restart: false pour bloquer le redémarrage manuel, tandis que l’application/la mise à jour de l’outil et de la configuration du Gateway restent autorisées).
  • Les gestionnaires SIGINT/SIGTERM arrêtent le processus gateway, mais ils ne restaurent aucun état de terminal personnalisé. Si vous encapsulez la CLI avec une TUI ou une entrée en mode brut, restaurez le terminal avant de quitter.

Options

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tcG9ydCA8cG9ydA " type="number"> Port WebSocket (la valeur par défaut vient de la configuration/de l’environnement ; généralement 18789).

"--bind
"--auth

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tdG9rZW4gPHRva2Vu " type="string"> Remplacement du token (définit aussi OPENCLAW_GATEWAY_TOKEN pour le processus).

"--password
"--tailscale
--tailscale-reset-on-exitboolean

Réinitialiser la configuration serve/funnel de Tailscale à l’arrêt.

--allow-unconfiguredboolean

Autoriser le démarrage du gateway sans gateway.mode=local dans la configuration. Contourne le garde de démarrage uniquement pour l’amorçage ponctuel/de développement ; n’écrit ni ne répare le fichier de configuration.

--devboolean

Créer une configuration de développement + un espace de travail s’ils sont absents (ignore BOOTSTRAP.md).

--resetboolean

Réinitialiser la configuration de développement + les identifiants + les sessions + l’espace de travail (nécessite --dev).

--forceboolean

Tuer tout écouteur existant sur le port sélectionné avant de démarrer.

--verboseboolean

Journaux détaillés.

--cli-backend-logsboolean

Afficher uniquement les journaux du backend CLI dans la console (et activer stdout/stderr).

"--ws-log
--compactboolean

Alias pour --ws-log compact.

--raw-streamboolean

Consigner les événements bruts du flux de modèle dans jsonl.

Redémarrer le Gateway

openclaw gateway restart
openclaw gateway restart --safe
openclaw gateway restart --force

openclaw gateway restart --safe demande au Gateway en cours d’exécution d’effectuer un contrôle préalable du travail OpenClaw actif avant de redémarrer. Si des opérations en file d’attente, la livraison de réponses, des exécutions intégrées ou des exécutions de tâches sont actives, le Gateway signale les blocages, regroupe les demandes de redémarrage sûr en double et redémarre une fois le travail actif terminé. restart simple conserve le comportement existant du gestionnaire de service pour compatibilité. Utilisez --force uniquement lorsque vous voulez explicitement le chemin de remplacement immédiat.

Profilage du démarrage

  • Définissez OPENCLAW_GATEWAY_STARTUP_TRACE=1 pour journaliser les durées des phases pendant le démarrage du Gateway, y compris le délai eventLoopMax par phase et les durées des tables de consultation des plugins pour l’index installé, le registre de manifestes, la planification du démarrage et le travail de carte des propriétaires.
  • Définissez OPENCLAW_DIAGNOSTICS=timeline avec OPENCLAW_DIAGNOSTICS_TIMELINE_PATH=<path> pour écrire une chronologie de diagnostics de démarrage JSONL au mieux pour les harnais QA externes. Vous pouvez aussi activer l’indicateur avec diagnostics.flags: ["timeline"] dans la configuration ; le chemin reste fourni par l’environnement. Ajoutez OPENCLAW_DIAGNOSTICS_EVENT_LOOP=1 pour inclure des échantillons de boucle d’événements.
  • Exécutez pnpm test:startup:gateway -- --runs 5 --warmup 1 pour mesurer le démarrage du Gateway. Le benchmark enregistre la première sortie du processus, /healthz, /readyz, les durées de trace de démarrage, le délai de boucle d’événements et les détails de durée des tables de consultation des plugins.

Interroger un Gateway en cours d’exécution

Toutes les commandes de requête utilisent RPC WebSocket.

Output modes

  • Par défaut : lisible par un humain (coloré dans un TTY).
  • --json : JSON lisible par machine (sans style/spinner).
  • --no-color (ou NO_COLOR=1) : désactiver ANSI tout en conservant la mise en page humaine.

Shared options

  • --url <url> : URL WebSocket du Gateway.
  • --token <token> : token du Gateway.
  • --password <password> : mot de passe du Gateway.
  • --timeout <ms> : délai/budget (varie selon la commande).
  • --expect-final : attendre une réponse « final » (appels d’agent).

gateway health

openclaw gateway health --url ws://127.0.0.1:18789

Le point de terminaison HTTP /healthz est une sonde de vivacité : il répond dès que le serveur peut répondre en HTTP. Le point de terminaison HTTP /readyz est plus strict et reste rouge tant que les sidecars de plugins de démarrage, les canaux ou les hooks configurés sont encore en stabilisation. Les réponses locales ou authentifiées de préparation détaillée incluent un bloc de diagnostic eventLoop avec le délai de boucle d’événements, l’utilisation de la boucle d’événements, le ratio des cœurs CPU et un indicateur degraded.

gateway usage-cost

Récupérer les résumés de coûts d’utilisation depuis les journaux de session.

openclaw gateway usage-cost
openclaw gateway usage-cost --days 7
openclaw gateway usage-cost --json
"--days

gateway stability

Récupérer l’enregistreur récent de stabilité des diagnostics depuis un Gateway en cours d’exécution.

openclaw gateway stability
openclaw gateway stability --type payload.large
openclaw gateway stability --bundle latest
openclaw gateway stability --bundle latest --export
openclaw gateway stability --json

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tbGltaXQgPGxpbWl0 " type="number" default="25"> Nombre maximal d’événements récents à inclure (max 1000).

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tdHlwZSA8dHlwZQ " type="string"> Filtrer par type d’événement de diagnostic, comme payload.large ou diagnostic.memory.pressure.

"--since-seq
--bundle [path]string

Lire un bundle de stabilité persistant au lieu d’appeler le Gateway en cours d’exécution. Utilisez --bundle latest (ou simplement --bundle) pour le bundle le plus récent sous le répertoire d’état, ou passez directement un chemin JSON de bundle.

--exportboolean

Écrire une archive zip de diagnostics de support partageable au lieu d’imprimer les détails de stabilité.

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tb3V0cHV0IDxwYXRo " type="string"> Chemin de sortie pour --export.

Privacy and bundle behavior
  • Les enregistrements conservent les métadonnées opérationnelles : noms d’événements, compteurs, tailles en octets, mesures de mémoire, état des files/sessions, noms de canaux/plugins et résumés de session expurgés. Ils ne conservent pas le texte de discussion, les corps de webhook, les sorties d’outils, les corps bruts de requête ou de réponse, les tokens, les cookies, les valeurs secrètes, les noms d’hôte ni les identifiants bruts de session. Définissez diagnostics.enabled: false pour désactiver entièrement l’enregistreur.
  • Lors des arrêts fatals du Gateway, des délais d’arrêt et des échecs de démarrage après redémarrage, OpenClaw écrit le même instantané de diagnostic dans ~/.openclaw/logs/stability/openclaw-stability-*.json lorsque l’enregistreur contient des événements. Inspectez le bundle le plus récent avec openclaw gateway stability --bundle latest ; --limit, --type et --since-seq s’appliquent aussi à la sortie du bundle.

gateway diagnostics export

Écrire une archive zip de diagnostics locale conçue pour être jointe aux rapports de bogues. Pour le modèle de confidentialité et le contenu du bundle, consultez Export de diagnostics.

openclaw gateway diagnostics export
openclaw gateway diagnostics export --output openclaw-diagnostics.zip
openclaw gateway diagnostics export --json
"--log-lines
"--log-bytes
"--url
"--token
"--password
"--timeout
--no-stability-bundleboolean

Ignorer la recherche du bundle de stabilité persistant.

--jsonboolean

Imprimer le chemin écrit, la taille et le manifeste au format JSON.

L’export contient un manifeste, un résumé Markdown, la forme de la configuration, des détails de configuration assainis, des résumés de journaux assainis, des instantanés d’état/santé du Gateway assainis et le bundle de stabilité le plus récent lorsqu’il existe.

Il est destiné à être partagé. Il conserve les détails opérationnels qui aident au débogage, comme les champs sûrs des journaux OpenClaw, les noms de sous-systèmes, les codes d’état, les durées, les modes configurés, les ports, les identifiants de plugins, les identifiants de fournisseurs, les paramètres de fonctionnalités non secrets et les messages de journaux opérationnels expurgés. Il omet ou expurge le texte de discussion, les corps de webhook, les sorties d’outils, les identifiants, les cookies, les identifiants de comptes/messages, le texte des prompts/instructions, les noms d’hôte et les valeurs secrètes. Lorsqu’un message de style LogTape ressemble à du texte de charge utile utilisateur/discussion/outil, l’export conserve seulement le fait qu’un message a été omis ainsi que son nombre d’octets.

gateway status

gateway status affiche le service Gateway (launchd/systemd/schtasks) avec une sonde facultative de capacité de connectivité/authentification.

openclaw gateway status
openclaw gateway status --json
openclaw gateway status --require-rpc
"--url
"--token
"--password
"--timeout
--no-probeboolean

Ignorer la sonde de connectivité (vue limitée au service).

--deepboolean

Scanner aussi les services au niveau système.

--require-rpcboolean

Met à niveau la sonde de connectivité par défaut en sonde de lecture et quitte avec un code non nul lorsque cette sonde de lecture échoue. Ne peut pas être combiné avec --no-probe.

Sémantique du statut
  • gateway status reste disponible pour les diagnostics même lorsque la configuration CLI locale est manquante ou invalide.
  • Par défaut, gateway status vérifie l’état du service, la connexion WebSocket et la capacité d’authentification visible au moment de la poignée de main. Il ne vérifie pas les opérations de lecture/écriture/administration.
  • Les sondes de diagnostic ne modifient pas l’authentification d’un appareil pour la première fois : elles réutilisent un jeton d’appareil en cache existant lorsqu’il existe, mais elles ne créent pas une nouvelle identité d’appareil CLI ni un enregistrement d’appairage d’appareil en lecture seule uniquement pour vérifier le statut.
  • gateway status résout les SecretRefs d’authentification configurés pour l’authentification de la sonde lorsque c’est possible.
  • Si un SecretRef d’authentification requis n’est pas résolu dans ce chemin de commande, gateway status --json signale rpc.authWarning lorsque la connectivité/l’authentification de la sonde échoue ; passez explicitement --token/--password ou résolvez d’abord la source du secret.
  • Si la sonde réussit, les avertissements d’auth-ref non résolus sont supprimés pour éviter les faux positifs.
  • Utilisez --require-rpc dans les scripts et l’automatisation lorsqu’un service à l’écoute ne suffit pas et que vous devez aussi vérifier le bon état des appels RPC avec portée de lecture.
  • --deep ajoute une recherche au mieux des installations launchd/systemd/schtasks supplémentaires. Lorsque plusieurs services de type Gateway sont détectés, la sortie lisible affiche des conseils de nettoyage et avertit que la plupart des configurations devraient exécuter un seul Gateway par machine.
  • --deep signale aussi un transfert récent de redémarrage du superviseur Gateway lorsque le processus du service s’est terminé proprement pour un redémarrage par superviseur externe.
  • La sortie lisible inclut le chemin résolu du fichier journal ainsi que l’instantané des chemins/validités de configuration CLI-versus-service pour aider à diagnostiquer les dérives de profil ou de répertoire d’état.
Vérifications de dérive d’authentification systemd Linux
  • Sur les installations systemd Linux, les vérifications de dérive d’authentification du service lisent à la fois les valeurs Environment= et EnvironmentFile= de l’unité (y compris %h, les chemins entre guillemets, les fichiers multiples et les fichiers optionnels -).
  • Les vérifications de dérive résolvent les SecretRefs gateway.auth.token à l’aide de l’environnement d’exécution fusionné (environnement de commande du service d’abord, puis environnement du processus en solution de repli).
  • Si l’authentification par jeton n’est pas effectivement active (gateway.auth.mode explicite à password/none/trusted-proxy, ou mode non défini où le mot de passe peut l’emporter et aucun candidat jeton ne peut l’emporter), les vérifications de dérive de jeton ignorent la résolution du jeton de configuration.

gateway probe

gateway probe est la commande « tout déboguer ». Elle sonde toujours :

  • votre Gateway distant configuré (s’il est défini), et
  • localhost (loopback) même si un distant est configuré.

Si vous passez --url, cette cible explicite est ajoutée avant les deux autres. La sortie lisible étiquette les cibles comme suit :

  • URL (explicite)
  • Distant (configuré) ou Distant (configuré, inactif)
  • Loopback local
openclaw gateway probe
openclaw gateway probe --json
Interprétation
  • Reachable: yes signifie qu’au moins une cible a accepté une connexion WebSocket.
  • Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only indique ce que la sonde a pu vérifier concernant l’authentification. C’est distinct de la joignabilité.
  • Read probe: ok signifie que les appels RPC de détail avec portée de lecture (health/status/system-presence/config.get) ont aussi réussi.
  • Read probe: limited - missing scope: operator.read signifie que la connexion a réussi mais que le RPC avec portée de lecture est limité. Cela est signalé comme une joignabilité dégradée, pas comme un échec complet.
  • Read probe: failed après Connect: ok signifie que le Gateway a accepté la connexion WebSocket, mais que les diagnostics de lecture suivants ont expiré ou échoué. Cela est aussi une joignabilité dégradée, pas un Gateway injoignable.
  • Comme gateway status, la sonde réutilise l’authentification d’appareil en cache existante mais ne crée pas d’identité d’appareil ni d’état d’appairage pour une première utilisation.
  • Le code de sortie est non nul uniquement lorsqu’aucune cible sondée n’est joignable.
Sortie JSON

Niveau supérieur :

  • ok : au moins une cible est joignable.
  • degraded : au moins une cible a accepté une connexion mais n’a pas terminé l’ensemble des diagnostics RPC détaillés.
  • capability : meilleure capacité observée parmi les cibles joignables (read_only, write_capable, admin_capable, pairing_pending, connected_no_operator_scope ou unknown).
  • primaryTargetId : meilleure cible à considérer comme le gagnant actif dans cet ordre : URL explicite, tunnel SSH, distant configuré, puis loopback local.
  • warnings[] : enregistrements d’avertissement au mieux avec code, message et targetIds optionnels.
  • network : indications d’URL de loopback local/tailnet dérivées de la configuration actuelle et du réseau de l’hôte.
  • discovery.timeoutMs et discovery.count : budget de découverte et nombre de résultats réels utilisés pour cette passe de sonde.

Par cible (targets[].connect) :

  • ok : joignabilité après connexion + classification dégradée.
  • rpcOk : réussite complète du RPC de détail.
  • scopeLimited : échec du RPC de détail dû à une portée d’opérateur manquante.

Par cible (targets[].auth) :

  • role : rôle d’authentification signalé dans hello-ok lorsqu’il est disponible.
  • scopes : portées accordées signalées dans hello-ok lorsqu’elles sont disponibles.
  • capability : classification de capacité d’authentification exposée pour cette cible.
Codes d’avertissement courants
  • ssh_tunnel_failed : la mise en place du tunnel SSH a échoué ; la commande est revenue aux sondes directes.
  • multiple_gateways : plus d’une cible était joignable ; c’est inhabituel sauf si vous exécutez volontairement des profils isolés, comme un bot de secours.
  • auth_secretref_unresolved : un SecretRef d’authentification configuré n’a pas pu être résolu pour une cible en échec.
  • probe_scope_limited : la connexion WebSocket a réussi, mais la sonde de lecture était limitée par l’absence de operator.read.

Distant via SSH (parité de l’app Mac)

Le mode « Remote over SSH » de l’app macOS utilise une redirection de port locale afin que le gateway distant (qui peut être lié uniquement au loopback) devienne joignable à ws://127.0.0.1:<port>.

Équivalent CLI :

openclaw gateway probe --ssh user@gateway-host

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tc3NoIDx0YXJnZXQ " type="string"> user@host ou user@host:port (le port par défaut est 22).

--ssh-autoboolean

Choisit le premier hôte Gateway découvert comme cible SSH depuis le point de terminaison de découverte résolu (local. plus le domaine étendu configuré, le cas échéant). Les indications uniquement TXT sont ignorées.

Configuration (optionnelle, utilisée comme valeurs par défaut) :

  • gateway.remote.sshTarget
  • gateway.remote.sshIdentity

gateway call <method>

Assistant RPC de bas niveau.

openclaw gateway call status
openclaw gateway call logs.tail --params '{"sinceMs": 60000}'
"--params
"--url
"--token
"--password
"--timeout
--expect-finalboolean

Principalement pour les RPC de style agent qui diffusent des événements intermédiaires avant une charge utile finale.

--jsonboolean

Sortie JSON lisible par machine.

Gérer le service Gateway

openclaw gateway install
openclaw gateway start
openclaw gateway stop
openclaw gateway restart
openclaw gateway uninstall

Installer avec un wrapper

Utilisez --wrapper lorsque le service géré doit démarrer via un autre exécutable, par exemple un shim de gestionnaire de secrets ou un assistant run-as. Le wrapper reçoit les arguments Gateway normaux et est chargé d’exécuter finalement openclaw ou Node avec ces arguments.

cat > ~/.local/bin/openclaw-doppler <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
exec doppler run --project my-project --config production -- openclaw "$@"
EOF
chmod +x ~/.local/bin/openclaw-doppler

openclaw gateway install --wrapper ~/.local/bin/openclaw-doppler --force
openclaw gateway restart

Vous pouvez aussi définir le wrapper via l’environnement. gateway install valide que le chemin est un fichier exécutable, écrit le wrapper dans les ProgramArguments du service et persiste OPENCLAW_WRAPPER dans l’environnement du service pour les réinstallations forcées, les mises à jour et les réparations doctor ultérieures.

OPENCLAW_WRAPPER="$HOME/.local/bin/openclaw-doppler" openclaw gateway install --force
openclaw doctor

Pour supprimer un wrapper persistant, effacez OPENCLAW_WRAPPER pendant la réinstallation :

OPENCLAW_WRAPPER= openclaw gateway install --force
openclaw gateway restart
Options de commande
  • gateway status : --url, --token, --password, --timeout, --no-probe, --require-rpc, --deep, --json
  • gateway install : --port, --runtime <node|bun>, --token, --wrapper <path>, --force, --json
  • gateway restart : --safe, --force, --wait <duration>, --json
  • gateway uninstall|start|stop : --json
Comportement du cycle de vie
  • Utilisez gateway restart pour redémarrer un service géré. N’enchaînez pas gateway stop et gateway start comme substitut de redémarrage ; sur macOS, gateway stop désactive volontairement le LaunchAgent avant de l’arrêter.
  • gateway restart --safe demande au Gateway en cours d’exécution de prévalider le travail OpenClaw actif et de différer le redémarrage jusqu’à ce que la livraison des réponses, les exécutions intégrées et les exécutions de tâches soient terminées. --safe ne peut pas être combiné avec --force ou --wait.
  • gateway restart --wait 30s remplace le budget de drainage de redémarrage configuré pour ce redémarrage. Les nombres seuls sont des millisecondes ; les unités comme s, m et h sont acceptées. --wait 0 attend indéfiniment.
  • gateway restart --force ignore le drainage du travail actif et redémarre immédiatement. Utilisez-le lorsqu’un opérateur a déjà inspecté les bloqueurs de tâches listés et veut remettre le gateway en service maintenant.
  • Les commandes de cycle de vie acceptent --json pour les scripts.
Auth and SecretRefs at install time
  • Lorsque l’authentification par jeton nécessite un jeton et que gateway.auth.token est géré par SecretRef, gateway install vérifie que la SecretRef peut être résolue, mais ne conserve pas le jeton résolu dans les métadonnées d’environnement du service.
  • Si l’authentification par jeton nécessite un jeton et que la SecretRef de jeton configurée n’est pas résolue, l’installation échoue de manière fermée au lieu de conserver du texte en clair de secours.
  • Pour l’authentification par mot de passe avec gateway run, préférez OPENCLAW_GATEWAY_PASSWORD, --password-file ou un gateway.auth.password adossé à une SecretRef plutôt que --password en ligne.
  • En mode d’authentification déduit, OPENCLAW_GATEWAY_PASSWORD défini uniquement dans le shell n’assouplit pas les exigences de jeton à l’installation ; utilisez une configuration durable (gateway.auth.password ou env dans la configuration) lors de l’installation d’un service géré.
  • Si gateway.auth.token et gateway.auth.password sont tous deux configurés et que gateway.auth.mode n’est pas défini, l’installation est bloquée jusqu’à ce que le mode soit défini explicitement.

Découvrir les gateways (Bonjour)

gateway discover recherche les balises Gateway (_openclaw-gw._tcp).

  • DNS-SD multicast : local.
  • DNS-SD unicast (Bonjour étendu) : choisissez un domaine (exemple : openclaw.internal.) et configurez un DNS fractionné ainsi qu’un serveur DNS ; consultez Bonjour.

Seuls les gateways pour lesquels la découverte Bonjour est activée (par défaut) annoncent la balise.

Les enregistrements de découverte étendue incluent (TXT) :

  • role (indice de rôle du gateway)
  • transport (indice de transport, par ex. gateway)
  • gatewayPort (port WebSocket, généralement 18789)
  • sshPort (facultatif ; les clients utilisent par défaut 22 comme cible SSH lorsqu’il est absent)
  • tailnetDns (nom d’hôte MagicDNS, lorsqu’il est disponible)
  • gatewayTls / gatewayTlsSha256 (TLS activé + empreinte du certificat)
  • cliPath (indice d’installation distante écrit dans la zone étendue)

gateway discover

openclaw gateway discover
"--timeout
--jsonboolean

Sortie lisible par machine (désactive aussi le style et le spinner).

Exemples :

openclaw gateway discover --timeout 4000
openclaw gateway discover --json | jq '.beacons[].wsUrl'

Associés