
🔐 Sicheres Echtzeit-Überwachungsdashboard für OpenClaw AI agents. Authentifizierung, TOTP MFA, Kostenverfolgung, Live-Feed, Speicher-Browser und mehr.
Ein ansprechendes, sicheres Echtzeit-Monitoring-Dashboard für OpenClaw-Agents. Verfolgen Sie Sitzungen, überwachen Sie die API-Nutzung, sehen Sie Kosten ein, verwalten Sie Speicherdateien und behalten Sie den Systemzustand im Blick – alles an einem Ort.

| Übersicht | Sitzungen | Kosten |
|---|---|---|
![]() | ![]() | ![]() |
| Rate-Limits | Live-Feed | Logs |
|---|---|---|
![]() | ![]() | ![]() |
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git cd openclaw-dashboard
export WORKSPACE_DIR=/path/to/your/openclaw/workspace
node server.js
Besuchen Sie `http://localhost:7000` in Ihrem Browser. Beim ersten Besuch sehen Sie einen **Registrierungsbildschirm**, auf dem Sie Ihren Benutzernamen und Ihr Passwort erstellen. Nach der Registrierung melden Sie sich mit Ihren Anmeldedaten an.
## 📦 Installation
### Voraussetzungen
- **Node.js** v18 oder höher (Überprüfung mit `node --version`)
- **OpenClaw** installiert und läuft
- **Systemd** (optional, für die Dienstinstallation unter Linux)
#### Optionale Abhängigkeiten
| Tool | Erforderlich für | Installation |
|------|-----------------|--------------|
| `jq` | Docker-Verwaltungsseite | `sudo apt install jq` |
| `tmux` | Claude CLI Nutzungs-Scraper | `sudo apt install tmux` |
| `python3` | Parser für die Claude CLI-Nutzung | Normalerweise vorinstalliert |
| `docker` | Docker-Verwaltungsseite | [docs.docker.com](https://docs.docker.com/engine/install/) |
### Manuelle Installation
1. **Klonen Sie das Repository** ```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
Der Server wird ausgeben: ``` 🚀 Dashboard running on http://localhost:7000 🔑 Recovery token: abc123def456...
**Speichern Sie den Wiederherstellungs-Token** — Sie werden ihn brauchen, falls Sie Ihr Passwort vergessen.
4. **Auf das Dashboard zugreifen**
Öffnen Sie `http://localhost:7000` und registrieren Sie Ihr Konto.
### Systemd-Dienst (install.sh)
Um das Dashboard als Systemdienst mit automatischem Start und Absturzwiederherstellung auszuführen:```bash
sudo ./install.sh
Dies wird:
/etc/systemd/system/agent-dashboard.service/etc/systemd/system/agent-dashboard.service.d/override.confLogs anzeigen:```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
Für den Zugriff auf die Docker-Verwaltungsseite übergeben Sie den Docker-Socket:```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
### Umgebungsvariablen
| Variable | Beschreibung | Standard |
|----------|--------------|----------|
| `DASHBOARD_PORT` | Server-Port | `7000` |
| `DASHBOARD_TOKEN` | Wiederherstellungs-Token für Passwort-Reset | Automatisch beim Start generiert |
| `WORKSPACE_DIR` | OpenClaw-Arbeitsbereichspfad | `$OPENCLAW_WORKSPACE` oder aktuelles Verzeichnis |
| `OPENCLAW_DIR` | OpenClaw-Konfigurationsverzeichnis | `~/.openclaw` |
| `OPENCLAW_AGENT` | Zu überwachende Agent-ID | `main` |
| `DASHBOARD_ALLOW_HTTP` | HTTP von nicht-lokalen IPs zulassen | `false` |
**Beispiele:**```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
Das Dashboard verwendet Benutzername- und Passwort-Authentifizierung mit sicheren serverseitigen Sitzungen.
http://localhost:7000)localStorage)sessionStorage)Um Brute-Force-Angriffe zu verhindern:
Fügen Sie eine zusätzliche Sicherheitsebene mit zeitbasierten Einmalpasswörtern (TOTP) hinzu.
Einmal aktiviert, erfordert jede Anmeldung:
Wenn Sie den Zugriff auf Ihre Authenticator-App verlieren (Telefon verloren, App deinstalliert usw.):
Wichtig: Passen Sie den Pfad /root/clawd/data/credentials.json an, falls Ihr Arbeitsbereich woanders liegt.
Wenn Sie Ihr Passwort vergessen:
Der Wiederherstellungs-Token (DASHBOARD_TOKEN) wird beim Start des Servers ausgegeben. Sie finden ihn an mehreren Stellen:
journalctl -u agent-dashboard | grep "Recovery token"
Ausgabe:```
🔑 Recovery token: 3e6b91f352418b486a9aa9d82fbbc1b1
cat /etc/systemd/system/agent-dashboard.service.d/override.conf
Suchen Sie nach:```ini
Environment=DASHBOARD_TOKEN=3e6b91f352418b486a9aa9d82fbbc1b1
Wenn Sie sie manuell gesetzt haben:```bash echo $DASHBOARD_TOKEN
### Ändern Ihres Passworts
Um Ihr Passwort zu ändern, während Sie angemeldet sind:
1. Gehen Sie zur **Sicherheits**-Seite
2. Geben Sie Ihr **aktuelles Passwort** ein
3. Geben Sie Ihr **neues Passwort** ein
4. Klicken Sie auf **"Passwort ändern"**
5. Alle anderen Sitzungen werden ungültig (Sie müssen sich an anderer Stelle erneut anmelden)
### Vollständiger Account-Reset (Atomoption)
Wenn alles gesperrt ist und Sie sich nicht anmelden können:
1. **SSH in Ihren Server einloggen**
2. **Löschen Sie die Anmeldedatendatei**:
``` ```bash
rm /root/clawd/data/credentials.json
Warnung: Dabei werden Ihr Benutzername, Passwort und MFA-Einstellungen gelöscht. Speicherdateien und Prüfprotokolle sind nicht betroffen.
Das Dashboard ist nach den besten Sicherheitspraktiken aufgebaut:
data/audit.log protokolliert*) erlaubt.bak-Dateien werden vor dem Überschreiben von Arbeitsbereichsdateien erstelltDas Dashboard ist für den lokalen oder Tailscale-Zugriff ausgelegt:
http://localhost:7000http://100.x.x.x:7000
DASHBOARD_ALLOW_HTTP=true setzen)Standardmäßig blockiert das Dashboard HTTP-Zugriff von nicht-lokalen IPs. Ausnahmen:
Für andere Netzwerke erfordert das Dashboard HTTPS oder den X-Forwarded-Proto: https-Header (von einem Reverse-Proxy).
Um HTTP von allen IPs zuzulassen (nicht empfohlen):```bash DASHBOARD_ALLOW_HTTP=true node server.js
### Nicht dem öffentlichen Internet aussetzen
**Dieses Dashboard ist NICHT für die öffentliche Internet-Exposition gehärtet.** Obwohl es Authentifizierung und Ratenbegrenzung hat, ist es für private Netzwerke konzipiert. Wenn Sie es dennoch freigeben müssen:
- Verwenden Sie einen Reverse-Proxy (nginx, Caddy) mit HTTPS
- Fügen Sie eine IP-Zulassungsliste hinzu
- Ziehen Sie stattdessen VPN (Tailscale, WireGuard) in Betracht
## 🛠️ Fehlerbehebung
### "Zu viele fehlgeschlagene Versuche"
**Problem:** Sie sehen "Zu viele fehlgeschlagene Anmeldeversuche. Bitte versuchen Sie es später erneut."
**Lösungen:**
- Warten Sie **15 Minuten**, bis die weiche Sperre abläuft
- Starten Sie den Dienst neu, um die Ratenbegrenzungen zu löschen:
`sudo systemctl restart your-service` ```bash
systemctl restart agent-dashboard
Problem: Ihr Passwort wurde geändert, aber Sie können sich nicht anmelden.
Lösung: Verwenden Sie den "Passwort vergessen?"-Ablauf mit Ihrem Wiederherstellungs-Token, um ein neues Passwort festzulegen.
Problem: Der 6-stellige TOTP-Code wird abgelehnt.
Lösungen:
Problem: Der Browser zeigt eine leere Seite oder einen Verbindungsfehler an.
Lösungen:
Sollte zurückgeben: ```json {"authenticated": false, "requiresRegistration": false}
### Fehler "HTTPS erforderlich"
**Problem:** Der Browser zeigt "HTTPS erforderlich. Zugriff über localhost, Tailscale, oder HTTPS aktivieren." an.
**Lösungen:**
- Zugriff über **localhost**: `http://localhost:7000`
- Zugriff über **Tailscale**: `http://100.x.x.x:7000`
- Setze `DASHBOARD_ALLOW_HTTP=true` in der Umgebung (nicht empfohlen): ```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
Problem: Das Dashboard zeigt eine leere Seite nach dem Abrufen neuen Codes.
Lösungen:
Ctrl+Shift+R (Windows/Linux) oder Cmd+Shift+R (macOS)Das Dashboard stellt eine REST-API für den programmatischen Zugriff bereit. Alle Endpunkte erfordern eine Authentifizierung über den Header Authorization: Bearer <sessionToken>.
GET /api/auth/status — Authentifizierungsstatus prüfenPOST /api/auth/login — Mit Benutzername/Passwort anmelden (+ TOTP falls MFA aktiviert)POST /api/auth/register — Neues Konto registrieren (nur wenn keine Anmeldedaten existieren)POST /api/auth/reset-password — Passwort mit Wiederherstellungs-Token zurücksetzenAlle anderen Endpunkte erfordern Authentifizierung:
GET /api/config — Dashboard-KonfigurationGET /api/sessions — Alle Agentensitzungen auflistenGET /api/usage — Nutzungsdaten für ein rollierendes 5-Stunden-FensterGET /api/costs — Ausgabendaten nach Tag, Modell und SitzungGET /api/system — System-GesundheitsmetrikenGET /api/memory-files — Speicherdateien auflistenGET /api/memory-file?path=<path> — Speicherdatei lesenGET /api/key-files — Arbeitsbereichsdateien auflisten (Fähigkeiten, Konfigurationen)GET /api/key-file?path=<name> — Arbeitsbereichsdatei lesenPOST /api/key-file — In eine Arbeitsbereichsdatei schreiben (mit Backup)GET /api/crons — Cron-Jobs auflistenPOST /api/cron/<id>/toggle — Cron-Job aktivieren/deaktivierenDetaillierte Anfrage-/Antwortbeispiele finden Sie in der vorherigen Version dieser README oder erkunden Sie die API im Netzwerk-Tab des Browsers.
Das Dashboard speichert Daten in Ihrem Arbeitsbereichsverzeichnis:
Struktur der Anmeldedatendatei:```json { "username": "admin", "passwordHash": "pbkdf2_sha512$100000$...", "salt": "...", "mfaSecret": "BASE32SECRET..." // Only if MFA enabled }
## 🔗 OpenClaw-Integration
Das Dashboard erkennt automatisch:
- **Sitzungen** aus `$OPENCLAW_DIR/agents/$AGENT_ID/sessions/`
- **Cron-Jobs** aus `$OPENCLAW_DIR/cron/jobs.json`
- **Speicherdateien** aus `$WORKSPACE_DIR/MEMORY.md`, `HEARTBEAT.md` und `memory/*.md`
- **Git-Repos** aus `$WORKSPACE_DIR/projects/*/`
- **Gesundheitsdaten** gespeichert in `$WORKSPACE_DIR/data/health-history.json`
### Erforderliche Dateien
Das Dashboard funktioniert am besten, wenn diese Dateien vorhanden sind:
- `$WORKSPACE_DIR/MEMORY.md` - Langzeitspeicher des Agenten
- `$WORKSPACE_DIR/HEARTBEAT.md` - Heartbeat-Aufgabenliste
- `$WORKSPACE_DIR/memory/YYYY-MM-DD.md` - Tägliche Gedächtnisnotizen
- `$WORKSPACE_DIR/scripts/scrape-claude-usage.sh` - Claude-Nutzungs-Scraper
- `$WORKSPACE_DIR/scripts/parse-claude-usage.py` - Claude-Nutzungs-Parser
- `$WORKSPACE_DIR/scripts/scrape-gemini-usage.sh` - Gemini-Nutzungs-Scraper
- `$WORKSPACE_DIR/scripts/parse-gemini-usage.py` - Gemini-Nutzungs-Parser
## ⌨️ Tastaturkürzel
| Taste | Aktion |
|-------|--------|
| `1` | Zu Übersicht wechseln |
| `2` | Zu Sitzungen wechseln |
| `3` | Zu Kosten wechseln |
| `4` | Zu Ratenbegrenzungen wechseln |
| `5` | Zu Speicher wechseln |
| `6` | Zu Dateien wechseln |
| `7` | Zu Live-Feed wechseln |
| `8` | Zu Protokollen wechseln |
| `9` | Zu Sicherheit wechseln |
| `Space` | Feed anhalten/fortsetzen (auf der Live-Feed-Seite) |
| `/` | Suchfeld fokussieren |
| `Esc` | Modale und Überlagerungen schließen |
| `?` | Tastaturkürzel-Hilfe anzeigen |
## 🤝 Mitwirken
Beiträge sind willkommen! Bitte befolgen Sie diese Richtlinien:
1. **Forken** Sie das Repository
2. **Erstellen** Sie einen Feature-Branch (`git checkout -b feature/amazing-feature`)
3. **Comitten** Sie Ihre Änderungen (`git commit -m 'Add amazing feature'`)
4. **Pushen** Sie auf den Branch (`git push origin feature/amazing-feature`)
5. **Erstellen** Sie einen Pull Request
### Entwicklungseinrichtung```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
export WORKSPACE_DIR=/path/to/test/workspace
node server.js
Das Dashboard hat keinen Build-Schritt — bearbeite server.js oder index.html und lade neu.
MIT-Lizenz – siehe Datei LICENSE für Details.
Erstellt mit ✨ von Tuğcan Topaloğlu
jq (Docker-Seite), tmux + python3 (Claude-CLI-Nutzungs-Scraper), docker (Docker-Verwaltung)POST /api/cron/<id>/run — Cron-Job manuell auslösenGET /api/logs?service=<service>&lines=<N> — Systemprotokolle abrufenPOST /api/action/<action> — Schnellaktionen ausführen (restart-openclaw, restart-dashboard, usw.)POST /api/claude-usage-scrape — Nutzungsabruf von Claude auslösenGET /api/claude-usage — Letzten abgerufenen Claude-Nutzungsdaten abrufenPOST /api/gemini-usage-scrape — Nutzungsabruf von Gemini auslösenGET /api/gemini-usage — Letzten abgerufenen Gemini-Nutzungsdaten abrufenGET /api/live — Server-Sent Events-Stream von EchtzeitnachrichtenGET /api/notifications?limit=<N> — Prüfprotokollereignisse für BenachrichtigungszentrumPOST /api/reauth — Erneute Authentifizierung für sensible Seiten (Sicherheit, Konfiguration)GET /api/openclaw-config — OpenClaw-Konfigurationsdatei lesenPUT /api/openclaw-config — Konfiguration mit automatischem Backup und Gateway-Neustart speichernGET /api/sys-security — System-Sicherheitsinformationen (UFW, Ports, fail2ban, SSH-Protokolle)GET /api/docker — Docker-Container, Images und Systemnutzung auflistenPOST /api/docker/action — Docker-Aktionen (Container starten/stoppen/neustarten, aufräumen)GET /api/services — systemd-Dienste auflistenPOST /api/services/action — Dienstaktionen (starten/stoppen/neustarten, nur auf der Whitelist)| Datei | Zweck |
|---|
data/credentials.json | Benutzername + gehashtes Passwort + MFA-Geheimnis |
data/audit.log | Sicherheitsprüfpfad (automatische Rotation bei 10 MB) |
data/health-history.json | CPU/RAM/Temp/Disk-Verlauf für Sparklines |
data/claude-usage.json | Zuletzt abgerufene Claude-Nutzungsdaten |
data/gemini-usage.json | Zuletzt abgerufene Gemini-Nutzungsdaten |