
🔐 Tableau de bord de surveillance sécurisé et en temps réel pour les agents IA OpenClaw. Authentification, TOTP MFA, suivi des coûts, flux en direct, navigateur de mémoire et plus encore.
Un tableau de bord de surveillance beau, sécurisé et en temps réel pour les agents OpenClaw. Suivez les sessions, surveillez l'utilisation de l'API, consultez les coûts, gérez les fichiers mémoire et gardez un œil sur la santé du système — le tout en un seul endroit.

| Aperçu | Sessions | Coûts |
|---|---|---|
![]() | ![]() | ![]() |
| Limites de débit | Flux en direct | Journaux |
|---|---|---|
![]() | ![]() | ![]() |
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git cd openclaw-dashboard
export WORKSPACE_DIR=/path/to/your/openclaw/workspace
node server.js
Visitez `http://localhost:7000` dans votre navigateur. Lors de la première visite, vous verrez un **écran d'inscription** où vous créez votre nom d'utilisateur et votre mot de passe. Après l'inscription, connectez-vous avec vos identifiants.
## 📦 Installation
### Prérequis
- **Node.js** v18 ou supérieur (vérifiez avec `node --version`)
- **OpenClaw** installé et en cours d'exécution
- **Systemd** (optionnel, pour l'installation en tant que service sur Linux)
#### Dépendances optionnelles
| Outil | Requis pour | Installation |
|------|-------------|---------|
| `jq` | Page de gestion Docker | `sudo apt install jq` |
| `tmux` | Scraper d'utilisation de Claude CLI | `sudo apt install tmux` |
| `python3` | Analyseur d'utilisation de Claude CLI | Généralement pré-installé |
| `docker` | Page de gestion Docker | [docs.docker.com](https://docs.docker.com/engine/install/) |
### Installation manuelle
1. **Clonez le dépôt** ```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
Le serveur affichera : ``` 🚀 Dashboard running on http://localhost:7000 🔑 Recovery token: abc123def456...
**Enregistrez le jeton de récupération** — vous en aurez besoin si vous oubliez votre mot de passe.
4. **Accédez au tableau de bord**
Ouvrez `http://localhost:7000` et créez votre compte.
### Systemd Service (install.sh)
Pour exécuter le tableau de bord en tant que service système avec démarrage automatique et récupération après crash :```bash
sudo ./install.sh
This will:
/etc/systemd/system/agent-dashboard.service/etc/systemd/system/agent-dashboard.service.d/override.confVoir les logs:```bash journalctl -u agent-dashboard -f
### Docker```bash
# Build
docker build -t openclaw-dashboard .
# Run
docker run -d \
--name openclaw-dashboard \
-p 3001:3001 \
-e WORKSPACE_DIR=/app/workspace \
-e DASHBOARD_ALLOW_HTTP=true \
-v ~/.openclaw:/home/node/.openclaw:ro \
-v ~/.openclaw/workspace:/app/workspace \
openclaw-dashboard
Pour l'accès à la page de gestion Docker, passez le socket Docker :```bash
docker run -d
--name openclaw-dashboard
-p 3001:3001
-e WORKSPACE_DIR=/app/workspace
-e DASHBOARD_ALLOW_HTTP=true
-v ~/.openclaw:/home/node/.openclaw:ro
-v ~/.openclaw/workspace:/app/workspace
-v /var/run/docker.sock:/var/run/docker.sock:ro
--group-add $(stat -c '%g' /var/run/docker.sock)
openclaw-dashboard
### Variables d'environnement
| Variable | Description | Par défaut |
|----------|-------------|---------|
| `DASHBOARD_PORT` | Port du serveur | `7000` |
| `DASHBOARD_TOKEN` | Jeton de récupération pour la réinitialisation du mot de passe | Généré automatiquement au démarrage |
| `WORKSPACE_DIR` | Chemin de l'espace de travail OpenClaw | `$OPENCLAW_WORKSPACE` ou répertoire courant |
| `OPENCLAW_DIR` | Répertoire de configuration OpenClaw | `~/.openclaw` |
| `OPENCLAW_AGENT` | ID de l'agent à surveiller | `main` |
| `DASHBOARD_ALLOW_HTTP` | Autoriser HTTP depuis des IP non locales | `false` |
**Exemples :**```bash
# Custom port
DASHBOARD_PORT=8080 node server.js
# Custom recovery token
DASHBOARD_TOKEN=my_secret_token_12345 node server.js
# Different workspace
WORKSPACE_DIR=/mnt/data/openclaw node server.js
Le tableau de bord utilise l'authentification par nom d'utilisateur et mot de passe avec des sessions sécurisées côté serveur.
http://localhost:7000)localStorage)sessionStorage)Pour empêcher les attaques par force brute :
Ajoutez une couche de sécurité supplémentaire avec des mots de passe à usage unique basés sur le temps (TOTP).
Une fois activé, chaque connexion nécessite :
Si vous perdez l'accès à votre application d'authentification (téléphone perdu, application désinstallée, etc.) :
Important : Ajustez le chemin /root/clawd/data/credentials.json si votre espace de travail est ailleurs.
Si vous oubliez votre mot de passe :
Le jeton de récupération (DASHBOARD_TOKEN) s'affiche au démarrage du serveur. Vous pouvez le trouver à plusieurs endroits :
journalctl -u agent-dashboard | grep "Recovery token"
Sortie :```
🔑 Recovery token: 3e6b91f352418b486a9aa9d82fbbc1b1
cat /etc/systemd/system/agent-dashboard.service.d/override.conf
Cherchez :```ini
Environment=DASHBOARD_TOKEN=3e6b91f352418b486a9aa9d82fbbc1b1
Si vous l'avez définie manuellement :```bash echo $DASHBOARD_TOKEN
### Changer votre mot de passe
Pour changer votre mot de passe lorsque vous êtes connecté :
1. Allez sur la page **Sécurité**
2. Entrez votre **mot de passe actuel**
3. Entrez votre **nouveau mot de passe**
4. Cliquez sur **« Changer le mot de passe »**
5. Toutes les autres sessions sont invalidées (vous devrez vous reconnecter ailleurs)
### Réinitialisation complète du compte (Option nucléaire)
Si tout est verrouillé et que vous ne pouvez pas vous connecter :
1. **Connectez-vous en SSH à votre serveur**
2. **Supprimez le fichier d'informations d'identification** : ```bash
rm /root/clawd/data/credentials.json
Avertissement : Cela supprime votre nom d'utilisateur, votre mot de passe et vos paramètres MFA. Les fichiers mémoire et les journaux d'audit ne sont pas affectés.
Le tableau de bord est conçu avec les meilleures pratiques de sécurité :
data/audit.log*) autorisé.bak créés avant d'écraser les fichiers de l'espace de travailLe tableau de bord est conçu pour un accès local ou via Tailscale :
http://localhost:7000http://100.x.x.x:7000
DASHBOARD_ALLOW_HTTP=true)Par défaut, le tableau de bord bloque l'accès HTTP depuis des adresses IP non locales. Exceptions :
Pour les autres réseaux, le tableau de bord nécessite HTTPS ou l'en-tête X-Forwarded-Proto: https (depuis un proxy inverse).
Pour autoriser HTTP depuis toutes les adresses IP (non recommandé) :```bash DASHBOARD_ALLOW_HTTP=true node server.js
### Ne pas exposer sur Internet public
**Ce tableau de bord n'est PAS renforcé pour une exposition sur Internet public.** Bien qu'il dispose d'une authentification et d'une limitation de débit, il est conçu pour les réseaux privés. Si vous devez l'exposer :
- Utilisez un proxy inverse (nginx, Caddy) avec HTTPS
- Ajoutez une liste blanche d'adresses IP
- Envisagez un VPN (Tailscale, WireGuard) à la place
## 🛠️ Dépannage
### « Trop de tentatives échouées »
**Problème :** Vous voyez « Trop de tentatives de connexion échouées. Veuillez réessayer plus tard. »
**Solutions :**
- Attendez **15 minutes** que le verrouillage temporaire expire
- Redémarrez le service pour effacer les limites de débit : ```bash
systemctl restart agent-dashboard
Problème : Votre mot de passe a été changé mais vous ne pouvez pas vous connecter.
Solution : Utilisez le processus "Mot de passe oublié ?" avec votre jeton de récupération pour définir un nouveau mot de passe.
Problème : Le code TOTP à 6 chiffres est rejeté.
Solutions :
Problème : Le navigateur affiche une page blanche ou une erreur de connexion.
Solutions :
Devrait retourner: ```json {"authenticated": false, "requiresRegistration": false}
### Erreur « HTTPS requis »
**Problème :** Le navigateur affiche « HTTPS requis. Accédez via localhost, Tailscale, ou activez HTTPS. »
**Solutions :**
- Accéder via **localhost** : `http://localhost:7000`
- Accéder via **Tailscale** : `http://100.x.x.x:7000`
- Définir `DASHBOARD_ALLOW_HTTP=true` dans l'environnement (non recommandé) : ```bash
# Add to /etc/systemd/system/agent-dashboard.service.d/override.conf
Environment=DASHBOARD_ALLOW_HTTP=true
# Reload and restart
systemctl daemon-reload
systemctl restart agent-dashboard
Problème : Le tableau de bord affiche une page blanche après avoir récupéré le nouveau code.
Solutions :
Ctrl+Shift+R (Windows/Linux) ou Cmd+Shift+R (macOS)Le tableau de bord expose une API REST pour un accès programmatique. Tous les endpoints nécessitent une authentification via l'en-tête Authorization: Bearer <sessionToken>.
GET /api/auth/status — Vérifier le statut d'authentificationPOST /api/auth/login — Se connecter avec nom d'utilisateur/mot de passe (+ TOTP si MFA activée)POST /api/auth/register — Enregistrer un nouveau compte (uniquement si aucun identifiant n'existe)POST /api/auth/reset-password — Réinitialiser le mot de passe avec un jeton de récupérationTous les autres endpoints nécessitent une authentification :
GET /api/config — Configuration du tableau de bordGET /api/sessions — Lister toutes les sessions d'agentGET /api/usage — Données d'utilisation sur une fenêtre glissante de 5 heuresGET /api/costs — Données de dépenses par jour, modèle et sessionGET /api/system — Métriques de santé du systèmeGET /api/memory-files — Lister les fichiers mémoireGET /api/memory-file?path=<path> — Lire un fichier mémoireGET /api/key-files — Lister les fichiers de l'espace de travail (compétences, configurations)GET /api/key-file?path=<name> — Lire un fichier de l'espace de travailPOST /api/key-file — Écrire dans un fichier de l'espace de travail (avec sauvegarde)GET /api/crons — Lister les tâches cronPour des exemples détaillés de requêtes/réponses, consultez la version précédente de ce README ou explorez l'API dans l'onglet Réseau du navigateur.
Le tableau de bord stocke les données dans votre répertoire de travail :
Structure du fichier d'identifiants :```json { "username": "admin", "passwordHash": "pbkdf2_sha512$100000$...", "salt": "...", "mfaSecret": "BASE32SECRET..." // Only if MFA enabled }
## 🔗 Intégration OpenClaw
Le tableau de bord détecte automatiquement :
- **Sessions** depuis `$OPENCLAW_DIR/agents/$AGENT_ID/sessions/`
- **Tâches cron** depuis `$OPENCLAW_DIR/cron/jobs.json`
- **Fichiers mémoire** depuis `$WORKSPACE_DIR/MEMORY.md`, `HEARTBEAT.md` et `memory/*.md`
- **Dépôts Git** depuis `$WORKSPACE_DIR/projects/*/`
- **Données de santé** sauvegardées dans `$WORKSPACE_DIR/data/health-history.json`
### Fichiers requis
Le tableau de bord fonctionne mieux lorsque ces fichiers existent :
- `$WORKSPACE_DIR/MEMORY.md` - Mémoire à long terme de l'agent
- `$WORKSPACE_DIR/HEARTBEAT.md` - Liste des tâches Heartbeat
- `$WORKSPACE_DIR/memory/YYYY-MM-DD.md` - Notes mémoire quotidiennes
- `$WORKSPACE_DIR/scripts/scrape-claude-usage.sh` - Outil de récupération d'utilisation Claude
- `$WORKSPACE_DIR/scripts/parse-claude-usage.py` - Analyseur d'utilisation Claude
- `$WORKSPACE_DIR/scripts/scrape-gemini-usage.sh` - Outil de récupération d'utilisation Gemini
- `$WORKSPACE_DIR/scripts/parse-gemini-usage.py` - Analyseur d'utilisation Gemini
## ⌨️ Raccourcis clavier
| Touche | Action |
|-----|--------|
| `1` | Passer à la vue d'ensemble |
| `2` | Passer aux sessions |
| `3` | Passer aux coûts |
| `4` | Passer aux limites de taux |
| `5` | Passer à la mémoire |
| `6` | Passer aux fichiers |
| `7` | Passer au flux en direct |
| `8` | Passer aux journaux |
| `9` | Passer à la sécurité |
| `Space` | Pause/Reprendre le flux (sur la page Flux en direct) |
| `/` | Activer la barre de recherche |
| `Esc` | Fermer les modales et les superpositions |
| `?` | Afficher l'aide des raccourcis clavier |
## 🤝 Contribution
Les contributions sont les bienvenues ! Veuillez suivre ces directives :
1. **Forkez** le dépôt
2. **Créez** une branche de fonctionnalité (`git checkout -b feature/amazing-feature`)
3. **Commitez** vos modifications (`git commit -m 'Add amazing feature'`)
4. **Poussez** sur la branche (`git push origin feature/amazing-feature`)
5. **Ouvrez** une Pull Request
### Configuration de développement```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
export WORKSPACE_DIR=/path/to/test/workspace
node server.js
Le tableau de bord n'a pas d'étape de build — modifiez server.js ou index.html et rechargez.
Licence MIT - voir le fichier LICENSE pour plus de détails.
Réalisé avec ✨ par Tuğcan Topaloğlu
jq (page Docker), tmux + python3 (extracteur d'utilisation CLI Claude), docker (gestion Docker)POST /api/cron/<id>/toggle — Activer/désactiver une tâche cronPOST /api/cron/<id>/run — Déclencher manuellement une tâche cronGET /api/logs?service=<service>&lines=<N> — Récupérer les journaux systèmePOST /api/action/<action> — Exécuter des actions rapides (restart-openclaw, restart-dashboard, etc.)POST /api/claude-usage-scrape — Déclencher le scraping de l'utilisation ClaudeGET /api/claude-usage — Obtenir la dernière utilisation Claude scrapéePOST /api/gemini-usage-scrape — Déclencher le scraping de l'utilisation GeminiGET /api/gemini-usage — Obtenir la dernière utilisation Gemini scrapéeGET /api/live — Flux d'événements envoyés par le serveur de messages en temps réelGET /api/notifications?limit=<N> — Événements du journal d'audit pour le centre de notificationsPOST /api/reauth — Ré-authentifier pour les pages sensibles (Sécurité, Configuration)GET /api/openclaw-config — Lire le fichier de configuration OpenClawPUT /api/openclaw-config — Sauvegarder la configuration avec sauvegarde automatique et redémarrage de la passerelleGET /api/sys-security — Informations de sécurité système (UFW, ports, fail2ban, journaux SSH)GET /api/docker — Lister les conteneurs Docker, les images et l'utilisation systèmePOST /api/docker/action — Actions Docker (démarrer/arrêter/redémarrer un conteneur, nettoyer)GET /api/services — Lister les services systemdPOST /api/services/action — Actions de service (démarrer/arrêter/redémarrer, uniquement les services autorisés)| Fichier | Objectif |
|---|
data/credentials.json | Nom d'utilisateur + mot de passe haché + secret MFA |
data/audit.log | Piste d'audit de sécurité (rotation automatique à 10 Mo) |
data/health-history.json | Historique CPU/RAM/Temp/Disk pour les sparklines |
data/claude-usage.json | Dernière utilisation Claude scrapée |
data/gemini-usage.json | Dernière utilisation Gemini scrapée |