A terminal UI for managing cron jobs, systemd timers, and launchd agents. Inspired by lazygit and lazydocker.
- Unified view of scheduled tasks across cron, systemd, and launchd
- Natural language schedule input ("every day at 2pm", "every weekday at 9:30")
- Heatmap visualization of job execution history
- Full CRUD: create, edit, delete, run now
- No daemon or database — reads directly from system logs
| cron | systemd | launchd | |
|---|---|---|---|
| macOS | yes | — | yes |
| Linux | yes | yes | — |
Unavailable providers are hidden automatically — no empty states or disabled UI elements.
| Feature | cron | systemd | launchd |
|---|---|---|---|
| List jobs | yes | yes | yes |
| Create | yes | yes (sudo) | yes |
| Edit | yes | yes (sudo) | yes |
| Delete | yes (confirm) | yes (confirm) | yes (confirm) |
| Run now | yes | yes | yes |
| Enable/disable | — | yes (space) | yes (space) |
| History heatmap | when ran only* | exit codes | exit codes |
| Next run computation | yes | yes | yes |
* Cron logs don't include exit codes — the heatmap shows when jobs ran but not whether they succeeded.
| Key | Action |
|---|---|
| j/k, arrows | Navigate job list / scroll heatmap |
| tab | Cycle panel focus |
| n | New job |
| e | Edit selected job |
| d | Delete (press twice to confirm) |
| r | Run selected job now |
| space | Enable/disable (systemd/launchd) |
| a/c/s/l | Filter by type |
| +/- | Zoom heatmap (7/14/30 days) |
| R | Refresh |
| ? | Help overlay |
| q | Quit |
Requires Go 1.26+.
go build -o lazycron .
./lazycrongo test ./...Integration tests (require real crontab/systemctl/launchctl) are guarded by build tags:
go test ./... -tags integrationType natural language when creating or editing a job:
every day at 2am -> 0 2 * * *
every weekday at 3pm -> 0 15 * * 1-5
every monday at 9:30 -> 30 9 * * 1
every 5 minutes -> */5 * * * *
1st of the month at midnight -> 0 0 1 * *
The resolved cron expression and next 3 run times are shown live as you type.