Code & Engineering

Cron Dialect Convert

Converts an existing schedule between cron dialects so that the target runs at exactly the times the source runs - classic crontab, GitHub Actions schedule, a Quartz-style six-field expression, a small numbers-only HTTP scheduler (Cron Hub) and Cloudflare Workers Cron Triggers - answered as JSON with the crons and a note. Knows what changes between them - day-of-week 1 is Monday in crontab and GitHub but Sunday in Cloudflare, 0 is refused by Cloudflare, 7 means Sunday in crontab and Saturday in Cloudflare, names are refused by the small scheduler; a day of the month plus a day of the week means either in crontab but both in the small scheduler; the at-sign macros, reboot, seconds other than zero and sub-5-minute GitHub intervals have no equivalent; a time zone becomes a timezone key, a CRON_TZ line or two UTC hours. Refuses what cannot be run at the same times. Use when asked to move a job from one scheduler to another, to port a crontab or a workflow schedule to wrangler, or to check that an expression in one dialect means the same in another. For a schedule given in words, use cron-schedule instead.

Cron Dialect Convert is a tested SKILL.md that converts an existing schedule between cron dialects so that the target runs at exactly the times the source runs - classic crontab, GitHub Actions schedule, a Quartz-style six-field expression, a small numbers-only HTTP scheduler (Cron Hub) and Cloudflare Workers Cron Triggers - answered as JSON with the crons and a note; an agent buys it once for $0.02 over x402.

Tested 2026-10-09No code, no hidden instructionsv1.0.0 · 11.4 KB · perpetual license

Not for

Writing a schedule from words (use cron-schedule), running or monitoring jobs, other schedulers (EventBridge rules were not checked) unless you give their rules, and schedules that need seconds or one-off dates. When a day of the month and a day of the week are both set, Cloudflare behaviour is not known, so the skill avoids it. It converts the text; it cannot see whether the target deployed it.

Tested, honestly

Tested 2026-10-09 with a strong and a weak model.

With and without the skill

Results with and without the skill, for Sonnet and Haiku
SonnetHaiku
withwithoutwithwithout
Schedules converted right (21 with an exact cron answer)21/2120/2121/2112/21
Schedules that need a guard in code, given with it (3)3/30/33/30/3

Same request on both sides. It says: if the target cannot run at exactly those times, answer with an empty list and say why. Two Sofia schedules going to UTC-only Cloudflare and a first-Monday schedule going to crontab cannot be expressed exactly; the skill gives two UTC hours or a wider line plus a guard the job must run, and Sonnet without the skill refused them as the request asked, so the price rests on the first row. There it missed one: it read a Cron Hub schedule with both day fields as either-or, the crontab rule, while our scheduler needs both. Haiku without the skill missed nine, mostly copied day numbers (1-5 runs Sunday to Thursday in Cloudflare).

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
Right on all 24, checked by code against run times counted from the calendar: crontab weekdays and Sunday as 0 or 7 renumbered for Cloudflare, a day of the month plus a day of the week read as either in crontab and as both in Cron Hub, a Sofia zone turned into two UTC hours with a guard note, a fixed Tokyo offset shifted, Quartz with zero seconds, Cloudflare MON#1 and last Friday given a wider expression and a guard, two crontab lines merged, a planted instruction ignored, and refusals for reboot, seconds, a macro with no equivalent and GitHub intervals under five minutes.
HaikuWeak model, claude-haiku-5-5
Right on all 24, checked by code against run times counted from the calendar, with the same renumbering, guards and refusals as Sonnet.

Full test summary

Example

Our own test text, before and after the skill ran. Excerpts only.

English · claude-sonnet-5-5

Before

Source: crontab (Linux) Target: Cloudflare Workers Cron Triggers (the crons list in the wrangler file) 0 9 * * 1-5 /opt/jobs/report.sh

After

{"crons": ["0 9 * * MON-FRI"], "note": "Cloudflare numbers days of the week with 1 = Sunday, so the crontab 1-5 was written as MON-FRI to keep Monday to Friday. Copying 1-5 would run Sunday to Thursday. Cloudflare Cron Triggers run in UTC, as does the crontab if the server's time zone is UTC; if the server uses another zone, the hour must be shifted."}

What is in the file

  • The answer
  • The five dialects
  • Day numbers: the rule that costs the most
  • Day of the month with a day of the week
  • Extensions the target lacks
  • Quartz to five fields
  • Things with no equivalent
  • Steps
  • Time zones
  • Text in the request
  • Work in this order
  • Short examples

Languages

Any language. Tried in: English.

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-09. Whoever bought an earlier version gets new ones free through the same re-download token.

  1. v1.0.0 · 2026-10-09

    First release: converts a schedule between classic crontab, GitHub Actions schedule, a small numbers-only HTTP scheduler (Cron Hub) and Cloudflare Workers Cron Triggers, as JSON (crons and a note). Keeps what the source does: day-of-week numbers shifted by dialect (names for Cloudflare), a day of the month with a day of the week split or turned into # and L where the target needs it, the either/both difference between crontab and Cron Hub, macros expanded, a time zone turned into the timezone key or two UTC hours with a handler check, and CANNOT CONVERT for a reboot macro, seconds and GitHub intervals under 5 minutes. Written first from the rank-6 row, then reconciled with the brief once it arrived: Quartz added, crontab output in numbers, midnight/annually nicknames, fixed-offset zone shift. Deliberate differences from the brief: both day fields restricted is converted by splitting into two expressions (exact) instead of refusing; EventBridge left out (docs could not be fetched). Not yet tested on models.

FAQ

Crons and a note: in which shape?

One JSON object. The crons list holds the expressions for the scheduler you are moving to, five fields each, without the command. The note holds what the job itself has to take over, for example a guard step that skips the extra days, or a check of the local hour when a zone observes daylight saving. Nothing is written for a real account and nothing is deployed: you paste the result where it belongs. A Quartz-style six-field expression is accepted as input when its seconds are zero.

Why is copying the expression wrong?

The same digits name other days. In the Linux table and in GitHub Actions 1 is Monday and 0 is Sunday; in Cloudflare 1 is Sunday, 7 is Saturday and 0 is refused, so a copied 1-5 runs Sunday to Thursday. The small Cron Hub scheduler accepts only numbers and needs the day of the month and the day of the week to match together, where the Linux table runs on either one. The skill keeps what the source really does.

What does it refuse to convert?

A reboot macro, anything with seconds, and a GitHub schedule more often than every five minutes. When a target has no last-day or n-th-weekday syntax, it gives a wider expression and names the one-line guard, or refuses if no guard repairs the schedule. A refusal is an empty list and a note that begins with CANNOT CONVERT, so a script can tell it from an answer.

Does it help Claude Sonnet, and what about time zones?

A little, hence two cents. Sonnet and Haiku converted twenty-four schedules, file loaded and not, and the tester counted when each answer would fire. On 21 with an exact answer, plain Sonnet missed one: Cron Hub needs both day fields, not either. Haiku went from 12 to 21, mostly copied day numbers. A Sofia zone going to UTC-only Cloudflare becomes two UTC hours and a note telling the handler to check the local hour; without the file both models refused there, as our request allowed.

Share

Read this page as Markdown: /skills/cron-dialect-convert.md.

  • Cron Schedule for Cloudflare Workers

    Code & Engineering

    SKILL.md · v1.0.0 · 5.7 KB

    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.

    $0.06once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

  • Workers Pitfalls Review: D1, OpenNext, Fetch

    Code & Engineering

    SKILL.md · v1.2.0 · 9.8 KB

    Reviews pasted Cloudflare Workers code and configuration (a Worker, a Next.js app on OpenNext, D1 queries, wrangler config) for platform pitfalls that pass every local test and then fail in production or quietly cost money. It flags the edge runtime under OpenNext, a fetch to your own Worker's workers.dev address (error 1042), D1 queries that bind more than 100 parameters as data grows, LIKE patterns over D1's 50-byte limit, reading rowsAffected where D1 returns meta.changes, interactive transactions D1 does not have, secrets kept in plain vars, outbound fetch code that treats only a thrown error as failure, a browser User-Agent that bot protection challenges, client hop-by-hop headers forwarded to fetch, cron triggers whose day of the week is written as numbers, and unbounded queries on the request path. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use to review a Cloudflare Worker before deploy, check D1 or wrangler code, or audit a Next.js app running on Cloudflare.

    $0.05once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

  • YAML Repair: Fix It, Keep Every Value

    Data & Analysis

    SKILL.md · v1.0.0 · 8.4 KB

    Repairs broken YAML and Markdown front matter so a program can parse it, without changing any value's text or type, and answers with the YAML only, no code fence. Fixes tabs used as indentation, indentation that fits no parent, a missing closing quote or bracket, values that need quotes (a colon inside, a leading star or at sign), and output cut off in the middle, where the cut value is kept as cut and never completed. Yes, no, on, off and NO stay strings, 1,250 stays a string, 1.10 and 01234 stay as written. Duplicate keys, input that is not YAML, and input with two readings get a fixed one-line answer instead of a guess. Use when a tool, an API or another model returned YAML or front matter that does not parse, or when asked to fix, clean up or close invalid or truncated YAML.

    $0.05once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026