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

# Agentic AI Guardrails

> Keep AI voice agents on-policy: catch off-script, unsafe, or out-of-scope behavior.

Monitor AI voice agents for off-policy, unsafe, or out-of-scope behavior so you can keep automated conversations inside the guardrails you define.

Voice agents are just one application. The same signals apply wherever automated or scripted conversations need to stay within defined bounds — IVR flows, AI-assisted human agents, and beyond. Use this package as a starting point — add or swap in any [preset from the catalog](/velma/behaviors/using-behaviors#listing-available-presets), or [define your own behaviors](/velma/behaviors/custom-behaviors) to fit your use case.

**This package includes:** 2 conversation types · 6 participant roles · 8 behaviors.

## Use this package

The config below is ready to use as-is — download or copy it and pass it as the `config` payload in a Velma Triage request. Its `behaviors` are [preset references](/velma/behaviors/using-behaviors): the API expands each `preset:<identifier>` into its full definition at request time, so you don't need the criteria inline to run the package.

<a className="dp-download" data-target="cfg-agentic-ai-guardrails" data-filename="agentic-ai-guardrails.json" href="#">Download agentic-ai-guardrails.json</a>

<Accordion title="View / copy full config">
  <div id="cfg-agentic-ai-guardrails">
    ```json theme={null}
    {
      "conversation_types": [
        {
          "conversation_type_uuid": "11111111-1111-4111-8111-111111111017",
          "name": "AI Agent Customer Support Call",
          "short_description": "Any Customer Support Call with an AI agent",
          "detailed_description": "customer-supportprofessional"
        },
        {
          "conversation_type_uuid": "11111111-1111-4111-8111-111111111018",
          "name": "AI Agent Interview Monitoring",
          "short_description": "Any interview call with an AI interviewer",
          "detailed_description": "business-operationsprofessional"
        }
      ],
      "participant_roles": [
        {
          "participant_role_uuid": "22222222-2222-4222-8222-222222222004",
          "name": "Support Specialist",
          "short_description": "Someone who works with employees or contractors to solve problems with things like IT, logistics, or communication",
          "detailed_description": ""
        },
        {
          "participant_role_uuid": "22222222-2222-4222-8222-222222222012",
          "name": "Customer Service Representative",
          "short_description": "A representative from a business who is assisting a customer with an issue they are having",
          "detailed_description": ""
        },
        {
          "participant_role_uuid": "22222222-2222-4222-8222-222222222014",
          "name": "Insurance Agent",
          "short_description": "A customer support representative from an insurance company",
          "detailed_description": ""
        },
        {
          "participant_role_uuid": "22222222-2222-4222-8222-222222222015",
          "name": "Interview Candidate",
          "short_description": "Someone who is being interview for a job",
          "detailed_description": ""
        },
        {
          "participant_role_uuid": "22222222-2222-4222-8222-222222222016",
          "name": "Interviewer",
          "short_description": "A person giving an interview",
          "detailed_description": ""
        },
        {
          "participant_role_uuid": "22222222-2222-4222-8222-222222222017",
          "name": "Customer",
          "short_description": "The recipient of a service or good",
          "detailed_description": ""
        }
      ],
      "behaviors": [
        "preset:vishing",
        "preset:service_churn",
        "preset:off_topic_discussion",
        "preset:inapropriate_ai_agent_content",
        "preset:ai_agent_manipulation",
        "preset:inappropriate_speech",
        "preset:issue_resolved",
        "preset:sexual_harassment"
      ]
    }
    ```
  </div>
</Accordion>

### Expand the full criteria

To produce a self-contained config with every behavior's full criteria inlined — for review, customization, or pinning a snapshot — fetch the live [preset catalog](/velma/behaviors/using-behaviors#listing-available-presets) and merge it into the downloaded config. The catalog is the source of truth for detection criteria.

<CodeGroup>
  ```bash curl + jq theme={null}
  curl -s https://platform.modulate.ai/api/velma-2-batch/list-presets \
    -H "X-API-Key: $MODULATE_API_KEY" \
  | jq --slurpfile cfg agentic-ai-guardrails.json '
      [ $cfg[0].behaviors[] | ltrimstr("preset:") ] as $ids
      | { conversation_types: $cfg[0].conversation_types,
          participant_roles:  $cfg[0].participant_roles,
          behaviors: [ .presets[] | select(.identifier as $i | $ids | index($i)) ] }
    ' > agentic-ai-guardrails.full.json
  ```

  ```python Python theme={null}
  import os, json, requests

  cfg = json.load(open("agentic-ai-guardrails.json"))
  ids = {b.removeprefix("preset:") for b in cfg["behaviors"]}

  catalog = requests.get(
      "https://platform.modulate.ai/api/velma-2-batch/list-presets",
      headers={"X-API-Key": os.environ["MODULATE_API_KEY"]},
  ).json()["presets"]

  cfg["behaviors"] = [p for p in catalog if p["identifier"] in ids]
  json.dump(cfg, open("agentic-ai-guardrails.full.json", "w"), indent=2)
  ```
</CodeGroup>

`agentic-ai-guardrails.full.json` keeps the same `conversation_types` and `participant_roles` and replaces each preset reference with its full behavior definition — drop it into the `config` payload exactly like the preset version.

## Conversation types

The interaction contexts this package expects to see.

| Name                           | What it is                                 |
| ------------------------------ | ------------------------------------------ |
| AI Agent Customer Support Call | Any Customer Support Call with an AI agent |
| AI Agent Interview Monitoring  | Any interview call with an AI interviewer  |

## Participant roles

The speaker roles the package distinguishes.

| Name                            | What it is                                                                                                         |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| Support Specialist              | Someone who works with employees or contractors to solve problems with things like IT, logistics, or communication |
| Customer Service Representative | A representative from a business who is assisting a customer with an issue they are having                         |
| Insurance Agent                 | A customer support representative from an insurance company                                                        |
| Interview Candidate             | Someone who is being interview for a job                                                                           |
| Interviewer                     | A person giving an interview                                                                                       |
| Customer                        | The recipient of a service or good                                                                                 |

## Behaviors

The 8 signals this package detects. Each maps to a reusable `preset:<identifier>` you can drop into the `behaviors` array of any [BatchConfig](/velma/behaviors/using-behaviors) — the config above already references them.

<Note>
  Full detection criteria are not duplicated here. The live preset catalog is the source of truth — retrieve the exact criteria for any behavior by name from the [`list-presets` endpoint](/velma/behaviors/using-behaviors#listing-available-presets).
</Note>

| Behavior                      | What it detects                                                                                                                                                                                                                                               | Preset                                 |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| Vishing                       | Attempts to elicit sensitive information through deceptive voice interactions. We detect vishing based on abnormal call pacing, probing question patterns, stress-induced pitch shifts, and background noise suggesting call centers or spoofed environments. | `preset:vishing`                       |
| Service Churn                 | Customer decides to cancel an ongoing service. We detect this through resignation tone, conclusive phrasing, disengaging cadence, and emotional withdrawal.                                                                                                   | `preset:service_churn`                 |
| Off-topic Discussion          | Conversation largely unrelated to call purpose. We detect this using semantic drift paired with relaxed pacing, reduced task-oriented urgency, and tonal divergence from initial intent.                                                                      | `preset:off_topic_discussion`          |
| Inapropriate AI Agent Content | AI-generated speech unsuitable for professional contexts. We detect this by tonal incongruence with task intent, inappropriate emotional expression, unnatural phrasing patterns, and drift into unrelated or personal topics.                                | `preset:inapropriate_ai_agent_content` |
| AI Agent Manipulation         | Attempts to coerce an AI into unintended behavior. We detect this using repetitive prompt pressure, altered speaking cadence, strategic pauses, adversarial tone, and escalating emotional manipulation signals across the interaction.                       | `preset:ai_agent_manipulation`         |
| Inappropriate Speech          | Unprofessional or unsuitable spoken content. We detect this using aggressive tone, boundary-crossing language, emotional volatility, and contextual mismatch with professional norms.                                                                         | `preset:inappropriate_speech`          |
| Issue Resolved                | Customer's problem successfully addressed. We detect this using relief markers, positive tonal shift, relaxed pacing, confirmation language, and conversational closure cues.                                                                                 | `preset:issue_resolved`                |
| Sexual Harassment             | Unwanted sexualized speech or advances. We detect this through suggestive intonation, boundary-testing pauses, inappropriate familiarity, and discomfort responses from others.                                                                               | `preset:sexual_harassment`             |
