Instrument anything that can curl.
A Heartbeat monitor is just a URL your job hits every run. If the pings stop, you get alerted. No SDK, no agent to install, no account to make. Every example below is a real command you can paste today.
curl -sS https://golemreach.com/heartbeat/api/monitors/self-serve \
-H 'Content-Type: application/json' \
-d '{"name":"nightly-etl","period":3600,"kind":"push"}'
The response gives you a ping_url like
https://golemreach.com/heartbeat/ping/<key> and a public
https://golemreach.com/heartbeat/status/<name> page. For a server you cannot make
outbound calls from, set "kind":"pull" and a
"target" URL — Heartbeat probes it for you.https://golemreach.com/heartbeat/badge/<name>.svg anywhere.cron
Append the ping to the job so a silent miss is impossible:
*/15 * * * * /opt/etl/run.sh \ && curl -sS https://golemreach.com/heartbeat/ping/KEY >/dev/nullMissed runs (exit non-zero before the
&&) never ping, so
they page — exactly the failure you care about.systemd timer
In the
.service, ping on success:
[Service] ExecStartPre=-curl -sS https://golemreach.com/heartbeat/ping/KEY >/dev/null ExecStart=/opt/worker/run.sh ExecStartPost=-/bin/sh -c 'curl -sS https://golemreach.com/heartbeat/fail/KEY >/dev/null || true'Use
ExecStartPost to record a fail when the main process exits
non-zero.GitHub Actions (scheduled)
Workflows silently die — 60-day auto-disable, queue
delays, dropped runs. A ping survives all of it:
on:
schedule:
- cron: '*/15 * * * *'
jobs:
ping:
runs-on: ubuntu-latest
steps:
- run: curl -sS https://golemreach.com/heartbeat/ping/KEY >/dev/null
Store the URL as a repo secret and reference
${{ secrets.HB_URL }} to keep it out of logs.Unattended opencode / Claude Code loop
Loops crash overnight and grep-and-hope is not a monitor.
Ping once per loop turn:
# in the loop wrapper, after each turn: curl -sS https://golemreach.com/heartbeat/ping/KEY >/dev/nullBetter: a Stop-event HTTP hook (opencode plugin / Claude Code
settings.json hook) that pings on every turn boundary. If the
loop stalls, pings stop, you get paged. No dashboard to babysit.
Full opencode / Claude Code recipe ↗Windows Task Scheduler
The unserved half — bulk-arm every enabled task with one
ping URL. Full recipe + LastTaskResult table:
powershell -Command "Invoke-RestMethod 'https://golemreach.com/heartbeat/ping/KEY'"Monitor Windows Task Scheduler ↗
Run-gate (kill switch)
The mirror of a heartbeat: check the gate BEFORE work.
One flip halts every loop at its next boundary:
[ "$(curl -s -o /dev/null -w '%{http_code}' https://golemreach.com/heartbeat/gate/KEY)" = 200 ] || exit 0
We dogfood this: our own fleet stops via a hosted gate.Get alerts where you already are
- Webhooks — Slack / Discord / generic: set a
webhookURL when you create the monitor. JSON POST on every down/up transition. - Nostr DMs (ext#8, unique in this category) — add a
nostrnpub to the monitor and you get an encrypted NIP-17 gift-wrapped DM when it dies, plus an optional public obituary note. No email relay needed. - Email — pending an SMTP relay; disclosed honestly on pricing.
- Egress self-check (ext#14) — a
selfcheckmonitor accepts signed verdicts from a probe script on your box and pages on transitions only (trusted→challenged), so a provider silently starting to 403 your IP never goes unnoticed.
Honest posture
Heartbeat is a dead-man switch, not a metrics platform. It tells you one thing reliably: the pings stopped. It does not sample your job's internals. For that, pair it with your existing logs. Free while in beta; a $5 USDC pass lifts the rate limits — see pricing.