Never ran
Expected start missed, including its grace period.
Catch missed starts, overdue runs, stalled progress, and unmet completion checks.
Free plan · No card required · No model proxy
from watchdog_agent import Watchdog
with Watchdog() as watchdog:
with watchdog.run("daily-report", cancellable=False):
print("Synthetic job completed")Install SDK 0.2.0 from PyPI; set your URL and telemetry key.
Install and verify →Alongside observability
Define a successful run: when it starts, how long it takes, what progress means, and which result must exist.
Monitoring model →Runtime limit; schedule optional.
Report starts, completion and failures.
Inspect incidents alongside your logs.
A stalled run
Tools keep running; your code reports no new completed records.
A configured nine-minute timeout raises no_progress.
Configure progress checks →Evaluated on the next background check. No delivery-time guarantee.
Four failure modes
Expected start missed, including its grace period.
No completion before the runtime limit.
Missing application-reported progress, or repeated instrumented tool cycles.
Required result absent or verification failed.
Try it yourself
Run four synthetic cases with Python, the public SDK and a dedicated test job. No model calls or private repository needed.
Completes; no incident expected.
Expect runtime_exceeded.
Expect tool_loop.
Reports progress; no incident expected.
Optional instrumentation
Start with lifecycle and runtime. Missing optional signals don’t fail a lifecycle run; completion alone does not verify the required result.
| Check | You supply | Coverage limit |
|---|---|---|
| Lifecycle & runtime | Registered job, limits, run context. | Silence cannot distinguish crashes from lost telemetry. |
| Missed start | Cron schedule, timezone, grace period. | Observes reported starts, not your scheduler. |
| Progress | Meaningful milestones; opt-in timeout. | Tool calls and heartbeats do not reset it. |
| Tool cycles | Instrumented tool fingerprints. | Repeated work can be legitimate; unobserved tools remain unknown. |
| Cost & outcomes | Costs, named outcomes or verifier. | Self-reported outcomes aren’t independent verification. Costs cover reported usage only. |
No raw prompts or outputs required. Arguments are fingerprinted locally; keep sensitive content out of messages and metadata. Data handling →
Confirm an email recipient, then send a test alert. Alert setup →
Cancellation and retry are off by default and require runtime cooperation.
Launch plans
| Included | Developer — Free | Pro — US$19/month |
|---|---|---|
| Monitored jobs | 2 | 20 |
| Completed run history | 7 days | 30 days |
| Accepted events per UTC calendar month | 10,000 | 100,000 |
| Monitoring checks, email & Slack alerts, SDK & supported integrations | Included | Included |
| Support | Documentation & best-effort replies | Email support, without a 24/7 promise |
No card is needed for Developer. Pro renews monthly through Stripe. Configure your own alert destinations. New telemetry is rejected at the monthly allowance; duplicates do not count twice.
If Pro ends, monitoring continues for seven days. Choose two jobs to keep in Account & billing; monitoring on the rest is then paused. Without a saved selection, your two oldest monitored jobs are kept. Active runs, open incidents and unresolved deliveries may require operational records beyond the history window.
Install the SDK from PyPI and connect a job from the quickstart.