Fig. 05 · Autonomous resort operations
ARIA
An always-on multi-agent system for a resort that watches operations, catches problems like late room service or an at-risk guest, and acts through WhatsApp, kitchen alerts and offers, with every action streamed to staff.
- Role
- AI core owner
- Team
- 3 engineers
- When
- Mar – Apr 2026
- Stack
- Laravel 13, Inertia + React, Laravel AI SDK, OpenAI, Twilio, Laravel Reverb, Redis, three.js
- Links
- GitHub repo
01The problem
Resort operations run on staff noticing problems. By the time someone sees that a room-service order went cold or a guest went quiet, the guest is already unhappy. Built for a Kuriftu Resort & Spa challenge.
02How it works
5 steps01 · Rules decide
Sentinel detects
Plain SQL detectors, no LLM: room service undelivered after 35 minutes, a room stuck in cleaning, a guest gone silent, birthdays today.
02 · Rules decide
Vera scores churn
A deterministic 0–100 score built from open incidents, silence and recent bookings. Crossing 70 flags the guest.
03 · System moves data
Context is built
The event, a property snapshot, and the guest's recent incidents and actions, with the exact guest ID pinned in a tool contract.
04 · AI proposes
The orchestrator acts
Up to 15 tool steps across 10 tools: WhatsApp messages, kitchen pings, discounts, bookings, pricing, incident logs and escalation.
05 · Person approves
Staff watch and step in
Every tool call is logged and broadcast live to the ops dashboard, and the agent can hand a situation to a manager.
- AI proposes
- Rules decide
- Person approves
- System moves data
03Hard problems
3 of themMulti-turn chat breaking on reasoning models
The SDK's conversation store dropped reasoning IDs, so the second turn failed with HTTP 400. I wrote a repairing store that restores them and safely collapses old rows.
Outages in background agents
A provider failover chain skips unconfigured providers, and when every provider is down the job is released with a random 45–180 s backoff instead of failing. Stress-tested.
The model inventing IDs
It passed guest IDs like “unknown”. The context now carries the exact UUID in a tool contract, tools validate their inputs, and a sanitizer keeps IDs and provider errors out of guest-facing text.
04By the numbers
- teams; ARIA was a finalist
- 40
- specialist agents, including an English/Amharic voice agent
- 6
- tools the orchestrator can act with
- 10
- automated tests
- 92
05What I'd do differently
Limits like a maximum price change or discount live in the prompt, not in the tools. I'd enforce them in code with a pending-approval state above a threshold, and give each event type its own small tool set, so a room-service delay can never touch pricing.