From 3be7e3bde09783e24dda278639ea5aa12942449f Mon Sep 17 00:00:00 2001 From: "B.K." Date: Sun, 12 Apr 2026 07:23:49 +0300 Subject: [PATCH] fix: correct cron AND guidance (#64968) (thanks @BKF-Gitty) * docs(cron): clarify day-of-month + day-of-week OR logic * fix: correct frequency unit from per-week to per-month * fix: correct cron AND guidance (#64968) (thanks @BKF-Gitty) --------- Co-authored-by: Ayaan Zaidi --- docs/automation/cron-jobs.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/automation/cron-jobs.md b/docs/automation/cron-jobs.md index f71d568e5f7..45c59006a38 100644 --- a/docs/automation/cron-jobs.md +++ b/docs/automation/cron-jobs.md @@ -62,6 +62,18 @@ Timestamps without a timezone are treated as UTC. Add `--tz America/New_York` fo Recurring top-of-hour expressions are automatically staggered by up to 5 minutes to reduce load spikes. Use `--exact` to force precise timing or `--stagger 30s` for an explicit window. +### Day-of-month and day-of-week use OR logic + +Cron expressions are parsed by [croner](https://github.com/Hexagon/croner). When both the day-of-month and day-of-week fields are non-wildcard, croner matches when **either** field matches — not both. This is standard Vixie cron behavior. + +``` +# Intended: "9 AM on the 15th, only if it's a Monday" +# Actual: "9 AM on every 15th, AND 9 AM on every Monday" +0 9 15 * 1 +``` + +This fires ~5–6 times per month instead of 0–1 times per month. OpenClaw uses Croner's default OR behavior here. To require both conditions, use Croner's `+` day-of-week modifier (`0 9 15 * +1`) or schedule on one field and guard the other in your job's prompt or command. + ## Execution styles | Style | `--session` value | Runs in | Best for |