Scheduler stops. Site stays up.
A deploy clobbers your cron entry. The app responds 200. No one fires the scheduler. Your nightly emails stop.
GET /health 200 ok schedule:run · 17h ago
Crontinel watches Laravel scheduled tasks, queue workers, Horizon supervisors, backups, and agent runs, so you hear about the failure before your users do.
A URL responding 200 doesn't mean your cron ran. It doesn't mean your workers are draining. It doesn't mean your invoices queue isn't 6,000 deep, or that your agent isn't looping on a broken tool call. Generic monitors can't tell you any of that.
A deploy clobbers your cron entry. The app responds 200. No one fires the scheduler. Your nightly emails stop.
GET /health 200 ok schedule:run · 17h ago
A model retry storm or a tool-call loop runs for 40 minutes. The endpoint returns 200 for every request. You find out from billing.
api.status 200 ok agent.run.874 42m · 318 tool calls
A worker process died. Your queue manager shows "running" because one worker is still up. Your billing queue is dead. No errors. No alerts. Just silence.
queue.manager running worker.emails · crashed
One SDK hooks into your scheduler, queue driver and agent runner. It watches job runs, queue depth, worker state, model latency and agent tool calls, end to end. No endpoint pings. No per-task wrapping. No missed instrumentation.
Per-worker status, paused detection, queue sparklines, failed job rate. Horizon, Sidekiq, Celery, BullMQ, RQ, Temporal. The moment one blinks, you know.
Every scheduled task registers a run attempt, exit code, and duration. Missed runs trip an alert before the next cron tick.
Hooks into your framework's events, not your code.
OSS first. Local dashboard, CLI, no SaaS needed.
One alert fans out to the channels your team actually watches - per-service routing, quiet hours, auto-resolve.
One command verifies scheduler, supervisors and queues after each deploy. Zero-downtime monitoring that fails loud.
$ crontinel check ✓ scheduler last run 00:00:12 ago ✓ workers.default 2 supervisors · running ✓ queue.invoices 127 pending · 2m oldest ✓ agents.support 12 runs · p95 8.2s ✗ queue.emails backpressure · 6,413 pending
Track runs, tool calls, token spend, model latency and loop detection. Ask via MCP, so your own agent can answer "are any queues or agents backing up?" with real data.
Drop the SDK in. No scheduler wrapping. No per-job decorators. No changes to existing jobs.
# pick your runtime $ npm i @crontinel/node $ pip install crontinel $ go get github.com/crontinel/go $ gem install crontinel $ composer require crontinel/laravel $ dotnet add package Crontinel
Slack, PagerDuty, email, webhook. HMAC-signed payloads. Quiet hours. Route once, in .env.
# .env CRONTINEL_ALERT_CHANNEL=slack CRONTINEL_SLACK_WEBHOOK=...
We read scheduler events, worker state, queue internals and agent traces. When something drifts, you hear from us, not a user.
# ci/cd deploy hook $ crontinel check ✓ 47 jobs · 3 workers · 2 queues · 4 agents
Every scheduled task with its last run, duration and exit code. Every worker with its state. Every queue with depth, oldest job, and failure rate. Every agent run with its tool calls and token spend.
| Task | Last run | Duration | Status |
|---|---|---|---|
| generate:daily-invoices | 2m ago | 1.82s | ok |
| dunning:send-reminders | 14m ago | 940ms | ok |
| sync:stripe-webhooks | 17m ago | ... | exit 1 |
| export:accounting-feed | 29m ago | 4.1s | ok |
| telemetry:roll-up | 1h 02m ago | 12.4s | slow |
| cleanup:stale-sessions | 3h ago | 220ms | ok |
| Queue | Depth | Oldest | Trend |
|---|---|---|---|
| default | 12 | 200ms | |
| invoices | 127 | 2m 04s | |
| emails | 6,413 | 12m 04s | |
| analytics | 88 | 400ms | |
| notifications | 3 | 80ms |
Trusted by developers worldwide
For one app. Forever.
For the team with real pagers.
Unlimited apps, teammates, history.
Crontinel is SDKs and a CLI, not a vendor lock-in. Every runtime has its own MIT-licensed package that works against your own database. The cloud dashboard is an option layered on top, not a dependency.
Node & TypeScript. BullMQ, Agenda, node-cron, workers.
Celery, RQ, Huey, APScheduler, Prefect, Dramatiq.
Asynq, Machinery, Temporal, gocron, native tickers.
Tokio, async-std, apalis, tokio-cron-scheduler.
Framework-agnostic PHP library. Symfony Messenger + plain cron.
Laravel Horizon & scheduler. Auto-detect, zero wrap.
Framework-agnostic Ruby gem. Sidekiq, Resque, DelayedJob, Rake.
Rails engine. Auto-instruments ActiveJob and ActiveScheduler.
Rust core. The recorder, agent and shared wire format.
Language-agnostic. Wrap any cron, Docker job, K8s CronJob.
Hangfire, Quartz.NET, native TaskScheduler, Worker Service.
MCP server. Let your agent query jobs, queues and runs.
The open-source package is free forever. The SaaS adds the things you would have to build yourself.
Everything the OSS packages do, plus multi-app dashboards, team access, long-horizon history, an MCP server, and routing rules. You keep the self-hosted SDKs; we handle the rest.
MIT licensed. Every SDK works standalone - Blade dashboard, CLI health check, Slack alerts, queue and cron monitoring. No SaaS required. Own your data.
npm i @crontinel/node pip install crontinel go get github.com/crontinel/go composer require crontinel/laravel gem install crontinel If you're comparing tools or looking for a specific Laravel failure mode, these are the strongest pages on the site.
See what cron monitoring covers, what queue monitoring covers, and why you need both for Laravel production apps.
Track paused supervisors, queue depth, and failing workers before the backlog becomes customer visible.
Catch delivery failures, retry storms, and stalled callback queues before customers notice.
Catch the moment schedule:run stops arriving, runs late, or silently skips a job.
Route the right failures to Slack, PagerDuty, or webhooks without drowning the team in noise.
Publish a simple public incident page for cron, queue, and webhook problems you control.
Free plan, no credit card. Two commands to install. Slack alert in under five minutes.
Get launch updates and the first release notes when Crontinel is ready.
Loading current count...