OpenClaw · Skill
Bot Status API Test
A configurable HTTP service that exposes your OpenClaw bot's operational status as JSON. Designed for dashboard integration, monitoring, and transparency.
Install
Start with the primary install command. Alternate entrypoints are included below for ClawHub and OpenClaw CLI users.
Primary command
clawhub install suspect80/bot-status-api-testClawHub installer
npx clawhub@latest install suspect80/bot-status-api-testOpenClaw CLI
openclaw skills install suspect80/bot-status-api-testDirect OpenClaw install
openclaw install suspect80/bot-status-api-testWhat this skill does
A configurable HTTP service that exposes your OpenClaw bot's operational status as JSON. Designed for dashboard integration, monitoring, and transparency.
Why it matters
Zero npm dependencies means no install step, no lockfile churn, and no version conflicts that come with typical monitoring stacks.
Typical use cases
- Checking bot uptime from a monitoring dashboard
- Verifying external service health before a deployment
- Viewing active cron jobs without opening config files
- Tracking CPU and RAM usage during heavy agent workloads
- Building a status page for a self-hosted OpenClaw agent
Source instructions
Bot Status API
A configurable HTTP service that exposes your OpenClaw bot's operational status as JSON. Designed for dashboard integration, monitoring, and transparency.
What It Provides
- Bot Core: Online status, model, context usage, uptime, heartbeat timing
- Services: Health checks for any HTTP endpoint, CLI tool, or file path
- Email: Unread counts from any email provider (himalaya, gog, etc.)
- Cron Jobs: Reads directly from OpenClaw's
cron/jobs.json - Docker: Container health via Portainer API
- Dev Servers: Auto-detects running dev servers by process grep
- Skills: Lists installed and available OpenClaw skills
- System: CPU, RAM, Disk metrics from
/proc
Setup
1. Copy the service files
Copy server.js, collectors/, and package.json to your desired location.
2. Create config.json
Copy config.example.json to config.json and customize:
{
"port": 3200,
"name": "MyBot",
"workspace": "/path/to/.openclaw/workspace",
"openclawHome": "/path/to/.openclaw",
"cache": { "ttlMs": 10000 },
"model": "claude-sonnet-4-20250514",
"skillDirs": ["/path/to/openclaw/skills"],
"services": [
{ "name": "myservice", "type": "http", "url": "http://...", "healthPath": "/health" }
]
}
Service Check Types
| Type | Description | Config |
|---|---|---|
http | Fetch URL, check HTTP 200 | url, healthPath, method, headers, body |
command | Run shell command, check exit 0 | command, timeout |
file-exists | Check path exists | path |
3. Run
node server.js
4. Persist (systemd user service)
# ~/.config/systemd/user/bot-status.service
[Unit]
Description=Bot Status API
After=network.target
[Service]
Type=simple
WorkingDirectory=/path/to/bot-status
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=5
Environment=PORT=3200
Environment=HOME=/home/youruser
Environment=PATH=/usr/local/bin:/usr/bin:/bin
[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now bot-status
loginctl enable-linger $USER # survive logout
5. Context/Vitals from OpenClaw
The bot should periodically write vitals to heartbeat-state.json in its workspace:
{
"vitals": {
"contextPercent": 62,
"contextUsed": 124000,
"contextMax": 200000,
"model": "claude-opus-4-5",
"updatedAt": 1770304500000
}
}
Add this to your HEARTBEAT.md so the bot updates it each heartbeat cycle.
Endpoints
| Endpoint | Description |
|---|---|
GET /status | Full status JSON (cached) |
GET /health | Simple {"status":"ok"} |
Architecture
- Zero dependencies — Node.js built-ins only (
http,fs,child_process) - Non-blocking — All shell commands use async
exec, neverexecSync - Background refresh — Cache refreshes on interval, requests always served from cache instantly (~10ms)
- Config-driven — Everything in
config.json, no hardcoded values