Show HN: Capto – alerts when a background job goes quiet, with breadcrumbs

johndory801 pts1 comments

Capto — cron job, worker and container monitoring with context on every alert

Tell me when a worker goes quiet, and show me the last useful context.<br>A dead-man’s switch for cron jobs, workers and containers. When one stops, you get the alert and the breadcrumbs it left behind — not a dashboard to go digging through.<br>Start freeTry it without an account<br>20 checks free, no card. Detection every 30s on every plan.

worker-heartbeatsvg]:pointer-events-none [&>svg]:size-3! [a]:hover:bg-muted [a]:hover:text-muted-foreground gap-1.5 border-transparent bg-state-down-surface text-state-down">down<br>No ping for 6m 12s — expected every 2m

14:26<br>Last context before it went quiet14:24:02infojob startedjob=check_status<br>14:24:03infofetched accountscount=41<br>14:25:57warnrate limited, backing offretry_in=30s<br>14:26:31errorupstream returned 503host=api.example.com<br>14:26:34inforetry 3 of 3job=check_status

Heartbeat, cron, HTTP and Docker monitoring for background jobs.

One line in your job<br>Add a ping where the work finishes. Capto starts expecting it, and says something the moment it stops arriving. There is no agent to install and no port to open.<br>Breadcrumbs are optional and cost nothing until something breaks — the last ones are snapshotted onto the incident when a check goes down. How that context reaches the alert.

Every runcurl -fsS "$CAPTO_PING_URL"<br>Optional contextawait capto.breadcrumb({<br>message: "fetched accounts",<br>data: { job: "check_status", count: 41 },<br>});

What it guarantees<br>Monitoring is only worth anything if it holds up on the night it matters. These are the parts worth knowing before you trust it with something.<br>Detection is independent of notificationMuting a check or entering quiet hours suppresses the alert, never the evaluation. A silenced check that goes down still reads as down. Pausing is the switch that stops detection.<br>An alert is queued before it is sentEach notification is a row per channel, retried with exponential backoff. An ntfy or Telegram outage delays your alert instead of dropping it, and a recovery notice only goes out for an outage that was actually announced.<br>One open incident per checkEnforced by a unique index rather than a read-then-write, so a check failing over and over cannot open duplicates — or go quiet after the first alert.<br>Cron checks understand your scheduleThe last ping is compared against the previous scheduled fire, so weekly and monthly jobs work correctly. The timezone is validated when you save it, not when it matters at 3am.

Three check types, and recipes<br>heartbeatA worker or daemon pings a URL. Silence past the interval plus grace opens an incident. Long-running agents.

cronA schedule and a timezone. A missed fire window is the signal, so a job that never starts is caught. Jobs that never start.

httpCapto polls your endpoint and needs consecutive failures before it pages, so one blip stays quiet. When HTTP is the wrong signal.

Recipes on heartbeat. Docker, Podman and systemd — a sidecar or host cron pings while the thing is healthy. Capto never needs your Docker socket. Without the Docker socket.<br>Alerts go to ntfy, Telegram, email or a webhook. You are never charged per notification, and detection speed is not a plan lever.

Find out from Capto, not from a customer.<br>Start freeTry the demoSee pricing

© 2026 Capto.run

capto alert down goes quiet cron

Related Articles