Point cronstable at the crontab you already run and it behaves like plain cron. Reach for DAGs, durable state, leader-elected clustering and a live dashboard only when you need them, all from one dependency-free daemon. And when you want it, a built-in Model Context Protocol server lets an AI agent drive the whole thing.
The same binary covers the whole range. Run it as a nicer cron on one box, or turn on the orchestration, HA and agent tooling as you grow. You never swap tools or rewrite your jobs to move from one end to the other.
Point it at the crontab you already have and keep it. One static binary, no database, no broker, no daemon zoo. It stays out of your way and only does what a cron does until you ask for more.
Switch on DAGs, leader-elected HA, fenced exactly-once, a durable state store, metrics and the agent interface. The same binary reaches Airflow-class orchestration without the metadata DB or the worker fleet.
cronstable versus its closest cron-family competitors, plus Apache Airflow as a heavier orchestrator for scale.
| Capability |
cronstable
35 native
|
yacron Python · YAML 9 native |
supercronic Go · crontab 7 native |
Ofelia Go · Docker 4 native |
dkron Go · distributed 9 native |
Cronicle Node · master/worker 9 native |
K8s CronJob native resource 8 native |
Airflow Python · orchestrator 18 native Diff. class |
|---|---|---|---|---|---|---|---|---|
| AI & agent controlSignature | ||||||||
MCP server for AI agents observe & control |
✓23 tools · read-only default | – | – | – | – | – | +3rd-party cluster MCP | +draft; 3rd-party wrapper |
Agent triage & resources canned playbooks + context |
✓5 prompts + URI resources | – | – | – | – | – | – | – |
| Scheduling core | ||||||||
YAML job configuration |
✓native YAML crontab | ✓ | – | – | – | – | ✓ | +via dag-factory |
Classic crontab files as-is Vixie /etc/crontab |
✓runs it unchanged | – | ✓ | – | – | ◐import only | – | – |
Sub-minute schedules second-level, 7-field |
✓7-field · down to 1s | – | ✓ | ✓ | ✓ | – | – | ◐timedelta only |
Extended cron dialect L · L5 · year column |
✓last-day · last-Fri · year | ✓ | ✓ | – | – | ◐year, no L | – | ✓ |
@reboot once per OS boot durable boot marker |
✓per boot, not per restart | ◐per process start | – | – | – | – | – | – |
Arbitrary per-job timezones |
✓any IANA zone, per job | ✓ | ✓ | ◐prefix hack | ✓ | ✓ | ✓ | ✓ |
Concurrency policy + timeouts execution & kill timeout |
✓policy + exec/kill timeout | ✓ | ◐no timeout | ◐no timeout | ✓ | ✓ | ✓ | ✓ |
Configurable failure conditions stdout · stderr · exit code |
✓failsWhen · stderr default | ✓ | – | – | ◐HTTP jobs only | ◐HTTP jobs only | ◐exit codes only | ◐exit codes only |
Retries with exponential backoff |
✓backoff · survives restart | ✓ | – | – | ◐no backoff | ◐fixed delay | ✓ | ✓ |
Depends-on-past gate skip while the last run fails |
✓onlyIfLastSucceeded | – | – | – | – | – | – | ✓ |
Missed-run catch-up after downtime |
✓durable catch-up | – | – | – | – | ✓ | ◐one run only | ✓ |
| Orchestration & workflows | ||||||||
DAGs / dependency graphs durable workflow engine |
✓fan-out · sensors · resume | – | – | – | ◐chaining only | ◐chains only | +Argo / Tekton | ✓ |
Cross-task data hand-off XCom |
✓XCom between tasks | – | – | – | – | ✓ | +Argo | ✓ |
Dynamic task mapping fan-out over a list, then fan-in |
✓expand: over upstream list | – | – | – | – | – | – | ✓ |
Sensors poll-until-true tasks |
✓durable poke schedule | – | – | – | – | – | – | ✓ |
Human approval gates |
✓pause for sign-off | – | – | – | – | – | +Argo | ✓ |
Backfill / historical reruns |
✓whole-DAG backfill | – | – | – | – | ◐time machine | – | ✓ |
| Distributed & fault-tolerant | ||||||||
Clustering + no double-run replicas from one config |
✓mTLS leader election · quorum | – | – | – | ✓ | ✓ | ✓ | ✓ |
Fenced exactly-once lease / lock fenced |
✓fenced via lease backend | – | – | – | ◐no fencing | – | – | ◐no fencing |
Cluster-wide concurrency scope Forbid / Replace across the fleet |
✓concurrencyScope: cluster | – | – | – | ◐forbid, race-prone | ◐max-N, no Replace | ✓ | ◐queues, no Replace |
Crash-resume of in-flight runs a peer adopts the orphan |
✓peer adopts the run | – | – | – | ◐4h stale threshold | ◐primary crash loses it | ✓ | ✓ |
Durable state store for jobs KV · locks · cursors · secrets |
✓+ idempotency & artifacts | – | – | – | – | – | ◐PV/Secrets only | ◐Variables/secrets |
| Observability & control | ||||||||
Live web dashboard tail · run · cancel |
✓live tail · 10 themes | – | – | – | ◐no cancel/tail | ✓ | +separate UI | ✓ |
HTTP REST control API |
✓status · start · cancel · history | ✓ | – | – | ✓ | ✓ | ✓ | ✓ |
Prometheus + statsd metrics |
✓both, native | ✓ | ✓ | – | ✓ | – | +kube-state-metrics | ✓ |
Per-job resource monitoring CPU time · peak memory |
✓whole process tree | – | – | – | ◐Prom gauges | ✓ | +metrics-server | – |
Failure reporting mail · Sentry · Slack |
✓+ webhook & shell | ✓ | ◐Sentry only | ✓ | ◐Pro for per-job | ✓ | +Alertmanager | ✓ |
Secret redaction in output archived logs · on by default |
✓on by default | – | – | – | – | – | +log pipeline only | ◐known values only |
| Platform & deployment | ||||||||
Native Windows + macOS + Linux |
✓all three, native | – | – | ◐Docker-centric | ✓ | ◐no Windows | – | – |
Self-contained multi-arch binaries no runtime install |
✓8 Linux arches + mac + win | ◐x86-64 only | ✓ | ✓ | ✓ | – | – | – |
Hardened container images non-root · read-only · distroless |
✓+ 8 distro variants | – | – | – | – | – | ◐you harden it | ◐not distroless |
Minimal runtime dependencies |
✓pure Python · MCP adds none | ◐8 pip deps | ✓ | ✓ | ✓ | – | – | – |
State backup · restore · migrate live-safe admin verbs |
✓live-safe backup verb | – | – | – | ◐job defs only | ◐offline only | ◐etcd-wide, offline | ◐no backup/restore |
The agent interface gets the attention, but most of cronstable is the scheduler under it: a DAG engine, a fenced cluster, a durable state store and a live console, all in the same dependency-free daemon.
A durable workflow engine rather than plain job chaining: fan-out, sensors that wait on external conditions, and XCom hand-offs between tasks. Runs survive a restart and resume mid-flight; pause on a human approval gate, then backfill history when you need to.
Run replicas from one config with mTLS leader election and quorum, so a job never double-fires. Fenced exactly-once execution through a lease backend keeps a stalled leader from overwriting its successor's work.
A store your jobs can use directly: KV, locks, cursors, secrets, idempotency keys and artifacts, all surviving restarts. It runs without an external database or Redis.
A web dashboard that tails logs, runs and cancels jobs on demand, and walks any DAG's task graph, with 10 themes. Backed by an HTTP REST API and native Prometheus + statsd.
Runs your classic Vixie crontab files unchanged, with per-job IANA timezones, concurrency policies, exec/kill timeouts, retries with exponential backoff, and missed-run catch-up after downtime.
Runs natively on Windows, macOS and Linux, shipped as self-contained binaries across 13 OS × arch targets, plus distroless images that run non-root on a read-only root filesystem. Adds zero new dependencies.
we're the only scheduler with a native agent interface.
cronstable speaks the Model Context Protocol natively, served at POST /mcp over Streamable HTTP and through a cronstable mcp stdio bridge for desktop clients. It's written in pure Python against MCP revision 2025-11-25. Enabling it adds zero new dependencies. The agent gets read-only access until you grant it write tools.
# wire it to Claude Code (remote or local) claude mcp add --transport http \ cronstable https://host/mcp \ --header "Authorization: Bearer $TOKEN" $ cronstable mcp --check mcp check: ok, protocol 2025-11-25, 23 tool(s) at http://127.0.0.1:8080/mcp
confirm: trueScheduler, durable DAG engine, a job-facing state store, a leader-elected cluster and a live console in one binary. It matches Airflow's orchestration without the metadata DB, the separate workers, or the Python-only footprint.
Across every tool surveyed, it's the only native agent interface. Airflow and Kubernetes reach MCP only through third-party, whole-system add-ons, and Airflow's own server is still a draft proposal.
Pure-Python with no new dependencies, self-contained binaries for 13 OS/arch targets, and images that run non-root on a read-only root filesystem.
Open the live dashboard and drive a nine-node fleet yourself: tail a job's logs, walk a DAG's task graph, watch leader election, and inspect the durable state store.