openclaw-daily-ops

Daily cost reporting + session hygiene for OpenClaw deployments. Tracks per-session API spend, shows 7-day trend, and wipes zombie sessions >24h old to prevent context snowball. Zero personal info — configure with your own paths and Discord channel. Runs nightly via cron.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "openclaw-daily-ops" with this command: npx skills add zylcold/openclaw-daily-ops

OpenClaw Daily Ops

Two tasks in one nightly cron: know what you spent, kill what's dead.

  • Parses all OpenClaw session JSONL files → computes today's API cost per session
  • Posts a clean cost report to Discord with 7-day trend
  • Wipes sessions older than 24h with >1MB context (zombie killer)
  • Logs everything to state/cost-log.json and state/session-reset-log.json

Zero AI credits spent — pure Python + one Discord message.


Setup

1. Configure

Copy config.example.json to config.json and fill in your values:

cp config.example.json config.json

Edit config.json:

{
  "sessions_dir": "~/.openclaw/agents/main/sessions",
  "workspace_dir": "~/.openclaw/workspace",
  "discord_webhook": "https://discord.com/api/webhooks/YOUR/WEBHOOK",
  "discord_user_id": "YOUR_DISCORD_USER_ID",
  "channel_names": {
    "channel:YOUR_CHANNEL_ID": "#your-channel-name"
  },
  "zombie_min_age_hours": 24,
  "zombie_min_size_mb": 1,
  "alert_high_cost": 50,
  "alert_low_cost": 10,
  "timezone_offset_hours": -6
}

How to get a Discord webhook:

  1. Go to your Discord channel → Edit Channel → Integrations → Webhooks → New Webhook
  2. Copy the webhook URL

How to get your Discord user ID:

  1. Enable Developer Mode in Discord (Settings → Advanced → Developer Mode)
  2. Right-click your username → Copy User ID

Channel names (optional): Map your OpenClaw channel session keys to human-readable names for the report. Find session keys in ~/.openclaw/agents/main/sessions/sessions.json.

2. Test it

python3 scripts/cost_report.py --config config.json --dry-run

This prints the report without posting to Discord or writing logs.

3. Set up the cron

Add a nightly OpenClaw cron job. In your OpenClaw config or via CLI:

Schedule: 0 21 * * * (9 PM daily — adjust to your timezone)
Model: haiku (cost report is simple, no need for a heavy model)
Payload: Read /path/to/openclaw-daily-ops/SKILL.md and follow it exactly.

Or run it as a system cron:

# Add to crontab -e
0 21 * * * python3 /path/to/openclaw-daily-ops/scripts/cost_report.py --config /path/to/config.json >> /path/to/cost_report.log 2>&1

What the Report Looks Like

📊 Daily Cost Report — Mar 9, 2026

💰 Total: $4.21 · 8.3M tokens

By Session:
🔴 #general — $2.45 · 4.1M tok
🟡 #posting — $1.32 · 2.8M tok
🟢 heartbeat — $0.44 · 1.4M tok

7-day trend: $12 → $8 → $6 → $5 → $4 → $4 → $4

✅ UNDER BUDGET
🔄 Reset 2 stale sessions (3.2MB freed)

Color coding:

  • 🔴 session cost > $5
  • 🟡 session cost $1–$5
  • 🟢 session cost < $1

Skill Steps (for OpenClaw cron payload)

When running as an OpenClaw cron agentTurn, the agent should:

Step 1 — Run cost parser

Execute scripts/cost_report.py --config /path/to/config.json and capture output.

Step 2 — Run zombie killer

Execute scripts/zombie_killer.py --config /path/to/config.json and capture output.

Step 3 — Format and post

Combine both outputs into the report format above and post to your Discord webhook.


Configuration Reference

KeyTypeDescription
sessions_dirstringPath to OpenClaw sessions directory
workspace_dirstringPath to OpenClaw workspace (for state logs)
discord_webhookstringDiscord webhook URL to post the report
discord_user_idstringYour Discord ID — tagged on urgent alerts
channel_namesobjectMap session keys → display names (optional)
zombie_min_age_hoursnumberSessions older than this get reset (default: 24)
zombie_min_size_mbnumberMinimum file size to reset (default: 1MB)
alert_high_costnumberDaily cost threshold for 🚨 URGENT flag (default: $50)
alert_low_costnumberDaily cost threshold for ✅ UNDER BUDGET flag (default: $10)
timezone_offset_hoursnumberYour UTC offset for date filtering (default: -6 for CST)

Files

openclaw-daily-ops/
├── SKILL.md                 ← this file
├── config.example.json      ← template config (copy to config.json)
├── scripts/
│   ├── cost_report.py       ← parses sessions, computes costs, posts to Discord
│   └── zombie_killer.py     ← wipes stale sessions, logs what was cleared
└── state/                   ← created automatically
    ├── cost-log.json        ← rolling 90-day cost history
    └── session-reset-log.json ← log of all zombie kills

FAQ

Q: Will this break my active sessions? No. The zombie killer only resets sessions older than 24h AND larger than 1MB. Active sessions are never touched.

Q: What does "reset" mean? It truncates the session JSONL file to empty. OpenClaw recreates it fresh on next use. All logs are saved to session-reset-log.json before wiping.

Q: Can I adjust the thresholds? Yes — zombie_min_age_hours and zombie_min_size_mb in config.json.

Q: Does this work on Andre/multi-machine setups? Yes. Run the setup on each machine with its own config.json. Both can post to the same Discord webhook.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

BytePlusCDN

Skill for BytePlus CDN domain and policy management, purge and prefetch, and log delivery. When you need to use BytePlus CDN acceleration services, you can r...

Registry SourceRecently Updated
General

Video With Music

Skip the learning curve of professional editing software. Describe what you want — add background music that matches the mood of my video — and get music-bac...

Registry SourceRecently Updated
General

Tweet Search

Use when the user needs to interact with X (Twitter) - searching tweets, looking up users/followers, downloading media, monitoring accounts in real time, ext...

Registry SourceRecently Updated
General

Argument Map Builder

Turns a nonfiction argument into a clear claim-evidence-assumption-objection map.

Registry SourceRecently Updated