Overview
Arlo’s core primitive is the conversation — a continuous health thread that never “closes.” A conversation can contain several provider visits over time, and between visits it sits inIDLE, always re-engageable. Understanding this flow is essential for building robust integrations.
Status Flow
1
TRIAGING
AI gathers symptom information through conversation
2
PAYMENT_REQUIRED
Assessment complete — user reviews summary and decides whether to proceed
3
MATCHING
User confirmed — waiting for available provider
4
WITH_PROVIDER
Provider connected — asynchronous messaging
5
IDLE
Visit wrapped up — notes and prescriptions available; conversation stays open for follow-up
- EMERGENCY — Triage detects urgent symptoms → advise 911 (terminal)
- Back to IDLE —
cancel_requestat any point before a provider connects
There is no terminal
CLOSED or CANCELED status. A finished or canceled request simply leaves the conversation IDLE with its visit history intact.Status Definitions
IDLE
AI-only chat; nothing in progress. The resting state of every conversation.- Entry: A visit wraps up, a request is canceled, or the payment gate is dismissed
- Exit:
send_messagere-runs triage on the same thread →TRIAGING
- The full thread and visit history are retained
get_visit_notesreturns notes from past visits- No cleanup is ever needed — to walk away, the user simply does nothing
- To follow up on prior care,
send_messageinto the existing conversation (don’t start a new one) - Only
start_conversationfor a genuinely new, unrelated concern
TRIAGING
The AI triage system is gathering symptom information.- Entry:
start_conversation, orsend_messageinto anIDLEconversation - Duration: Varies based on complexity (typically 2-5 minutes of active conversation)
- Exit: Assessment completes →
PAYMENT_REQUIRED, or emergency detected →EMERGENCY
- AI asks follow-up questions about symptoms
- Agent responds with
send_message;wait_for_replyawaits each reply - When available, the
informationNeedchecklist lists everything triage still needs — batch all answers into one send
- Relay questions to the user
- Send natural first-person responses via
send_message - Richer context = fewer questions = faster triage
PAYMENT_REQUIRED
Assessment is complete. A best-effort analysis is provided to support decision-making.- Entry: AI triage has gathered sufficient information
- Exit: User confirms →
MATCHING; orcancel_requestdismisses the gate → back to AI-only chat
- The
paymentGateobject contains a consultation summary — a best-effort analysis of what the provider may be able to help with - Clinical decisions remain at the provider’s discretion once connected
- The conversation is paused:
send_messagewill not send while the gate is up
confirm_provider_connection is the patient’s explicit confirmation and places the per-visit hold.
Agent actions:
- Present
consultationSummaryto the user - Confirm the user wants to proceed
- Card on file (
get_payment_status→ACTIVE): callconfirm_provider_connection - No card:
create_payment_setup→ user saves a card → pollget_payment_status→ confirm - User declines:
cancel_request(the gate can re-surface later)
MATCHING
User is in the provider matching queue.- Entry: User confirmed via
confirm_provider_connection - Duration: Typically minutes, but can vary based on demand
- Exit: Provider accepts →
WITH_PROVIDER
- Inform user they’re in queue
wait_for_replyreturns the moment a provider joins (resumable)cancel_requeststill works here if the user changes their mind
WITH_PROVIDER
A provider is connected. Asynchronous messaging is available.- Entry: Provider joins the conversation
- Duration: Varies (minutes to hours)
- Exit: Provider wraps up the visit →
IDLE
- Provider reviews triage information, asks questions, makes clinical decisions
- Provider can prescribe medications and order lab tests
- All messaging is asynchronous
- Relay provider messages to the user; send responses via
send_message - Use
wait_for_replyto await the provider’s next message - The visit must be wrapped up by the provider —
cancel_requestis refused here
Messaging is asynchronous during
WITH_PROVIDER. send_message (with its default folded-in wait) or wait_for_reply will return provider replies the moment they land.EMERGENCY
Urgent care is advised. User should call 911.- Entry: AI triage detects emergency indicators
- Terminal: this conversation cannot be re-engaged
- Immediately inform user to call 911 or go to ER
- Do not attempt to continue with Arlo
- Start a new conversation only if the user has a different, non-emergency concern
Transition Summary
Region
Every conversation is licensed for aregion (ISO 3166-2, set at start_conversation). If the patient moves, update_conversation_region applies to the next provider request — re-route an in-flight request with cancel_request → update_conversation_region → send_message.