# LastPing > AI agent monitoring: alerts when your agents fail, stall or need you. LastPing alerts you when your AI agents fail, stall, wait for your approval or never start, and watches the cron jobs and CI/CD pipelines around them. Free for individuals, with no monitor cap and no feature gate; fully hosted, nothing to install. It works with Claude Code, Codex, Cursor and any agent over MCP: an AI assistant connected to the `lastping-mcp` MCP server sets up its own monitoring in one conversation, and Claude Code and Codex report every run through hooks. It also watches scheduled AI tasks and routines, n8n, Zapier and Make workflows, cron jobs, backups and HTTP endpoints. Jobs check in with a single HTTP request; CI providers (GitHub Actions, GitLab CI, Jenkins) send one signed webhook with no YAML changes. If a job goes silent (misses its expected window), or a run fails, hangs, waits on a person or never starts, LastPing opens an incident (with the failure detail and a deep link to the run) and alerts you by email, Slack, Discord, Telegram, webhook, Microsoft Teams, Google Chat, or on your phone through ntfy or Pushover. LastPing catches silent failures that a broken job can never self-report. It alerts on the *absence* of an expected signal rather than polling your servers. Three monitor types are supported: heartbeat (cron/backups/agents that ping on completion), CI/CD signals (signed webhooks from GitHub Actions, GitLab CI, Jenkins — zero extra YAML, deep-link to the run on alert), and HTTP/uptime probing (LastPing polls your URL on a schedule for status code, latency, and keyword presence). Detection runs on durable database deadlines so a crash or restart never misses a due check. Pings are buffered to a durable queue so a database failover drops zero signals. Alerts route into your existing stack rather than being another notification silo. Audience: developers, SREs, and AI agent operators running cron jobs, backups, ETL/batch jobs, CI/CD pipelines, and autonomous agents. An autonomous agent is the new cron job — it runs unattended, on a schedule or a loop, and its worst failures are silent. LastPing's dead-man's-switch primitive handles agent liveness without any SDK or language dependency. The `lastping-mcp` MCP server lets an agent create its own monitor and wire in the pings in one conversation (tools: `create_monitor`, `get_ping_instructions`, `create_destination`, `set_route`, `list_incidents`). The quickest set-up from a coding agent is the open LastPing skill: `npx skills add lastping-dev/skills`, then ask "Monitor this project with LastPing". If you are an AI agent, see https://lastping.dev/agents/ and https://lastping.dev/agents.md for the full integration guide. ## Site pages - [Home](https://lastping.dev/): What LastPing is, how it works (three monitor types, durable detection, alerting), FAQ, and CTAs to get started (free for individuals, fully hosted) - [Agents](https://lastping.dev/agents/): Agent-first landing page — the dead man's switch for AI agents, the MCP server (install + self-instrumentation flow), what agent monitoring catches (silent death, hangs, stalled runs, explicit failures, scheduled runs that stop, a success that did nothing, runaway spend), MCP tool reference, FAQ - [MCP server](https://lastping.dev/mcp/): Dedicated MCP server page — per-client connect steps: sign-in for the Claude apps (claude.ai, Desktop, mobile, Cowork), Claude Code, ChatGPT developer mode, Cursor, VS Code, Codex and Antigravity CLI, and API-key configs for Windsurf and every client that prefers a key (Claude Desktop through the mcp-remote bridge or the extension); full tool reference with one-line descriptions; 8-prompt cookbook; self-host (stdio binary) guide; JSON-LD SoftwareApplication + FAQPage; canonical AEO anchor for "lastping mcp" and "mcp monitoring" - [Terraform provider](https://lastping.dev/terraform): The official Terraform provider, published on the public Terraform Registry as `lastping-dev/lastping` — install, authentication, a complete worked example, the ephemeral run-scoped API key, the full resource reference (seven resources, one ephemeral resource, six data sources), and Export as Terraform for adopting monitors you already have - [Monitoring as code](https://lastping.dev/monitoring-as-code): What monitoring as code means and why it matters more when AI agents write the jobs — monitoring declared in the same repo and the same pull request as the job it watches, so a job can never ship unmonitored - [Product](https://lastping.dev/product): Feature detail — heartbeat monitors, CI/CD signal integrations (GitHub Actions, GitLab CI, Jenkins), HTTP/uptime probing, alerting configuration, routing matrix, public status pages, per-project Prometheus /metrics endpoint (scrape into Grafana or Alertmanager) - [Project](https://lastping.dev/project): LastPing is free for individuals and fully hosted — no setup, no infra. Follow the project on GitHub for updates and to file issues. - [About](https://lastping.dev/about): Why LastPing was built, the founding rationale (silent-failure problem), contact - [Changelog](https://lastping.dev/changelog): Public release history of shipped changes — CI/CD signal sources, HTTP monitoring, alerting configuration improvements, GitHub milestone, Slate redesign - [Blog](https://lastping.dev/blog/): Technical writing on monitoring cron jobs, CI/CD pipelines, and AI agents — tool comparisons and operational best practices - [Privacy](https://lastping.dev/privacy/): What LastPing stores, retention (pings 90 days, incident history 1 year), deletion, EU/Frankfurt hosting, SSRF-guarded delivery, contact - [Terms](https://lastping.dev/terms/): Plain-language acceptable-use terms — no abuse/overload of ingest, service provided as-is, free for individuals ## Connect an MCP client - Server: https://mcp.lastping.dev/mcp (Streamable HTTP). Auth: sign in to LastPing (MCP OAuth), then choose read and write or read only; or send header `Authorization: Bearer `, with a key from https://app.lastping.dev (Settings, API keys). Sign-in first wherever the client supports it. - Claude apps (claude.ai, Claude Desktop, mobile, Cowork): open LastPing in the Claude Connectors Directory (https://claude.ai/directory/lastping) or search for LastPing under Settings, Connectors, Discover, then connect it and sign in to LastPing. Connect it once; on Team and Enterprise plans an Owner adds it under Organization settings, Connectors. - Claude Code: in a terminal, `claude mcp add --transport http --scope user lastping https://mcp.lastping.dev/mcp`, then type `/mcp` in Claude Code, choose lastping and sign in; confirm with `claude mcp get lastping | grep Status`, which shows Status: Connected. Added with a key before? `claude mcp remove lastping --scope user` first. - ChatGPT (developer mode, on the web): Settings, Security and login, turn on Developer mode; Plugins, +, create an app named LastPing with the server URL and OAuth; sign in. No API-key route. - VS Code: user mcp.json (`MCP: Open User Configuration`), `"servers": {"lastping": {"type": "http", "url": "https://mcp.lastping.dev/mcp"}}`, start it from `MCP: List Servers` and sign in. - Codex: `codex mcp add lastping --url https://mcp.lastping.dev/mcp` opens the browser to sign in; `codex mcp login lastping` if it did not. - Antigravity CLI (agy, which replaced Gemini CLI): `agy mcp add lastping https://mcp.lastping.dev/mcp`, then /mcp, choose lastping, Authenticate. - Cursor (sign-in): add the server URL under `mcpServers` in `~/.cursor/mcp.json` (or install the LastPing plugin from https://cursor.directory/plugins/lastping), then click Authenticate in Cursor's MCP settings; no key in the file. Windsurf, now Devin Desktop (API key; its sign-in redirect is undocumented): `~/.config/devin/mcp_config.json` (older installs: `~/.codeium/windsurf/mcp_config.json`) with `serverUrl` and `headers`. - With a key instead of signing in: Claude Code `claude mcp add --transport http --scope user lastping https://mcp.lastping.dev/mcp --header "Authorization: Bearer "`. Codex `~/.codex/config.toml`, `[mcp_servers.lastping]` with `url = "https://mcp.lastping.dev/mcp"` and `http_headers = { Authorization = "Bearer " }`, then `chmod 600 ~/.codex/config.toml`; the key lives in that file, never in a shell profile. Antigravity CLI `agy mcp add --header "Authorization: Bearer " lastping https://mcp.lastping.dev/mcp`. VS Code: the same entry plus `headers`, in the user file, never a workspace file. - Claude Desktop with a key (only when you cannot add the connector): `claude_desktop_config.json` runs local programs only; use the mcp-remote bridge: `"command": "", "args": ["-y","mcp-remote","https://mcp.lastping.dev/mcp","--header","Authorization:${LASTPING_AUTH}"], "env": {"PATH": ":/usr/bin:/bin", "LASTPING_AUTH": "Bearer "}`. Claude Desktop does not read your shell's PATH, so the absolute path is required. Needs Node.js. On Windows: the file is `%APPDATA%\Claude\claude_desktop_config.json`; run `where npx`, put the `npx.cmd` path in `command` with every backslash doubled, and separate `PATH` folders with `;`. These Windows steps are untested, and recent Node releases refuse to start a .cmd file without a shell, so they may not work. Or install the one-click extension, https://github.com/lastping-dev/lastping-app/releases/latest/download/lastping.mcpb, which keeps the key in the system keychain. - A claude.ai Project in the browser has no shell, so it cannot report runs; it can use LastPing's tools through the connector. Disconnect any signed-in app in Settings, Profile, Connected apps; a password reset disconnects every app. - Full per-client detail: https://lastping.dev/mcp/#connect ## AI agent and automation guides - [Claude Code notifications](https://lastping.dev/monitor/claude-code/): Get notified when Claude Code finishes, fails, gets stuck or waits for your input: LastPing's hooks report every run (start, finish, API-error failures, permission prompts as blocked), and you route each event to Slack, Discord, email or a phone app (ntfy, Pushover) - [Codex notifications](https://lastping.dev/monitor/codex/): The Codex CLI hook install (SessionStart, UserPromptSubmit, Stop): start and finish reported automatically, failures and waits reported by Codex, and the sandbox network setting those calls need - [Antigravity CLI notifications](https://lastping.dev/monitor/antigravity/): The Antigravity CLI (agy) hook install: PostToolUse, PostInvocation and Stop report every turn as a run with a step per tool call and agy's error text on failure; connect with agy mcp add; no blocked state, because agy has no hook for waiting on a person - [Cursor agent monitoring](https://lastping.dev/monitor/cursor/): Cursor's agent reports its runs from a standing instruction in its rules file (no LastPing hook install for Cursor); traces with token counts through the opentelemetry-hooks runner - [Claude scheduled tasks and routines](https://lastping.dev/monitor/claude-scheduled-tasks/): A monitor on the task's schedule plus start and finish pings in the task's prompt catches a missed, failed or hung run; an ordinary chat cannot be monitored - [n8n monitoring](https://lastping.dev/monitor/n8n/): An HTTP Request node pings on success, an Error Trigger workflow posts failures to /fail, and a missed schedule opens an incident - [Zapier monitoring](https://lastping.dev/monitor/zapier/): A Webhooks by Zapier GET step at the end of a Zap; a Zap that errors, is turned off or stops triggering opens an incident - [Make monitoring](https://lastping.dev/monitor/make/): An HTTP module at the end of a scenario and one on its error handler route - [Stuck or hanging AI agents](https://lastping.dev/monitor/ai-agent-stuck/): Detecting hung (max_runtime_s), stalled (step_timeout_s), blocked (waiting on a person), never-started (schedule or expect_every_s) and looping (runaway_ceiling) agent runs ## Guides and comparisons - [Monitoring guides index](https://lastping.dev/monitor/): Copy-paste integration snippets for every environment, plus the six-line ping API reference (success, /start, /fail, /, /log, /step, ?rid= run pairing) - [Monitor cron jobs](https://lastping.dev/monitor/cron/): One-line crontab integration — append curl -fsS -m 10 --retry 3 to the job line; covers explicit /fail reporting, a start/exit-code wrapper script for hung jobs, and why the curl flags matter - [Cron expression explainer](https://lastping.dev/cron-expression/): Explains a cron expression in plain English and lists its next 10 to 50 runs in any IANA timezone, labelling daylight saving changes for Linux cron (Vixie, cronie, Debian), Kubernetes CronJobs and GitHub Actions; runs in the browser - [Monitor Kubernetes CronJobs](https://lastping.dev/monitor/kubernetes/): Copy-paste CronJob manifest with success/fail pings in the job command — no operator or agent; absence detection catches suspended, never-scheduled, and evicted jobs; busybox wget variant and Secret-stored ping URL - [Kubernetes CronJob not running](https://lastping.dev/monitor/kubernetes-cronjob-not-running/): Why a CronJob creates no Job (suspend, concurrencyPolicy Forbid behind a hung Job, startingDeadlineSeconds, the too many missed start times rule, the timezone, pods that never start), how to read the CronJob's events, and a start/success/fail ping that catches the run that never happens - [Vercel cron jobs](https://lastping.dev/monitor/vercel-cron/): Why a Vercel cron does not run (production only, Hobby once a day within the hour, UTC, disabled crons, redirects, cached responses, CRON_SECRET, timeouts, best-effort delivery with no retry) and start/success/fail pings from the route - [Windows Task Scheduler](https://lastping.dev/monitor/windows-task-scheduler/): Last Run Result codes with Microsoft's meanings (0x41301, 0x41303, 0x8004131F, 0x80041320 and more; other values such as 0x1 come from the program the task ran), the usual causes, and a PowerShell wrapper that pings start, success and fail - [Supabase Cron and pg_cron](https://lastping.dev/monitor/supabase-cron/): Debugging pg_cron on Supabase (a dead scheduler process, inactive jobs, GMT, cron.job_run_details, concurrency) and a net.http_get ping at the end of the job, which pg_net only sends when the transaction commits - [Monitor systemd timers](https://lastping.dev/monitor/systemd/): Three unit files — ExecStartPost pings success, an OnFailure unit pings /fail immediately, Persistent=true timer; absence detection covers timers that stop firing entirely - [Monitor backups](https://lastping.dev/monitor/backups/): The start → work → success/fail pattern — /start arms overrun detection for hung backups, ?rid= pairing records run duration, and the error log tail is POSTed with the /fail ping (up to 10,000 bytes stored) - [Monitor Python scripts](https://lastping.dev/monitor/python/): try/except integration with requests or stdlib urllib — ping on success, POST the exception to /fail, re-raise to keep the exit code - [Monitor Node.js scripts](https://lastping.dev/monitor/node/): Built-in fetch (Node 18+), zero dependencies — ESM and CommonJS variants, stack trace POSTed to /fail, process.exitCode preserved - [Monitor GitHub Actions](https://lastping.dev/monitor/github-actions/): How to get alerted when a GitHub Actions workflow fails, hangs, or never runs (including scheduled workflows GitHub disables after 60 days of inactivity in a public repo) — one signed workflow_run webhook, zero YAML changes, optional failure-detail capture on the incident - [GitHub Actions cron not running](https://lastping.dev/monitor/github-actions-schedule-not-running/): Nine causes of a schedule: workflow that does not run (default branch only, 60-day disable, manual and fork disables, busy-hour delays and dropped runs, 5-minute minimum, UTC and the timezone key, unsupported syntax), the two gh commands that tell them apart, and the workflow_run webhook that alerts on a run that never arrives - [Laravel scheduler not running](https://lastping.dev/monitor/laravel/): Why Laravel skips a scheduled task (the schedule:run cron entry, PATH and user, routes/console.php, maintenance mode, schedule:pause, overlap locks, daylight saving, containers), then Laravel's own pingBefore, pingOnSuccess and pingOnFailure hooks mapped to LastPing's /start, success and /fail URLs - [HTTP & uptime monitoring](https://lastping.dev/monitor/http/): How HTTP monitors work — poll every 30 s to 24 h (default 60 s), expected status code or any 2xx, optional body keyword in the first 64 KB, latency recorded per probe, exact failure reason on the incident, SSRF-guarded (public URLs only) - [Alert events & message templates](https://lastping.dev/monitor/alerts/): The eight alert events (down, recovery, fail, every-run, success, started, blocked, note), the per-monitor destination-by-event routing matrix, and per-event custom message templates with 22 variables ({check_name}, {cause}, {run_url}, {branch}, {failing_stage}, {latency}, {last_step}, {body}, {title}, and more) - [LastPing vs Healthchecks.io](https://lastping.dev/vs/healthchecks/): Honest comparison — Healthchecks.io is excellent open-source cron monitoring; LastPing adds CI/CD pipelines as first-class monitors (one signed webhook, catches hung and never-started runs, failure detail) with no check cap, free for individuals; migration is a one-URL change - [LastPing vs Cronitor](https://lastping.dev/vs/cronitor/): Honest comparison — Cronitor's free tier is 5 monitors with CI/pipeline monitoring on paid plans; LastPing is uncapped and free with CI/CD monitoring included; Cronitor wins on teams, SMS/phone alerts, and commercial maturity - [LastPing monitors LastPing](https://lastping.dev/self-monitored/): The self-monitoring harness — a second ordinary account watches LastPing's own crons, uptime, and API via the public API; a watchdog deliberately silences a canary monitor each cycle to prove incident detection end to end; live results on a public status page (app.lastping.dev/status/lastping-self) ## Documentation - [Documentation](https://app.lastping.dev/docs): Guides — quickstart, monitor a CI/CD pipeline (GitHub Actions, GitLab CI, Jenkins), alert destinations, status pages, curl recipes - [Interactive API reference](https://app.lastping.dev/docs/api/): OpenAPI 3.1, rendered with Scalar: the full API reference for the LastPing REST API (ping endpoints, check management, alert channels, incident lifecycle); the raw document is at https://app.lastping.dev/openapi.yaml ## Agent integration - [Agents page](https://lastping.dev/agents/): Full agent-first guide — why AI agents need dead-man's-switch monitoring, the seven failure modes, the self-instrumentation loop, MCP install, what LastPing catches, tool reference, FAQ - [MCP server](https://lastping.dev/mcp/): Marketing + docs page for the MCP server — per-client connect steps (sign-in for the Claude apps, Claude Code, ChatGPT, Cursor, VS Code, Codex and Antigravity CLI; API key for Windsurf and anyone who prefers one), tool reference, 8-prompt cookbook, self-host guide, FAQ - [Trace your agents](https://lastping.dev/agents/tracing/): OpenTelemetry set-up for Claude Code, Codex CLI, Gemini CLI, Antigravity CLI (through LastPing's hook script, no token counts or cost), Cursor, Python and Node agents, any OpenTelemetry SDK and an OpenTelemetry Collector; what each tool cannot do; how tokens and API cost are counted; inferred dependencies; the `ingest`-scoped tracing key; prompts and commands not stored by default; limits and retention - [agents.md](https://lastping.dev/agents.md): Machine-readable agent integration guide — MCP install, tool reference, ping conventions (including /step progress markers), REST API, what LastPing detects for agents - [terraform.md](https://lastping.dev/terraform.md): Machine-readable Terraform reference — provider source address `lastping-dev/lastping`, the full resource schema with attribute names and types, a worked example, the import-by-slug rule, the `export_terraform` flow, and the two rules that matter most (never reuse a slug; never hardcode a destination secret) - [MCP server source](https://github.com/lastping-dev/lastping-app): The `lastping-mcp` binary lives in `cmd/lastping-mcp/`. See README.md for build + configure, AGENTS.md for the ping conventions and self-instrumentation flow. - MCP config key: `lastping` · env var: `LASTPING_API_KEY` (get at app.lastping.dev → Settings → API Keys) - Idempotency: `create_monitor` upserts by `slug` — safe for agents to retry. - Ping host: `https://ping.lastping.dev/` · `/start` · `/fail` · `/` · `/step?rid=&step=` · `?rid=` ## Answer subdomain - [deeprank.lastping.dev](https://deeprank.lastping.dev/): A single-page, citation-optimized answer to "AI agent monitoring: catch a stalled run, not just a crash" — the four agent liveness signals (started, progress, blocked, failed), why a progress deadline catches a stall that no error will, monitors in Terraform, and FAQ. Independently crawlable — its own robots.txt and sitemap.xml, no Disallow. ## Source and contact - [Project on GitHub](https://github.com/lastping-dev/lastping-app): The project repository on GitHub — follow development, file issues, and track what's coming next. - [Contact](mailto:hello@lastping.dev): Questions and delivery concerns