A prompt change last Monday, a model auto-upgrade, a system prompt edit. Something shifted, and the answers your agent returns have been quietly degrading since. Production tells you everything is healthy. Support is filling up with tickets that sound similar. By the time someone bisects, the change is two weeks old.
LLM output is non-deterministic, so any single response could be a one-off. A small quality drop on a single run is indistinguishable from normal variance. Drift only shows up in the aggregate: a moving average dipping below threshold, a series of low-scoring runs sharing the same failure mode, a distribution that has subtly shifted left.
Two layers of scoring catch drift between them. Deterministic checks on every run, free, at zero LLM cost. LLM-as-judge on a sampled subset for the qualitative dimensions (tone, correctness, completeness) that deterministic checks can't reach.
judge prompt: | Score this support ticket triage on three things: 1. The department is the right one for the issue. 2. The severity matches how urgent the customer is. 3. The customer's tone is preserved in the summary. A triage that gets the department wrong scores no higher than 0.3 whatever else it does well. judge model: claude-haiku-4-5 sample rate: 0.10 # 10% of finished runs pass threshold: 0.8 alert on fail: 3 in a row # rubric.failing to Slack
The rubric is plain English, with the scale pinned in the prompt so the judge has fixed reference points. Edit and save; new runs score against v4, historical scores stay tagged to v3, and the judge's one-line reasoning is stored with every score.
Verify is the quality-scoring side of Agent Ping. The features page walks through rubrics, the sample rate dial, and drift detection thresholds. The docs go one level deeper.
Verify features → Verify docs → What is AI agent observability? →