{"slug":"cron-schedule","name":"Cron Schedule for Cloudflare Workers","version":"1.0.0","updated_at":"2026-10-08T09:04:31.436Z","use_when":"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.","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.","languages":["any"],"tags":["cron","cloudflare-workers","scheduling","wrangler","time-zones","devops"],"category":"code","category_url":"https://aiskills402.com/categories/code","keywords":["cron expression","Cron Trigger","scheduled job"],"faq":[{"q":"What do I get back?","a":"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."},{"q":"Why would a model get cron wrong?","a":"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."},{"q":"How did you test it?","a":"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."},{"q":"What does it not handle?","a":"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."}],"examples":[{"lang":"en","model":"claude-sonnet-5-5","input_excerpt":"Every weekday, Monday to Friday, at 07:00 UTC.","output_excerpt":"{\"crons\": [\"0 7 * * MON-FRI\"], \"note\": \"\"}"},{"lang":"bg","model":"claude-sonnet-5-5","input_excerpt":"Всеки делничен ден (понеделник до петък) в 18:30 UTC.","output_excerpt":"{\"crons\": [\"30 18 * * MON-FRI\"], \"note\": \"\"}"}],"page_url":"https://aiskills402.com/skills/cron-schedule","markdown_url":"https://aiskills402.com/skills/cron-schedule.md","image_url":"https://cdn.aiskills402.com/og/skills/cron-schedule/216d4ef4.png","related_url":"https://api.aiskills402.com/v1/skills/cron-schedule/related","purchases_count":null,"tested":{"date":"2026-10-08","strong":{"model":"claude-sonnet-5-5 (Claude Code alias \"sonnet\")","verdict":"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."},"weak":{"model":"claude-haiku-5-5 (Claude Code alias \"haiku\")","verdict":"Also 18 of 18, with the same kinds of cron as Sonnet."},"note":"Eighteen schedules written by us, one in Bulgarian, all for Cloudflare Workers Cron Triggers. Each answer's crons were evaluated by Cloudflare's rules (day of week 1 = Sunday, L, W and #, UTC, values Cloudflare refuses rejected) and their next runs compared with run times computed independently from the request. The Cloudflare rules the skill states were measured on throwaway Workers on 8 October 2026: on a Thursday a trigger for day 5 fired every minute and one for day 4 never did, and deploys with 0, 8 or a question mark in the day-of-week field were refused. One run per model and schedule.","baseline":{"date":"2026-10-08","rows":[{"label":"Crons that run exactly as asked (18 schedules)","better":"higher","strong":{"with":{"n":18,"of":18},"without":{"n":13,"of":18}},"weak":{"with":{"n":18,"of":18},"without":{"n":6,"of":18}}}],"note":"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."},"report_url":null},"price_usd":"0.06","price_micro":60000,"size_bytes":5809,"sha256":"02da4e42b41d265da268cc178caa7e8bd25bb6dfaef3f0f4f8246c20cea55d75","outline":["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"],"license":{"summary":"Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing","holder":"Georgi Kalchev, aiskills402.com","url":"https://aiskills402.com/docs#license"},"buy_url":"https://api.aiskills402.com/v1/skills/cron-schedule/file","redownload_url_template":"https://api.aiskills402.com/v1/purchases/{token}","mcp_tool":null,"payment":{"protocol":"x402","scheme":"exact","asset":"USDC","selling":true,"network":"base","network_caip2":"eip155:8453","pay_to":"0x8e37022edcf0f21cf3c9f93fee9d4d32519f36f4","facilitator":"cdp"},"seo_title":"Cron Schedule Skill for Cloudflare Workers","seo_description":"Turn a schedule in words into Cloudflare Workers cron expressions. Handles Sunday-first weekdays, UTC and daylight saving. $0.06, yours forever.","versions":[{"version":"1.0.0","date":"2026-10-08","changelog":"# Changelog\n\n## 1.0.0 — 2026-10-08\n\nFirst 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.\n"}]}