Skip to main content
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, or define your own 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: 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. Download agentic-ai-guardrails.json
{
  "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"
  ]
}

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 and merge it into the downloaded config. The catalog is the source of truth for detection criteria.
curl -s https://modulate-developer-apis.com/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
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.
NameWhat it is
AI Agent Customer Support CallAny Customer Support Call with an AI agent
AI Agent Interview MonitoringAny interview call with an AI interviewer

Participant roles

The speaker roles the package distinguishes.
NameWhat it is
Support SpecialistSomeone who works with employees or contractors to solve problems with things like IT, logistics, or communication
Customer Service RepresentativeA representative from a business who is assisting a customer with an issue they are having
Insurance AgentA customer support representative from an insurance company
Interview CandidateSomeone who is being interview for a job
InterviewerA person giving an interview
CustomerThe 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 — the config above already references them.
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.
BehaviorWhat it detectsPreset
VishingAttempts 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 ChurnCustomer decides to cancel an ongoing service. We detect this through resignation tone, conclusive phrasing, disengaging cadence, and emotional withdrawal.preset:service_churn
Off-topic DiscussionConversation 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 ContentAI-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 ManipulationAttempts 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 SpeechUnprofessional 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 ResolvedCustomer’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 HarassmentUnwanted sexualized speech or advances. We detect this through suggestive intonation, boundary-testing pauses, inappropriate familiarity, and discomfort responses from others.preset:sexual_harassment