Interface de controle (navigateur)
L’Interface de controle est une petite application monopage Vite + Lit servie par la Gateway (passerelle) :- par defaut :
http://<host>:18789/ - prefixe optionnel : definir
gateway.controlUi.basePath(par ex./openclaw)
Ouverture rapide (local)
Si la Gateway s’execute sur le meme ordinateur, ouvrez : Si la page ne se charge pas, demarrez d’abord la Gateway :openclaw gateway.
L’authentification est fournie lors de la negotiation WebSocket via :
connect.params.auth.tokenconnect.params.auth.passwordLe panneau des parametres du tableau de bord vous permet d’enregistrer un jeton ; les mots de passe ne sont pas persistés. L’assistant de prise en main genere un jeton de gateway par defaut ; collez‑le ici lors de la premiere connexion.
Appairage d’appareil (premiere connexion)
Lorsque vous vous connectez a l’Interface de controle depuis un nouveau navigateur ou appareil, la Gateway exige une approbation d’appairage unique — meme si vous etes sur le meme Tailnet avecgateway.auth.allowTailscale: true. Il s’agit d’une mesure de securite pour prevenir
les acces non autorises.
Ce que vous verrez : « disconnected (1008): pairing required »
Pour approuver l’appareil :
openclaw devices revoke --device <id> --role <role>. Voir
Devices CLI pour la rotation et la revocation des jetons.
Notes :
- Les connexions locales (
127.0.0.1) sont approuvees automatiquement. - Les connexions distantes (LAN, Tailnet, etc.) necessitent une approbation explicite.
- Chaque profil de navigateur genere un identifiant d’appareil unique ; changer de navigateur ou effacer les donnees du navigateur requerra un nouvel appairage.
Ce qu’elle peut faire (aujourd’hui)
- Discuter avec le modele via la Gateway WS (
chat.history,chat.send,chat.abort,chat.inject) - Diffuser les appels d’outils + cartes de sortie d’outils en direct dans le chat (evenements d’agent)
- Canaux : statut + connexion QR + configuration par canal pour WhatsApp/Telegram/Discord/Slack + canaux de plugins (Mattermost, etc.) (
channels.status,web.login.*,config.patch) - Instances : liste de presence + actualisation (
system-presence) - Sessions : liste + surcharges de pensee/verbeux par session (
sessions.list,sessions.patch) - Taches cron : lister/ajouter/executer/activer/desactiver + historique d’execution (
cron.*) - Skills : statut, activer/desactiver, installer, mises a jour de cles API (
skills.*) - Nœuds : liste + capacites (
node.list) - Approbations d’exec : modifier les listes d’autorisation de la gateway ou des nœuds + demander la politique pour
exec host=gateway/node(exec.approvals.*) - Configuration : afficher/modifier
~/.openclaw/openclaw.json(config.get,config.set) - Configuration : appliquer + redemarrer avec validation (
config.apply) et reveiller la derniere session active - Les ecritures de configuration incluent une protection par hachage de base pour eviter l’ecrasement de modifications concurrentes
- Schema de configuration + rendu de formulaires (
config.schema, y compris les schemas de plugins + canaux) ; l’editeur JSON brut reste disponible - Debogage : instantanes d’etat/sante/modeles + journal d’evenements + appels RPC manuels (
status,health,models.list) - Journaux : suivi en temps reel des journaux de fichiers de la gateway avec filtrage/export (
logs.tail) - Mise a jour : executer une mise a jour package/git + redemarrer (
update.run) avec un rapport de redemarrage
- Pour les taches isolees, la livraison est par defaut une annonce de resume. Vous pouvez passer a « aucune » si vous souhaitez des executions internes uniquement.
- Les champs canal/cible apparaissent lorsque « annonce » est selectionne.
Comportement du chat
chat.sendest non bloquant : il accuse reception immediatement avec{ runId, status: "started" }et la reponse est diffusee via des evenementschat.- Un nouvel envoi avec le meme
idempotencyKeyrenvoie{ status: "in_flight" }pendant l’execution, et{ status: "ok" }apres l’achevement. chat.injectajoute une note de l’assistant a la transcription de la session et diffuse un evenementchatpour des mises a jour UI uniquement (pas d’execution d’agent, pas de livraison vers un canal).- Arret :
- Cliquez sur Stop (appelle
chat.abort) - Tapez
/stop(oustop|esc|abort|wait|exit|interrupt) pour interrompre hors bande chat.abortprend en charge{ sessionKey }(sansrunId) pour interrompre toutes les executions actives de cette session
- Cliquez sur Stop (appelle
Acces Tailnet (recommande)
Tailscale Serve integre (prefere)
Conservez la Gateway sur la boucle locale et laissez Tailscale Serve la proxyfier en HTTPS :https://<magicdns>/(ou votregateway.controlUi.basePathconfigure)
tailscale-user-login) lorsque gateway.auth.allowTailscale est true. OpenClaw
verifie l’identite en resolvant l’adresse x-forwarded-for avec
tailscale whois et en la faisant correspondre a l’en‑tete, et n’accepte ces requetes que lorsque
la requete atteint la boucle locale avec les en‑tetes x-forwarded-* de Tailscale. Definissez
gateway.auth.allowTailscale: false (ou forcez gateway.auth.mode: "password")
si vous souhaitez exiger un jeton/mot de passe meme pour le trafic Serve.
Lier au tailnet + jeton
http://<tailscale-ip>:18789/(ou votregateway.controlUi.basePathconfigure)
connect.params.auth.token).
HTTP non securise
Si vous ouvrez le tableau de bord via HTTP simple (http://<lan-ip> ou http://<tailscale-ip>),
le navigateur s’execute dans un contexte non securise et bloque WebCrypto. Par defaut,
OpenClaw bloque les connexions de l’Interface de controle sans identite d’appareil.
Correctif recommande : utilisez HTTPS (Tailscale Serve) ou ouvrez l’UI localement :
https://<magicdns>/(Serve)http://127.0.0.1:18789/(sur l’hote de la gateway)
Construction de l’UI
La Gateway sert des fichiers statiques depuisdist/control-ui. Construisez‑les avec :
ws://127.0.0.1:18789).
Debogage/tests : serveur de dev + Gateway distante
L’Interface de controle est composee de fichiers statiques ; la cible WebSocket est configurable et peut etre differente de l’origine HTTP. C’est pratique lorsque vous souhaitez le serveur de dev Vite en local mais que la Gateway s’execute ailleurs.- Demarrez le serveur de dev de l’UI :
pnpm ui:dev - Ouvrez une URL comme :
gatewayUrlest stocke dans localStorage apres le chargement et retire de l’URL.tokenest stocke dans localStorage ;passwordest conserve uniquement en memoire.- Lorsque
gatewayUrlest defini, l’UI ne retombe pas sur la configuration ni sur les identifiants d’environnement. Fournissez explicitementtoken(oupassword). L’absence d’identifiants explicites est une erreur. - Utilisez
wss://lorsque la Gateway est derriere TLS (Tailscale Serve, proxy HTTPS, etc.). gatewayUrln’est accepte que dans une fenetre de premier niveau (non integree) afin d’empecher le clickjacking.- Pour les configurations de dev multi‑origines (par ex.
pnpm ui:devvers une Gateway distante), ajoutez l’origine de l’UI agateway.controlUi.allowedOrigins.