AI2 — Operator Copilot Specification
Surface: Operator Desktop + Tablet Front-Desk Phase: P2 / R2 Feature flag:
operator-copilotCompetitive reference: Notion AI, Linear Asks, Mews Assistant, Cloudbeds AI
1. Overview
The operator copilot is an AI assistant embedded in the operator desktop and tablet front-desk apps. It assists front-desk and management staff with writing, summarisation, analysis, and decisions — with a strict Human-in-the-Loop (HITL) design: the AI always drafts, the operator always approves.
Core principle: The operator copilot NEVER takes action autonomously. It drafts, suggests, and explains. The operator presses "Accept" or modifies before anything is saved or sent.
2. Copilot capabilities (R2)
| Capability | Trigger | Output |
|---|---|---|
| Draft a reply | Operator opens guest message → "Draft reply" button | Suggested reply text in the message compose area |
| Summarise stay | Reservation detail → "Summarise stay" | One-paragraph summary: name, dates, preferences, notable incidents |
| Suggest upsell | Reservation detail → "Suggest upsell" | 2–3 personalised upsell recommendations with reasoning |
| Explain anomaly | Folio → unusual charge → "Explain" | Plain-language explanation of the charge with source event |
| Draft housekeeping note | Room detail → "Add note" → "AI assist" | Suggested note text from previous notes + room history |
3. HITL UX pattern
Every copilot suggestion follows the same HITL pattern:
┌─── Copilot suggestion ────────────────────────────┐
│ 📎 Draft reply (based on guest message + stay data) │
│ │
│ "Dear Ahmad, thank you for reaching out. We would │
│ be happy to arrange an airport transfer for your │
│ arrival on 1 May at 15:40. The rate is $45 per │
│ vehicle. Shall I confirm this for you?" │
│ │
│ Reasoning: Guest asked about airport transfer; │
│ rate from property config; departure time from │
│ booking. │
│ │
│ [✓ Use this draft] [✏️ Edit] [✗ Dismiss] │
└────────────────────────────────────────────────────┘
Provenance card: Every suggestion shows a collapsed "Reasoning" section. Expanding it shows:
- Which data the AI used (booking data, property config, conversation history)
- Confidence level (High / Medium — Low suggestions are not shown; operator is asked to handle manually)
4. Inline copilot trigger
In text areas (reply compose, note field, task description), a "✨ AI assist" button appears:
- One-tap → AI drafts based on context
- The draft appears in the text area highlighted in
color.ai.suggestiontoken (distinct from operator-typed text) - Operator can accept (removes highlight, text becomes theirs), edit (in-place), or dismiss (reverts to empty)
5. Upsell suggestion
On the reservation detail screen:
┌─── Copilot: Upsell suggestions ───────────────────┐
│ Based on Ahmad's past stays and current booking: │
│ │
│ 1. 🌅 Late checkout (+$30) │
│ "He's checked out late twice before and has │
│ a 17:00 flight today" │
│ [Offer this →] │
│ │
│ 2. 🍳 Breakfast package (+$12/pp) │
│ "No breakfast in current rate; 2-day stay" │
│ [Offer this →] │
└────────────────────────────────────────────────────┘
"Offer this" → opens a pre-filled guest message with the upsell offer. Operator reviews and sends. The AI does not send the message directly.
6. Anomaly explanation
When a folio line item is flagged (unusual amount, unexpected charge, manual entry):
🔍 This charge looks unusual. Ask AI to explain?
[Explain →]
"This $150 charge on 2 May is a minibar restocking
fee. It was added manually by desk agent Karim at
14:32 via folio manual-charge entry (Event ID:
fol-8821). The standard minibar fee for this room
type is $120; the $30 premium was noted in the
charge reason: 'Missing premium whisky bottle'."
Provenance: event ID + actor + timestamp. Links to audit log entry.
7. Context available to the copilot
The copilot has access to (via ai-gateway-service context injection):
- Current reservation (dates, room, guest preferences, special requests)
- Guest history (previous stays, preferences, HITL-approved notes)
- Current folio (charges, payments)
- Property configuration (amenities, rates, policies)
- Conversation history (guest messages)
NOT available:
- Other guests' PII
- Platform-level data (other tenants, billing)
- Staff personal data
8. Guardrails
- Output language: same as the operator's locale (not the guest's)
- Medical/legal/compliance advice: blocked
- PII of non-relevant guests: blocked
- Max suggestion length: 300 words
- Operator must always be the author of record (AI contribution invisible to guests)
9. Accessibility
- "AI assist" button has
aria-label="Get AI draft suggestion" - AI suggestion area has
role="region" aria-label="AI suggestion — review before sending" - Accept/Edit/Dismiss buttons are keyboard accessible