Agent Control Plane — SDK and CLI for governed agent execution with a local Docker stack.
Project description
ACP Control Plane — Python SDK + CLI
PyPI: acp-ai · Import: acp
One pip install gives you a local governance stack: intercept tool calls, evaluate your OPA/Rego rules, persist audit + agent registry in Postgres, and view everything in the dashboard.
Requires: Docker Desktop (Compose v2). All acp commands run in your terminal (Terminal.app, iTerm, or the IDE integrated terminal).
Install (terminal)
pip install acp-ai
acp doctor
First-time setup (terminal)
Run these in order from any directory (home folder is fine):
# 1. Create your editable policy folder (~/.acp/policies)
acp init
# 2. Start local stack: Postgres + OPA + interceptor + dashboard
acp up --build
# 3. Open governance dashboard in browser
acp dashboard
| Command | What it does | Where it runs |
|---|---|---|
acp init |
Creates ~/.acp/policies/ with starter .rego files + HOW_TO_ADD_RULES.md |
Your terminal |
acp up --build |
Starts Docker containers (first time builds interceptor image) | Your terminal (needs Docker running) |
acp up |
Starts stack without rebuild (after first --build) |
Your terminal |
acp down |
Stops containers | Your terminal |
acp status |
Container + health check status | Your terminal |
acp dashboard |
Opens http://localhost:3090/dashboard/ | Your terminal |
acp doctor |
Checks Docker + package install | Your terminal |
Your rules (editable after pip install)
Policies are yours, not locked inside the package:
~/.acp/policies/
├── HOW_TO_ADD_RULES.md
├── router.rego ← route tools → policies
├── rbac.rego ← JWT roles → tools
├── mortgage_application.rego ← commented sample (loan submit)
└── mortgage_underwriting.rego ← commented sample (score_loan / escalate)
Edit files in ~/.acp/policies/, then restart:
acp down && acp up
Custom policy path (optional):
export ACP_POLICIES_DIR=/path/to/my/policies
acp up
Use in your agent project (any framework)
In your project folder (separate from ACP), activate a venv and use the SDK:
import os
from acp import governed_tool
os.environ.setdefault("ACP_INTERCEPTOR_URL", "http://localhost:8080")
@governed_tool(agent_id="my-agent", tool="my_tool_api", action="run_action")
def my_tool(amount: int) -> str:
return f"ok:{amount}"
Works with CrewAI, Strands, LangGraph, or plain Python.
Register agents via dashboard Agent Registry or POST /api/v1/agents.
Local URLs
| URL | Purpose |
|---|---|
| http://localhost:3090/dashboard/ | Dashboard (events, policies, registry, approvals) |
| http://localhost:8080 | Interceptor API (/tool-call, /api/v1/*) |
What Docker starts
| Service | Role |
|---|---|
| Postgres | Audit log, agent registry, approvals |
| OPA | Evaluates your Rego from ~/.acp/policies/ |
| Interceptor | PEP — POST /tool-call, JWT, registry |
| Dashboard | Governance UI |
| Gateway | Single origin on :3090 |
Also on disk: ~/.acp/jwt/ (dev RS256 keys), ~/.acp/runtime/ (compose + images).
Maintainers (ACP monorepo)
cd sdk/python
./scripts/sync_bundle.sh
./scripts/publish_pypi.sh
twine upload dist/*
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file acp_ai-0.2.0.tar.gz.
File metadata
- Download URL: acp_ai-0.2.0.tar.gz
- Upload date:
- Size: 74.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2908926df2e166a6e22057d58cacad4eb27efd58dee038d6568818f248be5a5
|
|
| MD5 |
0632860a58f958e995fa8247fb547e5a
|
|
| BLAKE2b-256 |
9dd79a969dcc2cac60603989087b8c98bd98f86b6367061a8a23d7593d2ccf43
|
File details
Details for the file acp_ai-0.2.0-py3-none-any.whl.
File metadata
- Download URL: acp_ai-0.2.0-py3-none-any.whl
- Upload date:
- Size: 103.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
808525ac4312739efa388e0f24eead39cb18b5dda747bcd21d619fe69c87e2cc
|
|
| MD5 |
7d885db49b951467be39cf334ee7e547
|
|
| BLAKE2b-256 |
e5ab892ee82e62cd17e6c68ce4cc21c2c0a84df5cff3a391736001e3f0a97ec8
|