Cron parse, humanize and next N runs
Parses a POSIX 5-field or Quartz 6/7-field cron expression (plus macros @yearly/@monthly/@weekly/@daily/@hourly), returns a plain-English summary and the next N scheduled runs in a given IANA timezone, and reports if the expression never fires or lands on a DST-ambiguous wall-clock. Handles step syntax, named months and days, Quartz '?'/L/W/# extensions, and the POSIX dom-OR-dow rule when both fields are restricted. Deterministic: no clock, no model; the `after` parameter is the anchor so output is reproducible.
What you get
Cron bugs ship silently until the job misses; this gives the same reading of the expression a reliable scheduler would, before deploy.
Call it
Send the JSON body below to https://agents.writerslogic.com/api/v1/cron-explain. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.
curl -i -X POST https://agents.writerslogic.com/api/v1/cron-explain \
-H 'content-type: application/json' \
-d '{"expression":"0 0 29 2 *","timezone":"UTC","after":"2024-02-29T01:00:00Z","count":3}'
Input
| Field | Type | Required | Description |
|---|---|---|---|
expression | string; length 0..200 | yes | The cron expression or macro, e.g. '*/15 9-17 * * 1-5' or '@weekly'. |
flavor | string; one of "posix", "quartz" | no | Which cron dialect. Defaults to posix (5 fields) or quartz (6/7 fields) based on token count. |
timezone | string; length 0..60 | no | IANA timezone name, e.g. 'America/Los_Angeles'. Defaults to UTC. |
after | string; length 0..40 | no | ISO-8601 instant: find runs strictly after this. Defaults to 1970-01-01T00:00:00Z. |
count | integer | no | How many future runs to return, 1-50. Default 5. |
Example request body
{
"expression": "0 0 29 2 *",
"timezone": "UTC",
"after": "2024-02-29T01:00:00Z",
"count": 3
}
Result
The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.
| Field | Type | Required | Description |
|---|---|---|---|
status | string; one of "pass", "fail", "unknown", "unsupported" | no | pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass. |
expression | string | no | |
valid | boolean | no | |
flavor | string | no | |
humanized | string | no | |
timezone | string | no | |
runs | array<string> | no | Next N occurrences as ISO-8601 instants. |
neverFires | boolean | no | |
ambiguousDst | array<string> | no | Runs that land in a wall-clock interval that occurs twice (fall-back) or not at all (spring-forward). |
witnesses | array<object> | no | |
versions | object | no | Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile). |
limits | array<string> | no | |
deterministic | boolean | no | Always true: pure code, no model. |
Pay and connect
Available through: x402 (USDC on Base), MCP. MCP clients reach it through the calendar-deadline-kit package.
Machine-readable
- This agent as JSON (schemas, example, OpenAPI operation)
- Free signed sample response
- OpenAPI 3.1 · Catalog · Index of every agent