Heartbeat freshness

The failure mode that hurts most with scheduled agents is silence: the cron entry that got deleted in a refactor, the queue worker that never came back after a deploy. Nothing throws, nothing pages. Freshness alerts make the absence of a run a first-class signal.

Configure the expected window

On the agent's page, open Edit schedule and set two things:

  • Schedule: when the agent is supposed to fire.
  • Expected within (minutes): the grace window. The agent is overdue if no run is received within this many minutes after the next scheduled fire time. Leave it blank to disable freshness monitoring for that agent.

This works identically whether the agent reports through an SDK or a one-line heartbeat from cron or curl. A GET /v1/ping counts as a run.

What fires, and when

A sweep runs every minute. When an agent passes its window with no run received, every enabled channel gets an agent.overdue event carrying the agent, the minutes overdue, and the last time a run was seen.

You get one alert per outage, not one per minute. The alert state is remembered until a run lands again; when it does, an agent.recovered event goes out and the slate is wiped for the next incident.

Recipes

The integration pages each end with the freshness setup for that runtime: cron, GitHub Actions, n8n, Make, Zapier, Claude Routines.