Developers · adapters
We sit under your harness, whichever one it is.
Adapters exist so that adopting Velone is not a migration. The harness keeps planning and keeps its own abstractions; only the execution path moves.
01 / Claude Agent SDK
Replaces the bash, file, and computer tools with governed equivalents. Subagents inherit a child session.
import { query } from "@anthropic-ai/claude-agent-sdk";
import { veloneTools } from "@velone/claude";
const tools = await veloneTools({
session: "claims-bot",
policy: "./velone.policy.yaml",
});
for await (const msg of query({ prompt, tools })) {
// every tool use crosses the kernel first
}02 / OpenAI Agents SDK
Wraps function tools and the code interpreter. Guardrails still run; policy runs after them and wins.
import { Agent, run } from "@openai/agents";
import { governed } from "@velone/openai";
const agent = new Agent({
name: "claims-bot",
tools: governed([refundTool, emailTool], {
session: "claims-bot",
}),
});
await run(agent, input);03 / LangGraph
A checkpointer plus a tool-node wrapper. Velone sessions map to LangGraph threads one to one.
from velone.langgraph import GovernedToolNode, VeloneSaver
graph = StateGraph(State)
graph.add_node("tools", GovernedToolNode(tools, session="claims-bot"))
app = graph.compile(checkpointer=VeloneSaver())04 / CrewAI
Each crew member gets its own principal, so attribution survives a multi-agent run.
from velone.crewai import governed_crew
crew = governed_crew(
Crew(agents=[researcher, writer], tasks=tasks),
session="content-crew",
ring=2,
)05 / Codex CLI
Runs the Codex sandbox inside a Velone microVM instead of the local machine.
$ velone codex --policy velone.policy.yaml \
--repo ./service-billing \
-- "fix the failing integration tests"06 / Google ADK
Tool interception is complete; session mapping to Vertex sessions is still landing.
from velone.adk import GovernedToolset
agent = Agent(
model="gemini-2.5-pro",
tools=GovernedToolset(tools, session="claims-bot"),
)07 / Microsoft Agent Framework
Entra principals map to Velone principals directly, so approvers are your real directory users.
var agent = new ChatClientAgent(client)
.WithVeloneKernel(session: "claims-bot", ring: 2);08 / Your own loop
The base SDK is the adapter. If you can name the call site, you can govern it.
const out = await session.shell(cmd);
const res = await session.http.post(url, body);
const val = await session.mcp.call("github", "create_issue", args);09 / questions
What if our harness is not listed?
Use the base SDK. An adapter is a thin wrapper that knows where a given framework executes tools; writing one for an in-house harness is usually under a hundred lines, and we will help.
Do adapters lag behind the frameworks?
Sometimes, and we say so in the status above rather than claiming day-one support. Tool interception is stable across versions; the parts that break are session and checkpoint mappings.
Can we use two harnesses at once?
Yes. A parent session can spawn children running different frameworks, and the evidence chain treats them as one story with separate actors.
keep reading
Ring 0
Bring the harness you already run.
Tell us what you are using. If the adapter is not ready, we will write it with you during the pilot.