Skip to content
Agentic Control Plane

You're writing the agent. We give you the control layer.

ACP ships an SDK for each major agent framework. One pip install (Python) or npm i @agenticcontrolplane/governance (TypeScript), one decorator or one base-URL change, and every tool call your agents make gets identity, per-user policy, PII detection, and audit — rooted in the end user's identity, not your service key.

Different from Integrations, which is for plugging off-the-shelf AI clients (Claude Code, Cursor, Claude Desktop) into ACP. This page is for you building the agent.

Starters

Pick your framework. Copy the starter. Ship controlled.

Each guide ships a runnable minimal example — a FastAPI or Express endpoint, one wrapped tool, an end-user JWT bound to the request. Clone, set two env vars, pip install, hit the endpoint, watch the audit log populate.

Plus: Microsoft Agent Framework, AWS Strands, Google ADK, Vercel AI SDK, Mastra, Pydantic AI, Deep Agents, AutoGen (now Agent Framework) — full coverage across the most-deployed agent SDKs in 2026. And for cloud-hosted agents: AWS Bedrock, Microsoft Foundry, Vertex AI Agent Builder.

Using a framework we don't list? The control model is framework-agnostic — the /govern/tool-use endpoint is HTTP, and the SDK source shows what an adapter does. There is no adapter for it today.

Two install patterns

Either wrap your tools, or proxy your LLM.

Depending on the framework, control enters the loop in one of two places. Both land at the same audit log.

Pattern A — wrap the tool
You decorate each tool with @governed("tool_name"). Before the tool runs, ACP evaluates policy, rate limits, and PII on the input; after it runs, ACP scans the output. The LLM call goes direct to your provider.
Used by: CrewAI, LangGraph, Anthropic Agent SDK.
Pattern B — proxy the LLM
You point the framework's OpenAI-compatible client at api.agenticcontrolplane.com/v1. Every LLM call — and the tool calls it emits — is audited at the proxy. Per-agent attribution via x-acp-agent-name header.
Used by: OpenAI Agents SDK, any OpenAI-compatible client.

Deeper explanation of both paths: how a call is decided →

Shared concepts

One control model. Framework-agnostic.

Every starter teaches the same four building blocks. Learn them once; they apply no matter which framework you pick.

End-user JWT binding
Every request carries the human's token, not your service key. set_context(user_token=...) at request start.
@governed decorator
Marks a tool as policy-enforced. Deny returns a tool-error string the LLM can adapt to. Allow runs your code.
Session IDs
All tool calls for one request share a session_id, so the audit log groups them into a single trace.
Fail-open
If /govern/tool-use times out, the tool proceeds with reason fail-open. Control is never a single point of failure.

Deep dive on how a call is decided → · How workspace policies work →

What every framework starter gets

No matter which framework — every tool call your agent makes passes through the same control pipeline.

Per-user policy
Allow / deny / redact evaluated against the end user's scopes and the workspace's rules.
Per-user rate limits
Budgets and throttles rooted in the human, not the shared service key.
PII detection
Scan tool input and output; redact or flag based on policy.
Cross-framework audit
CrewAI, LangGraph, Claude Code, Cursor — one log per user across every agent surface.
Inter-agent handoffs
Multi-agent delegation audited as Agent.Handoff events where the framework supports it.
Identity provider of your choice
Firebase, Auth0, Okta, Entra ID, any OIDC. Your users stay in your directory.

Your framework. Our control plane.

Free to start. Add per-user control to your agent code in minutes.