Integrations
Agent framework integrations
Bring agents built with LangGraph, CrewAI, AutoGen, OpenAI Agents, MCP or your own framework under control without changing how they were built.
The whole integration
There isn’t one.
No adapter, no middleware, no plugin, no change to your graph or your crew or your prompt. Governance attaches where your agent calls out to something that can change state.
Frameworks
8
Adapters
0
The honest answer
There is no framework integration, and that is the point.
An agent is governed where it calls out to a system of record, not inside its control flow. So how it was built — a graph, a crew, a conversation loop, a cron job with a model call in it — is not OpsAI's business, and nothing in the product branches on it.
The sample estate runs 11 AI systems built with 8 different frameworks, in 4 architectural shapes. Every one is governed by the same bounds, scored by the same risk function, and produces the same six-stage trace. The framework is recorded because the spread across an estate is worth knowing — not because behaviour varies by it.
That is why a framework you wrote yourself sits on exactly the same footing as a popular one, and why an AI system that arrived inside a vendor SaaS product is in scope even though nobody in your organization built it.
AI systems
11
in the sample estate
Frameworks
8
all governed alike
Architectural shapes
4
orchestrator to cron
Lines of framework code changed
0
none
IllustrativeThe OpsAI sample estate. Every system, with its framework and owner.
Named, not supported
These are examples, not a support matrix.
Nothing in this list required work, and nothing absent from it is a gap. It exists to make the claim concrete — including the last two entries, which are the ones that prove the point.
No support matrix, deliberately
Governance attaches where an agent calls out, not inside its control flow. There is nothing per-framework to build, which is why a framework you wrote yourself is on the same footing as a popular one.
- LangGraph
LangGraph
Governed at the boundary. No adapter, no middleware, no change to the graph.
- CrewAI
CrewAI
A crew task that writes is an action. The framework is recorded and nothing branches on it.
- AutoGen
AutoGen
Multi-agent conversation is where delegation depth matters, and the cap applies the same way.
- OpenAI Agents
OpenAI Agents
Tool calls are actions. Governed at the call, not in the agent definition.
- Semantic Kernel
Semantic Kernel
A plugin that reaches a system of record is the boundary. That is the only place a control needs to be.
- MCP servers
MCP servers
A tool call that writes is an action, and a tool description is a prompt rather than a control.
- A framework you wrote
A framework you wrote
On exactly the same footing as the others, which is the point of governing at the boundary.
- A scheduled script
A scheduled script
Not an agent by most definitions, and in scope anyway: it can change state and its output is not predictable.
What applies regardless
The same four controls, whatever built it.
These are not framework features and they cannot be, because a framework has no view of your policy, your approvers or your evidence record.
- Bounds at the action
- Evaluated with no model call in the path. A refund ceiling applies whether the proposal came from a graph node or a cron job.
- Delegation depth
- Capped at 3. Multi-agent frameworks make this easy to exceed by accident, and past the third hop nobody can say whose authority is being exercised.
- One accountable human
- Required at registration, and not satisfiable by a team. A framework has no concept of this and no reason to.
- A trace per attempt
- Including refusals. Framework tracing shows you what your code did; this records what was allowed and why.
Two lines, in whatever you already wrote.
# Whatever proposed this — a graph node, a crew task, a scheduled job.
decision = opsai.actions.evaluate(
agent="refund-resolver",
action="issue.refund",
subject="ORD-40122",
amount={"currency": "INR", "value": 18400},
)
if decision.outcome == "authorized":
razorpay.refunds.create(..., grant=decision.grant)That is the ask shape, and it is the fastest way in. The stronger shape is to route the action through an OpsAI-held connection, so governance no longer depends on your code remembering to ask — both shapes compared.
Where to go
Register one agent you already run and evaluate one action it already takes.
No rewrite, no adapter, no migration. If the framework matters to the answer, something has gone wrong with the design rather than with your choice of framework.