fix(gh-monitor): replace OpenClaw cron with launchd — zero polling token cost

This commit is contained in:
2026-03-15 17:30:10 -04:00
parent 9f23deb309
commit 82f0cdb413
2 changed files with 47 additions and 22 deletions

View File

@@ -140,24 +140,49 @@ Function:
Entry point: `if __name__ == "__main__": main()`
### STEP 10 — OpenClaw cron job
### STEP 10 — macOS LaunchAgent
Register via OpenClaw cron API:
```json
{
"name": "gh-monitor",
"schedule": { "kind": "every", "everyMs": 300000 },
"payload": {
"kind": "systemEvent",
"text": "Run GitHub PR monitor: cd ~/Projects/hans-tools/gh-monitor && python3 poll.py"
},
"sessionTarget": "main"
}
Create `~/Library/LaunchAgents/com.hans.gh-monitor.plist`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.hans.gh-monitor</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python3</string>
<string>/Users/hansheinemann/Projects/hans-tools/gh-monitor/poll.py</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>StandardOutPath</key>
<string>/Users/hansheinemann/Projects/hans-tools/gh-monitor/state/stdout.log</string>
<key>StandardErrorPath</key>
<string>/Users/hansheinemann/Projects/hans-tools/gh-monitor/state/stderr.log</string>
<key>RunAtLoad</key>
<false/>
</dict>
</plist>
```
Note: this is a systemEvent (not agentTurn) so it injects into the main session
and Hans handles it inline. If this proves noisy, switch to agentTurn in isolated
session.
Load with:
```bash
launchctl load ~/Library/LaunchAgents/com.hans.gh-monitor.plist
```
Pause/resume:
```bash
launchctl unload ~/Library/LaunchAgents/com.hans.gh-monitor.plist
launchctl load ~/Library/LaunchAgents/com.hans.gh-monitor.plist
```
**Token cost:** Zero during polling. The main session is only woken when
`poll.py` calls `openclaw system event` — i.e. only when real PR activity
is detected.
---