
🔐 Painel de monitoramento seguro e em tempo real para agentes de IA OpenClaw. Autenticação, MFA TOTP, rastreamento de custos, feed ao vivo, navegador de memória e mais.
Um painel de monitoramento em tempo real, bonito e seguro, para agentes OpenClaw. Acompanhe sessões, monitore o uso da API, visualize custos, gerencie arquivos de memória e mantenha-se atualizado sobre a saúde do sistema — tudo em um só lugar.

| Visão Geral | Sessões | Custos |
|---|---|---|
![]() | ![]() | ![]() |
| Limites de Taxa | Feed ao Vivo | Logs |
|---|---|---|
![]() | ![]() | ![]() |
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git cd openclaw-dashboard
export WORKSPACE_DIR=/path/to/your/openclaw/workspace
node server.js
Visite `http://localhost:7000` no seu navegador. Na primeira visita, você verá uma **tela de registro** onde cria seu nome de usuário e senha. Após o registro, faça login com suas credenciais.
## 📦 Instalação
### Pré-requisitos
- **Node.js** v18 ou superior (verifique com `node --version`)
- **OpenClaw** instalado e em execução
- **Systemd** (opcional, para instalação do serviço no Linux)
#### Dependências opcionais
| Ferramenta | Necessário para | Instalar |
|------|-------------|---------|
| `jq` | Página de gerenciamento do Docker | `sudo apt install jq` |
| `tmux` | Scraper de uso da CLI do Claude | `sudo apt install tmux` |
| `python3` | Parser de uso da CLI do Claude | Geralmente pré-instalado |
| `docker` | Página de gerenciamento do Docker | [docs.docker.com](https://docs.docker.com/engine/install/) |
### Instalação Manual
1. **Clone o repositório** ```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
O servidor imprimirá: ``` 🚀 Dashboard running on http://localhost:7000 🔑 Recovery token: abc123def456...
**Salve o token de recuperação** — você precisará dele se esquecer sua senha.
4. **Acesse o painel**
Abra `http://localhost:7000` e registre sua conta.
### Serviço Systemd (install.sh)
Para executar o painel como um serviço do sistema com inicialização automática e recuperação de falhas:```bash
sudo ./install.sh
Isto irá:
/etc/systemd/system/agent-dashboard.service/etc/systemd/system/agent-dashboard.service.d/override.confVer registos:```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
Para acesso à página de gerenciamento do Docker, passe o 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
### Variáveis de Ambiente
| Variável | Descrição | Padrão |
|----------|-----------|--------|
| `DASHBOARD_PORT` | Porta do servidor | `7000` |
| `DASHBOARD_TOKEN` | Token de recuperação para redefinição de senha | Gerado automaticamente na inicialização |
| `WORKSPACE_DIR` | Caminho do espaço de trabalho do OpenClaw | `$OPENCLAW_WORKSPACE` ou diretório atual |
| `OPENCLAW_DIR` | Diretório de configuração do OpenClaw | `~/.openclaw` |
| `OPENCLAW_AGENT` | ID do agente a monitorar | `main` |
| `DASHBOARD_ALLOW_HTTP` | Permitir HTTP de IPs não locais | `false` |
**Exemplos:**```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
O dashboard usa autenticação por nome de utilizador e palavra-passe com sessões seguras no lado do servidor.
http://localhost:7000)localStorage)sessionStorage)Para prevenir ataques de força bruta:
Adicione uma camada extra de segurança com palavras-passe únicas baseadas no tempo (TOTP).
Uma vez ativada, cada início de sessão requer:
Se perder o acesso à sua aplicação de autenticação (telefone perdido, aplicação desinstalada, etc.):
Importante: Ajuste o caminho /root/clawd/data/credentials.json se seu workspace estiver em outro local.
Se você esquecer sua senha:
O token de recuperação (DASHBOARD_TOKEN) é exibido quando o servidor inicia. Você pode encontrá-lo em vários lugares:
journalctl -u agent-dashboard | grep "Recovery token"
Saída:
🔑 Recovery token: 3e6b91f352418b486a9aa9d82fbbc1b1
#### Verificar Configuração de Substituição do Systemd```bash
cat /etc/systemd/system/agent-dashboard.service.d/override.conf
Procure por:```ini Environment=DASHBOARD_TOKEN=3e6b91f352418b486a9aa9d82fbbc1b1
#### Verificar Variável de Ambiente
Se você a configurou manualmente:```bash
echo $DASHBOARD_TOKEN
Para alterar sua senha enquanto estiver logado:
Se tudo estiver bloqueado e você não conseguir fazer login:
Aviso: Isso exclui seu nome de usuário, senha e configurações de MFA. Os arquivos de memória e logs de auditoria não são afetados.
O dashboard é construído com as melhores práticas de segurança:
data/audit.log*) permitido.bak criados antes de sobrescrever arquivos do workspaceO dashboard é projetado para acesso local ou via Tailscale:
http://localhost:7000http://100.x.x.x:7000
DASHBOARD_ALLOW_HTTP=true)Por padrão, o dashboard bloqueia o acesso HTTP de IPs não locais. Exceções:
Para outras redes, o dashboard exige HTTPS ou o cabeçalho X-Forwarded-Proto: https (de um proxy reverso).
Para permitir HTTP de todos os IPs (não recomendado):```bash DASHBOARD_ALLOW_HTTP=true node server.js
### Não Expor à Internet Pública
**Este painel NÃO é reforçado para exposição à Internet pública.** Embora tenha autenticação e limitação de taxa, foi concebido para redes privadas. Se precisar de o expor:
- Use um proxy reverso (nginx, Caddy) com HTTPS
- Adicione lista de permissão de IP
- Considere usar VPN (Tailscale, WireGuard) em vez disso
## 🛠️ Resolução de Problemas
### "Demasiadas tentativas falhadas"
**Problema:** Vê "Demasiadas tentativas de login falhadas. Por favor, tente novamente mais tarde."
**Soluções:**
- Aguarde **15 minutos** para o bloqueio temporário expirar
- Reinicie o serviço para limpar os limites de taxa: ```bash
systemctl restart agent-dashboard
Problema: Sua senha foi alterada mas você não consegue entrar.
Solução: Use o fluxo "Esqueceu a senha?" com seu token de recuperação para definir uma nova senha.
Problema: O código TOTP de 6 dígitos é rejeitado.
Soluções:
Problema: O navegador mostra uma página em branco ou erro de conexão.
Soluções:
Deve retornar: ```json {"authenticated": false, "requiresRegistration": false}
### Erro "HTTPS obrigatório"
**Problema:** O navegador mostra "HTTPS obrigatório. Aceda via localhost, Tailscale, ou ative HTTPS."
**Soluções:**
- Aceder via **localhost**: `http://localhost:7000`
- Aceder via **Tailscale**: `http://100.x.x.x:7000`
- Definir `DASHBOARD_ALLOW_HTTP=true` no ambiente (não recomendado): ```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: O painel mostra uma página em branco após puxar novo código.
Soluções:
Ctrl+Shift+R (Windows/Linux) ou Cmd+Shift+R (macOS)O painel expõe uma API REST para acesso programático. Todos os endpoints exigem autenticação via cabeçalho Authorization: Bearer <sessionToken>.
GET /api/auth/status — Verificar status de autenticaçãoPOST /api/auth/login — Fazer login com usuário/senha (+ TOTP se MFA ativado)POST /api/auth/register — Registrar uma nova conta (apenas se não existirem credenciais)POST /api/auth/reset-password — Redefinir senha com token de recuperaçãoTodos os outros endpoints exigem autenticação:
GET /api/config — Configuração do painelGET /api/sessions — Listar todas as sessões de agenteGET /api/usage — Dados de uso em janela rolante de 5 horasGET /api/costs — Dados de gastos por dia, modelo e sessãoGET /api/system — Métricas de saúde do sistemaGET /api/memory-files — Listar arquivos de memóriaGET /api/memory-file?path=<path> — Ler um arquivo de memóriaGET /api/key-files — Listar arquivos do workspace (skills, configurações)GET /api/key-file?path=<name> — Ler um arquivo do workspacePOST /api/key-file — Escrever em um arquivo do workspace (com backup)GET /api/crons — Listar tarefas cronPOST /api/cron/<id>/toggle — Ativar/desativar uma tarefa cronPara exemplos detalhados de requisição/resposta, consulte a versão anterior deste README ou explore a API na aba Network do navegador.
O painel armazena dados no diretório do seu workspace:
Estrutura do arquivo de credenciais:```json { "username": "admin", "passwordHash": "pbkdf2_sha512$100000$...", "salt": "...", "mfaSecret": "BASE32SECRET..." // Only if MFA enabled }
## 🔗 Integração OpenClaw
O painel detecta automaticamente:
- **Sessões** de `$OPENCLAW_DIR/agents/$AGENT_ID/sessions/`
- **Tarefas cron** de `$OPENCLAW_DIR/cron/jobs.json`
- **Arquivos de memória** de `$WORKSPACE_DIR/MEMORY.md`, `HEARTBEAT.md` e `memory/*.md`
- **Repositórios Git** de `$WORKSPACE_DIR/projects/*/`
- **Dados de saúde** salvos em `$WORKSPACE_DIR/data/health-history.json`
### Arquivos Necessários
O painel funciona melhor quando estes arquivos existem:
- `$WORKSPACE_DIR/MEMORY.md` - Memória de longo prazo do agente
- `$WORKSPACE_DIR/HEARTBEAT.md` - Lista de tarefas do Heartbeat
- `$WORKSPACE_DIR/memory/YYYY-MM-DD.md` - Notas de memória diárias
- `$WORKSPACE_DIR/scripts/scrape-claude-usage.sh` - Extrator de uso do Claude
- `$WORKSPACE_DIR/scripts/parse-claude-usage.py` - Analisador de uso do Claude
- `$WORKSPACE_DIR/scripts/scrape-gemini-usage.sh` - Extrator de uso do Gemini
- `$WORKSPACE_DIR/scripts/parse-gemini-usage.py` - Analisador de uso do Gemini
## ⌨️ Atalhos de Teclado
| Tecla | Ação |
|-----|--------|
| `1` | Mudar para Visão Geral |
| `2` | Mudar para Sessões |
| `3` | Mudar para Custos |
| `4` | Mudar para Limites de Taxa |
| `5` | Mudar para Memória |
| `6` | Mudar para Arquivos |
| `7` | Mudar para Feed Ao Vivo |
| `8` | Mudar para Registros |
| `9` | Mudar para Segurança |
| `Espaço` | Pausar/Retomar Feed (quando na página de Feed Ao Vivo) |
| `/` | Focar caixa de pesquisa |
| `Esc` | Fechar modais e sobreposições |
| `?` | Mostrar ajuda de atalhos de teclado |
## 🤝 Contribuindo
Contribuições são bem-vindas! Por favor, siga estas diretrizes:
1. **Fork** o repositório
2. **Crie** um branch de funcionalidade (`git checkout -b feature/amazing-feature`)
3. **Faça commit** das suas alterações (`git commit -m 'Adicionar funcionalidade incrível'`)
4. **Envie** para o branch (`git push origin feature/amazing-feature`)
5. **Abra** um Pull Request
### Configuração de Desenvolvimento```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
export WORKSPACE_DIR=/path/to/test/workspace
node server.js
O painel não tem etapa de construção — edite server.js ou index.html e recarregue.
Licença MIT - veja o arquivo LICENSE para detalhes.
Feito com ✨ por Tuğcan Topaloğlu
jq (página Docker), tmux + python3 (coletor de uso da CLI do Claude), docker (gerenciamento Docker)POST /api/cron/<id>/run — Disparar manualmente uma tarefa cronGET /api/logs?service=<service>&lines=<N> — Buscar logs do sistemaPOST /api/action/<action> — Executar ações rápidas (restart-openclaw, restart-dashboard, etc.)POST /api/claude-usage-scrape — Disparar scraping de uso do ClaudeGET /api/claude-usage — Obter último uso do Claude raspadoPOST /api/gemini-usage-scrape — Disparar scraping de uso do GeminiGET /api/gemini-usage — Obter último uso do Gemini raspadoGET /api/live — Fluxo de Server-Sent Events de mensagens em tempo realGET /api/notifications?limit=<N> — Eventos de log de auditoria para central de notificaçõesPOST /api/reauth — Reautenticar para páginas sensíveis (Segurança, Configuração)GET /api/openclaw-config — Ler arquivo de configuração do OpenClawPUT /api/openclaw-config — Salvar configuração com backup automático e reinicialização do gatewayGET /api/sys-security — Informações de segurança do sistema (UFW, portas, fail2ban, logs SSH)GET /api/docker — Listar containers Docker, imagens e uso do sistemaPOST /api/docker/action — Ações Docker (iniciar/parar/reiniciar container, limpar)GET /api/services — Listar serviços systemdPOST /api/services/action — Ações de serviço (iniciar/parar/reiniciar, apenas na whitelist)| Arquivo | Finalidade |
|---|
data/credentials.json | Nome de usuário + senha com hash + segredo MFA |
data/audit.log | Rastro de auditoria de segurança (rotação automática a cada 10MB) |
data/health-history.json | Histórico de CPU/RAM/Temp/Disco para sparklines |
data/claude-usage.json | Últimos dados de uso do Claude raspados |
data/gemini-usage.json | Últimos dados de uso do Gemini raspados |