Trust score
Every agent starts at 100. Each logged event derives trust signals — negative for violations, positive for healthy behavior — and the score moves in real time, clamped to 0–100. Every change is stored with a human-readable reason, so the score is always explainable.
Signals
| Violation | Delta |
|---|---|
| Failed authorization | −15 |
| Invalid event signature | −15 |
| Action blocked by policy | −10 |
| High failure rate | −10 |
| Suspicious tool call | −8 |
| Sensitive data access attempt | −8 |
| Unknown/unverified tool used | −5 |
| Repeated errors | −5 |
| Unusually high activity | −3 |
| Event missing signature | −2 |
| Healthy behavior | Delta |
|---|---|
| Workflow completed successfully | +2 |
| Low error rate | +2 |
| Signed event verified | +1 |
| Approved tool used | +1 |
| Stable activity pattern | +1 |
Trust levels
| Score | Level | Effect |
|---|---|---|
| 90–100 | Trusted | Normal operation |
| 70–89 | Healthy | Normal operation |
| 50–69 | Watch | Actions receive a policy warn; agent status escalates to warning below 50 |
| 30–49 | Risky | Warnings continue; visually flagged everywhere |
| 0–29 | Blocked | Privileged actions are blocked by default policy; status auto-escalates to blocked |
Reading the score
const trust = await ProofLedger.getTrustScore("support-agent");
// { agentId: "support-agent", trustScore: 82, trustLevel: "healthy", status: "active" }
// The change ledger, newest first — each row has a reason:
// GET /api/agents/support-agent/trust-history
// [{ "previousScore": 90, "newScore": 82, "delta": -8,
// "reason": "Sensitive data access attempt: buyer financial records", … }]Every logged event also returns the movement inline (trust: { before, after, level }), so your agent can react — e.g. slow down or ask for help when its own score drops.
Note
Scores never reset automatically and blocked status never auto-clears — an operator reviews the agent and reactivates it from the agent detail page. High/critical violations also email your team — see Alerts.