Mounir RAJI

Mission Control : un dashboard pour orchestrer ses agents IA

Comment déployer Mission Control sur OpenClaw en mode Docker isolé : architecture, device pairing, SSH tunnel. Tous les obstacles documentés.

· 3 min de lecture

Partie 5 de la série sur l’agent IA self-hosted


Jusqu’ici dans cette série, j’ai construit un agent IA local fonctionnel : OpenClaw avec Qwen3, SearXNG pour la recherche web, Telegram comme interface. L’agent tourne, répond, agit.

Mais il manque quelque chose : la visibilité. Comment savoir ce que l’agent fait vraiment ? Comment dispatcher des tâches de manière structurée ?

C’est ce que propose Mission Control — un dashboard d’orchestration open-source qui se connecte à l’OpenClaw Gateway et offre un Kanban board, un Live Feed temps réel et un système d’agents spécialisés.


Architecture du POC

Architecture Docker — Mission Control + OpenClaw

[Browser Mac]
      |
   SSH Tunnel
      |
      v
localhost:4000  ──►  mission-control (conteneur Docker isolé)
                              |
                    ws://openclaw-openclaw-gateway-1:18789
                              |
                              v
                    openclaw (gateway existante)
                    réseau openclaw_default

Principe clé : Mission Control rejoint le réseau Docker existant (openclaw_default) comme external network. Aucun nouveau réseau, aucune modification du setup OpenClaw.


Prérequis

  • OpenClaw Gateway en cours d’exécution (réseau openclaw_default)
  • Docker + Docker Compose sur la VM hôte
  • Le token Gateway (OPENCLAW_GATEWAY_TOKEN dans votre config)

Déploiement

1 — Récupérer le nom exact du conteneur OpenClaw

C’est le point critique. Mission Control se connecte via le nom DNS Docker du conteneur.

docker network inspect openclaw_default \
  --format '{{range .Containers}}{{.Name}} {{end}}'
# → openclaw-openclaw-gateway-1

2 — Cloner et configurer

mkdir ~/mission-control-poc && cd ~/mission-control-poc
git clone https://github.com/crshdn/mission-control.git app

Fichier .env :

OPENCLAW_GATEWAY_URL=ws://openclaw-openclaw-gateway-1:18789
OPENCLAW_GATEWAY_TOKEN=TON_TOKEN_ICI
DATABASE_PATH=/app/data/mission-control.db
WORKSPACE_BASE_PATH=/app/workspace
PORT=4000

3 — docker-compose.yml

services:
  mission-control:
    image: node:20-alpine
    working_dir: /app
    entrypoint: >
      sh -c "npm install && npm run build && npx next start -p 4000"
    ports:
      - "127.0.0.1:4000:4000"
    env_file:
      - .env
    volumes:
      - ./app:/app
      - mc-data:/app/data
      - mc-workspace:/app/workspace
    restart: unless-stopped
    networks:
      - openclaw_default

volumes:
  mc-data:
  mc-workspace:

networks:
  openclaw_default:
    external: true
docker compose up -d
docker compose logs -f mission-control
# Attendre : ✓ Ready in 577ms

Obstacle #1 : le nom du conteneur

Mission Control affichait OFFLINE. Les logs :

[OpenClaw] Connecting to: ws://openclaw:18789
[OpenClaw] Disconnected (code: 1006)

J’avais écrit openclaw comme hostname, mais le vrai nom DNS Docker est openclaw-openclaw-gateway-1. Fix :

# .env
OPENCLAW_GATEWAY_URL=ws://openclaw-openclaw-gateway-1:18789

docker compose down && docker compose up -d

Obstacle #2 : le device pairing

Après correction de l’URL :

[OpenClaw] Disconnected (code: 1008, reason: "pairing required")

OpenClaw exige l’approbation explicite de tout nouvel appareil — mesure de sécurité intentionnelle.

Flow device pairing

docker exec -it openclaw-openclaw-gateway-1 sh
openclaw devices list
# → Pending (2) — le premier est Mission Control
openclaw devices approve 0c561bf3-6b1d-4c78-ab23-a144a712cfbc

Accès depuis le Mac via SSH Tunnel

Le port est bindé sur 127.0.0.1 — pas accessible directement depuis le Mac.

# Terminal Mac
ssh -L 4000:127.0.0.1:4000 user@ai-server -N -f
# → http://localhost:4000

Résultat

Après approbation du device, Mission Control passe ONLINE — 4 agents bootstrappés automatiquement : Builder, Tester, Reviewer, Learner.

Premier test bout en bout

Tâche simple : “Dis bonjour et liste tes outils disponibles”, assignée au Builder Agent.

Le Live Feed retrace chaque étape en temps réel :

✓ New task: Test initial
✓ "Test initial" assigned to Builder Agent
✓ Task moved to assigned
✓ Task dispatched to Builder Agent
✓ Builder Agent session created

La boucle complète fonctionne.


Ce que ça apporte

Par rapport à l’interface Telegram seule :

Avant (Telegram)Après (Mission Control)
Conversation linéaireKanban board avec 7 colonnes
Pas de visibilitéLive Feed temps réel
Un seul contexteMulti-agents spécialisés
Pas de traçabilitéHistorique complet des events

Commandes de maintenance

# Arrêter
docker compose down

# Logs
docker compose logs -f mission-control

# Mettre à jour
docker compose down && cd app && git pull && cd .. && docker compose up -d

Stack : Ubuntu VM · Docker Compose · OpenClaw 2026.3.3 · Mission Control v1.5.0

Suite de la série : OpenClaw en mode vocal →

Partager cet article

Articles similaires