Skip to content

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.

Any framework
# 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.