[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"tool-tugcantopaloglu--openclaw-dashboard":3,"similar-tugcantopaloglu--openclaw-dashboard":119},{"id":4,"github_repo":5,"name":6,"description_en":7,"description_zh":8,"ai_summary_zh":8,"readme_en":9,"readme_zh":10,"quickstart_zh":11,"use_case_zh":12,"hero_image_url":13,"owner_login":14,"owner_name":15,"owner_avatar_url":16,"owner_bio":17,"owner_company":18,"owner_location":19,"owner_email":20,"owner_twitter":14,"owner_website":21,"owner_url":22,"languages":23,"stars":44,"forks":45,"last_commit_at":46,"license":20,"difficulty_score":47,"env_os":48,"env_gpu":49,"env_ram":50,"env_deps":51,"category_tags":59,"github_topics":63,"view_count":47,"oss_zip_url":20,"oss_zip_packed_at":20,"status":79,"created_at":80,"updated_at":81,"faqs":82,"releases":83},9010,"tugcantopaloglu\u002Fopenclaw-dashboard","openclaw-dashboard","🔐 Secure, real-time monitoring dashboard for OpenClaw AI agents. Auth, TOTP MFA, cost tracking, live feed, memory browser and more.","openclaw-dashboard 是一款专为 OpenClaw AI 智能体打造的实时安全监控面板。它旨在解决开发者在管理多个 AI 代理会话时面临的痛点，将分散的 API 调用、成本消耗、系统资源及日志信息整合至统一界面，让复杂的运维状态一目了然。\n\n这款工具特别适合正在使用 OpenClaw 构建自动化工作流的开发者、研究人员及技术运维人员。通过 openclaw-dashboard，用户不仅能实时追踪 Claude 和 Gemini 等模型的调用频率与详细账单，还能直接浏览智能体的记忆文件（如 MEMORY.md）和工作区配置，甚至在线编辑技能脚本。\n\n其技术亮点在于极高的安全性与深度集成能力：内置用户名密码认证及可选的 TOTP 双重验证，确保数据访问安全；支持 Docker 容器管理、Tailscale 网络状态查看以及 macOS 原生系统指标监控。此外，它还提供了活动热力图、连续活跃记录、浏览器通知提醒及丰富的键盘快捷键，配合自动刷新机制，让用户能高效掌控系统健康度与安全审计日志，是管理和优化 AI 代理集群的理想助手。","\u003Cimg width=\"2752\" height=\"1536\" alt=\"header\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_0c273989ea17.png\" \u002F>\n\n# OpenClaw Agent Dashboard\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-blue.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![Node.js](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode.js-v18+-green.svg)](https:\u002F\u002Fnodejs.org\u002F)\n[![OpenClaw](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOpenClaw-Compatible-purple.svg)](https:\u002F\u002Fopenclaw.dev)\n\nA beautiful, secure, real-time monitoring dashboard for OpenClaw agents. Track sessions, monitor API usage, view costs, manage memory files, and keep tabs on system health — all in one place.\n\n![Dashboard Preview](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_f92bed985310.png)\n\n## 📸 Screenshots\n\n| Overview | Sessions | Costs |\n|----------|----------|-------|\n| ![Overview](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_bdc416216a95.png) | ![Sessions](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_d0dda4641722.png) | ![Costs](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_f2842efe7b7b.png) |\n\n| Rate Limits | Live Feed | Logs |\n|-------------|-----------|------|\n| ![Limits](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_15fb947fe420.png) | ![Feed](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_ec7754cf6f53.png) | ![Logs](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_21d6f63532ce.png) |\n\n## ✨ Features\n\n- 🤖 **Session Management** - View all agent sessions with real-time activity status\n- 📊 **Rate Limit Monitoring** - Track Claude and Gemini API usage against rolling windows\n- 💰 **Cost Analysis** - Detailed spending breakdowns by model, session, and time period\n- ⚡ **Live Feed** - Real-time stream of agent messages across all sessions\n- 🧠 **Memory Viewer** - Browse and read agent memory files (MEMORY.md, HEARTBEAT.md, daily notes)\n- 📁 **Files Manager** - View and edit workspace files, skills, and configs with security hardening\n- 📈 **System Health** - CPU, RAM, disk, temperature monitoring with sparklines\n- 🔄 **Service Control** - Quick actions to restart OpenClaw, dashboard, or other services\n- 📋 **Log Viewer** - Real-time system logs with auto-refresh\n- ⏰ **Cron Management** - View, enable\u002Fdisable, and manually trigger cron jobs\n- 🌐 **Tailscale Integration** - View Tailscale status, IP, and connected peers\n- 🎯 **Activity Heatmap** - Visualize peak usage hours over the last 30 days\n- 🔥 **Streak Tracking** - Monitor daily activity streaks\n- 🔍 **Session Search & Filtering** - Filter by status, model, date range with live search\n- 🎨 **Dark\u002FLight Theme** - Toggle between dark and light modes with persistent preference\n- ⌨️ **Keyboard Shortcuts** - Navigate quickly with hotkeys (1-7, Space, \u002F, Esc, ?)\n- 📱 **Mobile Responsive** - Works on phones and tablets\n- 🔔 **Browser Notifications** - Get alerted when usage limits are approaching\n- 📊 **Timeline View** - Visual timeline of session activity\n- 💾 **Git Activity** - Track recent commits across your repos\n- 🎛️ **Claude Usage Scraper** - Fetch real usage data from Claude Code CLI\n- 🔷 **Gemini Usage Tracking** - Monitor Google Gemini model usage with per-model breakdowns\n- 🔀 **Provider Switching** - Toggle between Claude and Gemini usage on the overview card\n- 📊 **Per-Model Selector** - Choose which model\u002Fwindow to display (Opus, Sonnet, Pro, Flash, etc.)\n- 🔄 **Auto-Refresh** - Live data updates every 5 seconds\n- 🌟 **Lifetime Stats** - Total tokens, messages, cost since first session\n- 📈 **Health History** - 24-hour CPU, RAM, temperature, and disk usage sparklines\n- 🎯 **Quick Actions** - One-click system maintenance (updates, cleanup, restarts)\n- 🍎 **macOS Compatible** - Full support for macOS system stats, services, and memory reporting\n- 🛡️ **System Security Dashboard** - UFW rules, open ports, fail2ban, SSH logs, security audit (requires re-authentication)\n- ⚙️ **Config Editor** - Edit OpenClaw configuration with JSON validation, auto-backup, and gateway restart (requires re-authentication)\n- 🐳 **Docker Management** - View containers, images, system usage; start\u002Fstop\u002Frestart containers; prune unused resources\n- 🔔 **Notification Center** - Audit log event feed with unread badge counter (login, config changes, security events)\n- 🔐 **Username\u002FPassword Auth** - Secure registration with PBKDF2 password hashing\n- 🔑 **TOTP MFA** - Optional two-factor authentication (Google Authenticator compatible)\n- 💾 **Remember Me** - Session-only or 3-hour persistent login\n- 🛡️ **Security Hardened** - HSTS, CSP, rate limiting, timing-safe comparisons, audit logging\n- 📦 **Minimal Dependencies** - Pure Node.js, no database or npm packages required. Optional: `jq` (Docker page), `tmux` + `python3` (Claude CLI usage scraper), `docker` (Docker management)\n\n## 🚀 Quick Start\n\n```bash\n# Clone the repository\ngit clone https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard.git\ncd openclaw-dashboard\n\n# Set your OpenClaw workspace path (optional, auto-detects if not set)\nexport WORKSPACE_DIR=\u002Fpath\u002Fto\u002Fyour\u002Fopenclaw\u002Fworkspace\n\n# Start the dashboard\nnode server.js\n```\n\nVisit `http:\u002F\u002Flocalhost:7000` in your browser. On first visit, you'll see a **registration screen** where you create your username and password. After registration, log in with your credentials.\n\n## 📦 Installation\n\n### Prerequisites\n\n- **Node.js** v18 or higher (check with `node --version`)\n- **OpenClaw** installed and running\n- **Systemd** (optional, for service installation on Linux)\n\n#### Optional dependencies\n\n| Tool | Required for | Install |\n|------|-------------|---------|\n| `jq` | Docker management page | `sudo apt install jq` |\n| `tmux` | Claude CLI usage scraper | `sudo apt install tmux` |\n| `python3` | Claude CLI usage parser | Usually pre-installed |\n| `docker` | Docker management page | [docs.docker.com](https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F) |\n\n### Manual Install\n\n1. **Clone the repository**\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard.git\n   cd openclaw-dashboard\n   ```\n\n2. **Configure environment** (optional)\n   ```bash\n   export DASHBOARD_PORT=7000\n   export WORKSPACE_DIR=\u002Fpath\u002Fto\u002Fyour\u002Fworkspace\n   export OPENCLAW_DIR=$HOME\u002F.openclaw\n   export OPENCLAW_AGENT=main\n   ```\n\n3. **Start the server**\n   ```bash\n   node server.js\n   ```\n\n   The server will print:\n   ```\n   🚀 Dashboard running on http:\u002F\u002Flocalhost:7000\n   🔑 Recovery token: abc123def456...\n   ```\n\n   **Save the recovery token** — you'll need it if you forget your password.\n\n4. **Access the dashboard**\n   Open `http:\u002F\u002Flocalhost:7000` and register your account.\n\n### Systemd Service (install.sh)\n\nTo run the dashboard as a system service with auto-start and crash recovery:\n\n```bash\nsudo .\u002Finstall.sh\n```\n\nThis will:\n- Create `\u002Fetc\u002Fsystemd\u002Fsystem\u002Fagent-dashboard.service`\n- Create override config at `\u002Fetc\u002Fsystemd\u002Fsystem\u002Fagent-dashboard.service.d\u002Foverride.conf`\n- Enable and start the service\n- Set your workspace path and generate a recovery token\n\nView logs:\n```bash\njournalctl -u agent-dashboard -f\n```\n\n### Docker\n\n```bash\n# Build\ndocker build -t openclaw-dashboard .\n\n# Run\ndocker run -d \\\n  --name openclaw-dashboard \\\n  -p 3001:3001 \\\n  -e WORKSPACE_DIR=\u002Fapp\u002Fworkspace \\\n  -e DASHBOARD_ALLOW_HTTP=true \\\n  -v ~\u002F.openclaw:\u002Fhome\u002Fnode\u002F.openclaw:ro \\\n  -v ~\u002F.openclaw\u002Fworkspace:\u002Fapp\u002Fworkspace \\\n  openclaw-dashboard\n```\n\nFor Docker management page access, pass the Docker socket:\n\n```bash\ndocker run -d \\\n  --name openclaw-dashboard \\\n  -p 3001:3001 \\\n  -e WORKSPACE_DIR=\u002Fapp\u002Fworkspace \\\n  -e DASHBOARD_ALLOW_HTTP=true \\\n  -v ~\u002F.openclaw:\u002Fhome\u002Fnode\u002F.openclaw:ro \\\n  -v ~\u002F.openclaw\u002Fworkspace:\u002Fapp\u002Fworkspace \\\n  -v \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro \\\n  --group-add $(stat -c '%g' \u002Fvar\u002Frun\u002Fdocker.sock) \\\n  openclaw-dashboard\n```\n\n### Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `DASHBOARD_PORT` | Server port | `7000` |\n| `DASHBOARD_TOKEN` | Recovery token for password reset | Auto-generated on startup |\n| `WORKSPACE_DIR` | OpenClaw workspace path | `$OPENCLAW_WORKSPACE` or current directory |\n| `OPENCLAW_DIR` | OpenClaw config directory | `~\u002F.openclaw` |\n| `OPENCLAW_AGENT` | Agent ID to monitor | `main` |\n| `DASHBOARD_ALLOW_HTTP` | Allow HTTP from non-local IPs | `false` |\n\n**Examples:**\n\n```bash\n# Custom port\nDASHBOARD_PORT=8080 node server.js\n\n# Custom recovery token\nDASHBOARD_TOKEN=my_secret_token_12345 node server.js\n\n# Different workspace\nWORKSPACE_DIR=\u002Fmnt\u002Fdata\u002Fopenclaw node server.js\n```\n\n## 🔐 Authentication\n\nThe dashboard uses **username and password authentication** with secure server-side sessions.\n\n### First-Time Registration\n\n1. Visit the dashboard URL (e.g., `http:\u002F\u002Flocalhost:7000`)\n2. You'll see a registration screen\n3. Choose a username and password\n4. Click **Register**\n5. Log in with your new credentials\n\n### Login\n\n- Enter your **username** and **password**\n- Optionally check **\"Remember me\"** to stay logged in for 3 hours (uses `localStorage`)\n- Without \"Remember me\", your session lasts only until you close the browser (uses `sessionStorage`)\n\n### Password Security\n\n- **PBKDF2 hashing** — 100,000 iterations with SHA-512\n- **Random salt** — Unique per password\n- **Server-side sessions** — Passwords never stored in browser, only session tokens\n- **Timing-safe comparisons** — Prevents timing attacks on password verification\n\n### Rate Limiting\n\nTo prevent brute-force attacks:\n- **5 failed login attempts** → 15-minute soft lockout\n- **20 failed login attempts** → Hard lockout (requires service restart)\n- Rate limits are in-memory and reset when the service restarts\n\n## 🔑 Multi-Factor Authentication (MFA)\n\nAdd an extra layer of security with time-based one-time passwords (TOTP).\n\n### Enabling MFA\n\n1. **Log in** to the dashboard\n2. Go to the **Security** page (sidebar)\n3. Click **\"Enable MFA\"**\n4. A **QR code** appears — scan it with your authenticator app:\n   - Google Authenticator (iOS, Android)\n   - Authy (iOS, Android, Desktop)\n   - Microsoft Authenticator (iOS, Android)\n   - 1Password, Bitwarden, or any TOTP-compatible app\n5. Enter the **6-digit code** shown in your app to verify\n6. MFA is now active! 🎉\n\n### Using MFA\n\nOnce enabled, every login requires:\n1. Your **username** and **password** (as usual)\n2. A **6-digit TOTP code** from your authenticator app\n\n- Codes refresh every **30 seconds**\n- The dashboard accepts codes with **±1 window tolerance** for clock drift (30 seconds before\u002Fafter)\n\n### Disabling MFA\n\n1. Go to the **Security** page\n2. Click **\"Disable MFA\"**\n3. Enter your current **6-digit TOTP code** to confirm\n4. MFA is now disabled\n\n### Resetting MFA (if locked out)\n\nIf you lose access to your authenticator app (lost phone, uninstalled app, etc.):\n\n1. **SSH into your server**\n2. **Run this command** to clear the MFA secret:\n   ```bash\n   node -e \"const fs=require('fs');const c=JSON.parse(fs.readFileSync('\u002Froot\u002Fclawd\u002Fdata\u002Fcredentials.json','utf8'));delete c.mfaSecret;fs.writeFileSync('\u002Froot\u002Fclawd\u002Fdata\u002Fcredentials.json',JSON.stringify(c,null,2));console.log('MFA cleared')\"\n   ```\n3. **Restart the dashboard**:\n   ```bash\n   systemctl restart agent-dashboard\n   ```\n4. Log in with just your **username** and **password**\n5. Re-enable MFA with a new QR code\n\n**Important:** Adjust the path `\u002Froot\u002Fclawd\u002Fdata\u002Fcredentials.json` if your workspace is elsewhere.\n\n## 🔓 Password Recovery\n\n### Forgot Password?\n\nIf you forget your password:\n\n1. Click **\"Forgot password?\"** on the login screen\n2. Enter your **recovery token** (see \"Finding Your Recovery Token\" below)\n3. Set a **new password**\n4. Log in with your new password\n\n### Finding Your Recovery Token\n\nThe recovery token (`DASHBOARD_TOKEN`) is printed when the server starts. You can find it in several places:\n\n#### Check Server Startup Logs\n```bash\njournalctl -u agent-dashboard | grep \"Recovery token\"\n```\n\nOutput:\n```\n🔑 Recovery token: 3e6b91f352418b486a9aa9d82fbbc1b1\n```\n\n#### Check Systemd Override Config\n```bash\ncat \u002Fetc\u002Fsystemd\u002Fsystem\u002Fagent-dashboard.service.d\u002Foverride.conf\n```\n\nLook for:\n```ini\nEnvironment=DASHBOARD_TOKEN=3e6b91f352418b486a9aa9d82fbbc1b1\n```\n\n#### Check Environment Variable\nIf you set it manually:\n```bash\necho $DASHBOARD_TOKEN\n```\n\n### Changing Your Password\n\nTo change your password while logged in:\n\n1. Go to the **Security** page\n2. Enter your **current password**\n3. Enter your **new password**\n4. Click **\"Change Password\"**\n5. All other sessions are invalidated (you'll need to log in again elsewhere)\n\n### Complete Account Reset (Nuclear Option)\n\nIf everything is locked and you can't log in:\n\n1. **SSH into your server**\n2. **Delete the credentials file**:\n   ```bash\n   rm \u002Froot\u002Fclawd\u002Fdata\u002Fcredentials.json\n   ```\n3. **Restart the dashboard**:\n   ```bash\n   systemctl restart agent-dashboard\n   ```\n4. **Visit the dashboard** — the registration screen appears\n5. **Create a new account** from scratch\n\n**Warning:** This deletes your username, password, and MFA settings. Memory files and audit logs are not affected.\n\n## 🛡️ Security Features\n\nThe dashboard is built with security best practices:\n\n- **PBKDF2 password hashing** — 100,000 iterations, SHA-512, random salt\n- **Timing-safe comparisons** — Prevents timing attacks on token\u002Fpassword verification\n- **Server-side sessions** — Session tokens stored in memory, passwords never sent to browser\n- **Rate limiting** — Unified rate limiter for login attempts (5 soft \u002F 20 hard lockout)\n- **HTTPS enforcement** — HTTP blocked except from localhost and Tailscale (100.64.0.0\u002F10)\n- **Security headers**:\n  - **HSTS** — Force HTTPS on future visits\n  - **CSP** — Content Security Policy (no inline scripts, same-origin)\n  - **X-Frame-Options: DENY** — Prevent clickjacking\n  - **X-Content-Type-Options: nosniff** — Prevent MIME sniffing\n  - **X-XSS-Protection: 1; mode=block** — Legacy XSS protection\n- **Audit logging** — All auth events and destructive actions logged to `data\u002Faudit.log`\n- **CORS** — Same-origin only, no wildcard (`*`) allowed\n- **Input validation**:\n  - Service whitelist for logs and actions\n  - Path traversal protection for file access\n  - Payload size limits (1MB max)\n- **Automatic backups** — `.bak` files created before overwriting workspace files\n\n## 🌐 Network Security\n\nThe dashboard is designed for **local or Tailscale access**:\n\n### Recommended Access Methods\n\n1. **Localhost** — Access from the same machine: `http:\u002F\u002Flocalhost:7000`\n2. **Tailscale** — Access from your Tailscale network: `http:\u002F\u002F100.x.x.x:7000`\n   - Tailscale provides **automatic TLS encryption** (MagicDNS + HTTPS)\n   - Tailscale IPs (100.64.0.0 to 100.127.255.255) are exempt from HTTPS enforcement\n3. **Local network** — Access from LAN (use HTTPS or set `DASHBOARD_ALLOW_HTTP=true`)\n\n### HTTPS Enforcement\n\nBy default, the dashboard **blocks HTTP access** from non-local IPs. Exemptions:\n- **Localhost** (127.0.0.1, ::1)\n- **Tailscale IPs** (100.64.0.0\u002F10)\n\nFor other networks, the dashboard requires HTTPS or the `X-Forwarded-Proto: https` header (from a reverse proxy).\n\nTo allow HTTP from all IPs (not recommended):\n```bash\nDASHBOARD_ALLOW_HTTP=true node server.js\n```\n\n### Don't Expose to Public Internet\n\n**This dashboard is NOT hardened for public internet exposure.** While it has authentication and rate limiting, it's designed for private networks. If you must expose it:\n- Use a reverse proxy (nginx, Caddy) with HTTPS\n- Add IP allowlisting\n- Consider VPN (Tailscale, WireGuard) instead\n\n## 🛠️ Troubleshooting\n\n### \"Too many failed attempts\"\n\n**Problem:** You see \"Too many failed login attempts. Please try again later.\"\n\n**Solutions:**\n- Wait **15 minutes** for the soft lockout to expire\n- Restart the service to clear rate limits:\n  ```bash\n  systemctl restart agent-dashboard\n  ```\n- Rate limits are in-memory and reset on restart\n\n### Can't log in after password change\n\n**Problem:** Your password was changed but you can't log in.\n\n**Solution:** Use the **\"Forgot password?\"** flow with your recovery token to set a new password.\n\n### MFA code not working\n\n**Problem:** The 6-digit TOTP code is rejected.\n\n**Solutions:**\n- Ensure your **phone's clock is synchronized**:\n  - iOS: Settings → General → Date & Time → Set Automatically\n  - Android: Settings → System → Date & Time → Automatic date & time\n- TOTP codes have **±30 second tolerance** for clock drift\n- Try entering the **next code** (wait 30 seconds for it to refresh)\n- If still failing, **reset MFA via SSH** (see \"Resetting MFA\" section)\n\n### Dashboard not loading\n\n**Problem:** Browser shows a blank page or connection error.\n\n**Solutions:**\n1. **Check service status**:\n   ```bash\n   systemctl status agent-dashboard\n   ```\n2. **Check logs**:\n   ```bash\n   journalctl -u agent-dashboard -n 50\n   ```\n3. **Verify port**:\n   ```bash\n   curl http:\u002F\u002Flocalhost:7000\u002Fapi\u002Fauth\u002Fstatus\n   ```\n   Should return:\n   ```json\n   {\"authenticated\": false, \"requiresRegistration\": false}\n   ```\n\n### \"HTTPS required\" error\n\n**Problem:** Browser shows \"HTTPS required. Access via localhost, Tailscale, or enable HTTPS.\"\n\n**Solutions:**\n- Access via **localhost**: `http:\u002F\u002Flocalhost:7000`\n- Access via **Tailscale**: `http:\u002F\u002F100.x.x.x:7000`\n- Set `DASHBOARD_ALLOW_HTTP=true` in environment (not recommended):\n  ```bash\n  # Add to \u002Fetc\u002Fsystemd\u002Fsystem\u002Fagent-dashboard.service.d\u002Foverride.conf\n  Environment=DASHBOARD_ALLOW_HTTP=true\n  \n  # Reload and restart\n  systemctl daemon-reload\n  systemctl restart agent-dashboard\n  ```\n\n### Blank page after update\n\n**Problem:** Dashboard shows a blank page after pulling new code.\n\n**Solutions:**\n- **Hard refresh**: `Ctrl+Shift+R` (Windows\u002FLinux) or `Cmd+Shift+R` (macOS)\n- **Clear browser cache** for the dashboard URL\n- **Check browser console** (F12 → Console tab) for JavaScript errors\n\n## 📡 API Reference\n\nThe dashboard exposes a REST API for programmatic access. All endpoints require authentication via `Authorization: Bearer \u003CsessionToken>` header.\n\n### Unauthenticated Endpoints\n\n- `GET \u002Fapi\u002Fauth\u002Fstatus` — Check authentication status\n- `POST \u002Fapi\u002Fauth\u002Flogin` — Log in with username\u002Fpassword (+ TOTP if MFA enabled)\n- `POST \u002Fapi\u002Fauth\u002Fregister` — Register a new account (only if no credentials exist)\n- `POST \u002Fapi\u002Fauth\u002Freset-password` — Reset password with recovery token\n\n### Authenticated Endpoints\n\nAll other endpoints require authentication:\n\n- `GET \u002Fapi\u002Fconfig` — Dashboard configuration\n- `GET \u002Fapi\u002Fsessions` — List all agent sessions\n- `GET \u002Fapi\u002Fusage` — 5-hour rolling window usage data\n- `GET \u002Fapi\u002Fcosts` — Spending data by day, model, and session\n- `GET \u002Fapi\u002Fsystem` — System health metrics\n- `GET \u002Fapi\u002Fmemory-files` — List memory files\n- `GET \u002Fapi\u002Fmemory-file?path=\u003Cpath>` — Read a memory file\n- `GET \u002Fapi\u002Fkey-files` — List workspace files (skills, configs)\n- `GET \u002Fapi\u002Fkey-file?path=\u003Cname>` — Read a workspace file\n- `POST \u002Fapi\u002Fkey-file` — Write to a workspace file (with backup)\n- `GET \u002Fapi\u002Fcrons` — List cron jobs\n- `POST \u002Fapi\u002Fcron\u002F\u003Cid>\u002Ftoggle` — Enable\u002Fdisable a cron job\n- `POST \u002Fapi\u002Fcron\u002F\u003Cid>\u002Frun` — Manually trigger a cron job\n- `GET \u002Fapi\u002Flogs?service=\u003Cservice>&lines=\u003CN>` — Fetch system logs\n- `POST \u002Fapi\u002Faction\u002F\u003Caction>` — Run quick actions (restart-openclaw, restart-dashboard, etc.)\n- `POST \u002Fapi\u002Fclaude-usage-scrape` — Trigger Claude usage scrape\n- `GET \u002Fapi\u002Fclaude-usage` — Get last scraped Claude usage\n- `POST \u002Fapi\u002Fgemini-usage-scrape` — Trigger Gemini usage scrape\n- `GET \u002Fapi\u002Fgemini-usage` — Get last scraped Gemini usage\n- `GET \u002Fapi\u002Flive` — Server-Sent Events stream of real-time messages\n- `GET \u002Fapi\u002Fnotifications?limit=\u003CN>` — Audit log events for notification center\n- `POST \u002Fapi\u002Freauth` — Re-authenticate for sensitive pages (Security, Config)\n- `GET \u002Fapi\u002Fopenclaw-config` — Read OpenClaw configuration file\n- `PUT \u002Fapi\u002Fopenclaw-config` — Save config with auto-backup and gateway restart\n- `GET \u002Fapi\u002Fsys-security` — System security info (UFW, ports, fail2ban, SSH logs)\n- `GET \u002Fapi\u002Fdocker` — List Docker containers, images, and system usage\n- `POST \u002Fapi\u002Fdocker\u002Faction` — Docker actions (start\u002Fstop\u002Frestart container, prune)\n- `GET \u002Fapi\u002Fservices` — List systemd services\n- `POST \u002Fapi\u002Fservices\u002Faction` — Service actions (start\u002Fstop\u002Frestart, whitelisted only)\n\nFor detailed request\u002Fresponse examples, see the previous version of this README or explore the API in the browser's Network tab.\n\n## 📂 Data Files\n\nThe dashboard stores data in your workspace directory:\n\n| File | Purpose |\n|------|---------|\n| `data\u002Fcredentials.json` | Username + hashed password + MFA secret |\n| `data\u002Faudit.log` | Security audit trail (auto-rotates at 10MB) |\n| `data\u002Fhealth-history.json` | CPU\u002FRAM\u002FTemp\u002FDisk history for sparklines |\n| `data\u002Fclaude-usage.json` | Last scraped Claude usage data |\n| `data\u002Fgemini-usage.json` | Last scraped Gemini usage data |\n\n**Credentials file structure:**\n```json\n{\n  \"username\": \"admin\",\n  \"passwordHash\": \"pbkdf2_sha512$100000$...\",\n  \"salt\": \"...\",\n  \"mfaSecret\": \"BASE32SECRET...\" \u002F\u002F Only if MFA enabled\n}\n```\n\n## 🔗 OpenClaw Integration\n\nThe dashboard automatically detects:\n- **Sessions** from `$OPENCLAW_DIR\u002Fagents\u002F$AGENT_ID\u002Fsessions\u002F`\n- **Cron jobs** from `$OPENCLAW_DIR\u002Fcron\u002Fjobs.json`\n- **Memory files** from `$WORKSPACE_DIR\u002FMEMORY.md`, `HEARTBEAT.md`, and `memory\u002F*.md`\n- **Git repos** from `$WORKSPACE_DIR\u002Fprojects\u002F*\u002F`\n- **Health data** saved to `$WORKSPACE_DIR\u002Fdata\u002Fhealth-history.json`\n\n### Required Files\n\nThe dashboard works best when these files exist:\n- `$WORKSPACE_DIR\u002FMEMORY.md` - Agent long-term memory\n- `$WORKSPACE_DIR\u002FHEARTBEAT.md` - Heartbeat task list\n- `$WORKSPACE_DIR\u002Fmemory\u002FYYYY-MM-DD.md` - Daily memory notes\n- `$WORKSPACE_DIR\u002Fscripts\u002Fscrape-claude-usage.sh` - Claude usage scraper\n- `$WORKSPACE_DIR\u002Fscripts\u002Fparse-claude-usage.py` - Claude usage parser\n- `$WORKSPACE_DIR\u002Fscripts\u002Fscrape-gemini-usage.sh` - Gemini usage scraper\n- `$WORKSPACE_DIR\u002Fscripts\u002Fparse-gemini-usage.py` - Gemini usage parser\n\n## ⌨️ Keyboard Shortcuts\n\n| Key | Action |\n|-----|--------|\n| `1` | Switch to Overview |\n| `2` | Switch to Sessions |\n| `3` | Switch to Costs |\n| `4` | Switch to Rate Limits |\n| `5` | Switch to Memory |\n| `6` | Switch to Files |\n| `7` | Switch to Live Feed |\n| `8` | Switch to Logs |\n| `9` | Switch to Security |\n| `Space` | Pause\u002FResume Feed (when on Live Feed page) |\n| `\u002F` | Focus search box |\n| `Esc` | Close modals and overlays |\n| `?` | Show keyboard shortcuts help |\n\n## 🤝 Contributing\n\nContributions are welcome! Please follow these guidelines:\n\n1. **Fork** the repository\n2. **Create** a feature branch (`git checkout -b feature\u002Famazing-feature`)\n3. **Commit** your changes (`git commit -m 'Add amazing feature'`)\n4. **Push** to the branch (`git push origin feature\u002Famazing-feature`)\n5. **Open** a Pull Request\n\n### Development Setup\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard.git\ncd openclaw-dashboard\nexport WORKSPACE_DIR=\u002Fpath\u002Fto\u002Ftest\u002Fworkspace\nnode server.js\n```\n\nThe dashboard has no build step — edit `server.js` or `index.html` and reload.\n\n### Code Style\n\n- **No comments** in code (self-documenting)\n- **Brief and direct** function names\n\n## 📄 License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- Built with [Claude Code](https:\u002F\u002Fclaude.ai)\n- Built for [OpenClaw](https:\u002F\u002Fopenclaw.dev)\n- Inspired by modern dashboards (Grafana, Vercel, Railway)\n- Font: [Inter](https:\u002F\u002Frsms.me\u002Finter\u002F) & [JetBrains Mono](https:\u002F\u002Fwww.jetbrains.com\u002Flp\u002Fmono\u002F)\n\n## 📞 Support\n\n- **Issues:** [GitHub Issues](https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard\u002Fissues)\n- **Twitter:** [@tugcantopaloglu](https:\u002F\u002Ftwitter.com\u002Ftugcantopaloglu)\n\n---\n\nMade with ✨ by [Tuğcan Topaloğlu](https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu)\n","\u003Cimg width=\"2752\" height=\"1536\" alt=\"header\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_0c273989ea17.png\" \u002F>\n\n# OpenClaw 代理仪表盘\n\n[![许可证：MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-blue.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![Node.js](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode.js-v18+-green.svg)](https:\u002F\u002Fnodejs.org\u002F)\n[![OpenClaw](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOpenClaw-Compatible-purple.svg)](https:\u002F\u002Fopenclaw.dev)\n\n一款美观、安全且实时的 OpenClaw 代理监控仪表盘。在一个地方即可跟踪会话、监控 API 使用情况、查看费用、管理内存文件，并随时掌握系统健康状况。\n\n![仪表盘预览](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_f92bed985310.png)\n\n## 📸 截图\n\n| 概览 | 会话 | 费用 |\n|----------|----------|-------|\n| ![概览](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_bdc416216a95.png) | ![会话](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_d0dda4641722.png) | ![费用](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_f2842efe7b7b.png) |\n\n| 速率限制 | 实时消息流 | 日志 |\n|-------------|-----------|------|\n| ![限制](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_15fb947fe420.png) | ![消息流](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_ec7754cf6f53.png) | ![日志](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_readme_21d6f63532ce.png) |\n\n## ✨ 功能\n\n- 🤖 **会话管理** - 查看所有代理会话及其实时活动状态\n- 📊 **速率限制监控** - 跟踪 Claude 和 Gemini API 在滚动窗口内的使用情况\n- 💰 **费用分析** - 按模型、会话和时间段提供详细的支出明细\n- ⚡ **实时消息流** - 所有会话中代理消息的实时流\n- 🧠 **内存查看器** - 浏览并读取代理的内存文件（MEMORY.md、HEARTBEAT.md、每日笔记）\n- 📁 **文件管理器** - 查看和编辑工作区文件、技能及配置，同时加强安全性\n- 📈 **系统健康** - 通过小图表监控 CPU、内存、磁盘和温度\n- 🔄 **服务控制** - 快速重启 OpenClaw、仪表盘或其他服务\n- 📋 **日志查看器** - 实时系统日志，自动刷新\n- ⏰ **Cron 任务管理** - 查看、启用\u002F禁用以及手动触发 Cron 作业\n- 🌐 **Tailscale 集成** - 查看 Tailscale 状态、IP 地址及连接的对等节点\n- 🎯 **活动热力图** - 可视化过去 30 天内的高峰使用时段\n- 🔥 **连续活动追踪** - 监控每日活动连续天数\n- 🔍 **会话搜索与筛选** - 按状态、模型、日期范围进行筛选，并支持实时搜索\n- 🎨 **深色\u002F浅色主题** - 切换深色和浅色模式，偏好设置持久保存\n- ⌨️ **键盘快捷键** - 使用快捷键快速导航（1-7、空格、\u002F、Esc、?）\n- 📱 **移动设备响应式设计** - 支持手机和平板电脑\n- 🔔 **浏览器通知** - 当使用限额即将达到时发出提醒\n- 📊 **时间线视图** - 会话活动的可视化时间线\n- 💾 **Git 活动** - 跟踪您仓库中的最近提交记录\n- 🎛️ **Claude 使用数据抓取器** - 从 Claude Code CLI 获取实际使用数据\n- 🔷 **Gemini 使用跟踪** - 监控 Google Gemini 模型的使用情况，并按模型细分\n- 🔀 **提供商切换** - 在概览卡片上切换显示 Claude 或 Gemini 的使用情况\n- 📊 **按模型选择** - 选择要显示的模型或窗口（Opus、Sonnet、Pro、Flash 等）\n- 🔄 **自动刷新** - 每 5 秒更新一次实时数据\n- 🌟 **累计统计** - 自首次会话以来的总 token 数、消息数和费用\n- 📈 **健康历史** - 过去 24 小时内 CPU、内存、温度和磁盘使用的小图表\n- 🎯 **快速操作** - 一键执行系统维护（更新、清理、重启）\n- 🍎 **macOS 兼容** - 完全支持 macOS 系统统计、服务和内存报告\n- 🛡️ **系统安全仪表盘** - UFW 规则、开放端口、fail2ban、SSH 日志、安全审计（需重新认证）\n- ⚙️ **配置编辑器** - 使用 JSON 验证、自动备份和网关重启功能编辑 OpenClaw 配置（需重新认证）\n- 🐳 **Docker 管理** - 查看容器、镜像和系统使用情况；启动\u002F停止\u002F重启容器；清理未使用的资源\n- 🔔 **通知中心** - 审计日志事件流，带有未读消息标记（登录、配置更改、安全事件）\n- 🔐 **用户名\u002F密码认证** - 使用 PBKDF2 密码哈希进行安全注册\n- 🔑 **TOTP 双因素认证** - 可选的双因素认证（兼容 Google Authenticator）\n- 💾 **记住我** - 仅会话级或持续 3 小时的登录\n- 🛡️ **安全加固** - HSTS、CSP、速率限制、防时序比较、审计日志记录\n- 📦 **极简依赖** - 纯 Node.js，无需数据库或 npm 包。可选：`jq`（Docker 页面）、`tmux` + `python3`（Claude CLI 使用数据抓取器）、`docker`（Docker 管理）\n\n## 🚀 快速开始\n\n```bash\n# 克隆仓库\ngit clone https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard.git\ncd openclaw-dashboard\n\n# 设置您的 OpenClaw 工作区路径（可选，未设置时自动检测）\nexport WORKSPACE_DIR=\u002Fpath\u002Fto\u002Fyour\u002Fopenclaw\u002Fworkspace\n\n# 启动仪表盘\nnode server.js\n```\n\n在浏览器中访问 `http:\u002F\u002Flocalhost:7000`。首次访问时，您将看到一个**注册界面**，在此创建您的用户名和密码。注册完成后，请使用您的凭据登录。\n\n## 📦 安装\n\n### 前提条件\n\n- **Node.js** v18 或更高版本（可通过 `node --version` 检查）\n- **OpenClaw** 已安装并正在运行\n- **Systemd**（可选，用于在 Linux 上安装服务）\n\n#### 可选依赖项\n\n| 工具 | 用途 | 安装方法 |\n|------|-------------|---------|\n| `jq` | Docker 管理页面 | `sudo apt install jq` |\n| `tmux` | Claude CLI 使用数据抓取器 | `sudo apt install tmux` |\n| `python3` | Claude CLI 使用解析器 | 通常已预装 |\n| `docker` | Docker 管理页面 | [docs.docker.com](https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F) |\n\n### 手动安装\n\n1. **克隆仓库**\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard.git\n   cd openclaw-dashboard\n   ```\n\n2. **配置环境**（可选）\n   ```bash\n   export DASHBOARD_PORT=7000\n   export WORKSPACE_DIR=\u002Fpath\u002Fto\u002Fyour\u002Fworkspace\n   export OPENCLAW_DIR=$HOME\u002F.openclaw\n   export OPENCLAW_AGENT=main\n   ```\n\n3. **启动服务器**\n   ```bash\n   node server.js\n   ```\n\n   服务器将输出：\n   ```\n   🚀 仪表盘正在 http:\u002F\u002Flocalhost:7000 上运行\n   🔑 恢复令牌：abc123def456...\n   ```\n\n   **请保存恢复令牌** — 如果您忘记密码，将需要它。\n\n4. **访问仪表盘**\n   打开 `http:\u002F\u002Flocalhost:7000` 并注册您的账户。\n\n### Systemd 服务（install.sh）\n\n要将仪表盘作为系统服务运行，并实现自动启动和崩溃恢复：\n\n```bash\nsudo .\u002Finstall.sh\n```\n\n这将：\n- 创建 `\u002Fetc\u002Fsystemd\u002Fsystem\u002Fagent-dashboard.service`\n- 在 `\u002Fetc\u002Fsystemd\u002Fsystem\u002Fagent-dashboard.service.d\u002Foverride.conf` 中创建覆盖配置\n- 启用并启动服务\n- 设置您的工作区路径并生成恢复令牌\n\n查看日志：\n```bash\njournalctl -u agent-dashboard -f\n```\n\n### Docker\n\n```bash\n# 构建\ndocker build -t openclaw-dashboard .\n\n# 运行\ndocker run -d \\\n  --name openclaw-dashboard \\\n  -p 3001:3001 \\\n  -e WORKSPACE_DIR=\u002Fapp\u002Fworkspace \\\n  -e DASHBOARD_ALLOW_HTTP=true \\\n  -v ~\u002F.openclaw:\u002Fhome\u002Fnode\u002F.openclaw:ro \\\n  -v ~\u002F.openclaw\u002Fworkspace:\u002Fapp\u002Fworkspace \\\n  openclaw-dashboard\n```\n\n对于 Docker 管理页面的访问，需要传递 Docker 套接字：\n\n```bash\ndocker run -d \\\n  --name openclaw-dashboard \\\n  -p 3001:3001 \\\n  -e WORKSPACE_DIR=\u002Fapp\u002Fworkspace \\\n  -e DASHBOARD_ALLOW_HTTP=true \\\n  -v ~\u002F.openclaw:\u002Fhome\u002Fnode\u002F.openclaw:ro \\\n  -v ~\u002F.openclaw\u002Fworkspace:\u002Fapp\u002Fworkspace \\\n  -v \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro \\\n  --group-add $(stat -c '%g' \u002Fvar\u002Frun\u002Fdocker.sock) \\\n  openclaw-dashboard\n```\n\n### 环境变量\n\n| 变量 | 描述 | 默认值 |\n|----------|-------------|---------|\n| `DASHBOARD_PORT` | 服务器端口 | `7000` |\n| `DASHBOARD_TOKEN` | 密码重置用恢复令牌 | 启动时自动生成 |\n| `WORKSPACE_DIR` | OpenClaw 工作空间路径 | `$OPENCLAW_WORKSPACE` 或当前目录 |\n| `OPENCLAW_DIR` | OpenClaw 配置目录 | `~\u002F.openclaw` |\n| `OPENCLAW_AGENT` | 要监控的代理 ID | `main` |\n| `DASHBOARD_ALLOW_HTTP` | 允许非本地 IP 使用 HTTP 访问 | `false` |\n\n**示例：**\n\n```bash\n# 自定义端口\nDASHBOARD_PORT=8080 node server.js\n\n# 自定义恢复令牌\nDASHBOARD_TOKEN=my_secret_token_12345 node server.js\n\n# 不同的工作空间\nWORKSPACE_DIR=\u002Fmnt\u002Fdata\u002Fopenclaw node server.js\n```\n\n## 🔐 认证\n\n仪表板使用 **用户名和密码认证**，并采用安全的服务器端会话。\n\n### 首次注册\n\n1. 访问仪表板 URL（例如 `http:\u002F\u002Flocalhost:7000`）\n2. 您将看到注册界面\n3. 选择一个用户名和密码\n4. 单击 **注册**\n5. 使用新凭据登录\n\n### 登录\n\n- 输入您的 **用户名** 和 **密码**\n- 您可以选择勾选 **“记住我”**，以保持 3 小时的登录状态（使用 `localStorage`）\n- 如果不勾选“记住我”，您的会话仅在关闭浏览器时结束（使用 `sessionStorage`）\n\n### 密码安全\n\n- **PBKDF2 哈希算法** — 使用 SHA-512 进行 100,000 次迭代\n- **随机盐值** — 每个密码都不同\n- **服务器端会话** — 密码不会存储在浏览器中，只存储会话令牌\n- **时间安全比较** — 防止密码验证中的计时攻击\n\n### 速率限制\n\n为防止暴力破解攻击：\n- **5 次登录失败** → 15 分钟软锁定\n- **20 次登录失败** → 硬锁定（需重启服务）\n- 速率限制是内存中的，并在服务重启时重置\n\n## 🔑 多因素认证 (MFA)\n\n通过基于时间的一次性密码 (TOTP) 添加额外的安全层。\n\n### 启用 MFA\n\n1. **登录**到仪表板\n2. 在侧边栏进入 **安全** 页面\n3. 单击 **“启用 MFA”**\n4. 出现一个 **QR 代码** — 使用身份验证应用程序扫描它：\n   - Google Authenticator（iOS、Android）\n   - Authy（iOS、Android、桌面）\n   - Microsoft Authenticator（iOS、Android）\n   - 1Password、Bitwarden 或任何兼容 TOTP 的应用\n5. 输入应用程序中显示的 **6 位代码** 进行验证\n6. MFA 现已激活！🎉\n\n### 使用 MFA\n\n启用后，每次登录都需要：\n1. 您的 **用户名** 和 **密码**（如常）\n2. 来自身份验证应用程序的 **6 位 TOTP 代码**\n\n- 代码每 **30 秒** 刷新一次\n- 仪表板接受具有 **±1 窗口容忍度** 的代码，以应对时钟漂移（前后 30 秒）\n\n### 禁用 MFA\n\n1. 进入 **安全** 页面\n2. 单击 **“禁用 MFA”**\n3. 输入您当前的 **6 位 TOTP 代码** 进行确认\n4. MFA 现已禁用\n\n### 重置 MFA（如果被锁定）\n\n如果您丢失了身份验证应用程序的访问权限（手机丢失、应用程序卸载等）：\n\n1. **SSH 登录到您的服务器**\n2. **运行此命令** 清除 MFA 密钥：\n   ```bash\n   node -e \"const fs=require('fs');const c=JSON.parse(fs.readFileSync('\u002Froot\u002Fclawd\u002Fdata\u002Fcredentials.json','utf8'));delete c.mfaSecret;fs.writeFileSync('\u002Froot\u002Fclawd\u002Fdata\u002Fcredentials.json',JSON.stringify(c,null,2));console.log('MFA cleared')\"\n   ```\n3. **重启仪表板**：\n   ```bash\n   systemctl restart agent-dashboard\n   ```\n4. 使用您的 **用户名** 和 **密码** 登录\n5. 再次启用 MFA 并生成新的 QR 代码\n\n**重要提示：** 如果您的工作空间位于其他位置，请调整路径 `\u002Froot\u002Fclawd\u002Fdata\u002Fcredentials.json`。\n\n## 🔓 密码恢复\n\n### 忘记密码？\n\n如果您忘记了密码：\n\n1. 在登录界面点击 **“忘记密码？”**\n2. 输入您的 **恢复令牌**（见下文“查找您的恢复令牌”）\n3. 设置一个 **新密码**\n4. 使用新密码登录\n\n### 查找您的恢复令牌\n\n恢复令牌 (`DASHBOARD_TOKEN`) 会在服务器启动时打印出来。您可以在以下几个地方找到它：\n\n#### 检查服务器启动日志\n```bash\njournalctl -u agent-dashboard | grep \"Recovery token\"\n```\n\n输出：\n```\n🔑 Recovery token: 3e6b91f352418b486a9aa9d82fbbc1b1\n```\n\n#### 检查 Systemd 覆盖配置文件\n```bash\ncat \u002Fetc\u002Fsystemd\u002Fsystem\u002Fagent-dashboard.service.d\u002Foverride.conf\n```\n\n查找：\n```ini\nEnvironment=DASHBOARD_TOKEN=3e6b91f352418b486a9aa9d82fbbc1b1\n```\n\n#### 检查环境变量\n如果您手动设置了它：\n```bash\necho $DASHBOARD_TOKEN\n```\n\n### 更改密码\n\n登录后更改密码：\n\n1. 进入 **安全** 页面\n2. 输入您的 **当前密码**\n3. 输入您的 **新密码**\n4. 点击 **“更改密码”**\n5. 所有其他会话将被无效化（您需要在其他地方重新登录）\n\n### 完全重置账户（终极方法）\n\n如果所有内容都被锁定且无法登录：\n\n1. **SSH 登录到您的服务器**\n2. **删除凭据文件**：\n   ```bash\n   rm \u002Froot\u002Fclawd\u002Fdata\u002Fcredentials.json\n   ```\n3. **重启仪表板**：\n   ```bash\n   systemctl restart agent-dashboard\n   ```\n4. **访问仪表板** — 注册界面将出现\n5. **从头创建新账户**\n\n**警告：** 这将删除您的用户名、密码和 MFA 设置。内存文件和审计日志不受影响。\n\n## 🛡️ 安全特性\n\n仪表板按照安全最佳实践构建：\n\n- **PBKDF2 密码哈希** — 100,000 次迭代，SHA-512，随机盐\n- **时间安全比较** — 防止对令牌\u002F密码验证的计时攻击\n- **服务器端会话** — 会话令牌存储在内存中，密码绝不会发送到浏览器\n- **速率限制** — 统一的登录尝试速率限制器（5 次软锁定 \u002F 20 次硬锁定）\n- **强制 HTTPS** — 除本地主机和 Tailscale（100.64.0.0\u002F10）外，阻止 HTTP 访问\n- **安全头**：\n  - **HSTS** — 强制未来访问使用 HTTPS\n  - **CSP** — 内容安全策略（无内联脚本，同源策略）\n  - **X-Frame-Options: DENY** — 防止点击劫持\n  - **X-Content-Type-Options: nosniff** — 防止 MIME 类型嗅探\n  - **X-XSS-Protection: 1; mode=block** — 旧版 XSS 防护\n- **审计日志** — 所有认证事件和破坏性操作均记录到 `data\u002Faudit.log`\n- **CORS** — 仅允许同源请求，不允许通配符 (`*`)\n- **输入验证**：\n  - 服务白名单用于日志和操作\n  - 文件访问路径遍历防护\n  - 负载大小限制（最大 1MB）\n- **自动备份** — 在覆盖工作区文件之前创建 `.bak` 文件\n\n## 🌐 网络安全\n\n仪表板专为 **本地或 Tailscale 访问** 设计：\n\n### 推荐访问方式\n\n1. **本地主机** — 从同一台机器访问：`http:\u002F\u002Flocalhost:7000`\n2. **Tailscale** — 从您的 Tailscale 网络访问：`http:\u002F\u002F100.x.x.x:7000`\n   - Tailscale 提供 **自动 TLS 加密**（MagicDNS + HTTPS）\n   - Tailscale IP 地址范围（100.64.0.0 至 100.127.255.255）免于 HTTPS 强制\n3. **本地网络** — 从局域网访问（需使用 HTTPS 或设置 `DASHBOARD_ALLOW_HTTP=true`）\n\n### HTTPS 强制\n\n默认情况下，仪表板会 **阻止非本地 IP 的 HTTP 访问**。例外情况：\n- **本地主机**（127.0.0.1、::1）\n- **Tailscale IP**（100.64.0.0\u002F10）\n\n对于其他网络，仪表板要求使用 HTTPS，或通过反向代理传递 `X-Forwarded-Proto: https` 头。\n\n如需允许所有 IP 使用 HTTP（不推荐）：\n```bash\nDASHBOARD_ALLOW_HTTP=true node server.js\n```\n\n### 请勿暴露于公共互联网\n\n**此仪表板并未针对公共互联网暴露进行加固。** 尽管具备身份验证和速率限制功能，但它专为私有网络设计。如果您必须将其暴露：\n- 使用反向代理（nginx、Caddy）并启用 HTTPS\n- 添加 IP 白名单\n- 考虑使用 VPN（Tailscale、WireGuard）替代\n\n## 🛠️ 故障排除\n\n### “登录尝试次数过多”\n\n**问题：** 显示“登录尝试次数过多，请稍后再试。”\n\n**解决方案：**\n- 等待 **15 分钟**，软锁定期满后重试\n- 重启服务以清除速率限制：\n  ```bash\n  systemctl restart agent-dashboard\n  ```\n- 速率限制存储在内存中，重启后会重置\n\n### 更改密码后无法登录\n\n**问题：** 密码已更改但仍无法登录。\n\n**解决方案：** 使用“忘记密码？”流程，通过恢复令牌设置新密码。\n\n### MFA 代码无效\n\n**问题：** 6 位 TOTP 代码被拒绝。\n\n**解决方案：**\n- 确保您的 **手机时钟同步**：\n  - iOS：设置 → 通用 → 日期与时间 → 自动设置\n  - Android：设置 → 系统 → 日期与时间 → 自动日期与时间\n- TOTP 代码对时钟漂移的容忍度为 **±30 秒**\n- 尝试输入 **下一个代码**（等待 30 秒刷新）\n- 如果仍然失败，可通过 **SSH 重置 MFA**（参见“重置 MFA”部分）\n\n### 仪表板无法加载\n\n**问题：** 浏览器显示空白页面或连接错误。\n\n**解决方案：**\n1. **检查服务状态**：\n   ```bash\n   systemctl status agent-dashboard\n   ```\n2. **查看日志**：\n   ```bash\n   journalctl -u agent-dashboard -n 50\n   ```\n3. **验证端口**：\n   ```bash\n   curl http:\u002F\u002Flocalhost:7000\u002Fapi\u002Fauth\u002Fstatus\n   ```\n   应返回：\n   ```json\n   {\"authenticated\": false, \"requiresRegistration\": false}\n   ```\n\n### “需要 HTTPS”错误\n\n**问题：** 浏览器显示“需要 HTTPS。请通过本地主机、Tailscale 访问，或启用 HTTPS。”\n\n**解决方案：**\n- 通过 **本地主机** 访问：`http:\u002F\u002Flocalhost:7000`\n- 通过 **Tailscale** 访问：`http:\u002F\u002F100.x.x.x:7000`\n- 在环境变量中设置 `DASHBOARD_ALLOW_HTTP=true`（不推荐）：\n  ```bash\n  # 添加到 \u002Fetc\u002Fsystemd\u002Fsystem\u002Fagent-dashboard.service.d\u002Foverride.conf\n  Environment=DASHBOARD_ALLOW_HTTP=true\n  \n  # 重新加载并重启\n  systemctl daemon-reload\n  systemctl restart agent-dashboard\n  ```\n\n### 更新后出现空白页\n\n**问题：** 拉取新代码后，仪表板显示空白页。\n\n**解决方案：**\n- **硬刷新**：`Ctrl+Shift+R`（Windows\u002FLinux）或 `Cmd+Shift+R`（macOS）\n- **清除浏览器缓存**，特别是针对仪表板 URL\n- **检查浏览器控制台**（F12 → 控制台选项卡），查看是否有 JavaScript 错误\n\n## 📡 API 参考\n\n仪表板提供 REST API，支持程序化访问。所有端点均需通过 `Authorization: Bearer \u003CsessionToken>` 头进行身份验证。\n\n### 未认证端点\n\n- `GET \u002Fapi\u002Fauth\u002Fstatus` — 检查认证状态\n- `POST \u002Fapi\u002Fauth\u002Flogin` — 使用用户名\u002F密码登录（若启用 MFA，则需提供 TOTP）\n- `POST \u002Fapi\u002Fauth\u002Fregister` — 注册新账户（仅在无凭据时可用）\n- `POST \u002Fapi\u002Fauth\u002Freset-password` — 使用恢复令牌重置密码\n\n### 已认证的端点\n\n所有其他端点都需要认证：\n\n- `GET \u002Fapi\u002Fconfig` — 仪表板配置\n- `GET \u002Fapi\u002Fsessions` — 列出所有代理会话\n- `GET \u002Fapi\u002Fusage` — 5小时滚动窗口的使用数据\n- `GET \u002Fapi\u002Fcosts` — 按天、模型和会话划分的支出数据\n- `GET \u002Fapi\u002Fsystem` — 系统健康指标\n- `GET \u002Fapi\u002Fmemory-files` — 列出记忆文件\n- `GET \u002Fapi\u002Fmemory-file?path=\u003Cpath>` — 读取一个记忆文件\n- `GET \u002Fapi\u002Fkey-files` — 列出工作区文件（技能、配置）\n- `GET \u002Fapi\u002Fkey-file?path=\u003Cname>` — 读取一个工作区文件\n- `POST \u002Fapi\u002Fkey-file` — 写入工作区文件（带备份）\n- `GET \u002Fapi\u002Fcrons` — 列出定时任务\n- `POST \u002Fapi\u002Fcron\u002F\u003Cid>\u002Ftoggle` — 启用\u002F禁用一个定时任务\n- `POST \u002Fapi\u002Fcron\u002F\u003Cid>\u002Frun` — 手动触发一个定时任务\n- `GET \u002Fapi\u002Flogs?service=\u003Cservice>&lines=\u003CN>` — 获取系统日志\n- `POST \u002Fapi\u002Faction\u002F\u003Caction>` — 运行快速操作（重启OpenClaw、重启仪表板等）\n- `POST \u002Fapi\u002Fclaude-usage-scrape` — 触发Claude使用情况抓取\n- `GET \u002Fapi\u002Fclaude-usage` — 获取最近一次抓取的Claude使用情况\n- `POST \u002Fapi\u002Fgemini-usage-scrape` — 触发Gemini使用情况抓取\n- `GET \u002Fapi\u002Fgemini-usage` — 获取最近一次抓取的Gemini使用情况\n- `GET \u002Fapi\u002Flive` — 服务器发送事件流，提供实时消息\n- `GET \u002Fapi\u002Fnotifications?limit=\u003CN>` — 通知中心的审计日志事件\n- `POST \u002Fapi\u002Freauth` — 为敏感页面重新认证（安全、配置）\n- `GET \u002Fapi\u002Fopenclaw-config` — 读取OpenClaw配置文件\n- `PUT \u002Fapi\u002Fopenclaw-config` — 保存配置，并自动备份及重启网关\n- `GET \u002Fapi\u002Fsys-security` — 系统安全信息（UFW、端口、fail2ban、SSH日志）\n- `GET \u002Fapi\u002Fdocker` — 列出Docker容器、镜像及系统使用情况\n- `POST \u002Fapi\u002Fdocker\u002Faction` — Docker相关操作（启动\u002F停止\u002F重启容器、清理）\n- `GET \u002Fapi\u002Fservices` — 列出systemd服务\n- `POST \u002Fapi\u002Fservices\u002Faction` — 服务相关操作（仅限白名单内的服务进行启动\u002F停止\u002F重启）\n\n有关详细的请求\u002F响应示例，请参阅本README的旧版本，或在浏览器的网络选项卡中探索API。\n\n## 📂 数据文件\n\n仪表板将数据存储在您的工作区目录中：\n\n| 文件 | 用途 |\n|------|---------|\n| `data\u002Fcredentials.json` | 用户名 + 哈希密码 + MFA密钥 |\n| `data\u002Faudit.log` | 安全审计日志（达到10MB时自动轮转） |\n| `data\u002Fhealth-history.json` | CPU\u002FRAM\u002F温度\u002F磁盘历史数据，用于显示折线图 |\n| `data\u002Fclaude-usage.json` | 最近抓取的Claude使用数据 |\n| `data\u002Fgemini-usage.json` | 最近抓取的Gemini使用数据 |\n\n**凭据文件结构：**\n```json\n{\n  \"username\": \"admin\",\n  \"passwordHash\": \"pbkdf2_sha512$100000$...\",\n  \"salt\": \"...\",\n  \"mfaSecret\": \"BASE32SECRET...\" \u002F\u002F 仅在启用MFA时存在\n}\n```\n\n## 🔗 OpenClaw集成\n\n仪表板会自动检测：\n- `$OPENCLAW_DIR\u002Fagents\u002F$AGENT_ID\u002Fsessions\u002F` 中的 **会话**\n- `$OPENCLAW_DIR\u002Fcron\u002Fjobs.json` 中的 **定时任务**\n- `$WORKSPACE_DIR\u002FMEMORY.md`、`HEARTBEAT.md` 和 `memory\u002F*.md` 中的 **记忆文件**\n- `$WORKSPACE_DIR\u002Fprojects\u002F*\u002F` 中的 **Git仓库**\n- `$WORKSPACE_DIR\u002Fdata\u002Fhealth-history.json` 中保存的 **健康数据**\n\n### 必需文件\n\n为了使仪表板发挥最佳效果，以下文件应存在：\n- `$WORKSPACE_DIR\u002FMEMORY.md` - 代理长期记忆\n- `$WORKSPACE_DIR\u002FHEARTBEAT.md` - 心跳任务列表\n- `$WORKSPACE_DIR\u002Fmemory\u002FYYYY-MM-DD.md` - 每日记忆笔记\n- `$WORKSPACE_DIR\u002Fscripts\u002Fscrape-claude-usage.sh` - Claude使用情况抓取脚本\n- `$WORKSPACE_DIR\u002Fscripts\u002Fparse-claude-usage.py` - Claude使用情况解析脚本\n- `$WORKSPACE_DIR\u002Fscripts\u002Fscrape-gemini-usage.sh` - Gemini使用情况抓取脚本\n- `$WORKSPACE_DIR\u002Fscripts\u002Fparse-gemini-usage.py` - Gemini使用情况解析脚本\n\n## ⌨️ 键盘快捷键\n\n| 键 | 功能 |\n|-----|--------|\n| `1` | 切换到概览页 |\n| `2` | 切换到会话页 |\n| `3` | 切换到成本页 |\n| `4` | 切换到速率限制页 |\n| `5` | 切换到记忆页 |\n| `6` | 切换到文件页 |\n| `7` | 切换到实时信息流页 |\n| `8` | 切换到日志页 |\n| `9` | 切换到安全页 |\n| `Space` | 暂停\u002F恢复信息流（在实时信息流页面时） |\n| `\u002F` | 聚焦搜索框 |\n| `Esc` | 关闭模态框和覆盖层 |\n| `?` | 显示键盘快捷键帮助 |\n\n## 🤝 贡献\n\n欢迎贡献！请遵循以下指南：\n\n1. **Fork** 仓库\n2. **创建** 一个特性分支 (`git checkout -b feature\u002Famazing-feature`)\n3. **提交** 您的更改 (`git commit -m '添加超赞功能'`)\n4. **推送** 到该分支 (`git push origin feature\u002Famazing-feature`)\n5. **打开** 一个Pull Request\n\n### 开发环境设置\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard.git\ncd openclaw-dashboard\nexport WORKSPACE_DIR=\u002Fpath\u002Fto\u002Ftest\u002Fworkspace\nnode server.js\n```\n\n仪表板无需构建步骤——直接编辑 `server.js` 或 `index.html` 并刷新即可。\n\n### 代码风格\n\n- 代码中 **无注释**（自解释性）\n- 函数名称 **简短且直接**\n\n## 📄 许可证\n\nMIT许可证——详情请参阅 [LICENSE](LICENSE) 文件。\n\n## 🙏 致谢\n\n- 使用 [Claude Code](https:\u002F\u002Fclaude.ai) 构建\n- 专为 [OpenClaw](https:\u002F\u002Fopenclaw.dev) 打造\n- 灵感来源于现代仪表板（Grafana、Vercel、Railway）\n- 字体：[Inter](https:\u002F\u002Frsms.me\u002Finter\u002F) 和 [JetBrains Mono](https:\u002F\u002Fwww.jetbrains.com\u002Flp\u002Fmono\u002F)\n\n## 📞 支持\n\n- **问题反馈：** [GitHub Issues](https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard\u002Fissues)\n- **Twitter：** [@tugcantopaloglu](https:\u002F\u002Ftwitter.com\u002Ftugcantopaloglu)\n\n---\n\n由 [Tuğcan Topaloğlu](https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu) 以热情打造","# OpenClaw Dashboard 快速上手指南\n\nOpenClaw Dashboard 是一个美观、安全且实时的监控面板，专为 OpenClaw Agent 设计。它支持会话追踪、API 用量监控、成本分析、内存文件管理及系统健康检查等功能。\n\n## 环境准备\n\n### 系统要求\n- **Node.js**: v18 或更高版本\n- **OpenClaw**: 需已安装并正在运行\n- **操作系统**: Linux (推荐), macOS (完全支持)\n\n### 前置依赖 (可选)\n以下工具用于增强特定功能，非必须但推荐安装：\n\n| 工具 | 用途 | 安装命令 (Ubuntu\u002FDebian) |\n| :--- | :--- | :--- |\n| `jq` | Docker 管理页面解析 | `sudo apt install jq` |\n| `tmux` | Claude CLI 用量抓取 | `sudo apt install tmux` |\n| `python3` | Claude CLI 解析器 | 通常预装 |\n| `docker` | Docker 容器管理 | 参考 [Docker 官方文档](https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F) |\n\n> **提示**：国内用户可使用国内镜像源加速 Node.js 和 apt 包的安装。\n\n## 安装步骤\n\n### 方法一：手动安装 (推荐)\n\n1. **克隆仓库**\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard.git\n   cd openclaw-dashboard\n   ```\n\n2. **配置环境变量 (可选)**\n   如果不设置，系统将尝试自动检测路径。\n   ```bash\n   export DASHBOARD_PORT=7000\n   export WORKSPACE_DIR=\u002Fpath\u002Fto\u002Fyour\u002Fworkspace\n   export OPENCLAW_DIR=$HOME\u002F.openclaw\n   export OPENCLAW_AGENT=main\n   ```\n\n3. **启动服务**\n   ```bash\n   node server.js\n   ```\n   > **重要**：启动后终端会打印 `Recovery token` (恢复令牌)，请务必保存，用于忘记密码时找回。\n\n### 方法二：作为系统服务安装 (Linux)\n\n若需开机自启和崩溃自动恢复，可使用安装脚本：\n\n```bash\nsudo .\u002Finstall.sh\n```\n该脚本会自动创建 systemd 服务文件并启动服务。查看日志命令：\n```bash\njournalctl -u agent-dashboard -f\n```\n\n### 方法三：Docker 部署\n\n```bash\n# 构建镜像\ndocker build -t openclaw-dashboard .\n\n# 运行容器\ndocker run -d \\\n  --name openclaw-dashboard \\\n  -p 3001:3001 \\\n  -e WORKSPACE_DIR=\u002Fapp\u002Fworkspace \\\n  -e DASHBOARD_ALLOW_HTTP=true \\\n  -v ~\u002F.openclaw:\u002Fhome\u002Fnode\u002F.openclaw:ro \\\n  -v ~\u002F.openclaw\u002Fworkspace:\u002Fapp\u002Fworkspace \\\n  openclaw-dashboard\n```\n*如需管理 Docker 容器，需额外挂载 `\u002Fvar\u002Frun\u002Fdocker.sock`。*\n\n## 基本使用\n\n1. **访问面板**\n   打开浏览器访问 `http:\u002F\u002Flocalhost:7000` (或你设置的端口)。\n\n2. **注册账号**\n   首次访问将显示注册页面。输入用户名和密码完成注册。\n   - 密码采用 PBKDF2 (SHA-512) 加密存储，安全可靠。\n   - 勾选 \"Remember me\" 可保持 3 小时登录状态。\n\n3. **开始监控**\n   登录后即可看到概览仪表盘，包含：\n   - **Sessions**: 实时查看 Agent 会话状态。\n   - **Costs**: 按模型和时间段分析 API 花费。\n   - **Live Feed**: 实时流式显示 Agent 消息。\n   - **System Health**: CPU、内存、磁盘及温度监控。\n\n4. **高级功能**\n   - **MFA 双因素认证**: 在 \"Security\" 页面扫描 QR 码启用 (支持 Google Authenticator 等)。\n   - **快捷键**: 使用数字键 `1-7` 切换视图，`\u002F` 搜索，`?` 查看帮助。\n   - **主题切换**: 支持深色\u002F浅色模式自动或手动切换。\n\n> **注意**：若忘记密码，请使用启动时生成的 `Recovery token` 在登录页点击 \"Forgot password?\" 进行重置。","某 AI 开发团队正在同时运行多个 OpenClaw 智能体处理复杂的代码重构与数据分析任务，急需掌握实时运行状态。\n\n### 没有 openclaw-dashboard 时\n- **成本黑盒**：无法实时查看 Claude 和 Gemini 的 API 消耗，往往等到月底账单出炉才发现某个测试会话因死循环产生了巨额费用。\n- **故障排查困难**：当智能体行为异常时，开发者只能手动 SSH 登录服务器翻阅分散的日志文件和内存记录（如 MEMORY.md），定位问题耗时极长。\n- **资源监控盲区**：缺乏对服务器 CPU、内存及温度的直观监控，常在硬件过热导致服务宕机后才被动响应。\n- **安全管控缺失**：团队成员共用账号或无二次验证，配置修改无审计记录，存在误操作或未经授权的访问风险。\n\n### 使用 openclaw-dashboard 后\n- **成本透明可控**：通过“成本分析”面板实时追踪各模型、各会话的费用明细，并设置用量阈值触发浏览器通知，瞬间拦截异常支出。\n- **全链路可观测**：利用“实时动态流”和“内存浏览器”直接查看智能体的思考过程与文件读写，结合一键搜索过滤，将故障定位时间从小时级缩短至分钟级。\n- **系统健康可视**：仪表盘首页即展示带有历史趋势图的系统资源状态（CPU\u002FRAM\u002F温度），配合看门狗功能可在资源耗尽前自动重启服务。\n- **企业级安全防护**：启用 TOTP 双重认证与细粒度权限控制，所有配置变更与安全事件均记入“通知中心”审计日志，确保操作可追溯。\n\nopenclaw-dashboard 将原本分散、黑盒的代理运维工作转化为可视化、可管控的实时指挥中枢，让团队能安心专注于智能体逻辑而非底层监控。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftugcantopaloglu_openclaw-dashboard_f92bed98.png","tugcantopaloglu","Tuğcan Topaloğlu","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Ftugcantopaloglu_fecaf706.jpg","Expert System Engineer. Loves creating new experiences, coding and working on cybersecurity!","Turkish Aerospace Industries","Turkey",null,"https:\u002F\u002Ftugcan.dev","https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu",[24,28,32,36,40],{"name":25,"color":26,"percentage":27},"HTML","#e34c26",67.8,{"name":29,"color":30,"percentage":31},"JavaScript","#f1e05a",29.5,{"name":33,"color":34,"percentage":35},"Shell","#89e051",2.1,{"name":37,"color":38,"percentage":39},"Python","#3572A5",0.5,{"name":41,"color":42,"percentage":43},"Dockerfile","#384d54",0.1,635,112,"2026-04-17T15:23:20",2,"Linux, macOS","无 GPU 需求","未说明",{"notes":52,"python":53,"dependencies":54},"该工具是基于 Node.js 的纯前端\u002F后端仪表盘，无需数据库或 npm 包。核心功能仅需 Node.js v18+。可选功能依赖：安装 jq 以使用 Docker 管理页面；安装 tmux 和 python3 以抓取 Claude CLI 的使用数据；安装 docker 以管理容器。支持通过 systemd 作为服务运行或通过 Docker 部署。首次访问需注册用户名和密码，支持 TOTP 双重认证。","非核心运行依赖（仅用于可选的 Claude CLI 使用量解析功能，通常系统预装即可）",[55,56,57,58],"Node.js v18+","jq (可选，用于 Docker 管理)","tmux (可选，用于 Claude CLI 抓取)","docker (可选，用于容器管理)",[60,61,62],"Agent","开发框架","语言模型",[64,65,66,67,68,69,70,71,72,73,74,75,76,77,78],"ai-agents","claude","dashboard","devops","llm","mfa","monitoring","nodejs","openclaw","raspberry-pi","real-time","security","self-hosted","sse","totp","ready","2026-03-27T02:49:30.150509","2026-04-18T17:07:37.968771",[],[84,89,94,99,104,109,114],{"id":85,"version":86,"summary_zh":87,"released_at":88},323787,"v3.0.0","## 🎨 深色\u002F浅色主题\n- 一键切换按钮（右上角）\n- 针对所有 UI 元素的全面 CSS 覆盖\n- 通过 localStorage 持久化用户偏好设置\n\n## 🛡️ 系统安全仪表盘\n- 新增“Sys Security”页面：显示 UFW 规则、开放端口、Fail2ban、SSH 日志及 OpenClaw 审计信息\n- 访问敏感页面前需二次认证（密码 + TOTP）\n\n## ⚙️ 配置编辑器\n- 可直接在仪表盘中编辑 `openclaw.json`\n- 客户端 JSON 格式校验、自动创建 `.bak` 备份文件、重启网关服务\n- 需进行二次认证\n\n## 🐳 Docker 管理\n- 容器列表，支持启动、停止、重启操作\n- 镜像列表，显示仓库、标签和大小\n- 可清理已停止的容器和未使用的镜像\n- 仅允许白名单内的操作，并验证容器 ID\n\n## 🔔 通知中心\n- 带有审计日志事件的通知气泡下拉菜单\n- 未读消息徽章计数器（每 30 秒轮询一次）\n- 为登录、配置变更、安全事件、Docker 操作等事件添加图标\n\n## 📊 系统监控改进\n- 在仪表盘中新增温度和磁盘使用情况折线图\n- 健康历史记录现可追踪温度和磁盘使用情况（保留 24 小时数据）\n- 故障计数器标签优化，更清晰易读\n\n## 🔧 UI\u002FUX\n- 内存文件列表默认折叠至 5 条，提供“显示全部”按钮\n- 移除“DISK TREND”标签\n\n## 🔧 基础设施\n- 将 Claude CLI 使用情况抓取脚本纳入代码库\n- 修复 Claude CLI v2.1.69 的 `\u002Fusage` 命令\n- 更新 `install.sh` 脚本，支持密码认证并增加依赖检查\n- 更新 README，新增功能介绍、API 端点说明以及可选依赖项表格\n\n## 🆕 新增 API 端点\n- `POST \u002Fapi\u002Freauth` — 敏感页面二次认证接口\n- `GET \u002Fapi\u002Fopenclaw-config` — 获取 OpenClaw 配置\n- `PUT \u002Fapi\u002Fopenclaw-config` — 保存配置并重启服务\n- `GET \u002Fapi\u002Fsys-security` — 系统安全信息\n- `GET \u002Fapi\u002Fdocker` — Docker 容器及镜像信息\n- `POST \u002Fapi\u002Fdocker\u002Faction` — Docker 容器操作接口\n- `GET \u002Fapi\u002Fservices` — Systemd 服务列表\n- `POST \u002Fapi\u002Fservices\u002Faction` — Systemd 服务控制接口\n- `GET \u002Fapi\u002Fnotifications` — 审计日志事件\n\n## ⬆️ 升级步骤\n```bash\ngit pull origin main\nsudo apt install jq tmux  # 可选依赖\nsystemctl restart agent-dashboard\n# 清除浏览器缓存：Ctrl+Shift+R\n```\n\n**完整更新日志：** https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard\u002Fcompare\u002Fv2.4.0...v3.0.0","2026-03-05T09:37:46",{"id":90,"version":91,"summary_zh":92,"released_at":93},323788,"v2.4.0","# OpenClaw 控制台 v2.4.0 - 发布说明\n\n## 社区贡献\n\n共有七份来自外部贡献者的拉取请求已合并，这些请求经过安全审查、后续修复和加固处理。\n\n---\n\n## 新功能\n\n### 多提供商成本估算（PR #15，由 @Mariano215 提交）\n- 动态定价引擎取代了仅针对 Opus\u002FSonnet 的硬编码成本\n- 支持 Opus 4.5\u002F4.6、Sonnet 4.5\u002F4.6、Haiku、GPT-4o\u002F4.1、Gemini 3 Pro\u002FFlash、Grok 等模型\n- 成本明细中现已包含缓存读写成本\n- 可通过 `data\u002Fmodel_pricing_usd_per_million.json` 文件覆盖定价\n- 各提供商之间的模型名称标准化\n\n### 健康检查端点（PR #9，由 @Mariano215 提交）\n- `GET \u002Fapi\u002Fhealth` 在无需认证的情况下返回服务状态和运行时长\n- 适用于负载均衡器和监控检查\n\n### 可配置的认证目录（PR #12，由 @Mariano215 提交）\n- 使用 `DASHBOARD_AUTH_DIR` 环境变量将凭据存储在数据目录之外\n\n### 服务检测改进（PR #13，由 @Mariano215 提交）\n- 针对非 root 权限部署，新增用户级 systemd 和 pgrep 备用方案\n- 对 pgrep 模式和 systemctl 单元名称进行了输入校验\n\n### 日志多单元查找功能（PR #14，由 @Mariano215 提交）\n- 尝试多个单元名称（openclaw、openclaw-gateway、openclaw-webhooks）以及用户和系统范围\n- 在输出头部显示日志来源\n\n### 错误修复\n- 处理 API 基础路径推导中的 `\u002Findex.html` 请求（PR #10，由 @Mariano215 提交）\n- 加强认证处理器对代理返回非 JSON 格式错误响应的防护能力（PR #11，由 @Mariano215 提交）\n\n---\n\n## 安全性\n- 对 pgrep 模式和 systemctl 单元名称进行正则表达式验证\n- 保留服务白名单以用于日志检索\n- 所有动态值在执行 shell 命令前均经过严格 sanitization 处理\n\n## 贡献者\n- @Mariano215 — 7 份 PR（成本估算、健康检查端点、服务检测、认证加固）","2026-02-25T17:26:15",{"id":95,"version":96,"summary_zh":97,"released_at":98},323789,"v2.3.0","# OpenClaw 控制面板 v2.3.0 - 发行说明\n\n## Gemini 使用情况跟踪与提供商切换\n\n全面监控 Gemini CLI 的使用情况，同时支持 Claude，且可细化到每个模型级别。\n\n**仓库:** https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard\n\n---\n\n## 新增功能\n\n### Gemini 使用情况集成\n- 新增 `\u002Fapi\u002Fgemini-usage` 和 `\u002Fapi\u002Fgemini-usage-scrape` 端点\n- 通过 tmux 抓取 Gemini CLI 的 `\u002Fstats session` 数据（与 Claude 采用相同模式）\n- 在速率限制页面新增专门的 **Gemini 使用情况（Google）** 区域，包含按模型划分的进度条\n\n### 提供商切换（概览卡片）\n- 概览使用情况卡片上新增 **Claude | Gemini** 切换按钮\n- 选择结果会持久化保存在 localStorage 中，跨会话生效\n- 自动刷新和手动刷新都会尊重当前选中的提供商\n\n### 按模型选择器\n- 下拉菜单用于选择在概览中显示哪个模型或窗口\n  - **Claude:** 5 小时会话、每周（全部）、每周（Sonnet）\n  - **Gemini:** gemini-3-pro-preview、gemini-2.5-pro、gemini-2.5-flash 等\n- 模型选择会按提供商分别保存（切换回时会记住上次的选择）\n\n### 累计重置统计（PR #6，由 @adrteh 贡献）\n- 统计数据会在会话重置后继续保留（`.jsonl.reset.*` 文件）\n- 提供了辅助函数 `isSessionFile()` 和 `extractSessionId()`，以确保文件匹配的一致性\n\n### 安全性\n- 对动态模型名称和重置标签进行了 XSS 防护处理\n- 使用正则表达式对模型名称进行验证\n- 对数值进行 `parseFloat` 处理，并将其限定在合理范围内\n\n---\n\n## 贡献者\n- @adrteh — 累计重置统计功能","2026-02-19T06:42:04",{"id":100,"version":101,"summary_zh":102,"released_at":103},323790,"v2.2.0","# OpenClaw 控制面板 v2.2.0 - 发布说明\n\n## 累计会话统计\n\n现在，统计信息会在会话重置后持续保留——使用 `\u002Fnew` 或 `\u002Freset` 时不再丢失历史记录。\n\n**仓库:** https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard\n\n---\n\n## 变更内容\n\n### 累计重置会话统计（PR #6，由 @adrteh 提交）\n- 控制面板现在在所有统计计算中包含 `.jsonl.reset.*` 文件\n- 令牌数量、每日花费、活跃连续天数、费用趋势以及速率限制历史都会在会话重置后继续累积\n- 实时监听器会实时检测并处理重置文件\n\n### 代码质量改进\n- 提取了 `isSessionFile()` 和 `extractSessionId()` 辅助函数——为跨 8 处调用点的会话文件匹配提供单一可信源\n- 修复了重置文件的会话 ID 解析问题（`file.replace('.jsonl', '')` 会导致生成如 `session.reset.1234` 的无效 ID）\n- 修复了监听器回调不一致的问题——`fs.watch` 现在会匹配重置文件，而不仅仅是活动的 `.jsonl` 文件\n\n---\n\n## 贡献者\n- @adrteh — 累计重置统计功能","2026-02-18T11:19:09",{"id":105,"version":106,"summary_zh":107,"released_at":108},323791,"v2.1.0","# OpenClaw 控制台 v2.1.0 - 发行说明\n\n## 兼容性与错误修复\n\n重点改进了 iOS\u002FiPad 的兼容性、安全修复以及侧边栏的美化。\n\n**仓库地址:** https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard\n\n---\n\n## 变更内容\n\n### iOS & Safari 兼容性\n- 将可选链操作符 (`?.`) 替换为安全的空值检查，以适配较旧版本的 Safari\u002FWebKit 引擎\n- 在服务器端和 `authFetch` 中添加了 `Cache-Control: no-store` 头，防止 iOS Safari 提供过时的控制台数据\n- 通过显式空值保护修复了信息流搜索输入框和筛选元素的问题\n- 修复了 Safari 浏览器中快速操作按钮的事件处理问题\n\n### 安全修复\n- 修复了 `fetchLogs` 在未携带认证令牌的情况下调用 `\u002Fapi\u002Flogs` 的问题 — 现在会正确使用 Bearer 令牌\n- 撤销了不安全的 CORS 回退机制，该机制原本会允许任意跨域请求\n- 将硬编码的凭证\u002F审计路径替换为 `path.join(dataDir, ...)`，以提高在不同部署环境下的可移植性\n\n### UI 改进\n- 侧边栏图标在折叠状态下现已居中显示\n- 导航文本改用 `display: none` 而非 `opacity: 0`，以避免布局抖动\n- 侧边栏悬停过渡效果在折叠与展开状态之间更加平滑\n\n### 其他\n- 注册接口的错误日志记录得到优化\n- 修复了注册接口中 `ip` 变量的作用域问题\n\n---\n\n## 贡献者\n\n感谢为本次发布提交 Pull Request 的社区成员：\n\n- **@Mariano215** — iOS Safari 兼容性修复（可选链、缓存头、事件处理）\n- **@davelutztx** — 日志认证令牌修复、可移植的数据路径、注册错误处理\n\n---\n\n## 升级步骤\n\n拉取最新代码并重启服务：\n\n```bash\ncd \u002Fpath\u002Fto\u002Fagent-dashboard\ngit pull\n# 重启您的服务\n```\n\n无需执行数据库迁移或修改配置文件。\n","2026-02-17T06:19:15",{"id":110,"version":111,"summary_zh":112,"released_at":113},323792,"v2.0.0","# OpenClaw 控制台 v2.0.0 - 发行说明\n\n## 🔐 认证与安全加固\n\n重大安全更新 — 控制台现需进行身份验证，并包含企业级安全特性。\n\n**仓库:** https:\u002F\u002Fgithub.com\u002Ftugcantopaloglu\u002Fopenclaw-dashboard\n\n---\n\n## 🆕 新功能\n\n### 🔑 用户名\u002F密码认证\n- 首次访问时显示注册界面以创建账户\n- 密码使用 PBKDF2 算法进行哈希处理（10 万次迭代、SHA-512 哈希、随机盐）\n- 服务器端会话令牌 — 密码不会存储在浏览器中\n- “记住我”选项：3 小时持久化会话，而非仅限于浏览器会话\n- 凭证存储在 `data\u002Fcredentials.json` 文件中\n\n### 🛡️ 多因素认证 (TOTP)\n- 可选的多因素认证，支持任何 TOTP 应用程序（Google Authenticator、Authy 等）\n- 通过扫描二维码轻松设置\n- 6 位数字验证码，允许 ±1 的时间窗口以应对时钟漂移\n- 在启用多因素认证之前需要先进行 TOTP 验证\n- 可在控制台的安全页面中启用或禁用\n\n### 🔒 密码恢复\n- 使用恢复令牌 (`DASHBOARD_TOKEN` 环境变量) 的“忘记密码？”流程\n- 可在安全页面更改密码（会失效其他会话）\n- 如有需要，可通过 SSH 完成完整的账户重置\n\n### 🌐 HTTPS 强制\n- 非本地主机连接禁止使用 HTTP\n- 允许本地开发时使用 localhost\n- 可通过 `DASHBOARD_ALLOW_HTTP=true` 环境变量覆盖此设置\n- 与 Tailscale HTTPS 代理无缝兼容\n\n## 🛡️ 安全加固\n\n### 关键修复\n- **安全的时间比较** — 使用 `crypto.timingSafeEqual` 防止定时攻击\n- **IP 欺骗防护** — 仅使用 `req.socket.remoteAddress`（不信任 X-Forwarded-For 头部）\n- **无令牌泄露** — 登录响应不会暴露敏感数据\n\n### 安全头信息（所有响应）\n- `Strict-Transport-Security: max-age=31536000; includeSubDomains`\n- 明确指令的 `Content-Security-Policy`\n- `X-Frame-Options: DENY`\n- `X-Content-Type-Options: nosniff`\n- `X-XSS-Protection: 1; mode=block`\n- `Referrer-Policy: strict-origin-when-cross-origin`\n\n### 速率限制\n- 统一的速率限制器，仅针对登录尝试\n- 5 次失败尝试 → 15 分钟软锁定\n- 20 次失败尝试 → 15 分钟硬锁定\n- 锁定时间从最后一次失败尝试开始计算\n\n### 其他\n- **CORS** — 仅同源策略，无通配符\n- **OPTIONS 预检请求** 处理（返回 204 状态码）\n- **审计日志记录** — 所有认证事件及破坏性操作均记录至 `data\u002Faudit.log` 文件（达到 10MB 自动轮转）\n- **原子日志轮转** — 使用临时文件并重命名\n- **作用域内的 tmux 杀死** — 仅杀死 claude-persistent 会话，而非全部 tmux 会话\n- **CSP 文档说明** — 解释了为何单文件架构需要 `unsafe-inline`\n\n## 🔧 基础设施\n\n### 反向代理支持\n- 自动检测 API 基础路径，适用于子路径部署（例如 `\u002Fdashboard`）\n- 支持 Tailscale serve、nginx 及其他反向代理\n\n### 环境变量\n\n| 变量 | 默认值 | 描述 |\n|----------|---------|-------------|\n| `DASHBOARD_PORT` | `7000` | 服务器端口 |\n| `DASHBOARD_TOKEN` | Au","2026-02-16T07:20:34",{"id":115,"version":116,"summary_zh":117,"released_at":118},323793,"v1.1.0","## 新增功能\n\n### 📁 文件管理器\n- 查看和编辑工作区文件（AGENTS.md、SOUL.md、TOOLS.md 等）\n- 浏览技能文件和配置\n- 支持原地编辑并提供保存\u002F取消选项\n- 安全加固：\n  - 基于白名单的文件访问（无路径遍历风险）\n  - POST 请求体大小限制为 1MB\n  - 系统配置文件设置为只读保护\n  - 每次保存前自动创建 .bak 备份\n  - API 中不暴露绝对路径\n\n### 🍎 macOS 兼容性\n- 通过 vm_stat 获取准确的内存统计信息（修复 Mac 上 RAM 显示为 100% 的问题）\n- 使用 osx-cpu-temp 获取 CPU 温度\n- 实现 macOS 磁盘使用情况报告\n- 通过 launchctl 和 curl 探针检测服务状态\n- 对不可用指标显示“N\u002FA”\n- 在非 Linux 系统上优雅地跳过 journalctl 调用\n\n### 🔒 安全性\n- 配置文件（openclaw-config.json、.service）在 API 中设为只读\n- 所有 POST 端点均进行输入类型校验\n- 使用原子写入方式（先写入临时文件再重命名），防止数据损坏\n\n## 贡献者\n- @WSJUSA — macOS 兼容性\n- @davelutztx — 文件管理模块（由维护者进一步加固了安全性）","2026-02-16T05:39:05",[120,130,138,146,156,164],{"id":121,"name":72,"github_repo":122,"description_zh":123,"stars":124,"difficulty_score":125,"last_commit_at":126,"category_tags":127,"status":79},4358,"openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[60,61,128,129],"图像","数据工具",{"id":131,"name":132,"github_repo":133,"description_zh":134,"stars":135,"difficulty_score":125,"last_commit_at":136,"category_tags":137,"status":79},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[61,128,60],{"id":139,"name":140,"github_repo":141,"description_zh":142,"stars":143,"difficulty_score":47,"last_commit_at":144,"category_tags":145,"status":79},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",159636,"2026-04-17T23:33:34",[61,60,62],{"id":147,"name":148,"github_repo":149,"description_zh":150,"stars":151,"difficulty_score":152,"last_commit_at":153,"category_tags":154,"status":79},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[60,155],"插件",{"id":157,"name":158,"github_repo":159,"description_zh":160,"stars":161,"difficulty_score":47,"last_commit_at":162,"category_tags":163,"status":79},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[61,128,60],{"id":165,"name":166,"github_repo":167,"description_zh":168,"stars":169,"difficulty_score":47,"last_commit_at":170,"category_tags":171,"status":79},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[155,60,128,61]]