The agent is live in Lua admin and working. Tonight we:
- Wrote and loaded a full system prompt covering all booking logic, pricing, availability rules, discounts, escalation triggers, and conversation behavior
- Tested it successfully — it correctly blocked a July 4th request, pivoted to July 3rd, collected all intake fields conversationally, and applied the right rules throughout
- Hardcoded Buskey's operating hours directly into the prompt as a stopgap
The agent can already have a complete booking conversation and get a customer to the point of "ready to pay." What it can't do yet is the three things below.
What it needs to do:
- Read the private Buskey Cider events calendar to check for conflicts before confirming availability
- Write a new event to the calendar when a deposit is confirmed
- Place a temporary "hold" entry when a customer is sent a payment link but hasn't paid yet
- Delete the hold entry if no deposit is received within 12 hours
Notes:
- A Google Calendar service account was previously set up for the Buskey Cider booking agent (the full back room booking agent). That service account and the JWT signing approach used there should be reusable here.
- The calendar in question is the private events-only calendar visible behind the bar.
What it needs to do:
- Send a confirmation email to the customer after deposit is received, including:
- Event summary (name, date, time, room, headcount)
- Reservation fee paid and any discounts applied
- Drink minimum and tab structure
- Add-ons included
- Full terms (decoration rules, overtime policy, cancellation policy, minimum shortfall policy)
- Send a Shopify payment link by email if payment cannot be completed in the chat
- Send an escalation email to the relevant manager when a booking requires human sign-off (with full intake summary and reason for escalation)
Notes:
- Primary channel for customers is the website chat embed. Email is for confirmations, agreements, and payment links only.
- Escalation emails should route to the relevant manager based on the type of issue (operations vs. owner-level decisions).
What it needs to do:
- Generate a payment link for the correct deposit amount and send it to the customer
- Ideally this happens inline in the chat; if not possible, it falls back to email
- Deposit amounts vary based on day/time/event type/discounts — the agent calculates the correct total before generating the link
Notes:
- Buskey currently uses a single Shopify line item for deposits with multiple price points. The agent should select the matching price point or create a new one if the amount doesn't exist yet.
- This keeps all deposits under one line item in reporting — preserve that structure.
- Key open question for your team: Can a Lua agent generate and surface a Shopify checkout link inline within the website chat widget? If yes, that's the primary flow. If not, email fallback is fine for now.
What it needs to do:
- If a customer is sent a payment link but doesn't pay within 12 hours, automatically release the calendar hold
- This is a scheduled/cron action — similar in structure to the daily briefing cron job already built in Lua
Two documents were produced as part of this build:
-
buskey_event_agent_logic_map.md — Full business logic reference. All pricing tables, availability rules, discount structures, escalation triggers, and open questions documented in detail. Use this as the source of truth if anything in the prompt needs to be debugged or expanded.
-
buskey_event_agent_system_prompt.md — The exact prompt currently loaded into the Lua admin. If changes need to be made to agent behavior, start here.
- Google My Business hours sync — currently hardcoded in the prompt. Would be cleaner as a live read so hours don't need to be manually updated if they change seasonally.
- Inquiry log — no CRM or tracking layer yet. An Airtable or Google Sheet logging each inquiry and its status would be useful once volume picks up.
- Automated hold release notification — when a hold expires and is released, it would be good to send the customer a note that the slot is no longer reserved and invite them to rebook.