v0.6.0 — Now with alerts

Cron, but it actually tells you what happened

Single binary. Zero config observability. Every run logged, every failure caught. Never wonder if your job ran again.

kron — ~/server
kron add "every day at 2am" ./backup.sh
✓ Job 'backup-sh' created
kron status
JOB SCHEDULE LAST RUN STATUS
backup-sh every day at 2am 2h ago ✓ 0.8s
db-vacuum 0 3 * * 0 5d ago ✓ 12.3s
ssl-renew every month 29d ago ⚠ timeout
log-rotate every 6 hours 45m ago ✓ 0.2s
kron logs ssl-renew
─── Run #14 · 2024-03-15 03:00:01 · exit: timeout ───
Requesting certificate for *.example.com...
Error: ACME challenge failed after 300s
⚠ Alert sent to #ops-alerts (Slack)

Cron is a black hole

Your jobs run in silence. When they fail, nobody knows. When they succeed, there's no proof. You built monitoring around cron instead of replacing it.

severity: critical

Silent failures

Job crashes at 3am. No alert, no log, no trace. You find out Monday when the database is 3 days stale.

severity: high

Environment amnesia

Works in your shell. Fails in cron. Because cron runs with a minimal PATH and no shell profile. Every. Single. Time.

severity: high

No retry, no mercy

Network blip at 2am? Job fails. Cron won't retry. Next attempt: tomorrow. Hope it works then.

severity: medium

✱/5 ✱ ✱ ✱ ✱

Is that every 5 minutes or at minute 5? Quick — what's 0 */3 1,15 * 2? Exactly.

severity: medium

Job pile-ups

Long-running job still going when the next instance fires. Now you have two. Then three. Then your disk is full.

severity: medium

Zero history

Did the backup run last Tuesday? How long did it take? What was the output? Nobody knows. It's gone.

The difference is visibility

Same jobs. Same server. Completely different experience.

# with cron
Did backup run? ssh, check manually
Job failed? find out days later
Output? redirect to file, maybe
Duration? no idea
Env mismatch? debug for hours
Job overlapping? hope for the best
# with kron
kron status — instant overview
Alert in Slack within seconds
kron logs — full stdout/stderr
Duration tracked per run
Env captured automatically
Overlap prevention built in

Everything cron should have been

No SaaS. No YAML. No Kubernetes. Just a binary that does its job and tells you about it.

🔍

Full run history

Every run logged to SQLite. Exit codes, duration, stdout, stderr. Query with kron history and kron logs.

🔔

Built-in alerts

Slack, Telegram, webhooks. Get notified on failure, timeout, or any exit code. No external monitoring needed.

💬

Human schedules

Write every day at 2am instead of 0 2 * * *. Standard cron syntax still works too.

🧪

Dry run & test

kron test <job> runs your job immediately without recording. Validate before deploying.

📦

Single binary

One file. No runtime. No dependencies. cargo install kron or download the binary. Done in seconds.

🔄

Crontab import

kron import reads your existing crontab. Pick which jobs to migrate, or --all to import everything.

🌍

Environment capture

Jobs run with your actual shell environment. No more PATH surprises. Snapshot env per job with --capture-env.

7ms cold start

Written in Rust. 7.4MB binary. ~7ms startup. Low memory footprint. Runs on the cheapest VPS you have.

Built for agents

AI agents need tools they can call, parse, and reason about. kron was designed CLI-first — which means it's agent-first too.

🤖

Natural language in, structured data out

Agents write kron add "every day at 2am" ./backup.sh — no cron syntax to hallucinate. Status and history return clean, parseable output.

📄

TOML configs agents can read & write

Each job is a single TOML file. Agents can create, modify, and version-control job definitions without fragile regex on a monolithic crontab.

🔌

Composable primitives

add, run, test, status, logs, remove — small, predictable commands that agents can chain into workflows. Exit codes tell the full story.

claude — agent workflow
# Agent: "Set up nightly DB backup with alerts"
kron add "every day at 1am" ./db-backup.sh
✓ Job 'db-backup-sh' created
kron test db-backup-sh
✓ exit 0 (2.1s)
kron alert add-telegram db-backup-sh
✓ Telegram alerts enabled
# Agent: "Check if last night's backup ran"
kron status
db-backup-sh every day at 1am 6h ago ✓ 2.3s

No SDKs. No API keys. Just shell access — the universal agent interface.

Performance you can feel

Your scheduler shouldn't eat resources. kron is written in Rust — memory-safe, blazing fast, and compiled to a single static binary. No runtime. No garbage collector. No surprises.

7ms
cold start
7.4MB
binary size
~8MB
RSS memory
0
dependencies to install

Runs on the cheapest $5 VPS. Ships as a single binary. cargo install kron and you're done.

Simple, composable commands

Everything you need, nothing you don't.

addCreate a new scheduled job
listShow all jobs
statusJobs + last run overview
historyRun history with exit codes
logsFull stdout/stderr capture
runForce run immediately
testDry run without recording
editModify job in place
removeDelete a job
importImport from crontab
alertConfigure notifications
daemonStart/stop scheduler

Install in one command

Works on Linux and macOS. Single binary, no dependencies.

$ cargo install kron
or download from GitHub Releases
Observability visualization