VPN07

OpenClaw Cron Advanced 2026: Every Schedule Command Explained — Complete Q&A

February 20, 2026 15 min read Cron Guide

About This Guide: OpenClaw's cron system is the Gateway's built-in scheduler — it persists jobs, wakes agents at the right time, and can deliver output back to your chat. This advanced Q&A covers every single cron command: cron add, cron edit, cron run, cron list, cron runs, cron remove, cron status, and system event. Every flag, delivery mode, timezone config, model override, and edge case is covered.

Cron Architecture Overview

# Cron subsystem lives inside the Gateway process

~/.openclaw/cron/

├── jobs.json # persistent job store

└── runs/

└── <jobId>.jsonl # run history (auto-pruned)

# Two execution styles:

├── Main session # systemEvent payload, runs on heartbeat

└── Isolated session # agentTurn payload, dedicated cron: session

3 Schedule Types
at · every · cron
2 Session Modes
main · isolated
3 Delivery Modes
announce · webhook · none

openclaw cron add: Creating Jobs

Q What are the three schedule types and how do I use them?

Type 1: --at (one-shot at specific time)

# Fire once at a specific ISO 8601 time

openclaw cron add \

--name "Reminder" \

--at "2026-02-28T16:00:00Z" \

--session main \

--system-event "Reminder: review monthly report." \

--wake now \

--delete-after-run

# Or: relative time (in 20 minutes)

openclaw cron add --name "Quick" --at "20m" \

--session main --system-event "Check status."

Type 2: --every (fixed interval)

# Run every 30 minutes

openclaw cron add \

--name "Heartbeat check" \

--every 30m \

--session isolated \

--message "Run quick system check." \

--announce

Type 3: --cron (cron expression)

# Run at 7am daily, LA timezone

openclaw cron add \

--name "Morning brief" \

--cron "0 7 * * *" \

--tz "America/Los_Angeles" \

--session isolated \

--message "Summarize overnight updates." \

--announce \

--channel slack \

--to "channel:C1234567890"

Q What's the difference between --session main and --session isolated?

Mode How It Runs Payload Type Best For
main Enqueues a system event for the next heartbeat run systemEvent Reminders, context-aware tasks using main conversation history
isolated Runs a dedicated agent turn in cron: session (fresh context) agentTurn Background chores, reports, tasks that shouldn't pollute main history

# Main session: uses systemEvent + heartbeat

openclaw cron add --name "Calendar reminder" \

--at "2026-03-01T09:00:00Z" \

--session main \

--system-event "Reminder: team sync at 10am." \

--wake now

# Isolated: uses agentTurn (fresh context, no history carry-over)

openclaw cron add --name "Nightly report" \

--cron "0 23 * * *" --tz "UTC" \

--session isolated \

--message "Compile daily activity report." \

--announce --channel telegram --to "123456789"

Q How do I add a cron job with model override and thinking level?

Isolated jobs can override the AI model and thinking level. This lets specific cron tasks use more powerful (or faster) models than your default.

# Deep weekly analysis with Opus + high thinking

openclaw cron add \

--name "Weekly deep analysis" \

--cron "0 6 * * 1" \

--tz "America/Los_Angeles" \

--session isolated \

--message "Weekly deep analysis of project progress." \

--model "opus" \

--thinking high \

--announce \

--channel whatsapp \

--to "+15551234567"

# Fast daily check with sonnet (lighter model)

openclaw cron add \

--name "Daily status" \

--cron "0 8 * * *" --tz "UTC" \

--session isolated \

--message "Quick status summary." \

--model "anthropic/claude-sonnet-4-20250514" \

--announce

Model resolution priority: Agent config default → Hook-specific defaults → Job payload override (highest). Thinking mode only works with GPT-5.2+ and Codex models.

Q What is stagger and when should I use --exact?

OpenClaw applies a deterministic stagger window of up to 5 minutes for top-of-hour cron expressions (like 0 * * * *) to prevent load spikes across many gateways. Use --exact to force exact timing.

# Force exact timing (no stagger)

openclaw cron add \

--name "Exact hourly" \

--cron "0 * * * *" --tz "UTC" --exact \

--session isolated \

--message "Exactly on the hour check."

# Custom 30-second stagger window

openclaw cron add \

--name "Minute watcher" \

--cron "0 * * * * *" --tz "UTC" \

--stagger 30s \

--session isolated \

--message "Run minute watcher checks." --announce

# Note: fixed-hour expressions like "0 7 * * *" are always exact

openclaw cron edit: Updating Jobs

Q How do I edit an existing cron job?

Use openclaw cron edit <jobId> with the fields you want to change. You can update the message, model, thinking level, schedule, and agent assignment.

# Update message and model

openclaw cron edit <jobId> \

--message "Updated prompt text" \

--model "opus" \

--thinking low

# Disable a job temporarily

openclaw cron edit <jobId> --enabled false

# Re-enable it

openclaw cron edit <jobId> --enabled true

# Pin to a specific agent

openclaw cron edit <jobId> --agent ops

# Clear agent binding (fall back to default)

openclaw cron edit <jobId> --clear-agent

# Force exact timing (remove stagger)

openclaw cron edit <jobId> --exact

cron run, list, runs & remove Commands

Q How do I manually trigger a cron job?

openclaw cron run <jobId> triggers a job immediately. By default it uses --force mode (always runs). Use --due to only run if the job would normally be due.

# Force-run immediately (default)

openclaw cron run <jobId>

# Run only if the job is currently due

openclaw cron run <jobId> --due

Q How do I list all scheduled cron jobs?

openclaw cron list shows all jobs in your store with their IDs, schedules, enabled status, and last/next run times.

# List all cron jobs

openclaw cron list

# Example output:

ID NAME SCHEDULE ENABLED NEXT RUN

job-abc Morning brief 0 7 * * * true 2026-02-21 07:00

job-def Weekly report 0 6 * * 1 true 2026-02-23 06:00

job-ghi Battery check every 30m false (disabled)

Q How do I view a cron job's run history?

openclaw cron runs shows the execution history for a specific job. Run history is stored as JSONL at ~/.openclaw/cron/runs/<jobId>.jsonl and is auto-pruned.

# Get run history for a specific job

openclaw cron runs --id <jobId>

# Limit to last 50 runs

openclaw cron runs --id <jobId> --limit 50

# Run history stored at:

~/.openclaw/cron/runs/<jobId>.jsonl

Q How do I delete a cron job?

Use openclaw cron remove <jobId>. This permanently deletes the job from the store. For temporary disabling, use cron edit <jobId> --enabled false instead.

# Permanently remove a cron job

openclaw cron remove <jobId>

# Or temporarily disable (reversible)

openclaw cron edit <jobId> --enabled false

Cron Delivery Modes: announce, webhook, none

Q What are the three delivery modes and how do they work?

Mode What Happens Requires
announce Delivers output to the specified channel via outbound adapters. Also posts a brief summary to main session. --channel + --to
webhook POSTs the finished event JSON payload to a webhook URL. No channel delivery, no main-session summary. --webhook-url
none No delivery. Job runs internally only, no output posted anywhere.

# Announce to WhatsApp

openclaw cron add --name "Morning" --cron "0 7 * * *" --tz "UTC" \

--session isolated --message "Daily brief." \

--announce --channel whatsapp --to "+15551234567"

# Webhook delivery

openclaw cron add --name "Webhook report" --cron "0 18 * * *" --tz "UTC" \

--session isolated --message "Generate EOD report." \

--webhook "https://hooks.example.com/openclaw-report"

# Internal only (no delivery)

openclaw cron add --name "Silent check" --cron "*/15 * * * *" --tz "UTC" \

--session isolated --message "Internal health check." \

--no-announce

Q How do I deliver to a Telegram forum topic?

Telegram supports forum topics via message_thread_id. Encode the topic into the --to field using these formats:

# Preferred: explicit topic marker

--to "-1001234567890:topic:123"

# Shorthand: numeric suffix

--to "-1001234567890:123"

# Full chat only (no topic)

--to "-1001234567890"

# Full example with forum topic delivery

openclaw cron add \

--name "Nightly summary to topic" \

--cron "0 22 * * *" --tz "America/Los_Angeles" \

--session isolated \

--message "Summarize today. Send to nightly topic." \

--announce --channel telegram \

--to "-1001234567890:topic:123"

openclaw system event: Immediate Triggers

Q What is openclaw system event and when should I use it?

openclaw system event sends an immediate system event to the main agent session without creating a persistent cron job. It's the CLI shortcut for one-off triggers that don't need to repeat.

# Send immediate system event (triggers next heartbeat now)

openclaw system event --mode now --text "Check battery status immediately."

# Queue for next scheduled heartbeat

openclaw system event --mode next-heartbeat --text "Next heartbeat: review inbox."

Use system event when:

  • → One-off immediate trigger
  • → No repeat schedule needed
  • → Quick test without creating a job
  • → Manual heartbeat trigger

Use cron add when:

  • → Repeating schedule needed
  • → Future one-shot (--at)
  • → Need delivery to channels
  • → Need run history tracking

Multi-Agent Cron & Configuration

Q How do I pin a cron job to a specific agent in multi-agent setups?

Use --agent <name> when creating a job. If the named agent doesn't exist, the gateway falls back to the default agent.

# Pin job to "ops" agent

openclaw cron add --name "Ops sweep" \

--cron "0 6 * * *" --session isolated \

--message "Check ops queue" --agent ops

# Switch agent on existing job

openclaw cron edit <jobId> --agent ops

# Clear agent binding (revert to default)

openclaw cron edit <jobId> --clear-agent

Q How do I disable or limit cron in config?

# Disable cron entirely via env var

OPENCLAW_SKIP_CRON=1 openclaw gateway

# Disable via config

{"cron": {"enabled": false}}

# Full cron config options

{"cron": {

"enabled": true,

"store": "~/.openclaw/cron/jobs.json",

"maxConcurrentRuns": 1,

"webhookToken": "bearer-token-for-webhook-auth"

}}

Cron Troubleshooting

"Nothing runs" / jobs not triggering

  • → Check cron.enabled and OPENCLAW_SKIP_CRON
  • → Confirm timezone is correct with --tz
  • → Gateway must be running continuously (cron runs inside Gateway)
  • → Run openclaw cron list to verify job is enabled

Recurring job keeps delaying after failures

  • → OpenClaw applies exponential retry backoff: 30s → 1m → 5m → 15m → 60m
  • → Backoff resets after the next successful run
  • → Use openclaw cron run <jobId> to manually trigger and reset

Telegram delivers to wrong place

  • → Use explicit :topic: marker in the --to value
  • → Example: -100123...:topic:456

Complete Cron Command Reference

# ─── Add Jobs ───

openclaw cron add --name "..." --at "ISO-or-relative" --session main --system-event "..."

openclaw cron add --name "..." --every 30m --session isolated --message "..." --announce

openclaw cron add --name "..." --cron "0 7 * * *" --tz "UTC" --session isolated --message "..."

# ─── Edit Jobs ───

openclaw cron edit <jobId> --message "Updated" --model "opus" --thinking high

openclaw cron edit <jobId> --enabled false

openclaw cron edit <jobId> --agent ops

openclaw cron edit <jobId> --clear-agent

openclaw cron edit <jobId> --exact

# ─── List & Status ───

openclaw cron list

openclaw cron status

# ─── Run Manually ───

openclaw cron run <jobId> # force run

openclaw cron run <jobId> --due # run only if due

# ─── View History ───

openclaw cron runs --id <jobId> --limit 50

# ─── Remove ───

openclaw cron remove <jobId>

# ─── Immediate Trigger ───

openclaw system event --mode now --text "Immediate trigger text."

openclaw system event --mode next-heartbeat --text "Queue for next heartbeat."

Best VPN for 24/7 OpenClaw Cron Jobs

🥇

VPN07 — #1 for Always-On Cron Reliability

9.8/10

Cron jobs that deliver to Telegram, Slack, and WhatsApp via webhooks need a stable, fast network. VPN07's 1000Mbps bandwidth across 70+ countries ensures your OpenClaw cron announcements and webhook deliveries go through every time — even scheduled at 3am. 10 years of uptime. Just $1.5/month.

1000Mbps
Always-On Speed
70+
Countries
99.9%
Uptime SLA
$1.5
Per Month
Try VPN07 Free — 30-Day Guarantee →

2. Private Internet Access

6.9/10

Decent uptime but known for connection drops at peak hours. Risky for cron jobs that must deliver on schedule. Not suitable for mission-critical OpenClaw automation.

3. TunnelBear

6.2/10

Fun branding but data caps on free tier and slower paid speeds. Webhook delivery from cron jobs requires a stable, cap-free connection that TunnelBear can't consistently provide.

Related Articles

Keep Your Cron Jobs Running 24/7 with VPN07

OpenClaw cron jobs run around the clock — your VPN should too. VPN07 delivers 1000Mbps across 70+ countries with 99.9% uptime, so every scheduled announcement, webhook call, and agent run hits on time. 10 years proven. Just $1.5/month with a 30-day money-back guarantee.

$1.5
Per Month
1000Mbps
Bandwidth
99.9%
Uptime
30-Day
Money Back
$1.5/mo · 10 Years Stable
Try VPN07 Free