Skip to main content
Use this pattern when customers naturally bundle several tasks into a single message, such as “check my balance, pay my bill, and update my address.” The MULTI_INTENT: section lets the agent detect, triage, and dispatch those intents instead of silently dropping secondary requests.

Concept

When a user message contains more than one intent, ABL can detect the individual intents, assess their relationships, and handle them according to a configurable strategy. The MULTI_INTENT: section is a top-level ABL block available on both AGENT: and SUPERVISOR: declarations. The system uses three layers to decide multi-intent behavior:
  1. Agent-level — the MULTI_INTENT: section in the agent’s ABL.
  2. Project-level — the project runtime configuration (set in Studio or via API).
  3. Platform defaults — built-in fallback values.
Agent-level settings take precedence over project-level, which takes precedence over platform defaults. When multi-intent detection is enabled, the NLU pipeline assesses the relationship between detected intents as one of:
  • independent — intents can be handled in any order with no dependency between them.
  • dependent — later intents require results from earlier ones.
  • ambiguous — the system cannot determine the relationship.
This assessment drives strategy resolution, especially for the auto strategy.

Minimal working example

The customer_id and account_id variables passed via CONTEXT: pass: must be gathered, set from runtime context, or populated by a tool result before the handoff executes. These are project-local assumptions — replace them with the actual variable names your agents produce. When history: is omitted on a HANDOFF, the child agent receives the full parent conversation history (the current platform default is full).

How it works

  1. The agent receives the user message and multi-intent detection runs as part of the NLU pipeline.
  2. Detected intents are filtered by confidence_threshold — only intents above the threshold are considered.
  3. The number of considered intents is capped at max_intents.
  4. The NLU layer assesses the relationship between the intents (independent, dependent, or ambiguous).
  5. The strategy (or auto resolution based on the relationship assessment) determines how intents are dispatched.
  6. For primary_queue and sequential, queued intents are surfaced after the current intent completes. Queued intents expire after queue_max_age_ms milliseconds.

MULTI_INTENT properties

Strategy reference

primary_queue (default)

Handle the highest-confidence intent immediately and queue the rest. After the primary intent completes, the agent surfaces queued intents one by one for confirmation. The user can accept, decline, or let them expire.

sequential

Execute detected intents one at a time in authored or detected order. Context from earlier intents carries forward. Use when later intents depend on earlier results — for example, authenticate first, then process payment, then send confirmation.

parallel

Fan out to sub-agents simultaneously. Only available for supervisor agents that route to independent child agents. The runtime enforces safety:
  • If the agent is not a supervisor, parallel downgrades to sequential.
  • If the relationship between intents is dependent, parallel downgrades to sequential.
  • If the relationship is ambiguous, parallel downgrades to disambiguate.

disambiguate

Present detected intents to the user and ask which to handle first. The user selects by number or by exact intent name. The disambiguation prompt text is customizable.

auto

Let the model decide the strategy at runtime based on the assessed relationship between intents:
  • independent intents on a supervisor resolve to parallel; on a non-supervisor, they resolve to sequential.
  • dependent intents resolve to sequential regardless of agent type.
  • ambiguous intents resolve to disambiguate.

Customizing user-facing prompts

The disambiguation and queue-surfacing prompts can be customized through the MESSAGES: block:

Verification

  • Parse and compile the ABL to confirm there are no errors or warnings.
  • Send a test utterance that contains two or more intents covered by your INTENTS: or HANDOFF: conditions.
  • Inspect traces for multi_intent_plan_built to confirm the detected strategy and targets.
  • For primary_queue, check for multi_intent_queue_surfaced traces when the primary intent completes.
  • For disambiguate, check for multi_intent_disambiguate_choice traces.
  • For parallel, check for multi_intent_parallel_executed traces.
  • Confirm that a single-intent utterance bypasses multi-intent handling and routes normally.
  • Test a message where all intents fall below confidence_threshold to verify fallback behavior.

Production readiness checklist

  • Every specialist route has a clear owner and a concise context summary.
  • Deterministic conditions use declared, gathered, tool-result, runtime, or returned fields.
  • Semantic conditions are quoted as natural-language WHEN text.
  • Temporary child agents (with RETURN: true) produce every field mapped in ON_RETURN.
  • Fallback behavior is explicit and does not hide missing intent coverage.
  • max_intents is set to a value that matches realistic customer behavior (typically 2-5); values above 5 may degrade conversation quality.
  • confidence_threshold is tuned to avoid false positives from low-confidence secondary intents.
  • queue_max_age_ms is set to a reasonable session window (default 600,000 ms = 10 minutes; maximum 3,600,000 ms = 1 hour).
  • For parallel strategy on a supervisor, confirm all target agents can operate independently.
  • Consider setting unknown_relationship_strategy to sequential or disambiguate if safety is more important than speed.
  • If using auto strategy, test with messages that produce each relationship type (independent, dependent, ambiguous).
  • Review and customize disambiguation and queue prompts via MESSAGES: for your brand voice.

Common mistakes

Troubleshooting


Related articles