You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|**Identity**| Who the agent is | Session-scoped (minutes–hours) | Passport |
12
+
|**Mandate**| What this exact action may do, under whose authority | Action-scoped (seconds–minutes) | Work visa |
13
+
14
+
An IdP token (Okta, Entra) proves identity. A mandate proves per-action authorization.
15
+
16
+
---
17
+
7
18
## The Problem: Authorization ≠ Intent
8
19
9
-
When you connect an AI agent to an Identity Provider like Okta or Entra, it receives an access token—a **passport** that proves identity and carries static scopes like `database:write`.
20
+
When you connect an AI agent to an Identity Provider, it receives an access token—a **passport** that proves identity and carries static scopes like `database:write`.
10
21
11
22
But IdP scopes are coarse-grained. If a prompt injection tricks your agent into calling `drop_database` instead of `update_record`, your API executes the attack because the agent's token legitimately holds the `database:write` scope.
12
23
13
-
**The IdP cannot evaluate context. It authorized the agent, not the action.**
24
+
**The IdP authorized the agent, not the action.**
14
25
15
-
## The Solution: Per-Action Work Visas
26
+
## The Solution: Per-Action Mandates
16
27
17
-
Predicate Authority adds a **deterministic policy layer** between your agent and your tools. Every action is evaluated in <1ms against explicit ALLOW/DENY rules before execution.
28
+
Predicate Authority adds a **deterministic policy layer** between your agent and your tools. Every action is evaluated in <1ms against explicit ALLOW/DENY rules before execution. Approved actions receive a short-lived **mandate**—a cryptographic proof of authorization for that specific (action, resource, principal) tuple.
@@ -29,9 +40,12 @@ Predicate Authority adds a **deterministic policy layer** between your agent and
29
40
-**Fast**: p99 < 1ms authorization latency
30
41
-**Auditable**: Cryptographic proof ledger for every decision
31
42
43
+
The sidecar runs as a separate process, not as a framework hook. Framework integrations can disappear when orchestration changes; execution boundaries should survive runtime changes.
44
+
32
45
---
33
46
34
-
## Terminal Dashboard
47
+
<details>
48
+
<summary><h2>Terminal Dashboard</h2></summary>
35
49
36
50
Watch authorization decisions in real-time with the built-in TUI:
37
51
@@ -41,36 +55,12 @@ Watch authorization decisions in real-time with the built-in TUI:
Request authorization for multiple action/resource pairs in a single call. This is useful for orchestrators that need broad permissions across different domains (e.g., browser access AND filesystem access):
149
142
@@ -177,6 +170,29 @@ curl -X POST http://127.0.0.1:8787/v1/authorize \
177
170
178
171
**Backward compatibility:** Single action/resource requests continue to work as before.
179
172
173
+
</details>
174
+
175
+
## Demos
176
+
177
+
*See the sidecar in action—securing AI agents across popular frameworks.*
@@ -323,9 +339,11 @@ Integrate with your existing IdP for token validation:
323
339
|`/metrics`| GET | Prometheus metrics |
324
340
|`/policy/reload`| POST | Hot-reload policy |
325
341
326
-
### Multi-Scope Delegation Chain
342
+
### Delegation Semantics
327
343
328
-
When a parent mandate has multiple scopes, child delegations are validated using **OR semantics**—the child's scope must be a subset of at least one parent scope:
344
+
**Strict subset rule:** A child mandate's (action, resource) must be equal to or narrower than the parent's. `browser.*` can delegate to `browser.click`; `browser.click` cannot delegate to `browser.*`.
345
+
346
+
**Multi-scope parents:** When a parent mandate has multiple scopes, child delegations are validated using **OR semantics**—the child's scope must be a subset of at least one parent scope:
When a mandate is revoked, **all derived child mandates are immediately invalidated**:
371
+
372
+
```
373
+
A (root)
374
+
└── B (depth 1)
375
+
└── C (depth 2)
376
+
└── D (depth 3)
377
+
378
+
Revoke B → C and D die instantly. A survives.
379
+
```
380
+
381
+
Child authority does not survive parent revocation. To restore access, the child must obtain a fresh mandate from an active parent—there is no automatic re-minting.
0 commit comments