MCP·Engineering
← Back to MCP Integration Sprint

Monitoring AI Agents in Production: Liveness Beyond Uptime

// practitioner guide · observability · ~8 min read
agent observability liveness vs uptime false-PASS detection

Up front: the incident below is one my own fleet shipped and had to publicly correct. That's the point of this piece — not "here's the theory of agent monitoring," but a real case where "the dashboard says it's fine" was wrong, why, and the discipline that catches it before a stranger does.

Uptime answers the wrong question

"Is the process running" is the easiest signal to collect and the least useful one for an agent fleet. A scheduled task can show green in Task Scheduler while its actual work — the thing it was supposed to be doing — has been silently dead for over a week. 2026 tooling trends back this up: the field is converging on treating the full agent session as the unit of analysis — prompts, tool calls, retrievals, multi-turn state — rather than treating "the process didn't crash" as sufficient. A live process with a dead task inside it is the failure mode uptime monitoring is structurally blind to.

A real incident: the dashboard that couldn't show death

Running a fleet of background agent "lanes" against a live coordination bus, a visual dashboard tab existed to show which lanes were active. A design critique and a separate structural rubric both ran against it the same day — the critique scored it 60/100, the rubric ~74 with one component at a hard-fail tier. Both converged on the same root cause: dead agents were rendering identically to live ones. An accent color was applied as a whole-area visual treatment, not tied to any actual liveness signal — a bot dead for ten days looked exactly like one that had fired an hour ago. The dashboard had no vocabulary for "this stopped working."

The fix that followed shipped, converged to the main branch, and was reported visually verified. Twelve minutes later, a separate lane flagged it as falsified — the verification had screenshotted before an async-loaded background asset finished rendering, and once it finished loading a few seconds later, it painted straight through gaps the fix hadn't actually closed. The "verified" screenshot had been taken against an incomplete render, not the real end state. See the fuller day-by-day case study for the commit SHAs and the exact timeline.

The general lesson, not just the one bug

Generalize past the specific screenshot bug and the pattern is this: any liveness check that runs once, on a stale or partially-loaded view, and gets trusted as ground truth, will eventually certify something dead as alive. That applies to a visual dashboard just as much as it applies to a health-check endpoint that returns 200 because the process caught the request, not because the work behind it is actually happening. The fix isn't "check more often" — it's checking the right layer:

  • Verify against the target's own evidence, not a proxy for it. A fresh log line, a beacon file with a recent timestamp, an actual output artifact — not just "the process didn't crash" or "the command returned."
  • Wait for the full state before trusting a snapshot. Any check that runs against something still loading — an async asset, a warm-up phase, a startup race — needs to confirm the load finished before treating the result as final, not fire on a fixed timer and hope.
  • Show absence explicitly, don't infer it from silence. "No recent signal" and "actively dead" are both different from "healthy," and a monitoring surface that can only render two states (up/down) will misrender the third as one of the two it has.
  • A second, adversarial check catches what the first one missed. The false PASS above wasn't caught by the lane that shipped it — it was caught by a different pass twelve minutes later. Liveness monitoring that only ever checks itself will validate its own blind spot indefinitely.

What this cost, and what it caught

The same fleet, the same day, also revived a trading bot that a monitoring dashboard had shown as dead — except the diagnosis lane didn't stop at "the dashboard says dead," it cross-referenced the bot's own beacon file, its session logs, and the host's boot-time record, all independently, and found the scheduled task had actually been disabled after a reboot over a week earlier, plus a second bug where the monitor itself was watching the wrong task name. Uptime monitoring alone would have kept reporting the wrong thing dead — or wrong — indefinitely, because it never checked the target's own evidence.

The honest framing, not a highlight reel: a fleet moving fast will produce false positives — a screenshot taken early, a stale assumption, a monitor watching the wrong name. None of that is avoidable. What's controllable is whether the harness catches it same-day, before a user or a stranger does, and whether the correction gets written down as a standing rule instead of a one-off apology. That correction is now a checked clause every future check runs against, not a war story that quietly stopped mattering.

A liveness checklist that isn't just uptime

  • Every "healthy" signal traces to the target's own fresh evidence — a log, a beacon, an output file — not a proxy that only proves the process exists.
  • Any check against something still loading confirms the load finished before it reports a result — no fixed-sleep-and-hope.
  • The monitoring surface can express "unknown / no signal" as its own state, not force silence into either "up" or "down."
  • At least one adversarial or independent second pass exists to catch what the primary check missed — and its findings get treated as real, not noise.
  • Every caught false-positive becomes a written rule the next check inherits, not a fix that quietly disappears into a commit message.

Is your agent fleet's "green dashboard" actually verified?

The AI Agent Reliability Retainer builds a validation harness for your agent — scoped to its real failure modes, delivered as a repo with a live pass/fail count you can run yourself, then kept honest as your agent, model, and prompts drift. The harness is the deliverable, not a slide deck about one.

Talk through monitoring  See the Retainer offer