That’s the design assumption behind every layer: the model can be confused, manipulated, or plain wrong, and nothing bad should happen when it is. These four decisions are what that looks like.
01
One client’s data can’t end up in another’s ticket
Every client gets its own dedicated agent, on infrastructure dedicated to your MSP. We didn’t point one shared model at all your tenants and hope a system prompt keeps them apart: there is no shared agent to leak through.
reset-password · wrong client’s tenantrefused · loggedagent tokens: one client · 15-min expirydoc search: filtered per client
02
Nothing runs without your say-so
Anything that changes a client’s environment waits for a human until you decide otherwise, and “reads” like credential or recovery-key lookups are gated too, because read-only is a lie when the read is a password. We picked the slower default on purpose.
look things up · allowedchange things · asks firstcredential reads · also ask first
03
What you approve is exactly what runs
The agent can’t skip an approval, because approvals aren’t instructions to the AI. They’re a wall in front of it: each step is checked against the plan you signed off, an ambiguous reply classifies to neutral instead of yes, and the agent can’t pick its own approver.
in the plan · rannot in the plan · refused“maybe after payroll?” · neutral, not a yes
04
You can check everything it did, misses included
Every action, approval, and failure is on the record, per client and per ticket. The failures are surfaced with a reason on purpose, because an audit trail that hides the misses is marketing, and you’d find out eventually anyway.