OpenClaw Cron Docs Finally Warn You: Your “Monday the 15th” Job Fires Five Times a Month
A new section landed in OpenClaw's automation documentation this weekend, exposing a Vixie-cron quirk that's been sabotaging scheduled agents since the feature shipped. Set both day-of-month and day-of-week and the scheduler fires on either — not both. The behavior isn't new. The warning is.
April 13, 20264 min read
Here's the expression that started it:0 9 15 * 1. Read it the way most people do and it says “9 AM on the 15th, but only if that day is a Monday.” Plug it into OpenClaw's cron system and it fires five, sometimes six, times a month. Every Monday. Plus the 15th. Whether the 15th is a Monday or not.
That's not a bug in OpenClaw. It's standard Vixie cron behavior, inherited from the scheduler that's shipped with BSD and Linux since the 1980s. When the day-of-month field and the day-of-week field are both non-wildcards, cron treats them as an either/or condition. The job runs when either matches. Not both.
It's a detail every sysadmin learns exactly once, usually the hard way. And until this weekend, OpenClaw's documentation didn't mention it at all. Users wiring up scheduled agents through the dashboard had no warning that the expression they were pasting meant something different from what they thought it meant.
What You Type vs. What You Get
The gap between intention and behavior, in one expression.
What you meant
0 9 15 * 1
“Run at 9 AM on the 15th of the month, but only when the 15th happens to land on a Monday.” Expected frequency: zero to one times per month.
What actually runs
0 9 15 * 1
“Run at 9 AM on every 15th, and at 9 AM on every Monday.” Actual frequency: five to six times per month. Off by a factor of five.
What the New Section Actually Says
The update adds a subsection called “Day-of-month and day-of-week use OR logic” to OpenClaw's automation reference. It spells out the behavior explicitly: when neither field is a wildcard, the underlying Croner 10.x library triggers on either match, following the same semantics as classic Vixie cron. It does not offer AND semantics for those two fields. There is no flag to flip.
Users who want a real “Mondays that fall on the 15th” schedule are told to pick one of two routes. Neither is especially elegant, which is part of why the quirk has outlived every attempt to paper over it.
Option 1: Croner's + modifier
0 9 15 * +1
Croner ships a non-standard extension: prefix the day-of-week field with + to demand AND semantics. The job only fires when both conditions agree. It works, but it's Croner-specific, so copying the expression into any other cron implementation will silently fall back to OR.
Option 2: Schedule wide, filter inside the agent
Schedule the job on a single field — say, every Monday at 9 AM — and push the “is-it-the-15th” check into the agent's prompt or command. The runtime decides whether to act. It costs one extra invocation per week but keeps the cron expression portable and obvious.
Why This Matters More Than It Sounds Like
OpenClaw is pitching scheduled agents as a first-class automation primitive. The dashboard gives you a text box, a cron expression goes in, and an AI agent runs on the other side. That's a higher-stakes context than a shell script: a misfiring cron means an agent hitting APIs, posting to Slack, or draining tokens five times as often as planned. Users who don't realize they're in Vixie-cron territory pay the bill before they spot the mistake.
There's a broader point here about abstraction leakage. When a product takes a fifty-year-old system call like cron and exposes it verbatim in a polished UI, it inherits every quirk of the original — including the ones that make sense only if you already know Vixie's source code. A text box next to a shiny agent configuration screen implies a modern scheduler. The actual behavior is whatevercron.csaid in 1987.
The documentation fix doesn't change the behavior. It just closes the gap between what users believe is happening and what is. That's what documentation is supposed to do. It's slightly startling how long the gap stood open.
“OpenClaw uses Croner's default OR behavior here.” — The sentence that's now sitting at the top of a new warning block in the cron reference, right where a year's worth of confused bug reports should have lived.
The Short Version
If you've ever written an OpenClaw cron expression with both a day-of-month and a day-of-week set to something other than *, go look at how often it's been firing. You might already be burning tokens on a job you thought was running once a month. And if you're about to write your first scheduled agent, the good news is that the docs will now warn you before you trip the wire.
Vixie cron has been shipping the same footgun since the Reagan administration. OpenClaw's automation reference finally hands you a pair of safety glasses.
DeployClaw News · by Carlos Simpson
DeployClaw hosts OpenClaw instances. Upstream documentation updates flow through automatically. This publication covers development independently.
Schedule agents. Read the footnotes. Deploy with confidence.
DeployClaw ships your OpenClaw instance with the latest upstream docs and runtime the moment they land. Cron quirks included, cron footguns documented.