Escalation Design: When an AI Agent Must Hand Off to a Human
Every agent in AgentLane's own catalog resolves to a hard three-way switch, not a confidence score you have to interpret. Here's why that design choice matters, and how to build escalation triggers that don't fail silently.
By AgentLane Founder · Founder

The mistake agencies make with escalation is treating it as an exception path — something bolted on for the cases the AI "can't handle." The better design treats every automated decision as a fixed set of outcomes, one of which is always "hand this to a person," built into the switch from the start rather than added after something goes wrong.
That's not a theoretical preference. It's how every agent in AgentLane's own v1 catalog is actually built, and the pattern is worth taking apart because it generalizes to any AI automation you design, on or off this platform.
The design decision that matters more than the AI itself
Look at the branching logic across AgentLane's four catalog agents and a pattern repeats: none of them return a single confidence number and leave the interpretation to whoever's watching. Every one of them resolves to a small, fixed set of named outcomes, and every outcome has its own defined next action.
Lead Qualifier doesn't return "78% qualified" — it classifies into exactly three branches: high-quality lead (books automatically), needs nurturing (follow-up email, no booking), or declined (polite decline email). See the full branch-by-branch breakdown in the Lead Qualifier agent walkthrough.
Google Reviews Responder goes a step further and makes the escalation decision itself the switch: Determine Approval Status → auto-approved (posts the drafted reply automatically) or needs approval (logs it and routes to a human, reply held). This is the clearest example in the whole catalog of escalation as a first-class branch, not an afterthought — the agent's entire job on the "needs approval" side is recognizing it shouldn't act alone, not attempting a worse version of the reply anyway.
Quote & Proposal Generator does the same thing for a different kind of uncertainty: when the enquiry matches a known service, it computes a real quote and sends it. When nothing matches, it doesn't guess a price — it logs the enquiry as unmatched and posts a Slack alert asking a human to price it manually.
The common thread: escalation isn't a fallback bolted on for edge cases. It's one of the fixed outcomes the switch was designed to produce, exactly as legitimate a result as an automated success.
Why a hard switch beats a confidence score
A confidence score pushes a decision onto whoever's watching the dashboard, at the exact moment they have the least context to make it well — a Slack channel scrolling past, a threshold number ("is 65% high enough?") nobody agreed on in advance. A hard switch forces that decision to be made once, at design time, by whoever configured the agent, with full context and no time pressure.
That's a real tradeoff, not a free win — a three-way switch is less nuanced than a continuous score, and tuning the thresholds behind it (what counts as "high-quality" versus "needs nurturing") is real, ongoing work, not a one-time setup. But the alternative — shipping a raw score and asking a human to interpret it live, repeatedly, under time pressure — moves the hardest part of the design to the worst possible moment to do it.
Where the human channel matters
A well-designed switch is only as good as where its non-automated branches land. Every branch across AgentLane's catalog agents — including the ones that auto-resolve successfully — posts an internal Slack alert. That's a deliberate redundancy, not overkill: it means even a "no action needed" branch is visible to a human in real time, which is what makes it safe to let the switch run unattended in the first place. A wrong classification gets caught by a team member glancing at a channel the same day, not surfaced three weeks later as a client complaint.
At the client-record level, the same principle shows up as a real field: Owner WhatsApp, set on the client detail page under Contact & integrations. It exists specifically so there's a direct channel to the actual business owner — not a support ticket queue, not a generic inbox — for anything that genuinely needs their attention. Whether an escalation should route to your agency's internal Slack or the client's own owner channel is itself a design decision worth making explicitly per agent, not defaulting to whichever integration happened to already be configured.
A framework for designing your own escalation triggers
1. Define the fixed outcomes before you write a prompt. Decide the small number of named branches a decision can resolve to — three is a common, workable number across AgentLane's own catalog — before deciding what the AI evaluates. The branches shape the prompt, not the other way around.
2. Make every branch visible, not just the escalation branch. If only the "needs a human" branch posts a notification, a systematically wrong "auto-approved" classification runs unnoticed indefinitely. Notify on every branch, and let the channel or urgency differ rather than the visibility.
3. Match the channel to the time sensitivity. A booking gone to the wrong calendar is not equally urgent as a borderline review needing approval before it posts. Route each branch to a channel someone is actually watching at the relevant speed — a shared Slack channel for anything same-day, a direct owner channel (WhatsApp, a phone call) for anything urgent enough that email or a dashboard notification isn't fast enough.
4. Log every branch to a permanent record, including the ones that get declined. Every catalog agent logs to Postgres regardless of which branch a case takes — a declined lead or an unmatched quote still gets a row, not just a Slack message that scrolls away. That record is what lets you review, weeks later, whether the switch's thresholds are actually calibrated right.
5. Revisit the thresholds on a schedule, not just when something breaks. A qualification bar tuned correctly for a client in January can misfire by a seasonal shift in March. Treat the branch a case landed in as a metric to review monthly against real outcomes, not a configuration you set once at deployment and never touch again.
What this looks like in the executions feed
Whatever your escalation design, the fastest way to confirm it's actually working — not just configured — is watching real cases land in the branch you intended. AgentLane's Executions feed (/dashboard/executions) shows every run in real time with a status and its raw output, which is where a systematically miscalibrated switch shows up first, well before a client notices.

See Reading the executions feed for a full walkthrough of what to look for there.
If you're designing this for a client running Lead Qualifier or Google Reviews Responder specifically, both agents' full branch logic is documented at /docs/agents/lead-qualifier and /docs/agents/google-reviews-responder — worth reading node by node before you decide whether the default thresholds fit a specific client's risk tolerance.
The branching patterns described above are the actual switch logic shipped in AgentLane's own catalog agents, not a generic best-practices list — I wrote it this way because the real implementation is a better teacher than the abstraction.
Frequently asked questions
- Should escalation ever be optional in an automation?
- No — at minimum, every branch of an automated decision should notify a human somewhere, even the branches that don't require action. AgentLane's own catalog agents post a Slack alert on every switch branch, including the ones that auto-resolve, so a wrong classification is visible the same day rather than discovered from a client complaint.
- What's the difference between a confidence score and a hard switch?
- A confidence score ("this lead is 72% qualified") pushes the interpretation work onto whoever's watching the dashboard. A hard switch (qualified / needs nurturing / declined) makes the model commit to one of a fixed set of outcomes, each with its own defined next action — nothing downstream has to guess what a given number means.
- Which of AgentLane's catalog agents already have a human-approval branch built in?
- Google Reviews Responder explicitly branches on approval status — a confident, on-brand reply posts automatically, while a low-confidence or sensitive review routes to a human for approval before anything goes out. Quote & Proposal Generator has an equivalent unmatched-case branch that logs the enquiry and alerts a human to price it manually rather than guessing.
- How fast should an escalation actually reach a person?
- As fast as the channel allows, and the channel matters more than most agencies assume — a Slack alert a team is actively watching reaches someone in minutes; an email digest reaches them the next morning. Match the channel to how time-sensitive the branch actually is, not to whichever integration was easiest to wire up.