Skip to content
watchdogβStart free

Reliability monitoring for unattended AI agents.

Catch missed starts, overdue runs, stalled progress, and unmet completion checks.

Free plan · No card required · No model proxy

YOUR EXISTING PYTHON JOB01 / lifecycle
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 →
Missed starts Overdue runs Missing progress Required outcomes

Alongside observability

Keep your tracing.

Define a successful run: when it starts, how long it takes, what progress means, and which result must exist.

Monitoring model →
  1. 01

    Set expectations

    Runtime limit; schedule optional.

  2. 02

    Connect a job

    Report starts, completion and failures.

  3. 03

    Investigate alerts

    Inspect incidents alongside your logs.

A stalled run

Still running.
No progress.

Tools keep running; your code reports no new completed records.

A configured nine-minute timeout raises no_progress.

Configure progress checks →
SYNTHETIC ILLUSTRATION

50 records to process

  1. Run started
  2. Progress reported: 12 / 50
  3. Progress reported: 21 / 50
  4. Tool activity continues
  5. Last reported progress: 21 / 50Observation only; no new progress event.
No meaningful progress for 9 minutes

Evaluated on the next background check. No delivery-time guarantee.

Four failure modes

Know when work fails.

Never ran

Expected start missed, including its grace period.

Ran too long

No completion before the runtime limit.

Stalled or looped

Missing application-reported progress, or repeated instrumented tool cycles.

Required outcome missing

Required result absent or verification failed.

Try it yourself

Run the Failure Lab.

Run four synthetic cases with Python, the public SDK and a dedicated test job. No model calls or private repository needed.

What the lab proves—and doesn’t →

  1. 01

    Healthy execution

    Completes; no incident expected.

  2. 02

    Overdue run

    Expect runtime_exceeded.

  3. 03

    Repeated tool cycle

    Expect tool_loop.

  4. 04

    Legitimate repetition

    Reports progress; no incident expected.

Optional instrumentation

Choose your coverage.

Start with lifecycle and runtime. Missing optional signals don’t fail a lifecycle run; completion alone does not verify the required result.

Signals and limits
CheckYou supplyCoverage limit
Lifecycle & runtimeRegistered job, limits, run context.Silence cannot distinguish crashes from lost telemetry.
Missed startCron schedule, timezone, grace period.Observes reported starts, not your scheduler.
ProgressMeaningful milestones; opt-in timeout.Tool calls and heartbeats do not reset it.
Tool cyclesInstrumented tool fingerprints.Repeated work can be legitimate; unobserved tools remain unknown.
Cost & outcomesCosts, 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 →

Python first.

Use plain Python or the optional OpenAI Agents adapter.

Adapter coverage →

Get notified.

Confirm an email recipient, then send a test alert. Alert setup →

Cancellation and retry are off by default and require runtime cooperation.

Launch plans

Start free. Monitor more with Pro.

IncludedDeveloper — FreePro — US$19/month
Monitored jobs220
Completed run history7 days30 days
Accepted events per UTC calendar month10,000100,000
Monitoring checks, email & Slack alerts, SDK & supported integrationsIncludedIncluded
SupportDocumentation & best-effort repliesEmail 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.