System Watchdog
Monitor system resources and flag wasteful or suspicious processes. Works standalone as a bash script — see openclaw.md for scheduled cron setup.
Standalone Usage
Run the check script directly — no OpenClaw required:
bash check.sh
Outputs a JSON object to stdout. Parse it however you like — pipe to jq, feed to an agent, integrate into your own monitoring stack.
Output Format
{
"suspicious": true,
"summary": {
"ram": "12.3/31.2 GB (39%)",
"swap": "0.5/8.0 GB (6%)",
"load": "1.2/0.8/0.6",
"cores": 8,
"disk": "120/256 GB (45%)"
},
"issues": [
{
"type": "high_ram",
"description": "claude (PID 1234) 4650MB RAM",
"details": { "pid": 1234, "name": "claude", "cpu_pct": 2.1, "mem_mb": 4650, "elapsed": "3d" }
}
],
"top_processes": [
{ "pid": 1234, "name": "claude", "cpu_pct": 2.1, "mem_mb": 4650, "elapsed": "3d" }
]
}
suspicious: true→ at least one issue exceeded a thresholdsuspicious: false→ system looks healthy
Thresholds
| Check | Threshold | Issue Type |
|---|---|---|
| Process RAM | > 4096 MB | high_ram |
| Process CPU | > 50% | high_cpu |
| Stale processes | Running > 2 days AND using > 100 MB or > 1% CPU | stale |
| Disk usage | > 80% on root mount | disk |
Common Offenders
claude/codex— AI coding agents left running for dayswhisper/whisper-server— speech-to-text servers consuming GPU/RAMpython/python3— runaway scripts or leaked processesnode— dev servers or builds that never stopped
Agent Workflow (for AI agents)
- Run
check.sh - Parse the JSON output
- If
suspiciousisfalse→ do nothing (no report needed) - If
suspiciousistrue→ format a concise report and notify the user
Suggested Report Format
⚠️ System Watchdog Report
📊 System: RAM 12.3/31.2 GB (39%) | Swap 0.5/8.0 GB (6%) | Load 1.2/0.8/0.6
💾 Disk: / 45% (120/256 GB)
🔴 Issues Found:
HIGH RAM — claude (PID 1234)
CPU: 2.1% | RAM: 4650 MB | Running: 3 days
→ Likely stale, safe to kill
💡 Suggested: kill 1234
Platform Notes
- macOS only —
check.shusessysctl,vm_stat, and macOSpsflags. It won't work on Linux without adaptation (replace withfree,/proc/meminfo, etc.). - Intermittent jq-style parse error — the script occasionally fails on first run due to a race in process scanning. Retry once before reporting failure.