> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Read the AI Containment and Resolution dashboard

> Open the containment dashboard to see the org-wide share of agent conversations handled without a human handoff, the resolution share, and per-agent trends.

# AI Containment and Resolution dashboard

Containment answers one operational question for your AI agents: **how much traffic does the bot keep, and how much of it does it resolve?** Containment is the share of agent conversations that never escalated to a human. Resolution is the share that reached a resolved status or passed a rubric outcome. Together they tell you whether your agents are absorbing real traffic or quietly routing everything to the human queue.

The dashboard at **Insights → AI Containment** in the Devotel Orbit console aggregates these two rates across every agent in your org, shows a daily trend, and breaks the window down per agent. The same data is available over the API at `GET /api/v1/insights/containment` and `GET /api/v1/insights/containment/timeseries`. This guide explains what the panels mean, why containment is a different signal from evals, and what to change when the number is low.

## What the dashboard shows

For the selected window, the page computes four org-wide totals and one daily series:

* **Containment rate** — of all agent-run conversations in the window, the share that never escalated to a human. A conversation counts as contained when no human handoff happened, regardless of outcome.
* **Resolution rate** — the share that reached a resolved status or passed a rubric outcome. Resolution and containment are independent: a discussion that a human closed still counts toward resolution, and a contained conversation the customer abandoned counts toward neither.
* **Escalation rate** — one minus containment. This is the traffic you still pay humans to absorb.
* **Daily trend** — the two rates bucketed by day, so you can see containment decay after a prompt change or recover after a routing tweak.

The page also lists a per-agent breakdown. Each row is one agent: total conversations, escalated count, resolved count, and the two rates. Agents with zero traffic in the window simply have no row.

## Containment is not a evals score

Run [evals](/agents/continuous-production-evals) before you ship an agent to test it against a fixed prompt set. Evals answer "does this agent respond the way we want on the cases we chose." Containment measures something else: on live, organic traffic, what share of conversations stayed with the bot. A prompt that scores 98% on evals can still contain only 30% of real traffic if the routing sends the wrong conversations to it, or if the tool it needs isn't approved.

Use containment after deploy, to plan staffing and decide where the next routing or prompt iteration has to happen. Use evals before deploy, to gate a prompt change on a fixed benchmark. Confusing the two leads to shipping a high-eval prompt and then watching the human queue grow anyway.

## Reading the panels

Open **Insights → AI Containment**. Top to bottom:

1. **Summary cards** — org-wide containment rate, resolution rate, escalation rate, and conversation volume for the window. A rate renders as "—" when the window had no conversations, which means there is no denominator to divide by, not a 0%.
2. **Containment vs resolution trend** — one point per day. The gap between the two lines is the traffic the bot kept but did not resolve.
3. **By agent table** — per-agent breakdown. The containment column shows a check icon when the conversation stayed with the bot (handled without handoff) and a warning triangle when it went to a human. Use it to find which agent is absorbing traffic and which is a passthrough.

## Who can open it

The containment dashboard is open to all roles in the console — it reports conversation counts and rates, not cost, revenue, or payout data. That is a different posture from [Agent ROI](/guides/agent-roi-attribution), which reports financials and is gated to owner, admin, developer, and billing roles. Any teammate who can see the dashboards can monitor containment; no elevated role is needed.

## API contract

Two read endpoints back the page.

| Panel                           | Endpoint                                      | What it returns                                                                                                      |
| ------------------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Summary cards + per-agent table | `GET /api/v1/insights/containment`            | Org totals, a per-agent row set (up to the page limit), and the current window bounds.                               |
| Daily trend                     | `GET /api/v1/insights/containment/timeseries` | One bucket per day with the same containment and resolution rates. Optional `agentId` scopes the trend to one agent. |

Both accept `from` and `to` ISO datetimes; the summary also accepts `limit` for the per-agent table. A ratelimit of zero conversations returns `null` for that rate rather than a fabricated number.

A sample summary response:

```json theme={null}
{
  "from": "2026-08-01T00:00:00.000Z",
  "to": "2026-09-01T00:00:00.000Z",
  "timezone": "America/New_York",
  "totals": {
    "total_conversations": 4821,
    "handed_off_count": 1540,
    "contained_count": 3281,
    "resolved_count": 2890,
    "containment_rate": 68.1,
    "escalation_rate": 31.9,
    "resolution_rate": 60.0,
    "agent_count": 4
  },
  "agents": [
    {
      "agent_id": "agent_2k9xd4",
      "agent_name": "Support Triage",
      "model": "claude-sonnet-4-6",
      "total_conversations": 2100,
      "handed_off_count": 420,
      "contained_count": 1680,
      "resolved_count": 1500,
      "containment_rate": 80.0,
      "resolution_rate": 71.4
    }
  ]
}
```

A sample timeseries response (one bucket per day):

```json theme={null}
{
  "from": "2026-08-29T00:00:00.000Z",
  "to": "2026-09-01T00:00:00.000Z",
  "granularity": "day",
  "timezone": "America/New_York",
  "agent_id": null,
  "series": [
    {
      "bucket": "2026-08-29T00:00:00.000Z",
      "total_conversations": 172,
      "handed_off_count": 58,
      "contained_count": 114,
      "resolved_count": 96,
      "containment_rate": 66.3,
      "resolution_rate": 55.8
    },
    {
      "bucket": "2026-08-30T00:00:00.000Z",
      "total_conversations": 189,
      "handed_off_count": 44,
      "contained_count": 145,
      "resolved_count": 118,
      "containment_rate": 76.7,
      "resolution_rate": 62.4
    }
  ]
}
```

## Moving the number

If containment is below roughly 40% — meaning most of your agent traffic still lands with a human — the per-agent table is where to look. A low org-wide containment rate with one agent at 80% and another at 10% usually means the 10% agent is receiving conversations it was never configured to handle. The three levers, in the order to try them:

1. **Routing tweaks** — narrow the bot's intake. Route only the conversation types the agent resolves well, and leave the rest to the human queue from the start. Containment rises because the bot stops attempting conversations it was always going to drop.
2. **Prompt templates** — if routing is right but the bot still escalates, the prompt is usually over-cautious: it hands off instead of attempting an answer. Tighten the handoff condition in the prompt, then rerun evals to confirm you didn't trade containment for bad answers.
3. **Tool approvals** — the bot may be escalating because a tool it needs is set to require approval. Moving a low-risk tool to auto-approved lets the agent resolve end-to-end. See [tool approvals](/guides/agent-tool-approvals).

After each change, watch the daily trend, not the summary card. The summary moves with the window; the trend shows the day the change took effect.

## See also

* [Agent ROI attribution](/guides/agent-roi-attribution) — the sibling financial surface for agent value
* [Insights API reference](/api-reference/insights) — endpoint field reference for containment and related surfaces
* [Agent tool approvals](/guides/agent-tool-approvals) — approval gates that often suppress containment
