Framework integrations
Drop-in adapters that put every tool your agent runs behind the AxioRank gateway, no rewrite.
If your agent is built on a framework, you don't call the gateway by hand. A drop-in adapter wraps the tools you already define, so every call the agent makes is scored, policed, and audited, with no change to your agent logic.
The model
There are two ways to put a framework's tools behind the gateway:
- Wrap a tool (most frameworks):
guardTool/guardTools(TypeScript) orguard_tool(Python) returns a drop-in replacement that scores the call's arguments, then runs the original tool onallow. Name, description, and schema are preserved. - A callback handler (LangChain in Python): attach one handler and every tool the agent runs is checked first, with no per-tool wrapping.
Allow, deny, hold
A guarded call scores its arguments through the gateway
before the tool runs. A require_approval hold is waited out transparently and
resolves to the final allow / deny. Adapters never surface a third state. On
a deny you choose the behaviour:
- Raise (default): a denied call raises
AxioRankDeniedErrorand the tool step fails hard (onDeny: "throw"in TypeScript,on_deny="raise"in Python). - Return a refusal:
onDeny: "return"/on_deny="return"returns a short, model-readable refusal string in place of the tool result, so the agent reads why it was blocked and re-plans. The natural choice for an autonomous agent.
Correlate a whole run
Pass axio.trace() instead of the bare client to give every tool call in one
agent run a shared trace id, so the gateway can stitch a multi-step kill chain
(read a secret → exfiltrate it) into a single trace. The same handle carries a
session id and metadata tags, and emits the AI Gateway headers that stitch LLM
turns into the run. See Agent Runs.
Supported frameworks
| Framework | TypeScript | Python |
|---|---|---|
| Anthropic Messages API | @axiorank/sdk/anthropic | axiorank[anthropic] |
| Vercel AI SDK | @axiorank/sdk/vercel | - |
| OpenAI Agents | @axiorank/sdk/openai-agents | axiorank[openai-agents] |
| LangChain · LangGraph | @axiorank/sdk/langchain | axiorank[langchain] |
| Mastra | @axiorank/sdk/mastra | - |
| LlamaIndex | @axiorank/sdk/llamaindex | axiorank[llamaindex] |
| Pydantic AI | - | axiorank[pydantic-ai] |
| CrewAI | - | axiorank[crewai] |
| AutoGen · AG2 | - | axiorank (framework-free) |
| Google ADK | - | axiorank (framework-free) |
| Google Gemini | @axiorank/sdk/gemini | axiorank (framework-free) |
| smolagents | - | axiorank (framework-free) |
| LiteLLM proxy | - | axiorank[litellm] |
| Cloudflare Agents | @axiorank/sdk/vercel | - |
| Strands Agents | - | axiorank[strands] |
The adapters are thin: each one funnels through the same toolCall used by the
TypeScript and Python
SDKs, so the allow / deny / hold semantics are identical to a hand-written
integration.
Protecting an inbound surface
The table above is for the calls your agents make outbound. To verify the agents reaching into a site you operate, see inbound surfaces. On WordPress, the AxioRank Agent Verification plugin does it with no code.
Streaming to your SIEM
The decisions these adapters produce are a tamper-evident audit log you can push live to your SIEM. On Datadog, the AxioRank tile adds a log pipeline, three dashboards, and five monitors over the stream. See audit export for the raw NDJSON and CSV feeds and the other destinations.
Alerts and approvals in Slack
When a call is held or a high-risk alert fires, the person who needs to act is
usually in Slack. The AxioRank Slack app installs with
one click, routes alerts to a channel, and lets approvers approve or deny held
tool calls right there, through the same dual-control path as the dashboard. Run
/axiorank for what is waiting on you.
Next steps
- TypeScript SDK · Python SDK: the underlying clients.
- Content-inspection engine: what each call is scored against.
- Gateway API: the HTTP contract behind every adapter.