How I Automated My Entire Morning Routine with OpenClaw Cron Jobs

My morning used to be chaos

Every morning before I’ve even opened my eyes properly, my phone buzzes with a message from my OpenClaw agent. It tells me the weather forecast, my calendar for the day, any urgent emails that came in overnight, and a quick summary of whatever I’m tracking that week. I didn’t ask for it that morning. I asked for it once, months ago, and it’s been running like clockwork ever since.

That’s the power of OpenClaw cron jobs. And honestly, once you start automating your daily routines this way, you’ll wonder how you ever functioned without it.

I’ve been running OpenClaw on a dedicated machine as a 24/7 assistant for a while now, and cron jobs are the feature that turned it from “cool AI chatbot” into something that genuinely runs parts of my life. This isn’t about content pipelines or publishing workflows. This is about the everyday stuff: morning briefings, email watchers, calendar alerts, weather checks, and a dozen other small automations that add up to hours saved every week.

Let me walk you through exactly how I set mine up, what’s working, and what tripped me up along the way.

What are OpenClaw cron jobs, exactly?

If you’ve ever used crontab on a Linux server, the concept is the same. You define a schedule (every morning at 7 AM, every 30 minutes, every Monday at noon) and attach a task to it. OpenClaw runs that task automatically on schedule, without you needing to prompt it.

The difference from traditional cron is that your “task” isn’t a bash script. It’s a natural language prompt that your AI agent executes with full access to its skills, tools, and context. That means your scheduled task can check your email, search the web, read files, send you a message, or do basically anything your agent can do in a normal conversation.

You configure them through the OpenClaw configuration, and each cron job can target either your main session (for alerts and reminders) or an isolated session (for autonomous work that shouldn’t clutter your chat history).

The two types of cron jobs you need to know

This tripped me up early on, so I want to be clear about it. OpenClaw has two distinct patterns for scheduled tasks:

Alert crons use sessionTarget: main with systemEvent. These pop into your main conversation as reminders or notifications. Think: “Hey, you have a meeting in 30 minutes” or “that stock you’re watching just moved 5%.”

Work crons use sessionTarget: isolated with agentTurn. These run in the background without touching your main chat. Think: research tasks, file organization, data gathering, or anything that produces work product you’ll review later.

Getting this wrong means either your chat gets flooded with background task output, or your important alerts get buried in an isolated session you never check. I learned that the hard way during my first week.

My daily cron job setup (the full list)

Here’s what I’m running on my system right now. I’ll break down each one so you can steal whatever’s useful for your own setup.

7:00 AM – Morning briefing

This is the one I couldn’t live without. Every morning, my agent compiles:

  • Today’s weather forecast for my location
  • My calendar events for the next 24 hours
  • Any unread emails flagged as important
  • A quick summary of whatever I’m tracking (news, markets, project updates)

It sends the whole thing to my preferred messaging channel as one clean message. I read it while making coffee. No apps to open, no scrolling through notifications. Just one concise briefing.

The cron expression is simply 0 7 * * * (every day at 7 AM), targeting my main session so it shows up in my regular chat.

Phone showing a morning briefing notification next to a coffee cup

Every 30 minutes – Email monitor

I don’t check email compulsively anymore. My agent does it for me. Every 30 minutes during business hours (8 AM to 6 PM, weekdays), it scans my inbox for anything new. If something looks urgent or is from a VIP sender, it pings me with a summary.

The cron expression: */30 8-18 * * 1-5

This one runs as an alert cron in my main session. Most of the time it finds nothing urgent and stays quiet. When it does ping me, I know it matters.

Every 2 hours – Calendar look-ahead

Separate from the morning briefing, I have a cron that checks my calendar every 2 hours and alerts me if there’s an event coming up within the next 90 minutes. This has saved me from missing calls more times than I can count.

6:00 AM – Weather check with clothing suggestion

This sounds silly, but it’s genuinely useful. Before my morning briefing even fires, a 6 AM cron checks the weather and, if there’s rain or unusual temperatures, sends me a heads-up. “Rain expected after 2 PM, bring a jacket.” Simple, but I’ve avoided getting soaked more than once because of it.

Monday 9:00 AM – Weekly review prep

Every Monday morning, my agent compiles a summary of the previous week: tasks completed, hours logged, key metrics from my project tracker, and any projects that stalled. It writes this to a file and sends me the highlights. My weekly planning session went from 45 minutes of gathering data to 10 minutes of decision-making.

Nightly – Maintenance tasks

While I’m asleep, my agent tidies up its own workspace: archiving old notes, cleaning up temporary files, and running any background indexing. These are isolated work crons that never touch my chat. I just wake up to a tidy system every morning.

Setting up cron jobs right requires getting the session targeting, timing, and task prompts dialed in perfectly.

I configure these automations professionally as part of every OpenClaw setup. If you’d rather skip the trial and error, I can build your entire cron schedule in one session.

See Pricing →

How to create your first cron job

If you’ve already set up OpenClaw, adding cron jobs is straightforward. Here’s the basic anatomy of a cron configuration:

crons:
  morning-briefing:
    schedule: "0 7 * * *"
    sessionTarget: main
    type: systemEvent
    task: |
      Check the weather, my calendar for today, and any urgent 
      unread emails. Send me a summary.

For background work crons:

crons:
  nightly-maintenance:
    schedule: "0 4 * * *"
    sessionTarget: isolated
    type: agentTurn
    task: |
      Archive old journal files, clean up temporary data, 
      and organize the workspace.

The schedule field uses standard cron syntax. If you’re not familiar with it, the five fields are: minute, hour, day-of-month, month, day-of-week. There are plenty of cron expression generators online, but here are the ones I use most:

  • 0 7 * * * – Every day at 7:00 AM
  • */30 * * * * – Every 30 minutes
  • 0 9 * * 1 – Every Monday at 9:00 AM
  • 0 */2 8-18 * * 1-5 – Every 2 hours during business hours, weekdays

The main decision is always: does this need to show up in my chat (main + systemEvent), or should it run silently in the background (isolated + agentTurn)?

Dark room with monitors displaying code and automated task output

Heartbeats vs. cron jobs: when to use which

OpenClaw also has a heartbeat system, which is a periodic check-in that runs in your main session. It’s tempting to throw everything into heartbeats, but here’s how I think about the split:

Use heartbeats when you want to batch multiple quick checks together (inbox + calendar + notifications in one pass), when timing doesn’t need to be precise, or when you want conversational context from recent messages.

Use cron jobs when exact timing matters, the task should run in isolation, you want a different AI model for the task, or the output should go directly to a channel without touching your main session.

In practice, I use heartbeats for reactive monitoring (“check if anything needs attention”) and cron jobs for proactive, time-specific tasks (“every Monday at 9 AM, do this specific thing”).

Not sure whether to use heartbeats or cron for your setup?

I’ll map out the right automation architecture for your workflow and configure it all for you.

See Pricing →

Two gotchas that caught me off guard

Gotcha 1: Token costs add up fast

Every cron job execution burns API tokens. My morning briefing alone uses a few thousand tokens each run. Multiply that by every cron job, every day, and it adds up. When I first set up my system, I went overboard with 15+ cron jobs running at various intervals. My monthly API bill jumped noticeably.

The fix was simple: I consolidated related checks into fewer, broader cron jobs instead of having a separate one for email, calendar, weather, and news. Now my morning briefing handles all four. I also made sure background tasks use a cheaper model when possible. Check out the full cost breakdown if you want to plan your budget before going cron-happy.

Gotcha 2: Time zones will bite you

OpenClaw uses whatever time zone your host machine is set to. If you’re running on a cloud server set to UTC but you live in Pacific time, your “7 AM briefing” will fire at midnight. I spent a confused morning wondering why my briefing wasn’t arriving before realizing my host machine’s time zone had reset after an OS update. Always double-check date on your host machine to confirm the time zone matches your expectations.

Advanced tricks I’ve picked up

After months of daily use, here are a few patterns that have worked well:

Conditional alerts: Instead of always sending a message, write your task prompt to only notify you if something important is found. “Check my email and only message me if there’s something from a client or marked urgent.” This keeps your notifications from becoming noise.

Chained schedules: You can have one cron run research at 6:30 AM and write results to a file, then your 7:00 AM morning briefing reads that file and includes the findings. Breaking complex tasks into sequential crons with file handoffs is more reliable than one massive prompt.

Weekend overrides: My weekday crons are aggressive (email checks every 30 minutes). But I have a separate, lighter weekend schedule: one morning briefing, one afternoon check, that’s it. Use the day-of-week field in your cron expressions to customize.

Error recovery: Sometimes a cron job fails because an API is down or a skill errors out. I added a simple pattern: critical crons write a “last successful run” timestamp to a file. My heartbeat checks that file and alerts me if a critical cron hasn’t run in over 24 hours. It’s a watchdog for the watchdog.

What I’d do differently starting over

If I were setting up my cron jobs from scratch today, I’d start with just three: a morning briefing, an email monitor, and a weekly review. That’s it. Get those dialed in perfectly before adding more.

The temptation is to automate everything at once. Resist it. Each cron job needs tuning. Your morning briefing prompt will go through several revisions before it gives you exactly the right level of detail. Your email monitor needs to learn which senders matter to you. Trying to perfect 10 cron jobs simultaneously is a recipe for frustration.

Start small, iterate, and add more once the foundations are solid. That’s how you build a system that actually sticks.

Wrapping up

OpenClaw cron jobs turned my AI assistant from something I talk to into something that works for me around the clock. The morning briefing alone saves me 20 minutes a day of app-hopping and notification-checking. The email monitor means I haven’t missed an urgent message in months. The weekly review prep cut my planning time by 70%.

None of this is complicated to set up. But like any automation, the details matter. Getting the right balance of frequency, session targeting, and prompt specificity is what separates a cron setup that’s genuinely useful from one that’s just noisy.

If you want to see what other skills pair well with scheduled automations, that’s a good next step. The combination of cron timing with the right skill set is where things really click.

Want this done for you?

I set up OpenClaw professionally – custom personality, skills, cron automations, and messaging channels configured in a single session. Packages start at under 1k.

See Pricing →

© 2026 OpenClaw Ready. All rights reserved.