Concept
An agent responsibility is a contract. It states what the agent owns, what it can do, and what it must not do. It also states what information the agent needs and when it stops, hands off, or escalates. Clear responsibilities make routing safer. A supervisor routes well only when every specialist has a distinct job.LIMITATIONS text goes into the prompt of specialist and standalone agents as boundaries the model should respect. The prompt of a supervisor with the router or orchestrator role does not include it. The platform does not enforce LIMITATIONS. For hard enforcement, add tools, constraints, guardrails, permissions, and handoff boundaries.
A validation error E124 means the agent has no GOAL.
Decision guide
Responsibility worksheet
Answer these questions before you write the agent.Minimal working example: account-security specialist project
This example is a project-level set of three agents. The account-security agent holds the responsibility boundary. The two handoff targets are defined in the same project, so the set validates together.agents/account-security-agent.agent.abl
agents/billing-support-agent.agent.abl
agents/live-agent.agent.abl
How the handoff boundaries work
TheINTENTS section lists the categories the agent can recognize. A WHEN condition such as intent.category == "billing" reads the result of that classification. The compiler lowers each HANDOFF entry into a routing rule.
If a condition names a category that INTENTS does not declare, validation reports UNDECLARED_INTENT_CATEGORY. If a condition reads a field that has no value, the comparison evaluates to false. The handoff does not fire and no error occurs.
Each RETURN: false entry transfers ownership. The target does not hand control back.
Neither HANDOFF entry declares HISTORY. Each target receives the full conversation history by default. Add an explicit HISTORY setting to send less.
PASS: [account_id] sends a field the account-security agent gathers before the handoff. Pass only fields that have a source in the sending agent.
How to write strong goals
Weak goal: “Help customers with account stuff.” Strong goal: “Verify identity and help users recover account access.” A strong goal names the business outcome, the user, and the scope. It is narrow enough that an owner can say whether the agent succeeded.How to write useful limitations
For regulated or high-risk actions, do not rely on limitations alone. Add hard boundaries through tools, constraints, guardrails, permissions, or human handoff.
When to split an agent
Split an agent when it has more than one business owner or permission model. Split it when limitations conflict, tools differ by topic, or success criteria differ by request type. Keep one agent when the same owner, policy, tools, data, and success criteria apply across the conversation. UseDELEGATE instead of splitting when the active agent needs only a subtask result and should keep the user conversation.
Verification
- Validate the three agents together. Validating the account-security agent alone fails with
INVALID_HANDOFF_TARGETbecause the targets are missing. - Send: “I need to recover my account.” Confirm the agent gathers
account_idandverification_method. - Send: “I have a billing question.” Confirm the route goes to
Billing_Support_Agentand passesaccount_id. - Send: “I want to talk to someone.” Confirm the route goes to
Live_Agent. - Inspect the trace or debug output for the selected handoff target, the passed context, and the final active agent.
Production readiness checklist
- Each specialist has one primary business owner and one primary outcome.
- Every handoff target exists in the project.
- Required fields are gathered or otherwise populated before tools, handoffs, or completion need them.
- Sensitive or regulated actions are enforced with tools, constraints, guardrails, permissions, or human handoff.
- Out-of-scope intents have handoff routes.
- Success, out-of-scope, human escalation, and failure paths have test utterances.
- Trace or debug output shows clear ownership transitions.