Home / Demo / Refund approval

A Slack support agent tries to refund a customer.
Kynara requires a manager to approve it.

Press play. Watch an AI support agent handle a refund in Slack, hit Kynara's policy check, pause for human approval on the money-moving step — and land every decision in a tamper-evident audit log. You are the manager: approve or reject when prompted.

Ready.
Slack  · #support
Press Play to start the scenario…
Kynara · Decision engine
Waiting for a tool call to authorize…
Tamper-evident audit log  · SHA-256 hash-chained
No decisions recorded yet.

What just happened

The agent had permission to read the account and draft a reply, but the refund is a money-moving action. A Kynara policy says any refund over $50 returns require_approval, so the agent paused instead of paying out. A human manager approved, the refund executed, and the whole chain — request, decision, approver, execution — is recorded and verifiable. A prompt injection in the customer message can't change that, because the decision is made outside the model.

The policy & the code

// Refunds over $50 need a manager. Effect: require_approval.
{
  "name": "Refunds over $50 need manager approval",
  "effect": "require_approval",
  "priority": 100,
  "actions": ["payments.refund.issue"],
  "condition": {
    "op": "gt",
    "args": ["ctx.resource.attrs.amount_cents", 5000]
  }
}

Want this on your own agents? Start with the quickstart, see the policy docs, or become a design partner.