Automation

Cron jobs, morning briefings, email triage, and the nightly extraction that makes memory work.

A cron job in OpenClaw is a scheduled automation that triggers a specific agent task or shell command at defined time intervals based on the automation.cron configuration.

TL;DR: Three crons make the system feel alive: 1am memory extraction, 8am morning briefing, and 9/13/18:00 email triage. The nightly cron changed the dynamic — knowing the system is working while you sleep changes the relationship from "chat tool" to "colleague."

The operating schedule

1:00am — Nightly memory extraction
Review the day's conversations. Extract durable facts. Update daily notes. Refresh MEMORY.md if new patterns observed.

8:00am — Morning briefing
Surface the day's priorities, calendar events, pending items, and suggested focus. One tight message, no walls of text.

9:00am, 1:00pm, 6:00pm — Email triage
Brief summary: N emails, action needed, FYI, ignored.

Adding a cron job

openclaw cron add "CRON_EXPRESSION" "PROMPT"

List crons:

openclaw cron list

Delete a cron:

openclaw cron delete CRON_ID

The morning briefing cron

openclaw cron add "0 8 * * *" "Good morning. Review my calendar for today and tomorrow. Check MEMORY.md for any open items from recent sessions. Check APPROVAL_QUEUE.md for anything pending. Send Sam a morning briefing: today's calendar, top 3 priorities, any pending approvals. Keep it tight — max 5 bullet points total."

The nightly memory extraction cron

openclaw cron add "0 1 * * *" "Nightly memory extraction. Review today's conversations. Extract durable facts: decisions made, preferences noted, project status changes, people mentioned, lessons learned. Update memory/$(date +%Y-%m-%d).md using the daily notes template. If you notice new patterns about how Sam works, update MEMORY.md. Skip small talk and transient requests. Be brief."

Email triage cron (requires Google Workspace)

openclaw cron add "0 9,13,18 * * *" "Email triage. Check inbox. Categorise each email: ACTION NEEDED (requires Sam's attention), FYI (interesting but no action), IGNORED (marketing, newsletters, automated). Send Sam a brief summary: total count, how many in each category, and the subject line + one-sentence summary of anything ACTION NEEDED. Don't send the full emails — just the triage."
If you have two Telegram channels configured, your first cron may fail silently without knowing which channel to send to. Always specify the target channel explicitly in your cron prompt, or set a default channel in your config.

Cron expression cheat sheet

Expression Meaning
0 1 * * * Every day at 1:00am
0 8 * * * Every day at 8:00am
0 9,13,18 * * * Daily at 9am, 1pm, 6pm
0 8 * * 1-5 Weekdays at 8am
0 */4 * * * Every 4 hours
@daily Alias for 0 0 * * *

Model choice for cron jobs

Use Haiku or Gemini Flash for background crons — roughly 100x cheaper than Sonnet. Only use Sonnet when the cron requires complex reasoning (like a weekly strategy review).

In your cron prompt, you can specify the model:

openclaw cron add "0 1 * * *" --model anthropic/claude-haiku-4-5-20251001 "..."
Tip: The nightly cron changed the dynamic. Knowing that at 1am the system is quietly organising the day's work changes how you think about the relationship. It's not a chat tool anymore. It's something that's working while you sleep.

Debugging failing crons

Check cron logs:

openclaw cron logs CRON_ID

Common causes: