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.