Skip to primary interaction
Automation

Support Triage Autopilot

Stateful support agent that pauses risky actions for human approval

  • Routes FAQ, issue, and refund requests through one state graph
  • Pauses refund actions until a reviewer approves or denies
  • Resumes the same thread after cold starts with state intact

Primary interaction

Default scenario

Refund approval flow

The refund path shows the full system: classification, human gate, durable state, and resume behavior.

01

Customer requests refund

The user asks for money back.

02

Agent routes to approval

Refund intent triggers the human gate.

03

Human approves or denies

The agent waits before acting.

04

Agent resumes with state

The thread continues after review.

Threads (1)

New thread

Empty

Awaiting input

Customer

Submits a support request

Autopilot

Classifies and routes; pauses on high-risk actions

Reviewer

Approves or denies at the human gate

Start with a scenario

Select the refund scenario,
or type a support request to begin.

Graph, Live Routing

faqissuerefund · high riskunknownapprovedenySTARTClassifyHandle FAQCreate TicketHuman GateFallbackIssue RefundRefund DeniedEND

How It Works

01

StateGraph routing

Every message passes through a classifier node that returns an intent. LangGraph conditional edges route to the correct action node.

02

interrupt(), human gate

Refund nodes call interrupt() before acting. The graph serializes state and returns PAUSED_FOR_APPROVAL. The UI surfaces the approval decision.

03

Command(resume), continue

Approve or deny is sent back as Command(resume=True/False) with the same thread_id. The graph resumes exactly where it paused.

04

DynamoDB checkpointer

State is persisted per thread_id to two DynamoDB tables. Threads survive Lambda cold starts and can stay paused indefinitely, see the durability proof below.

Approval gates are useless if state vanishes. The proof is below.

Cold Start Durability, Verified

✓ Passed

State persistence isn't just claimed, it's tested. Below is the actual sequence used to verify that a paused refund thread survives a Lambda execution-environment recycle and resumes cleanly on a fresh container.

00:00

Refund initiated

POST /chat with message "refund $42.50", graph runs through classify → human_gate, calls interrupt(), and returns PAUSED_FOR_APPROVAL with thread_id.

00:00

State persisted to DynamoDB

Checkpointer writes the paused state to support-triage-checkpoints + support-triage-writes tables, keyed by thread_id.

00:01

Lambda forced cold start

aws lambda update-function-configuration bumps an env var (COLD_START_NONCE), recycling the Lambda execution environment. The original container is gone.

00:15

Resume sent to fresh container

POST /chat with the same thread_id and approval=true. New Lambda instance has no in-memory state, must rehydrate from DynamoDB.

00:15

Refund issued

Graph resumes from human_gate, hits the refund node, returns DONE with action_result "Refund issued: $42.50". State survived the recycle.

Under the hood

Capability proof

Capability proof

Stateful support workflow

Service model

Live support workflow with structured chat and approval endpoints.

Intelligence layer

Detects customer intent, routes risky requests, and generates the next response.

Operational state

Preserves thread context and approval status across the workflow.

Human control

Refund requests pause for reviewer approval before the agent continues.

Business value

Automates routine support while keeping sensitive actions governed.

Why durable agent state compounds

Most automation pipelines skip the governance layer and fail in production when an agent takes a consequential action without review. The fix is not better prompts. It is durable state plus a human gate that pauses, persists, and resumes. That pattern is what makes agentic systems safe to deploy, and once the gate exists every downstream tool inherits it for free.