Engineers choosing a relationship-based authorization engine while also building agent workflows.
Which engine fits your relationship model, and what still has to be decided somewhere else.
The control gap
SpiceDB and OpenFGA are close relatives. Both descend from the Zanzibar design, both store relationships and answer check queries, and both are credible for per-object permissions at scale. Choosing between them comes down to schema ergonomics, consistency controls, operational preference, and which managed offering you trust. What neither answers is whether an agent may run this particular call, with these arguments, right now, or whether a person should look at it first.
What good looks like
A relationship engine that models who may act on what, and a separate runtime decision for the calls where the arguments and the moment matter.
- Compare on the schema you actually need: nested groups, wildcards, exclusions, and how each expresses them.
- Compare consistency handling, because a check that reads stale relationships is a permission bug that only shows up under load.
- Keep the relationship store authoritative for object permissions and do not duplicate it in ad hoc rules.
- Add a runtime layer for argument thresholds, environment conditions, and human approval, which are outside both engines' model.
A production workflow
- Model your objects and relationships in each candidate's schema language and compare the result honestly.
- Load representative data and measure check latency at your real fan-out, not at a demo size.
- Wire the chosen engine into the tool boundary as one input to the decision.
- Layer argument and approval rules on top, and keep them versioned with their own evidence.
Evidence to require
- The relationship check performed for each agent action and its result.
- Consistency mode used for that check, since it changes what the answer means.
- The argument-level conditions applied after the relationship check passed.
- Approvals raised for calls that were relationally permitted but operationally consequential.
Buyer checklist
- Does your permission model actually need relationships, or would roles and attributes do?
- Which engine's schema expresses your hardest case without contortion?
- What is the check latency at your worst fan-out, measured rather than quoted?
- Where will approvals and argument thresholds live once the engine is chosen?
Practical answers
Common implementation questions
Which one should we pick?
There is no general answer, and anyone giving one is selling something. Model your hardest permission in both schemas, benchmark at your fan-out, and choose on those two results plus your operational preference.
Can either engine hold a request for human approval?
Not as a first-class outcome. They answer whether a relationship permits an action. Turning that into a pause, a reviewer, an expiry, and a receipt is work that sits above the engine.
Does Endram compete with them?
No. Endram evaluates the tool call and can consult a relationship engine as part of that decision. The two answer different halves of the question.