Read Guardrail Analytics per Policy
The guardrail effectiveness reference explains the monitoring surface’s fields, and the tuning guide closes the rule-edit loop. This guide covers the measurement unit both depend on: the per-policy rate. A fleet-level number is an average across policies, and the average is where a silent policy hides. The endpoint paths below are relative. Send them againsthttps://api.orbit.devotel.io/api/v1.
1. Why the fleet number misleads
The fleet refusal rate weights every policy by the traffic its agents see. A policy applied to one quiet agent, or guarding a pattern nobody has sent yet, contributes almost nothing to either side of the rate. “We blocked 98% of jailbreak attempts” can therefore be true while one jailbreak policy fired zero times: two healthy policies earned the number and the third watched. Read the fleet rate as context. Read the per-policy columns as the measurement. Any report that cites an aggregate guardrail rate without the per-policy breakdown is citing the average of unknown terms.2. The per-policy reading
Open Dashboard → AI Agents → Guardrail Effectiveness (/agents/guardrail-analytics) and pick the look-back window, 7 to 90
days. The per-policy breakdown reports every applied policy four ways:
- Refusal rate by policy — the share of turns each policy refused, across the agents carrying it.
- Block actions by policy — hard stops per policy: refusals plus cost-capped turns.
- Violation trend — daily refusal and block counts over the window, per policy.
- Per-agent cut — each agent’s refusal rate with the policies applied to it, so a rate is attributable to “which policy on which agent.”
by_policy and by_agent down to the policy you care about. The
rollup attributes firings by policy and by agent, deliberately not by
individual conversation; turn-level detail stays in the conversation
record, and section 4 uses that division of labor.
3. Three signatures worth memorizing
The dead rule. A policy at zero firings over the window, on agents that see real traffic, is a question, not an answer: absence of violations, or absence of detection? A fraud denylist should ideally never fire; a matcher authored against the wrong string also never fires. Check whether the guarded pattern appears in recent transcripts, then evaluate the rule text against a verbatim violating utterance. If the pattern is in the traffic and the matcher misses it, the zero is a detection failure. The per-policy row is the only place that zero was visible. The over-triggering rule. A refusal rate double the fleet baseline on one agent is the false-positive profile. The breakdown names the policy carrying the rate, so the fix is a rule edit, never disabling the whole policy. Before you edit, capture the misfired turns; they become regression cases in section 5. The drifting rule. A violation trend rising on one policy while its neighbours stay flat is drift, and it has two causes: adversary adaptation (probers change phrasing) or data shift (a new product line sends legitimate utterances the rule was not scoped against). The signature that separates drift from a one-day surge is that it survives a window change, the 7-day reading agreeing with the 30-day.4. From a violation cluster to sample conversations
When one policy spikes on one agent, the cluster’s coordinates are the policy and agent names from the breakdown. Pull the sample conversations behind the cluster from the conversation record and read them turn by turn; the conversation debug guide covers opening and tracing those conversations. A handful of spot-checked turns converts a rate into a verdict: whether what changed is the traffic, the adversary, or the rule.5. Regression-test before you edit the DSL
For an over-triggering or drifting rule, add the misfired turns as regression cases on the agent’s evals page,/agents/<agent-id>/evals,
before touching the rule text. The
evals datasets loop covers building
the dataset, and the
simulation eval suite covers running it.
The cases must encode both sides: the utterance the rule must stop
refusing, and the violation it must still catch.
Then edit the rule in the
custom guardrail DSL and publish a new
version. The eval run grades the edit against the captured turns before
live traffic does; the per-policy trend grades it after. If the rate
returns to baseline inside the next window and the regression cases
hold, the revision was the fix.
6. Patterns on the trend panel
Seasonal spikes. A refund-heavy week raises the refund-scope rate because more traffic is about refunds, not because probes increased. The rate rises while spot-checked refusals stay correct. Check the topic’s share of traffic before tightening anything. Model upgrade effects. Changing an agent’s base model shifts refusal and grounding rates across several policies on the same day, fleet-wide. Simultaneity across policies on the upgrade date is the signature. Re-run the eval suite against the new model before attributing the shift to a rule. The jailbreak wave. One policy spikes while its neighbours stay flat, the firings cluster in a narrow time window, and the spot-checked conversations share phrasing. Capture the phrasings as eval cases, tighten or extend the rule, publish a version, and watch the trend return to baseline with coverage still applied.Related reading
- Guardrail effectiveness reference — the rollup endpoint’s fields and metric semantics.
- Tune AI-agent guardrails with analytics — the rule-by-rule tuning loop this reading feeds.
- Custom guardrail DSL — the authoring surface; this guide covers what the authored rules do on live traffic.
- Audit log — where rule edits land, so a firing and its fix pair up in a compliance review.