A cron monitor is a ping receiver with a clock: each job calls a URL when it finishes, and a loop raises an alert when the next call doesn't arrive in time. An agent builds that, with cron-expression schedules, start and fail pings and email, Slack or ntfy alerts, in one sitting. The real requirement is where it runs: on a machine that isn't the one hosting the jobs, and ideally watched by a free hosted heartbeat itself. Healthchecks, which has a hosted free tier of 20 jobs and a BSD-licensed server, may save you the build altogether.
Before you buildCronitor Hacker already covers 5 monitors for free, and Healthchecks.io covers 20. If your job list is that short, you can skip the build.
Build me a cron job monitor to replace Cronitor. Requirements: - Node.js 22 + TypeScript: a Fastify server with server-rendered pages and no front-end framework. `npm start` serves on http://localhost:4750. - Storage: better-sqlite3 in ./data/monitor.db: monitors (name, token, schedule, grace_minutes, status, paused), pings (monitor, ts, kind, exit_code, duration_ms, message, source_ip_hash) and alerts sent. Pings older than 90 days are deleted nightly. - Schedules: "every N minutes or hours" or a cron expression parsed with `croner`, evaluated in a per-monitor IANA timezone. Each monitor has a grace period in minutes. - Ping endpoints, any HTTP method: /ping/<token> (success), /ping/<token>/start, /ping/<token>/fail and /ping/<token>/<exit-code>. Store up to 10 KB of body as the message and compute duration from start to success. Unknown tokens get a plain 404. - Status: new, up, late (past schedule), down (past schedule plus grace), failed (fail ping or a start with no finish within MAX_RUNTIME). A checker runs every 15 seconds and sends one alert when a monitor goes down and one when it recovers, never repeated while the state is unchanged. - Alerts, per monitor: email (nodemailer SMTP from .env), Slack-compatible webhook, ntfy topic and generic JSON webhook. Pause switch and maintenance windows. - Pages: monitor list with status dots, a detail page with the last 100 pings, a 90-day uptime bar, and a copy-ready snippet like `curl -fsS -m 10 --retry 5 https://host/ping/<token>`. - Admin: one password in .env (signed cookie). `GET /healthz`, and an optional outbound ping to HEARTBEAT_URL every 5 minutes so you hear if the monitor itself dies. - Single user. No accounts, no telemetry, local-first. Out of scope: website checks, status pages, SMS and on-call escalation, teams. - README: a crontab example, a systemd unit, backups, and why it must run on a machine other than the jobs it watches.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Cronitor.
Add a Cronitor importer to the monitor in this folder. Requirements: - `monitor import-cronitor monitors.yaml` reads the YAML from Cronitor's monitors API (GET /api/monitors?format=yaml) and creates one monitor per entry. - Map name, key, schedule, timezone and grace seconds; skip types that aren't jobs or heartbeats and list them. - Print the new ping URL for each monitor so I can swap it into the crontab, and write the mapping to ./data/import-map.csv. - Dry-run by default; --yes writes. - Update the README.
Add a small wrapper CLI to the monitor in this folder. Requirements: - `ping-run <token> -- <command...>` calls /start, runs the command, then calls success or /fail with the exit code and the last 2 KB of stderr as the message. - Take MONITOR_URL from the environment, retry pings 3 times with backoff, and never let a failed ping change the command's own exit code. - Ship it as a single file that needs only Node.js, plus a shell version using curl. - Update the README with crontab examples.
Add a weekly summary to the monitor in this folder. Requirements: - Every Monday 08:00 in TIMEZONE from .env, send one plain-text email with, per monitor, the number of runs, late runs, failures and the slowest duration. - Highlight jobs that never pinged during the week. - A `monitor summary --now` command for preview. - Update the README.
A monitor on your own box can die with the box. Cronitor is somebody else's uptime, with SMS and on-call tools that wake a person when everything else is down, and teams add the status pages and user roles.
Estimate · A small VPS is about $5 a month, and nothing extra if you already run one. Alerts through SMTP, Slack or ntfy are free at this volume. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Hacker | $0 | $0 | 5 monitors, 1 dashboard user, email and Slack, Discord, Teams and webhook alerts, 1 basic status page with 50 subscribers, 5-minute check frequency. |
| Business | $15 | — | $2 a month per monitor and $5 a month per user with no base fee, so 5 monitors and 1 user is $15. SMS and on-call alerts, 30-second checks, 12 months of retention, unlimited API requests. |
| Enterprise | — | $500 | Custom integrations, a dedicated engineer, priority support, unlimited status pages. |
Hacker covers 5 monitors and one user, with email and Slack alerts, a basic status page and 5-minute checks.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $15 a month on the Business (1 user, 5 monitors) plan, $180 a year (checked 2026-10-14).
SMS and on-call alerts through PagerDuty, Opsgenie and Splunk On-Call; Hosted status pages with subscribers; Website, API and synthetic browser checks at 30-second intervals; Dashboard roles, SCIM and SAML sign-in for teams; A service that stays up when your own server doesn't. If any of those matter to you, keep paying.
Yes: Healthchecks (open source), Uptime Kuma (open source), Gatus (open source).