一个美观、安全、实时的 OpenClaw 代理监控仪表盘。在单一界面中跟踪会话、监控 API 使用情况、查看成本、管理内存文件,并掌握系统健康状态。

| 概览 | 会话 | 费用 |
|---|---|---|
![]() | ![]() | ![]() |
| 速率限制 | 实时动态 | 日志 |
|---|---|---|
![]() | ![]() | ![]() |
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git cd openclaw-dashboard
export WORKSPACE_DIR=/path/to/your/openclaw/workspace
node server.js
访问 `http://localhost:7000`。首次访问时,您将看到一个**注册界面**,您需要在此创建用户名和密码。注册后,使用您的凭据登录。
## 📦 安装
### 前提条件
- **Node.js** v18 或更高版本(使用 `node --version` 检查)
- **OpenClaw** 已安装并运行
- **Systemd**(可选,用于在 Linux 上安装服务)
#### 可选依赖项
| 工具 | 用途 | 安装命令 |
|------|------|---------|
| `jq` | Docker 管理页面 | `sudo apt install jq` |
| `tmux` | Claude CLI 使用量抓取 | `sudo apt install tmux` |
| `python3` | Claude CLI 使用量解析 | 通常预装 |
| `docker` | Docker 管理页面 | [docs.docker.com](https://docs.docker.com/engine/install/) |
### 手动安装
1. **克隆仓库** ```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
服务器将输出: ``` 🚀 Dashboard running on http://localhost:7000 🔑 Recovery token: abc123def456...
**保存恢复令牌** — 如果您忘记密码,将需要它。
4. **访问控制面板**
打开 `http://localhost:7000` 并注册您的账户。
### Systemd 服务 (install.sh)
要将控制面板作为系统服务运行,支持自动启动和崩溃恢复:```bash
sudo ./install.sh
这将:
/etc/systemd/system/agent-dashboard.service/etc/systemd/system/agent-dashboard.service.d/override.conf 创建覆盖配置查看日志:```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
要访问Docker管理页面,请传递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
### 环境变量
| 变量 | 描述 | 默认值 |
|----------|-------------|---------|
| `DASHBOARD_PORT` | 服务器端口 | `7000` |
| `DASHBOARD_TOKEN` | 用于密码重置的恢复令牌 | 启动时自动生成 |
| `WORKSPACE_DIR` | OpenClaw 工作区路径 | `$OPENCLAW_WORKSPACE` 或当前目录 |
| `OPENCLAW_DIR` | OpenClaw 配置目录 | `~/.openclaw` |
| `OPENCLAW_AGENT` | 要监控的代理 ID | `main` |
| `DASHBOARD_ALLOW_HTTP` | 允许来自非本地 IP 的 HTTP | `false` |
**示例:**```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
仪表盘使用用户名和密码认证,并采用安全的服务器端会话。
http://localhost:7000)localStorage)sessionStorage)为防止暴力攻击:
通过基于时间的一次性密码 (TOTP) 增加额外的安全层。
启用后,每次登录需要:
如果你无法访问身份验证器应用(手机丢失、应用卸载等):
重要: 如果你的工作区不在别处,请调整路径 /root/clawd/data/credentials.json。
如果你忘记密码:
恢复令牌(DASHBOARD_TOKEN)在服务器启动时打印。你可以在多个地方找到它:
journalctl -u agent-dashboard | grep "Recovery token"
(无内容,因为输入为空)```
🔑 Recovery token: 3e6b91f352418b486a9aa9d82fbbc1b1
cat /etc/systemd/system/agent-dashboard.service.d/override.conf
寻找:```ini
Environment=DASHBOARD_TOKEN=3e6b91f352418b486a9aa9d82fbbc1b1
如果您手动设置:```bash echo $DASHBOARD_TOKEN
### 更改密码
在登录状态下更改密码:
1. 转到 **安全** 页面
2. 输入您的 **当前密码**
3. 输入您的 **新密码**
4. 点击 **“更改密码”**
5. 所有其他会话将失效(您需要重新登录其他地方)
### 完全账户重置(核选项)
如果一切都被锁定且无法登录:
1. **SSH 进入您的服务器**
2. **删除凭据文件**: ```bash
rm /root/clawd/data/credentials.json
警告: 这会删除您的用户名、密码和 MFA 设置。内存文件和审计日志不受影响。
该仪表盘基于安全最佳实践构建:
data/audit.log*).bak 文件该仪表盘设计用于本地或 Tailscale 访问:
http://localhost:7000http://100.x.x.x:7000
DASHBOARD_ALLOW_HTTP=true)默认情况下,仪表盘阻止来自非本地 IP 的 HTTP 访问。例外情况:
对于其他网络,仪表盘需要 HTTPS 或 X-Forwarded-Proto: https 头部(来自反向代理)。
要允许所有 IP 使用 HTTP(不推荐):```bash DASHBOARD_ALLOW_HTTP=true node server.js
### 不要暴露于公共互联网
**此仪表板未针对公共互联网暴露进行加固。** 虽然它具有身份验证和速率限制,但它是为私有网络设计的。如果必须暴露它:
- 使用反向代理(nginx、Caddy)并启用 HTTPS
- 添加 IP 白名单
- 考虑使用 VPN(Tailscale、WireGuard)代替
## 🛠️ 故障排除
### "登录失败次数过多"
**问题:** 看到 "登录失败次数过多,请稍后再试。"
**解决方案:**
- 等待 **15 分钟** 让软锁定过期
- 重启服务以清除速率限制: ```bash
systemctl restart agent-dashboard
问题: 密码已更改,但无法登录。
解决方案: 使用 "忘记密码?" 流程,通过恢复令牌设置新密码。
问题: 6位TOTP验证码被拒绝。
解决方案:
问题: 浏览器显示空白页或连接错误。
解决方案:
应返回: ```json {"authenticated": false, "requiresRegistration": false}
### "需要HTTPS" 错误
**问题:** 浏览器显示“HTTPS required. Access via localhost, Tailscale, or enable HTTPS.”
**解决方案:**
- 通过 **localhost** 访问:`http://localhost:7000`
- 通过 **Tailscale** 访问:`http://100.x.x.x:7000`
- 在环境中设置 `DASHBOARD_ALLOW_HTTP=true`(不推荐): ```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
问题: 拉取新代码后,仪表盘显示空白页面。
解决方案:
Ctrl+Shift+R(Windows/Linux)或 Cmd+Shift+R(macOS)仪表盘暴露了一个 REST API 供程序化访问。所有端点都需要通过 Authorization: Bearer <sessionToken> 标头进行身份验证。
GET /api/auth/status — 检查身份验证状态POST /api/auth/login — 使用用户名/密码登录(如果启用了 MFA,则需 TOTP)POST /api/auth/register — 注册新账户(仅在无凭据时可用)POST /api/auth/reset-password — 使用恢复令牌重置密码所有其他端点都需要身份验证:
GET /api/config — 仪表盘配置GET /api/sessions — 列出所有代理会话GET /api/usage — 5 小时滚动窗口使用数据GET /api/costs — 按天、模型和会话统计的支出数据GET /api/system — 系统健康指标GET /api/memory-files — 列出内存文件GET /api/memory-file?path=<path> — 读取内存文件GET /api/key-files — 列出工作区文件(技能、配置)GET /api/key-file?path=<name> — 读取工作区文件POST /api/key-file — 写入工作区文件(带备份)GET /api/crons — 列出定时任务POST /api/cron/<id>/toggle — 启用/禁用定时任务POST /api/cron/<id>/run — 手动触发定时任务有关详细的请求/响应示例,请参阅本 README 的先前版本或浏览器中网络选项卡中的 API。
仪表盘将数据存储在工作区目录中:
凭据文件结构:```json { "username": "admin", "passwordHash": "pbkdf2_sha512$100000$...", "salt": "...", "mfaSecret": "BASE32SECRET..." // Only if MFA enabled }
## 🔗 OpenClaw 集成
仪表盘会自动检测:
- **会话**来自 `$OPENCLAW_DIR/agents/$AGENT_ID/sessions/`
- **Cron 任务**来自 `$OPENCLAW_DIR/cron/jobs.json`
- **记忆文件**来自 `$WORKSPACE_DIR/MEMORY.md`、`HEARTBEAT.md` 和 `memory/*.md`
- **Git 仓库**来自 `$WORKSPACE_DIR/projects/*/`
- **健康数据**保存到 `$WORKSPACE_DIR/data/health-history.json`
### 所需文件
当存在以下文件时,仪表盘效果最佳:
- `$WORKSPACE_DIR/MEMORY.md` - 智能体长期记忆
- `$WORKSPACE_DIR/HEARTBEAT.md` - 心跳任务列表
- `$WORKSPACE_DIR/memory/YYYY-MM-DD.md` - 每日记忆笔记
- `$WORKSPACE_DIR/scripts/scrape-claude-usage.sh` - Claude 使用量抓取器
- `$WORKSPACE_DIR/scripts/parse-claude-usage.py` - Claude 使用量解析器
- `$WORKSPACE_DIR/scripts/scrape-gemini-usage.sh` - Gemini 使用量抓取器
- `$WORKSPACE_DIR/scripts/parse-gemini-usage.py` - Gemini 使用量解析器
## ⌨️ 键盘快捷键
| 按键 | 操作 |
|-----|--------|
| `1` | 切换到概览 |
| `2` | 切换到会话 |
| `3` | 切换到成本 |
| `4` | 切换到速率限制 |
| `5` | 切换到记忆 |
| `6` | 切换到文件 |
| `7` | 切换到实时动态 |
| `8` | 切换到日志 |
| `9` | 切换到安全 |
| `Space` | 暂停/恢复动态(在实时动态页面时) |
| `/` | 聚焦搜索框 |
| `Esc` | 关闭模态框和覆盖层 |
| `?` | 显示键盘快捷键帮助 |
## 🤝 贡献
欢迎贡献!请遵循以下指南:
1. **复刻**仓库
2. **创建**功能分支(`git checkout -b feature/amazing-feature`)
3. **提交**更改(`git commit -m 'Add amazing feature'`)
4. **推送**至分支(`git push origin feature/amazing-feature`)
5. **开启**拉取请求
### 开发环境设置```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
export WORKSPACE_DIR=/path/to/test/workspace
node server.js
仪表盘无需构建步骤 — 编辑 server.js 或 index.html 后重新加载即可。
MIT 许可证 - 详见 LICENSE 文件。
由 Tuğcan Topaloğlu 用 ✨ 制作
jq(Docker 页面)、tmux + python3(Claude CLI 使用量抓取器)、docker(Docker 管理)GET /api/logs?service=<service>&lines=<N> — 获取系统日志POST /api/action/<action> — 运行快速操作(restart-openclaw、restart-dashboard 等)POST /api/claude-usage-scrape — 触发 Claude 用量抓取GET /api/claude-usage — 获取最近抓取的 Claude 用量POST /api/gemini-usage-scrape — 触发 Gemini 用量抓取GET /api/gemini-usage — 获取最近抓取的 Gemini 用量GET /api/live — 实时消息的服务器发送事件流GET /api/notifications?limit=<N> — 通知中心的审计日志事件POST /api/reauth — 对敏感页面(安全、配置)重新进行身份验证GET /api/openclaw-config — 读取 OpenClaw 配置文件PUT /api/openclaw-config — 保存配置,自动备份并重启网关GET /api/sys-security — 系统安全信息(UFW、端口、fail2ban、SSH 日志)GET /api/docker — 列出 Docker 容器、镜像和系统使用情况POST /api/docker/action — Docker 操作(启动/停止/重启容器、清理)GET /api/services — 列出 systemd 服务POST /api/services/action — 服务操作(仅限白名单服务的启动/停止/重启)| 文件 | 用途 |
|---|
data/credentials.json | 用户名 + 哈希密码 + MFA 密钥 |
data/audit.log | 安全审计追踪(10MB 时自动轮转) |
data/health-history.json | CPU/内存/温度/磁盘历史记录(用于迷你折线图) |
data/claude-usage.json | 最近抓取的 Claude 用量数据 |
data/gemini-usage.json | 最近抓取的 Gemini 用量数据 |