CLI commands
QR
openclaw qr
Générez un code QR d’appairage mobile et un code de configuration à partir de la configuration actuelle de votre Gateway.
openclaw qropenclaw qr --setup-code-onlyopenclaw qr --jsonopenclaw qr --remoteopenclaw qr --limitedopenclaw qr --url wss://gateway.example/wsLes applications OpenClaw officielles pour iOS et Android se connectent automatiquement lorsque les métadonnées de leur code de configuration correspondent. Si une demande reste en attente (par exemple, pour un client non officiel ou en cas de métadonnées non concordantes), examinez-la et approuvez-la :
openclaw devices listopenclaw devices approve <requestId>Options
--remote: privilégiegateway.remote.url; utilisegateway.tailscale.mode=serve|funnelcomme solution de repli si cette URL n’est pas définie. IgnorepublicUrldu plugindevice-pair.--url <url>: remplace l’URL du Gateway utilisée dans la charge utile--public-url <url>: remplace l’URL publique utilisée dans la charge utile--token <token>: remplace le jeton du Gateway auprès duquel le flux d’amorçage s’authentifie--password <password>: remplace le mot de passe du Gateway auprès duquel le flux d’amorçage s’authentifie--limited: omet l’accès administratif au Gateway du jeton d’opérateur transmis--setup-code-only: affiche uniquement le code de configuration--no-ascii: ignore le rendu ASCII du code QR--json: émet du JSON (setupCode,gatewayUrl,gatewayUrlsfacultatif,auth,access,accessDowngradedfacultatif,urlSource)
--token et --password sont mutuellement exclusifs.
Contenu du code de configuration
Le code de configuration contient un bootstrapToken opaque et de courte durée, et non le jeton ou le mot de passe partagé du Gateway. Pour un point de terminaison wss:// (ou une adresse de bouclage sur le même hôte), le flux d’amorçage par défaut émet :
- un jeton
nodeprincipal avecscopes: [] - un jeton de transfert
operatornatif complet pour mobile avecoperator.admin,operator.approvals,operator.read,operator.talk.secretsetoperator.write
Utilisez --limited pour conserver le même jeton de nœud tout en omettant operator.admin du transfert à l’opérateur. La portée de modification de l’appairage n’est jamais transmise par un code de configuration.
La configuration en texte clair sur le réseau local via ws:// reste disponible, mais OpenClaw utilise automatiquement le profil limité, car un observateur du réseau pourrait capturer le jeton d’amorçage au porteur et l’utiliser avant le client. Configurez wss:// ou Tailscale Serve, puis générez un nouveau code pour obtenir un accès complet.
Résolution de l’URL du Gateway
L’appairage mobile échoue de manière sécurisée pour les URL de Gateway Tailscale/publiques en ws:// : utilisez Tailscale Serve/Funnel ou une URL de Gateway wss:// pour celles-ci. Les adresses privées du réseau local et les hôtes Bonjour .local restent pris en charge via ws:// en clair, avec un accès limité pour l’opérateur comme décrit précédemment.
Lorsque l’URL du Gateway sélectionnée provient de gateway.bind=lan, OpenClaw vérifie également les routes tailscale serve status --json persistantes. Toute racine HTTPS Serve qui transmet le port de bouclage du Gateway actif est incluse comme solution de repli. La commande QR ajoute cette solution de repli uniquement pour lan ; custom et tailnet conservent leurs routes explicitement annoncées. Les clients iOS actuels testent les routes annoncées dans l’ordre et enregistrent la première accessible ; le champ historique url reste inchangé pour les anciens clients.
Avec --remote, l’un des deux éléments gateway.remote.url ou gateway.tailscale.mode=serve|funnel est requis.
Résolution de l’authentification (sans --remote)
Lorsqu’aucun remplacement d’authentification n’est transmis à la CLI, les SecretRefs d’authentification du Gateway local sont résolues comme suit :
| Condition | Résolution |
|---|---|
gateway.auth.mode="token", ou mode déduit sans source de mot de passe prioritaire |
gateway.auth.token |
gateway.auth.mode="password", ou mode déduit sans jeton prioritaire provenant de l’authentification ou de l’environnement |
gateway.auth.password |
gateway.auth.token et gateway.auth.password sont tous deux configurés (y compris les SecretRefs) et gateway.auth.mode n’est pas défini |
échec ; définissez explicitement gateway.auth.mode |
Résolution de l’authentification (--remote)
Si les identifiants distants effectivement actifs sont configurés comme SecretRefs et que ni --token ni --password ne sont transmis, la commande les résout à partir de l’instantané du Gateway actif. Si le Gateway est indisponible, la commande échoue immédiatement.