
🔐 Dashboard di monitoraggio sicuro e in tempo reale per gli agenti AI OpenClaw. Autenticazione, TOTP MFA, monitoraggio dei costi, feed dal vivo, browser della memoria e altro ancora.
Una dashboard di monitoraggio bella, sicura e in tempo reale per gli agenti OpenClaw. Tieni traccia delle sessioni, monitora l'uso delle API, visualizza i costi, gestisci i file di memoria e controlla lo stato del sistema — tutto in un unico posto.

| Panoramica | Sessioni | Costi |
|---|---|---|
![]() | ![]() | ![]() |
| Limiti di Velocità | Feed in Diretta | Log |
|---|---|---|
![]() | ![]() | ![]() |
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git cd openclaw-dashboard
export WORKSPACE_DIR=/path/to/your/openclaw/workspace
node server.js
Visita `http://localhost:7000` nel tuo browser. Al primo accesso, vedrai una **schermata di registrazione** in cui creerai il tuo nome utente e password. Dopo la registrazione, accedi con le tue credenziali.
## 📦 Installazione
### Prerequisiti
- **Node.js** v18 o superiore (verifica con `node --version`)
- **OpenClaw** installato e in esecuzione
- **Systemd** (opzionale, per l'installazione come servizio su Linux)
#### Dipendenze opzionali
| Strumento | Necessario per | Installazione |
|-----------|----------------|---------------|
| `jq` | Pagina di gestione Docker | `sudo apt install jq` |
| `tmux` | Scraper di utilizzo Claude CLI | `sudo apt install tmux` |
| `python3` | Parser di utilizzo Claude CLI | Solitamente preinstallato |
| `docker` | Pagina di gestione Docker | [docs.docker.com](https://docs.docker.com/engine/install/) |
### Installazione Manuale
1. **Clona il repository** ```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
Il server stamperà: ``` 🚀 Dashboard running on http://localhost:7000 🔑 Recovery token: abc123def456...
**Salva il token di recupero** — ti servirà se dimentichi la password.
4. **Accedi alla dashboard**
Apri `http://localhost:7000` e registra il tuo account.
### Servizio Systemd (install.sh)
Per eseguire la dashboard come servizio di sistema con avvio automatico e ripristino in caso di crash:```bash
sudo ./install.sh
Questo farà:
/etc/systemd/system/agent-dashboard.service/etc/systemd/system/agent-dashboard.service.d/override.confVisualizza i log:```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
Per l'accesso alla pagina di gestione Docker, passa il 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
### Variabili d'ambiente
| Variabile | Descrizione | Predefinito |
|-----------|-------------|-------------|
| `DASHBOARD_PORT` | Porta del server | `7000` |
| `DASHBOARD_TOKEN` | Token di recupero per il reset della password | Generato automaticamente all'avvio |
| `WORKSPACE_DIR` | Percorso workspace di OpenClaw | `$OPENCLAW_WORKSPACE` o directory corrente |
| `OPENCLAW_DIR` | Directory di configurazione di OpenClaw | `~/.openclaw` |
| `OPENCLAW_AGENT` | ID agente da monitorare | `main` |
| `DASHBOARD_ALLOW_HTTP` | Consenti HTTP da IP non locali | `false` |
**Esempi:**```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
Il dashboard utilizza l'autenticazione tramite nome utente e password con sessioni sicure lato server.
http://localhost:7000)localStorage)sessionStorage)Per prevenire attacchi di forza bruta:
Aggiungi un ulteriore livello di sicurezza con password monouso basate sul tempo (TOTP).
Una volta abilitata, ogni accesso richiede:
Se perdi l'accesso alla tua app di autenticazione (telefono perso, app disinstallata, ecc.):
Importante: Regola il percorso /root/clawd/data/credentials.json se il tuo workspace è diverso.
Se dimentichi la password:
Il token di recupero (DASHBOARD_TOKEN) viene stampato all'avvio del server. Puoi trovarlo in diversi posti:
journalctl -u agent-dashboard | grep "Recovery token"
[No content provided in the INPUT section.]```
🔑 Recovery token: 3e6b91f352418b486a9aa9d82fbbc1b1
cat /etc/systemd/system/agent-dashboard.service.d/override.conf
Cerca:```ini
Environment=DASHBOARD_TOKEN=3e6b91f352418b486a9aa9d82fbbc1b1
Se l'hai impostata manualmente:```bash echo $DASHBOARD_TOKEN
### Cambiare la tua password
Per cambiare la password mentre sei loggato:
1. Vai alla pagina **Sicurezza**
2. Inserisci la tua **password corrente**
3. Inserisci la tua **nuova password**
4. Clicca su **"Cambia Password"**
5. Tutte le altre sessioni vengono invalidate (dovrai accedere di nuovo altrove)
### Reset completo dell'account (Opzione nucleare)
Se tutto è bloccato e non riesci ad accedere:
1. **Connettiti via SSH al tuo server**
2. **Elimina il file delle credenziali**:
``` ```bash
rm /root/clawd/data/credentials.json
Attenzione: Questo cancella il tuo nome utente, password e impostazioni MFA. I file di memoria e i log di audit non vengono influenzati.
La dashboard è costruita con le migliori pratiche di sicurezza:
data/audit.log*) consentito.bak creati prima di sovrascrivere i file del workspaceLa dashboard è progettata per accesso locale o tramite Tailscale:
http://localhost:7000http://100.x.x.x:7000
DASHBOARD_ALLOW_HTTP=true)Per impostazione predefinita, la dashboard blocca l'accesso HTTP da IP non locali. Eccezioni:
Per altre reti, la dashboard richiede HTTPS o l'intestazione X-Forwarded-Proto: https (da un proxy inverso).
Per consentire HTTP da tutti gli IP (non consigliato):```bash DASHBOARD_ALLOW_HTTP=true node server.js
### Non esporre a Internet pubblica
**Questa dashboard NON è progettata per l'esposizione a Internet pubblica.** Sebbene disponga di autenticazione e limitazione delle richieste, è progettata per reti private. Se è necessario esporla:
- Utilizzare un proxy inverso (nginx, Caddy) con HTTPS
- Aggiungere una whitelist IP
- Considerare invece una VPN (Tailscale, WireGuard)
## 🛠️ Risoluzione dei problemi
### "Troppi tentativi falliti"
**Problema:** Vedi "Troppi tentativi di accesso falliti. Riprova più tardi."
**Soluzioni:**
- Attendere **15 minuti** affinché il blocco temporaneo scada
- Riavviare il servizio per cancellare i limiti di richiesta: ```bash
systemctl restart agent-dashboard
Problema: La tua password è stata cambiata ma non riesci ad accedere.
Soluzione: Utilizza la procedura "Password dimenticata?" con il tuo token di recupero per impostare una nuova password.
Problema: Il codice TOTP di 6 cifre viene rifiutato.
Soluzioni:
Problema: Il browser mostra una pagina vuota o un errore di connessione.
Soluzioni:
Dovrebbe restituire: ```json {"authenticated": false, "requiresRegistration": false}
### "HTTPS required" error
**Problema:** Il browser mostra "HTTPS richiesto. Accedi tramite localhost, Tailscale, o abilita HTTPS."
**Soluzioni:**
- Accesso tramite **localhost**: `http://localhost:7000`
- Accesso tramite **Tailscale**: `http://100.x.x.x:7000`
- Imposta `DASHBOARD_ALLOW_HTTP=true` nell'ambiente (non consigliato): ```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
Problema: La dashboard mostra una pagina vuota dopo aver scaricato il nuovo codice.
Soluzioni:
Ctrl+Shift+R (Windows/Linux) o Cmd+Shift+R (macOS)La dashboard espone un'API REST per l'accesso programmatico. Tutti gli endpoint richiedono autenticazione tramite l'intestazione Authorization: Bearer <sessionToken>.
GET /api/auth/status — Verifica lo stato di autenticazionePOST /api/auth/login — Accedi con nome utente/password (+ TOTP se MFA abilitato)POST /api/auth/register — Registra un nuovo account (solo se non esistono credenziali)POST /api/auth/reset-password — Reimposta la password con token di recuperoTutti gli altri endpoint richiedono autenticazione:
GET /api/config — Configurazione della dashboardGET /api/sessions — Elenca tutte le sessioni degli agentiGET /api/usage — Dati di utilizzo su finestra mobile di 5 oreGET /api/costs — Dati di spesa per giorno, modello e sessioneGET /api/system — Metriche di salute del sistemaGET /api/memory-files — Elenca i file di memoriaGET /api/memory-file?path=<path> — Legge un file di memoriaGET /api/key-files — Elenca i file dell'area di lavoro (skill, configurazioni)GET /api/key-file?path=<name> — Legge un file dell'area di lavoroPOST /api/key-file — Scrive in un file dell'area di lavoro (con backup)GET /api/crons — Elenca i job cronPOST /api/cron/<id>/toggle — Abilita/disabilita un job cronPer esempi dettagliati di richieste/risposte, consulta la versione precedente di questo README o esplora l'API nella scheda Rete del browser.
La dashboard archivia i dati nella tua directory dell'area di lavoro:
Struttura del file delle credenziali:```json { "username": "admin", "passwordHash": "pbkdf2_sha512$100000$...", "salt": "...", "mfaSecret": "BASE32SECRET..." // Only if MFA enabled }
## 🔗 Integrazione OpenClaw
La dashboard rileva automaticamente:
- **Sessioni** da `$OPENCLAW_DIR/agents/$AGENT_ID/sessions/`
- **Job cron** da `$OPENCLAW_DIR/cron/jobs.json`
- **File di memoria** da `$WORKSPACE_DIR/MEMORY.md`, `HEARTBEAT.md` e `memory/*.md`
- **Repository Git** da `$WORKSPACE_DIR/projects/*/`
- **Dati di salute** salvati in `$WORKSPACE_DIR/data/health-history.json`
### File Richiesti
La dashboard funziona meglio quando questi file esistono:
- `$WORKSPACE_DIR/MEMORY.md` - Memoria a lungo termine dell'agente
- `$WORKSPACE_DIR/HEARTBEAT.md` - Lista attività heartbeat
- `$WORKSPACE_DIR/memory/YYYY-MM-DD.md` - Note di memoria giornaliere
- `$WORKSPACE_DIR/scripts/scrape-claude-usage.sh` - Scraper utilizzo Claude
- `$WORKSPACE_DIR/scripts/parse-claude-usage.py` - Parser utilizzo Claude
- `$WORKSPACE_DIR/scripts/scrape-gemini-usage.sh` - Scraper utilizzo Gemini
- `$WORKSPACE_DIR/scripts/parse-gemini-usage.py` - Parser utilizzo Gemini
## ⌨️ Scorciatoie da Tastiera
| Tasto | Azione |
|-------|--------|
| `1` | Passa a Panoramica |
| `2` | Passa a Sessioni |
| `3` | Passa a Costi |
| `4` | Passa a Limiti di Velocità |
| `5` | Passa a Memoria |
| `6` | Passa a File |
| `7` | Passa a Live Feed |
| `8` | Passa a Log |
| `9` | Passa a Sicurezza |
| `Space` | Metti in pausa/Riprendi feed (quando nella pagina Live Feed) |
| `/` | Focus sulla casella di ricerca |
| `Esc` | Chiudi modali e overlay |
| `?` | Mostra aiuto scorciatoie da tastiera |
## 🤝 Contributi
I contributi sono benvenuti! Segui queste linee guida:
1. **Forka** il repository
2. **Crea** un ramo feature (`git checkout -b feature/amazing-feature`)
3. **Esegui commit** delle modifiche (`git commit -m 'Add amazing feature'`)
4. **Fai push** sul ramo (`git push origin feature/amazing-feature`)
5. **Apri** una Pull Request
### Configurazione di Sviluppo```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
export WORKSPACE_DIR=/path/to/test/workspace
node server.js
La dashboard non ha un passaggio di build — modifica server.js o index.html e ricarica.
Licenza MIT - vedi il file LICENSE per i dettagli.
Realizzato con ✨ da Tuğcan Topaloğlu
jq (pagina Docker), tmux + python3 (scraper utilizzo Claude CLI), docker (gestione Docker)POST /api/cron/<id>/run — Attiva manualmente un job cronGET /api/logs?service=<service>&lines=<N> — Recupera i log di sistemaPOST /api/action/<action> — Esegui azioni rapide (restart-openclaw, restart-dashboard, ecc.)POST /api/claude-usage-scrape — Attiva lo scraping dell'utilizzo di ClaudeGET /api/claude-usage — Ottieni l'ultimo utilizzo di Claude scaricatoPOST /api/gemini-usage-scrape — Attiva lo scraping dell'utilizzo di GeminiGET /api/gemini-usage — Ottieni l'ultimo utilizzo di Gemini scaricatoGET /api/live — Flusso di eventi inviati dal server (SSE) di messaggi in tempo realeGET /api/notifications?limit=<N> — Eventi del registro di audit per il centro notifichePOST /api/reauth — Riautenticazione per pagine sensibili (Sicurezza, Configurazione)GET /api/openclaw-config — Legge il file di configurazione di OpenClawPUT /api/openclaw-config — Salva la configurazione con backup automatico e riavvio del gatewayGET /api/sys-security — Informazioni sulla sicurezza del sistema (UFW, porte, fail2ban, log SSH)GET /api/docker — Elenca container Docker, immagini e utilizzo del sistemaPOST /api/docker/action — Azioni Docker (avvia/ferma/riavvia container, pulizia)GET /api/services — Elenca i servizi systemdPOST /api/services/action — Azioni sui servizi (avvia/ferma/riavvia, solo autorizzati)| File | Scopo |
|---|
data/credentials.json | Nome utente + password hashata + segreto MFA |
data/audit.log | Traccia di audit di sicurezza (rotazione automatica a 10 MB) |
data/health-history.json | Storico CPU/RAM/Temperatura/Disk per sparkline |
data/claude-usage.json | Ultimi dati di utilizzo di Claude scaricati |
data/gemini-usage.json | Ultimi dati di utilizzo di Gemini scaricati |