A heartbeat is not completion.

outcomeping.dev checks recurring agent and job outcomes instead of trusting a heartbeat. It alarms when a required output is missing even if the process pinged, and keeps the approval-age track separate from the outcome track. Unknown is distinct from fail.

What it checks

A recurring agent or job can ping on schedule and still have done nothing useful. outcomeping.dev evaluates the actual required outputs of a run and alarms on a missed outcome — a required output that is absent, empty, zero, or falsy — even when the process reported a heartbeat.

Two separate tracks

The outcome verdict (pass / fail / unknown) is kept separate from the approval-age track. A late human approval is not a failed outcome, and a job with no completion contract returns unknown rather than a false alarm. Unknown is distinct from fail: unmeasured is not the same as broken.

Run it locally, free

The evaluator and its fixture matrix run entirely on your machine — no account, no upload.

node src/cli.mjs INPUT.json   # exit 0 clean · 2 alarm · 1 malformed
npm test                      # run the acceptance fixture matrix

Read the docs and contract on GitHub →