Mise
Marigold Hair Studiosample salonDay 1 of 2
APPROVALS · ROLES · AUDIT

Cape

Rules that hold in every layer. The first nine come with the Lollicut stack and are enforced by its code. The last is this tool's own.

Approval log for Marigold Hair Studio

KEPT ON THIS DEVICE
Nothing approved yetA config is waiting in Apprentice. Approving or undoing it is logged here with the time.

Action log

Every booking, check-in, cancellation and import in this salon's sandbox, with who did it.
No actions yetBook a visit in Stations or import records in Wash. Each one is written here.

Guardrails

Confirm before change

An agent proposes. Nothing is saved until a person taps Confirm, and availability is checked again at that moment.POST /agent-proposals/{proposal_id}/confirm

Roles

Staff, owner, customer agent and scheduler each need their own grant row. Nothing about access is trusted from the browser.booking.role_grants

Sources

Every staff-agent answer cites the appointments it came from, or says the records do not hold it.POST /ask

Safe retries

A repeated request returns the first result. It never books twice.Idempotency-Key

Code writes the confirmation

The model holds the conversation. Code writes the booked date, time and payment line, and rewrites any reply that claims a booking the backend did not confirm.agents/photon/lollicut_photon/guard.py

STOP is honoured

An opt-out is stored before the model sees the message, and survives a restart.POST /integrations/photon/opt-outs

Hard safety checks

An eval fails if the agent claims an unconfirmed booking, invents a fact, ignores STOP, leaks another customer or changes a phone number.agents/photon/evals/checks.py

Live sends off by default

A real text or call needs the live switch on and the number on the allow-list.PHOTON_LIVE, PHOTON_ALLOWED_NUMBERS

One workspace per salon

Each salon gets its own API, database and agent service. An API serves only the salon it was deployed for.backend/app/core/config.py (SALON_ID)

Apprentice proposes, you approve

The FDE assistant never applies a config. A proposal becomes the salon's config only after Approve, and every approval is logged.Mise (this app)