Concept
This article covers detection: how the platform decides that a message holds more than one intent. To choose what happens next, such as queueing, running in sequence, or running in parallel, see Handle messages that contain multiple user intents and Run multiple agents in parallel with multi-intent fan-out. Detection has one main path and three narrower paths.
The platform does not detect intents with embeddings in production. You cannot set the detection prompt, the classifier timeout, or a classifier cap in ABL.
Minimal working example
A service desk supervisor lets the classifier detect billing and shipping intents in one message. It sets both thresholds and a minimum confidence for each detected request. The specialists are short stand-ins in the same project. Replace them with your real agents.agents/service-desk.agent.abl
agents/billing-agent.agent.abl
agents/shipping-agent.agent.abl
How it works
What the classifier sees and returns
The classifier reads:- The current message and the last 4 earlier messages.
- Each intent category and its description from
INTENTS:. - The names and descriptions of the agent’s domain tools.
- The agent goal and limitations, when set.
independent, dependent, or ambiguous.
What the platform does with the answer:
- A category that is not in your list is dropped.
- A reply that cannot be read, a reply cut off by the output limit, or an empty list becomes one intent with no category and confidence 0.
- Fewer than two intents means the multi-intent path does not run.
- If the relationship is missing, the platform sets it. An intent without a route makes it
ambiguous. All intents on one agent make itdependent. Otherwise it isambiguous.
Two thresholds in sequence
A message passes through up to two confidence checks, then theMULTI_INTENT filter.
Example: intents at 0.9 and 0.7 do not pass step 1 at 0.85, because 0.7 is below it. They pass step 2 at 0.5, and the 0.6 filter keeps both.
max_intents applies after detection, and only to some plans. It limits the queue, which holds the requests that wait their turn, and the menu choices of the disambiguate strategy. It is not part of the classifier prompt. It does not cap a parallel plan, and it does not cap the tasks that a sequential plan runs after a classifier detection. Every detected request that passes the confidence filter runs. The classifier output limit is the practical bound on how many intents it returns.
The pipeline settings in an agent file must use camelCase keys: shortCircuit, confidenceThreshold, intentBridge, guidedThreshold. Snake_case keys are dropped without a message. The agent setting EXECUTION pipeline enabled: true has no effect unless the project runtime configuration also enables the pipeline.
Detection in a flow
AFLOW step checks each ON_INPUT branch alone. A branch with no condition, or a branch that ends in COMPLETE, is skipped. Two or more matches make a multi-intent message. The confidence does not come from a model. It comes from English wording in the message:
Each later intent subtracts 0.04, with a floor of 0.55. A
confidence_threshold above 0.92 drops every flow detection. A value above 0.68 drops a message with none of these words. A message in another language gets 0.68.
When the classifier fails
Three failures in a row open a circuit breaker for the tenant. It resets after 60 seconds. While it is open, detection stops silently and the supervisor routes with its normal model-driven path.What a route can read
A routeWHEN can read intent.category and intent.confidence. A condition on intent.intent_count compiles but is not available to routes. Do not use it.
Common variations
Tighten detection
RaiseMULTI_INTENT confidence_threshold to drop weak second requests. Raise shortCircuit.confidenceThreshold to send fewer messages to the fast path.
Loosen detection
LowerintentBridge.guidedThreshold and confidence_threshold. Expect more false multi-intent plans. Two intents that map to one agent become dependent.
Turn detection off
SetMULTI_INTENT enabled: false. The supervisor makes one routing call per turn.
Verification
- Run the validator on all three files. Expect no errors and no warnings.
- Say “I was charged twice and where is my parcel”. Expect a plan with both intents.
- In the trace, open the
pipeline_classifyevent. Check the intents, their confidence, and their summaries. - Open
pipeline_routing_resolvefor the matching routes. Openpipeline_tiered_actionfor the tier chosen. - Open
multi_intent_plan_builtfor the strategy, the relationship, and the targets. - Compare the intents in
pipeline_classifywith the targets in the plan. An intent that is missing from the plan was dropped by a threshold. No event reports the drop. - Say “I was charged twice”. Expect a single intent and the normal route.
Production readiness checklist
- The project enables the reasoning pipeline. Without it the agent setting does nothing.
- Pipeline keys in the agent file are camelCase.
- Every intent has a description that separates it from the others.
- Both thresholds are tested with confidences on each side.
confidence_thresholdis at most 0.9 if you use flow detection.- Tests cover a compound message, a single message, a message with an unknown request, and two intents for one agent.
- Traces are checked for
pipeline_classifier_unavailableduring tests.
Common mistakes
Troubleshooting
Related articles: