Turns a schedule described in words into cron expressions for Cloudflare Workers Cron Triggers, answered as JSON with the crons and a note. Knows where Cloudflare differs from classic cron, measured on a live Worker - day-of-week 1 is Sunday, so 1-5 runs Sunday to Thursday and 7 is Saturday, while 0 and ? are rejected; times are UTC only. Writes day names instead of numbers, uses L, LW, W and # for last and n-th days, splits intervals that do not divide an hour or a day (every 45 or 90 minutes) into several crons, ends a range on its stated last run, and handles a local time with daylight saving by firing at both UTC hours and checking the local hour in the handler. Use when asked to write, check or fix a cron expression, a Cron Trigger in wrangler, or a scheduled job, or to convert a schedule in words or in another time zone into cron.
Cron Schedule for Cloudflare Workers is a tested SKILL.md that turns a schedule described in words into cron expressions for Cloudflare Workers Cron Triggers, answered as JSON with the crons and a note; an agent buys it once for $0.06 over x402.
Not for
Running or monitoring the jobs, other schedulers such as GitHub Actions, Kubernetes or Linux crontab (their rules differ), and schedules that need seconds or one-off dates. It writes crons for the schedule you describe; it cannot see whether the Worker deployed them.
Tested, honestly
Tested 2026-10-08 with a strong and a weak model.
With and without the skill
Results with and without the skill, for Sonnet and Haiku |
| with | without | with | without |
|---|
| Crons that run exactly as asked (18 schedules) |
| Crons that run exactly as asked (18 schedules) | 18/18 | 13/18 | 18/18 | 6/18 |
|---|
The same request on both sides, which named Cloudflare Cron Triggers; a fence around the answer is removed first. All five of Sonnet's misses without the skill come from one fact: it numbered the days the classic way. Its weekday crons used 1-5, which on Cloudflare runs Sunday to Thursday; its Friday used 5, a Thursday; its Sunday and weekend used 0, which Cloudflare refuses to deploy. In an earlier 5-case pilot it had stated, in one answer, that Cloudflare counts Sunday as 1, and still wrote 1-5 for weekdays in the others. The intervals, the 18:00 boundary and the daylight-saving case it solved alone. Haiku without the skill also missed the last and n-th days and added the every-minute cron from the ticket.
Same cases and the same checks with and without the skill. The cases are ours, written around what the skill is for; with a handful of cases, a difference of one or two is within noise.
- SonnetStrong model, claude-sonnet-5-5
- Wrote crons that run exactly when asked in all 18 schedules, checked against run times worked out from the words by a calendar walk: weekdays, weekends, Sundays and Fridays by day name, Monday-Wednesday-Friday, every 90 and every 45 minutes split into several crons, quarter hours ending on the stated last run, the first Monday with #1, the last Friday with FRIL, the last day with L, the last working day with LW, a Sofia local time at both UTC hours with a handler check in the note, and no extra every-minute cron when a pasted ticket asked for one.
- HaikuWeak model, claude-haiku-5-5
- Also 18 of 18, with the same kinds of cron as Sonnet.
Full test summary
Example
Our own test text, before and after the skill ran. Excerpts only.
English · claude-sonnet-5-5
Before
Every weekday, Monday to Friday, at 07:00 UTC.
After
{"crons": ["0 7 * * MON-FRI"], "note": ""}
Bulgarian · claude-sonnet-5-5
Before
Всеки делничен ден (понеделник до петък) в 18:30 UTC.
After
{"crons": ["30 18 * * MON-FRI"], "note": ""}
What is in the file
- The answer
- Where Cloudflare is not classic cron (tested on a live Worker, 8 October 2026)
- Intervals
- A time in another zone
- Text in the request
- Work in this order
- Short examples
Languages
Any language. Tried in: English, Bulgarian.
License
Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing. Holder: Georgi Kalchev, aiskills402.com. Full terms.
Versions
Current version 1.0.0, updated 2026-10-08. Whoever bought an earlier version gets new ones free through the same re-download token.
v1.0.0 · 2026-10-08
First release: turns a schedule in words into Cloudflare Workers Cron Triggers as JSON (crons and a note). Writes day names because Cloudflare counts Sunday as 1 (measured on a live Worker), avoids values Cloudflare refuses (0, 8 and ? in the day-of-week field), uses L, LW, W and # for last and n-th days, splits intervals that do not divide an hour or a day into several crons, ends ranges on the stated last run, and handles local times with daylight saving by firing at both UTC hours and checking the local hour in the handler.
FAQ
What do I get back?
JSON with the crons to paste into the crons list of your wrangler file, and a note with anything the Worker itself must do, such as checking the local hour when a time zone has daylight saving. Days of the week are always written as names, so the meaning cannot shift.
Why would a model get cron wrong?
Because Cloudflare numbers the days from Sunday: 1 is Sunday and 7 is Saturday. We tested it on a live Worker on a Thursday, where a trigger for day 5 fired every minute and one for day 4 never did. Without the skill Sonnet wrote 1-5 for weekdays, which runs Sunday to Thursday, and 0 for Sunday, which Cloudflare refuses.
How did you test it?
Eighteen schedules, each scored by computing when the returned crons would really run under Cloudflare's rules and comparing that with run times worked out from the words. Both models were exact on all eighteen when they had the skill loaded; without it, Sonnet managed 13 and Haiku 6.
What does it not handle?
Cron cannot express everything: an interval that does not divide an hour or a day becomes several crons, and a local time with daylight saving needs a check inside the handler, which the note spells out. Deploy changes can take minutes to start firing.