Summary
The OpenKuai policy engine — never-reply rules, quiet hours, rate limits, and disclosure — with every send gated on a human authorisation row. Agents draft; humans send.
The one-sentence model
Agents are paired with reps — not a replacement for them — and a human remains the authorising party for anything a customer receives. In the code, that sentence becomes concrete: sends are gated on an authorisation row, and the agent’s default output is a draft.
The policy engine
Between the customer’s message and the agent’s reply sits a policy engine with four standing rules:
- Never-reply — some messages should never get an automated answer, full stop.
- Quiet hours — the agent respects the hours its rep would.
- Rate limits — no customer gets flooded.
- Disclosure — the customer knows when they are talking to an agent.
Why the gate is a row, not a vibe
An authorisation row is auditable state: who approved, what exactly was approved, when. The bridge commits before it acknowledges, and sends only when the row exists. When something goes wrong — and at some point something will — the question “who let this send?” has an answer in the database, not in a chat log.