← Back to the demo Back to the start of the demo Home

Facility Booking Agent: features and guardrails

A prototype agent on the Agentic Enterprise Command Center. It books a court, table, pitch or room from a plain-language request, for a group, and stops for a person before any payment. It uses a sample booking site built on public information, with sample prices. Not connected to ActiveSG or any real booking system. Every guardrail below is enforced in code and proven by an automated test that fails the build if the code stops enforcing it.

What the agent does, step by step

  1. Understand the request. You type what you want in your own words. The AI turns it into a structured goal: the activity, how many people, when, for how long, and the budget each. Code checks that goal before anything else happens.
  2. Read the facilities. The agent reads the booking site: badminton courts, table-tennis tables, a futsal pitch and a function room, with what is free on Saturday and what each costs.
  3. Find a time the whole group can make. The agent reads your timetable and three friends' sample calendars, adds travel time after each commitment, and works out the window when everyone can actually be there.
  4. Choose a facility and a slot, and say why. The AI picks one option from the list it was given and writes down why. It cannot book or pay. Code then checks its answer against the real data before you see it.
  5. Offer alternatives, or the waitlist. If nothing fits, the agent says so plainly and offers what is close: another time, another facility, or a place on the waitlist for a full slot. It never books the least bad option on its own.
  6. Ask before paying. The run stops and waits for you. Nothing is booked and nothing is paid until a person presses Approve.
  7. Book and pay. After approval, the agent books the slot on the sample booking site and pays from sample wallet credits. No real court, account or money.
  8. Log every step. Every step is recorded with its time, what it did, which AI answered, what it cost, and every check, including the ones that refused.

Guardrails (22)

GuardrailWhy it mattersEnforced inReference
Message length limit
Messages over the limit are refused before they reach the AI.
Very long inputs cost money and are a common way to smuggle instructions in.input-guard.jsOWASP LLM10 Unbounded consumption
OWASP LLM01 Prompt injection
No NRIC, phone or card numbers
A message containing an NRIC, a phone number or a card number is refused. It is never sent to the AI and never stored; the log records only that it was refused.
A booking does not need personal identifiers, so collecting them would be a liability, not a feature.input-guard.jsPDPA, NRIC guidelines
OWASP LLM02 Sensitive information disclosure
Prompt-injection screen
Phrases like "ignore your rules" are flagged in amber. The screen is only a warning light: the rules that actually stop a bad booking are in code, further down.
No filter catches every trick, so it must never be the thing you rely on.input-guard.jsOWASP LLM01 Prompt injection
AI Verify: security
Runs per visitor per day
Each visitor can start a limited number of runs a day.
A public demo that calls a paid AI model must not be something one person can run all day.workflow.jsOWASP LLM10 Unbounded consumption
Daily AI spending cap
All visitors together can spend at most US$1 a day on AI. The cost is reserved before each call and recorded after it. At the cap, the agent stops calling the paid model.
A cost cap has to hold even when many people use the demo at once.model-router.js, ai-lane.jsOWASP LLM10 Unbounded consumption
IMDA MAIGF: operations management
The AI's reading of your request is checked
The AI must answer in a fixed shape with allowed values only: a known activity, 1 to 40 people, sensible hours. Anything else is refused, not guessed at.
Treating AI output as trusted input is how agents end up doing things nobody asked for.schema.jsOWASP LLM05 Improper output handling
AI Verify: robustness
Looking cannot book
The tools used to read the facilities and the calendars can only read. Booking and paying are separate tools, used only after approval.
An agent should have no more power at each step than that step needs.steps.jsOWASP LLM06 Excessive agency
AI Verify: security
Your own account only
The account comes from your session, never from your message or the AI's answer. The booking site refuses any other account.
If an agent could be talked into acting on someone else's account, it would be a tool for fraud.steps.js, site.jsOWASP LLM06 Excessive agency
AI Verify: security
Only days the site lists
The demo booking site lists Saturday 15 November only. A request for another day is answered honestly, not forced onto Saturday.
An agent that quietly changes what you asked for is worse than one that says no.steps.jsAI Verify: transparency
One booking a week
Each account can hold one booking a week. The agent checks before choosing, and the booking site checks again when booking.
Fair access: one person should not be able to hoard courts.steps.js, site.jsBooking policy of the (mock) facility
One court, table or room per booking
A booking is for one court, one table, one pitch or one room. Asking for ten is refused by code, whatever the AI says.
This is the rule an "ignore your rules" message is usually trying to break.steps.jsBooking policy of the (mock) facility
OWASP LLM06 Excessive agency
At most 2 hours
A booking is at most 2 hours. Longer requests are refused before choosing, and the chosen option is checked again.
Fair access, and a simple rule the AI must not talk its way around.steps.js, checks.jsBooking policy of the (mock) facility
The facility fits the group
Every facility has a minimum and maximum number of players. A badminton court cannot be booked for ten.
The AI may suggest something that sounds right and does not fit.steps.js, checks.jsBooking policy of the (mock) facility
AI Verify: robustness
No invented courts or slots
The AI must choose from the options it was given. If it names a court or a time the site did not offer, its answer is refused.
AI models can state made-up things with complete confidence.checks.jsOWASP LLM09 Misinformation
AI Verify: robustness
Everyone can actually make it
The chosen time must start after everyone's last commitment plus travel time, and end before their next one. Code checks this itself rather than trusting the AI's arithmetic.
A slot that looks free on the clock can still be impossible to reach.checks.jsAI Verify: robustness
Within the budget
The total price, shared by the group, must be within the budget each person gave.
Spending limits are the user's, and the agent must not stretch them.checks.jsBooking policy of the (mock) facility
No made-up numbers in the reason
Every number in the AI's explanation must be one the agent gave it: a real time, price or court number. A figure from nowhere means the answer is refused.
An explanation with an invented price is misinformation, even if the choice itself is fine.checks.jsOWASP LLM09 Misinformation
AI Verify: transparency
The price comes from the site, not the AI
What you are asked to approve is calculated by code from the site's price list. The AI's words cannot change the amount.
A model that misread a price must not be able to change what gets paid.steps.jsOWASP LLM05 Improper output handling
AI Verify: accountability
No automatic retries
If the AI's answer fails a check, the agent stops and says why. It does not keep asking until it gets an answer it likes.
Retrying until something passes hides the failure the check was there to show.steps.jsAI Verify: accountability
An AI "nothing fits" is checked too
If the AI says nothing fits, code checks every option itself. If one passes every rule, you are shown it, with a note that the AI missed it. You still decide.
Checks must catch an AI that is wrong in either direction: inventing an option, or missing a real one.steps.jsAI Verify: robustness
OWASP LLM09 Misinformation
No payment without your approval
Pressing Approve creates a one-time token tied to this run, this slot and this exact amount. The wallet refuses any charge without it, and refuses it a second time.
A person stays in control of money, and an approval cannot be reused for something else.site.js, wallet.js, approval-token.jsIMDA MAIGF: level of human involvement
AI Verify: human agency and oversight
OWASP LLM06 Excessive agency
Every step is on the record
The run log keeps every step, every check and which AI answered. Refused messages are logged as refused, without their content.
If you cannot show what the agent did and why, you cannot govern it.log.jsAI Verify: accountability
AI Verify: transparency

Try to break it: the five attacks on the page

References: OWASP = OWASP Top 10 for LLM Applications (2025). IMDA MAIGF = IMDA Model AI Governance Framework. AI Verify = AI Verify testing framework principles. PDPA, NRIC guidelines = Personal Data Protection Act, and PDPC Advisory Guidelines on NRIC numbers. Generated from spec-catalogue.js, the same source the demo's side panel reads.