Changelog
Every release. Updates arrive in the app through Sparkle.
0.2.3 23 Sep 2026
- Update checks now go to updates.uresk.net and include the app version and license state (trial, licensed, trial ended, or needs attention), which we count per day to see how many copies are in use. Nothing that identifies you is sent or stored; see the privacy page.
0.2.2 23 Sep 2026
- License problems are easier to fix: if a key stops validating, the License window says why and offers Try Again, and a key removed from this Mac in the customer portal is re-activated automatically when a slot is free.
- A brief license-server hiccup can no longer mark a paid license as invalid.
- The popover shows a short line at the bottom while the trial is counting down, after it has ended, or when your license needs attention, with a License… button next to it. Nothing is shown while your license is fine.
0.2.1 19 Sep 2026
- Run Now runs a job the way cron does, in the two places it did not. It uses your crontab's SHELL when there is one, so a bash or zsh job no longer fails under Run Now and works on schedule. And it reads % as cron does: the first unescaped % ends the command and the rest is fed to it on standard input, so "date +%Y" misbehaves under Run Now exactly as it will at its scheduled time.
- Passwords, tokens and keys in a job's command and in its last output are hidden until you press Reveal credentials, and Copy copies what is on screen. A crontab is where PGPASSWORD=… and Authorization: Bearer … live, and this window is what ends up in a screenshot.
- A job that starts with NAME=value is named after the program it runs, not after the assignment. "PGPASSWORD=… pg_dump" used to appear in the popover and in notifications as the password.
- An edit is refused, and nothing is written, if your crontab changed between the moment CronMon read it and the moment it would have saved (crontab -e in another window, another copy of CronMon). Before, the save went through and put the older text back over that change.
- Editing, deleting or switching a job now checks its schedule and whether it is on, not only its command, so the same script on two schedules can no longer be edited on the wrong line after the file shifts.
- Crontab Settings refuses to change PATH or MAILTO when the crontab sets it on more than one line, and says which lines: each applies to the jobs below it, so there is no single line to change. Before, it changed the first and displayed the last.
- MAILTO="" is shown as what it is (cron throws output away) rather than as "No MAILTO line", and the window can now set it and clear it.
- Choose… quotes a path unless every character in it is harmless to the shell, and escapes % for cron. Before, only a space caused quoting, so a file named with a ;, $ or backtick went into the command as shell syntax.
- A command with a line break in it is an error in the editor, and can no longer be written as a second crontab line.
0.2.0 17 Sep 2026
- Add, edit and delete the jobs in your own crontab from the app: Add Job… in the Your crontab heading and in the gear menu, Edit… and Delete… in a job's detail window. Launchd agents and daemons stay read-only.
- A schedule picker with the shapes people actually write — every N minutes, every N hours, daily, weekly, monthly, at reboot — and Custom for everything else. The raw cron expression stays on screen and stays editable: type in it and the controls follow, move the controls and it is rewritten.
- The schedule in plain English and the next five runs, updating as you type, so a job that does not mean what you thought is caught before it is saved.
- The warnings you get in the list appear while you type: a command that is not on cron's
PATH, a missing executable, a job that needs Full Disk Access for cron, output going to mail unread, an unescaped %, and a schedule that never comes around.
- An optional comment, written as a
# line above the job, and an Enabled toggle that writes the line commented out rather than deleting it.
- Crontab Settings… edits the
MAILTO and PATH lines at the top of your crontab; an empty field takes that line out.
- Every write backs up the whole crontab first, installs the new text, and reads it back to check. Lines you did not touch come back byte for byte. Adding, editing, deleting and crontab settings need a license, the same as enabling and disabling.
- A crontab containing bytes that are not text is listed as usual but never rewritten — CronMon says so and points you at
crontab -e.
- A launchd job switched off with
launchctl disable now shows as disabled: CronMon reads launchctl print-disabled.
- Next runs for a launchd job scheduled by
StartInterval are marked approximate, because launchd counts from when it loaded the job and CronMon cannot see that; the raw schedule no longer shows an anchor time CronMon made up.
- A property list whose
StartCalendarInterval has a non-numeric key now reads "Schedule not understood" with a warning, instead of being treated as a wildcard that appears to run every minute.
- The cron runs CronMon watched are kept with the command that ran, and dropped when that crontab line's command changes, so one job's history never turns up under another.
- Crontab backups are readable only by you: the folder is
0700 and each backup 0600.
- A cron run CronMon sees while it is open updates that job's row on its own, without another scan; the timeline is built off the main thread and the cron daemon is found inside the scan, so the popover stays responsive.
- Schedules that spell out every day or every weekday (
1-31, 0-6) read as "every day" instead of listing the days.
- The License window says which thing is wrong — the trial has ended, or the key is no longer valid on this Mac — instead of one sentence for both.
- A
LaunchAgents folder that did not exist when CronMon started is picked up the next time you open the popover, and a job with nothing wrong no longer shows an empty tooltip.
0.1.0 17 Sep 2026
- First release.
- Your cron jobs and the scheduled launchd agents and daemons on this Mac, listed together with the next run of each.
- Schedules in plain English: cron expressions with lists, ranges, steps, names and
@daily-style aliases, and launchd's StartCalendarInterval and StartInterval.
- A timeline strip with a dot per run, over 6 hours, 24 hours, or 7 days.
- Job detail: the raw expression beside the English, the next five runs, the command, the file it came from, and what is worth knowing about it.
- History from launchd — run count, last run, last exit code — read from
launchctl print, no root needed.
- History for cron jobs from watching the cron process while CronMon is running, labeled with the date it started watching, plus the job's last output from the local mailbox.
- Diagnostics for the ways scheduled work fails on macOS: a command that is not on cron's
PATH, a missing executable, a job that needs Full Disk Access for cron, output going to mail unread, a schedule that never comes around, a StartInterval shorter than launchd will honor.
- Run Now: a cron job with the environment cron would give it and its output captured, or
launchctl kickstart for a launch agent.
- Enable and Disable: one crontab line commented out or restored, with a backup of the crontab written first and the result read back;
launchctl bootout and bootstrap for a launch agent.
- Menu bar icon with an optional count of the jobs due in the next hour.
- Search, arrow-key navigation, and Copy Summary as plain text.
- The jobs that ship with macOS are hidden by default and read-only when shown.
- No polling: CronMon scans when you open it, when a launchd directory changes, and when you ask.
- Demo mode for screenshots.