agenticdome-python-sdk 1.2.7__tar.gz → 1.2.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agenticdome_python_sdk-1.2.7/agenticdome_python_sdk.egg-info → agenticdome_python_sdk-1.2.9}/PKG-INFO +87 -30
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/README.md +67 -11
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9/agenticdome_python_sdk.egg-info}/PKG-INFO +87 -30
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_python_sdk.egg-info/SOURCES.txt +7 -0
- agenticdome_python_sdk-1.2.9/agenticdome_python_sdk.egg-info/entry_points.txt +2 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_python_sdk.egg-info/requires.txt +18 -18
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/__init__.py +5 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/_framework_firewall.py +2 -1
- agenticdome_python_sdk-1.2.9/agenticdome_sdk/_mode.py +35 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/agno.py +2 -1
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/aws_bedrock.py +2 -1
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/client.py +195 -17
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/crewai.py +3 -2
- agenticdome_python_sdk-1.2.9/agenticdome_sdk/demo.py +120 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/google_adk.py +2 -1
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/langgraph.py +2 -1
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/llamaindex.py +2 -1
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/mcp_host.py +2 -1
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/microsoft_agent_framework.py +2 -1
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/microsoft_ai_foundry.py +3 -4
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/openai_agents.py +2 -1
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/pydantic.py +2 -1
- agenticdome_python_sdk-1.2.9/agenticdome_sdk/simulation.py +174 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/examples/attack_demo.py +34 -12
- agenticdome_python_sdk-1.2.9/examples/langgraph_agenticdome_firewall.py +72 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/pyproject.toml +23 -19
- agenticdome_python_sdk-1.2.9/tests/test_execution_broker.py +92 -0
- agenticdome_python_sdk-1.2.9/tests/test_local_simulation.py +135 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/LICENSE +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/MANIFEST.in +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_python_sdk.egg-info/dependency_links.txt +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_python_sdk.egg-info/top_level.txt +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/autogen.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/claude.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/identity.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/proof.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/smolagents.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/examples/crewai_agenticdome_firewall.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/setup.cfg +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/setup.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_agno_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_attack_demo.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_autogen_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_aws_bedrock_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_claude_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_client.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_crewai_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_google_adk_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_identity_context.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_langgraph_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_live_tenant.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_llamaindex_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_mcp_host_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_microsoft_agent_framework_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_microsoft_ai_foundry_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_openai_agents_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_pydanticai_integration.py +0 -0
- {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_smolagents_integration.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agenticdome-python-sdk
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.9
|
|
4
4
|
Summary: Official Python SDK for AgenticDome security guardrails, DLP, tool authorization, and multi-agent delegation enforcement.
|
|
5
5
|
Author: AgenticDome
|
|
6
6
|
License: Proprietary
|
|
@@ -8,6 +8,7 @@ Project-URL: Homepage, https://www.agenticdome.io
|
|
|
8
8
|
Project-URL: Repository, https://github.com/agenticdome/agenticdome-python-sdk
|
|
9
9
|
Project-URL: Documentation, https://github.com/agenticdome/agenticdome-python-sdk#readme
|
|
10
10
|
Project-URL: Issues, https://github.com/agenticdome/agenticdome-python-sdk/issues
|
|
11
|
+
Project-URL: Examples, https://github.com/agenticdome/agenticdome-python-sdk/tree/main/examples
|
|
11
12
|
Keywords: agentguard,agenticdome,ai-security,agent-security,guardrails,a2a,mcp,zero-trust,runtime-security
|
|
12
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
13
14
|
Classifier: Intended Audience :: Developers
|
|
@@ -27,16 +28,16 @@ License-File: LICENSE
|
|
|
27
28
|
Requires-Dist: requests>=2.31.0
|
|
28
29
|
Requires-Dist: urllib3>=2.0.0
|
|
29
30
|
Provides-Extra: crewai
|
|
30
|
-
Requires-Dist: crewai<=1.15.
|
|
31
|
+
Requires-Dist: crewai<=1.15.14,>=1.15.5; extra == "crewai"
|
|
31
32
|
Provides-Extra: redis
|
|
32
33
|
Requires-Dist: redis>=4.5.0; extra == "redis"
|
|
33
34
|
Provides-Extra: pop
|
|
34
35
|
Requires-Dist: cryptography>=42.0.0; extra == "pop"
|
|
35
36
|
Provides-Extra: pydanticai
|
|
36
|
-
Requires-Dist: pydantic-ai<=2.
|
|
37
|
+
Requires-Dist: pydantic-ai<=2.27.0,>=2.16.0; extra == "pydanticai"
|
|
37
38
|
Requires-Dist: anyio>=4.0.0; extra == "pydanticai"
|
|
38
39
|
Provides-Extra: pydantic
|
|
39
|
-
Requires-Dist: pydantic-ai<=2.
|
|
40
|
+
Requires-Dist: pydantic-ai<=2.27.0,>=2.16.0; extra == "pydantic"
|
|
40
41
|
Requires-Dist: anyio>=4.0.0; extra == "pydantic"
|
|
41
42
|
Provides-Extra: langgraph
|
|
42
43
|
Requires-Dist: langgraph<=1.2.10,>=1.2.9; extra == "langgraph"
|
|
@@ -52,48 +53,48 @@ Provides-Extra: foundry
|
|
|
52
53
|
Requires-Dist: azure-ai-projects<=2.4.0,>=2.3.0; extra == "foundry"
|
|
53
54
|
Requires-Dist: azure-identity==1.25.3; extra == "foundry"
|
|
54
55
|
Provides-Extra: agno
|
|
55
|
-
Requires-Dist: agno<=2.8.
|
|
56
|
+
Requires-Dist: agno<=2.8.7,>=2.8.0; extra == "agno"
|
|
56
57
|
Provides-Extra: openai-agents
|
|
57
|
-
Requires-Dist: openai-agents<=0.19.
|
|
58
|
+
Requires-Dist: openai-agents<=0.19.4,>=0.18.3; extra == "openai-agents"
|
|
58
59
|
Provides-Extra: mcp
|
|
59
60
|
Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "mcp"
|
|
60
61
|
Provides-Extra: bedrock
|
|
61
|
-
Requires-Dist: boto3<=1.43.
|
|
62
|
+
Requires-Dist: boto3<=1.43.67,>=1.43.54; extra == "bedrock"
|
|
62
63
|
Provides-Extra: aws-bedrock
|
|
63
|
-
Requires-Dist: boto3<=1.43.
|
|
64
|
+
Requires-Dist: boto3<=1.43.67,>=1.43.54; extra == "aws-bedrock"
|
|
64
65
|
Provides-Extra: llamaindex
|
|
65
66
|
Requires-Dist: llama-index==0.14.23; extra == "llamaindex"
|
|
66
67
|
Provides-Extra: llama-index
|
|
67
68
|
Requires-Dist: llama-index==0.14.23; extra == "llama-index"
|
|
68
69
|
Provides-Extra: google-adk
|
|
69
|
-
Requires-Dist: google-adk<=2.6.
|
|
70
|
+
Requires-Dist: google-adk<=2.6.3,>=2.5.0; extra == "google-adk"
|
|
70
71
|
Provides-Extra: adk
|
|
71
|
-
Requires-Dist: google-adk<=2.6.
|
|
72
|
+
Requires-Dist: google-adk<=2.6.3,>=2.5.0; extra == "adk"
|
|
72
73
|
Provides-Extra: claude
|
|
73
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
74
|
+
Requires-Dist: claude-agent-sdk<=0.2.134,>=0.2.126; extra == "claude"
|
|
74
75
|
Provides-Extra: claude-agent-sdk
|
|
75
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
76
|
+
Requires-Dist: claude-agent-sdk<=0.2.134,>=0.2.126; extra == "claude-agent-sdk"
|
|
76
77
|
Provides-Extra: smolagents
|
|
77
78
|
Requires-Dist: smolagents==1.26.0; extra == "smolagents"
|
|
78
79
|
Provides-Extra: all
|
|
79
|
-
Requires-Dist: crewai<=1.15.
|
|
80
|
+
Requires-Dist: crewai<=1.15.14,>=1.15.5; extra == "all"
|
|
80
81
|
Requires-Dist: redis>=4.5.0; extra == "all"
|
|
81
82
|
Requires-Dist: cryptography>=42.0.0; extra == "all"
|
|
82
|
-
Requires-Dist: pydantic-ai<=2.
|
|
83
|
+
Requires-Dist: pydantic-ai<=2.27.0,>=2.16.0; extra == "all"
|
|
83
84
|
Requires-Dist: anyio>=4.0.0; extra == "all"
|
|
84
85
|
Requires-Dist: langgraph<=1.2.10,>=1.2.9; extra == "all"
|
|
85
86
|
Requires-Dist: langchain-core<=1.5.3,>=1.5.0; extra == "all"
|
|
86
87
|
Requires-Dist: langchain-openai==1.3.5; extra == "all"
|
|
87
88
|
Requires-Dist: autogen-agentchat==0.7.5; extra == "all"
|
|
88
|
-
Requires-Dist: agno<=2.8.
|
|
89
|
+
Requires-Dist: agno<=2.8.7,>=2.8.0; extra == "all"
|
|
89
90
|
Requires-Dist: azure-ai-projects<=2.4.0,>=2.3.0; extra == "all"
|
|
90
91
|
Requires-Dist: azure-identity==1.25.3; extra == "all"
|
|
91
|
-
Requires-Dist: openai-agents<=0.19.
|
|
92
|
+
Requires-Dist: openai-agents<=0.19.4,>=0.18.3; extra == "all"
|
|
92
93
|
Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "all"
|
|
93
|
-
Requires-Dist: boto3<=1.43.
|
|
94
|
+
Requires-Dist: boto3<=1.43.67,>=1.43.54; extra == "all"
|
|
94
95
|
Requires-Dist: llama-index==0.14.23; extra == "all"
|
|
95
|
-
Requires-Dist: google-adk<=2.6.
|
|
96
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
96
|
+
Requires-Dist: google-adk<=2.6.3,>=2.5.0; extra == "all"
|
|
97
|
+
Requires-Dist: claude-agent-sdk<=0.2.134,>=0.2.126; extra == "all"
|
|
97
98
|
Requires-Dist: smolagents==1.26.0; extra == "all"
|
|
98
99
|
Provides-Extra: dev
|
|
99
100
|
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
@@ -112,7 +113,7 @@ Dynamic: license-file
|
|
|
112
113
|
|
|
113
114
|
> **Production-grade security guardrails, DLP, tool authorization, and cryptographically verified multi-agent delegation for Python autonomous AI runtimes.**
|
|
114
115
|
|
|
115
|
-
`agenticdome-python-sdk` is the official Python SDK and middleware package for [AgenticDome](https://agenticdome.io). It enforces deterministic security controls at every boundary your agents cross — prompt ingress, tool execution, agent-to-agent handoffs, and output egress —
|
|
116
|
+
`agenticdome-python-sdk` is the official Python SDK and middleware package for [AgenticDome](https://agenticdome.io). It enforces deterministic security controls at every boundary your agents cross — prompt ingress, tool execution, agent-to-agent handoffs, and output egress — using the tenant's assigned AgenticDome runtime sidecar.
|
|
116
117
|
|
|
117
118
|
**One security pattern, fifteen runtimes:** CrewAI · PydanticAI · LangGraph/LangChain · Microsoft Agent Framework · Microsoft AutoGen · Microsoft AI Foundry · OpenAI Agents SDK · Claude Agent SDK · Hugging Face smolagents · Agno · Google ADK · LlamaIndex · AWS Bedrock · MCP hosts/gateways · custom Python.
|
|
118
119
|
|
|
@@ -136,7 +137,7 @@ result = crew.kickoff() # hostile prompts, unsafe tools, and rogue
|
|
|
136
137
|
5. [Configuration](#configuration)
|
|
137
138
|
6. [Choosing Your Integration Point](#choosing-your-integration-point)
|
|
138
139
|
7. [Framework Integrations](#framework-integrations)
|
|
139
|
-
- [CrewAI](#crewai) · [PydanticAI](#pydanticai) · [LangGraph](#langgraph) · [Microsoft Agent Framework](#microsoft-agent-framework) · [Microsoft AutoGen](#microsoft-autogen) · [Microsoft AI Foundry](#microsoft-ai-foundry) · [OpenAI Agents SDK](#openai-agents-sdk) · [Agno](#agno) · [Google ADK](#google-adk) · [LlamaIndex](#llamaindex) · [AWS Bedrock](#aws-bedrock) · [MCP Host / Gateway](#mcp-host--gateway)
|
|
140
|
+
- [CrewAI](#crewai) · [PydanticAI](#pydanticai) · [LangGraph](#langgraph) · [Microsoft Agent Framework](#microsoft-agent-framework) · [Microsoft AutoGen](#microsoft-autogen) · [Microsoft AI Foundry](#microsoft-ai-foundry) · [OpenAI Agents SDK](#openai-agents-sdk) · [Claude Agent SDK](#claude-agent-sdk) · [Hugging Face smolagents](#hugging-face-smolagents) · [Agno](#agno) · [Google ADK](#google-adk) · [LlamaIndex](#llamaindex) · [AWS Bedrock](#aws-bedrock) · [MCP Host / Gateway](#mcp-host--gateway)
|
|
140
141
|
8. [Core SDK Client (Custom Runtimes)](#core-sdk-client-custom-runtimes)
|
|
141
142
|
9. [Production Deployment](#production-deployment)
|
|
142
143
|
10. [Package Build and Verification](#package-build-and-verification)
|
|
@@ -247,17 +248,27 @@ AgenticDome uses a **hybrid split-plane architecture**. Your local Python runtim
|
|
|
247
248
|
|
|
248
249
|
## Quickstart
|
|
249
250
|
|
|
250
|
-
|
|
251
|
+
Start with a network-free simulation, then connect the same SDK to your assigned runtime sidecar for real tenant enforcement.
|
|
251
252
|
|
|
252
|
-
**1.
|
|
253
|
+
**1. Try the installed local simulation.** No account, API key, tenant, network call, telemetry, or framework package is required:
|
|
253
254
|
|
|
254
|
-
|
|
255
|
+
```bash
|
|
256
|
+
pip install agenticdome-python-sdk
|
|
257
|
+
agenticdome-demo --framework langgraph --scenario refund_hijack
|
|
258
|
+
agenticdome-demo --list-frameworks
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
This is visibly labelled **LOCAL SIMULATION — NOT CLOUD ENFORCEMENT**. It evaluates a small bundled demonstration policy through the real public client contract, but it does not load tenant policy, issue signed decision tokens or execution receipts, write cloud evidence, or provide runtime assurance. To exercise a wrapper inside your own process without credentials, set `AGENTICDOME_MODE=local_sim`. The SDK refuses that mode when `AGENTICDOME_PRODUCTION_MODE=true`.
|
|
262
|
+
|
|
263
|
+
**2. Onboard for real enforcement.** Create an account in the AgenticDome Management Console, obtain your tenant identifier and Runtime / SDK API key, and identify the tenant's assigned runtime sidecar.
|
|
264
|
+
|
|
265
|
+
**3. Install** the SDK with the extra matching your framework:
|
|
255
266
|
|
|
256
267
|
```bash
|
|
257
268
|
pip install "agenticdome-python-sdk[crewai]" # or pydanticai, langgraph, ...
|
|
258
269
|
```
|
|
259
270
|
|
|
260
|
-
**
|
|
271
|
+
**4. Configure** the three required production environment variables (live clients fail with a configuration error rather than silently running unprotected):
|
|
261
272
|
|
|
262
273
|
```bash
|
|
263
274
|
# Tenant runtime sidecar URL. Do not use the control-plane website URL here.
|
|
@@ -266,7 +277,7 @@ export AGENTICDOME_API_KEY="your_api_key_abc123..."
|
|
|
266
277
|
export AGENTICDOME_TENANT_ID="your_tenant_id_xyz789..."
|
|
267
278
|
```
|
|
268
279
|
|
|
269
|
-
**
|
|
280
|
+
**5. Attach** AgenticDome at your framework's boundary — environment variables alone never intercept execution; every framework needs its one-time code attachment (see [Choosing Your Integration Point](#choosing-your-integration-point)):
|
|
270
281
|
|
|
271
282
|
```python
|
|
272
283
|
# CrewAI example: one import in your bootstrap, before crews are built.
|
|
@@ -277,14 +288,21 @@ crew = Crew(agents=[manager, specialist], tasks=[task])
|
|
|
277
288
|
result = crew.kickoff()
|
|
278
289
|
```
|
|
279
290
|
|
|
280
|
-
**
|
|
291
|
+
**6. Verify** locally or against the real assigned sidecar:
|
|
281
292
|
|
|
282
293
|
```bash
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
294
|
+
# Local, deterministic and network-free.
|
|
295
|
+
agenticdome-demo --framework crewai --scenario refund_hijack
|
|
296
|
+
agenticdome-demo --framework langgraph --scenario refund_hijack
|
|
297
|
+
agenticdome-demo --framework claude --scenario metadata_exfil
|
|
298
|
+
agenticdome-demo --framework smolagents --scenario metadata_exfil
|
|
299
|
+
|
|
300
|
+
# Live: uses AGENTICDOME_API_BASE/API_KEY/TENANT_ID and the assigned sidecar.
|
|
301
|
+
agenticdome-demo --framework langgraph --scenario safe_lookup --live
|
|
286
302
|
```
|
|
287
303
|
|
|
304
|
+
Every Python integration listed below is selectable through `agenticdome-demo --framework ...`; the demo prints the correct package extra and integration import for that framework. Local simulation proves SDK compatibility and control flow only. The live command proves the configured tenant-sidecar path.
|
|
305
|
+
|
|
288
306
|
---
|
|
289
307
|
|
|
290
308
|
## Installation
|
|
@@ -2426,6 +2444,44 @@ client.report_incident(
|
|
|
2426
2444
|
|
|
2427
2445
|
---
|
|
2428
2446
|
|
|
2447
|
+
## Brokered Execution and the Enforcement Gateway
|
|
2448
|
+
|
|
2449
|
+
For high-impact tools, authorise at the last responsible moment and bind the decision to the real destination, HTTP method, tool version/digest, and workload identity. The sidecar returns a short-lived, single-use execution receipt; attach it to the actual outbound request that traverses the AgenticDome enforcement gateway.
|
|
2450
|
+
|
|
2451
|
+
```python
|
|
2452
|
+
from agenticdome_sdk import AgentGuardClient
|
|
2453
|
+
|
|
2454
|
+
client = AgentGuardClient(
|
|
2455
|
+
"https://your-sidecar.example.com",
|
|
2456
|
+
execution_broker_mode="enforce",
|
|
2457
|
+
)
|
|
2458
|
+
decision = client.guardrail_validate(
|
|
2459
|
+
text="Read customer account",
|
|
2460
|
+
agent_id="support-agent-1",
|
|
2461
|
+
direction="outbound",
|
|
2462
|
+
platform="mcp",
|
|
2463
|
+
tool_name="crm.lookup",
|
|
2464
|
+
tool_args={"customer_id": "123"},
|
|
2465
|
+
tool_version="1.4.2",
|
|
2466
|
+
tool_digest="sha256:" + "a" * 64,
|
|
2467
|
+
execution_destination="https://crm.example.com/customers/123",
|
|
2468
|
+
execution_http_method="GET",
|
|
2469
|
+
workload_id="spiffe://customer.example/agent/support-agent-1",
|
|
2470
|
+
)
|
|
2471
|
+
|
|
2472
|
+
# Apply these headers to the real HTTP request, not to a simulated callback.
|
|
2473
|
+
headers = client.enforcement_headers(
|
|
2474
|
+
decision,
|
|
2475
|
+
workload_id="spiffe://customer.example/agent/support-agent-1",
|
|
2476
|
+
)
|
|
2477
|
+
```
|
|
2478
|
+
|
|
2479
|
+
The control-plane website, provenance registry, SBOM registry, and LLM are not called on this request path. Approved provenance and policy bundles are already cached in the assigned sidecar. If the gateway is in enforce mode, a missing, expired, replayed, destination-mismatched, method-mismatched, or workload-mismatched receipt fails closed.
|
|
2480
|
+
|
|
2481
|
+
Framework adapters share this core client, but the application still owns the final executor boundary: pass the real destination/method and attach the returned headers where the framework invokes the external tool. Customers using an AgenticDome-managed sidecar install only the SDK; the deployment administrator operates Envoy, Tetragon/eBPF, SPIFFE, and sandbox infrastructure.
|
|
2482
|
+
|
|
2483
|
+
---
|
|
2484
|
+
|
|
2429
2485
|
## Production Deployment
|
|
2430
2486
|
|
|
2431
2487
|
### Fail-safe behavior
|
|
@@ -2506,6 +2562,7 @@ python -m pytest -q tests/test_langgraph_integration.py
|
|
|
2506
2562
|
| :--- | :--- | :--- |
|
|
2507
2563
|
| Core SDK client | `python -m pytest -q tests/test_client.py` | Request validation, headers, guardrail calls, A2A/MCP JSON-RPC calls, Mesh DLP, HTTP errors, JSON handling |
|
|
2508
2564
|
| Attack demos | `python -m pytest -q tests/test_attack_demo.py` | Offline vulnerable-vs-protected CLI coverage, including AutoGen, Claude Agent SDK, and Hugging Face smolagents |
|
|
2565
|
+
| Local simulation parity | `python -m pytest -q tests/test_local_simulation.py` | No-credential/no-network mode, production refusal, broker fail-closed behavior, installed demo catalog and constructor coverage for every supported Python adapter |
|
|
2509
2566
|
| CrewAI | `python -m pytest -q tests/test_crewai_integration.py` | Prompt/tool hooks, handoff token injection, specialist verification, output redaction, schema checks, rate limits, retries, streaming DLP |
|
|
2510
2567
|
| PydanticAI | `python -m pytest -q tests/test_pydanticai_integration.py` | Agent hooks, secure tools, sanitized arguments, token-store fallback, production session enforcement, rate limits, retries, streaming output |
|
|
2511
2568
|
| LangGraph / LangChain | `python -m pytest -q tests/test_langgraph_integration.py` | Graph input, transition, tool, retrieval, middleware, security routing, token consumption, output DLP, streaming events |
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
> **Production-grade security guardrails, DLP, tool authorization, and cryptographically verified multi-agent delegation for Python autonomous AI runtimes.**
|
|
8
8
|
|
|
9
|
-
`agenticdome-python-sdk` is the official Python SDK and middleware package for [AgenticDome](https://agenticdome.io). It enforces deterministic security controls at every boundary your agents cross — prompt ingress, tool execution, agent-to-agent handoffs, and output egress —
|
|
9
|
+
`agenticdome-python-sdk` is the official Python SDK and middleware package for [AgenticDome](https://agenticdome.io). It enforces deterministic security controls at every boundary your agents cross — prompt ingress, tool execution, agent-to-agent handoffs, and output egress — using the tenant's assigned AgenticDome runtime sidecar.
|
|
10
10
|
|
|
11
11
|
**One security pattern, fifteen runtimes:** CrewAI · PydanticAI · LangGraph/LangChain · Microsoft Agent Framework · Microsoft AutoGen · Microsoft AI Foundry · OpenAI Agents SDK · Claude Agent SDK · Hugging Face smolagents · Agno · Google ADK · LlamaIndex · AWS Bedrock · MCP hosts/gateways · custom Python.
|
|
12
12
|
|
|
@@ -30,7 +30,7 @@ result = crew.kickoff() # hostile prompts, unsafe tools, and rogue
|
|
|
30
30
|
5. [Configuration](#configuration)
|
|
31
31
|
6. [Choosing Your Integration Point](#choosing-your-integration-point)
|
|
32
32
|
7. [Framework Integrations](#framework-integrations)
|
|
33
|
-
- [CrewAI](#crewai) · [PydanticAI](#pydanticai) · [LangGraph](#langgraph) · [Microsoft Agent Framework](#microsoft-agent-framework) · [Microsoft AutoGen](#microsoft-autogen) · [Microsoft AI Foundry](#microsoft-ai-foundry) · [OpenAI Agents SDK](#openai-agents-sdk) · [Agno](#agno) · [Google ADK](#google-adk) · [LlamaIndex](#llamaindex) · [AWS Bedrock](#aws-bedrock) · [MCP Host / Gateway](#mcp-host--gateway)
|
|
33
|
+
- [CrewAI](#crewai) · [PydanticAI](#pydanticai) · [LangGraph](#langgraph) · [Microsoft Agent Framework](#microsoft-agent-framework) · [Microsoft AutoGen](#microsoft-autogen) · [Microsoft AI Foundry](#microsoft-ai-foundry) · [OpenAI Agents SDK](#openai-agents-sdk) · [Claude Agent SDK](#claude-agent-sdk) · [Hugging Face smolagents](#hugging-face-smolagents) · [Agno](#agno) · [Google ADK](#google-adk) · [LlamaIndex](#llamaindex) · [AWS Bedrock](#aws-bedrock) · [MCP Host / Gateway](#mcp-host--gateway)
|
|
34
34
|
8. [Core SDK Client (Custom Runtimes)](#core-sdk-client-custom-runtimes)
|
|
35
35
|
9. [Production Deployment](#production-deployment)
|
|
36
36
|
10. [Package Build and Verification](#package-build-and-verification)
|
|
@@ -141,17 +141,27 @@ AgenticDome uses a **hybrid split-plane architecture**. Your local Python runtim
|
|
|
141
141
|
|
|
142
142
|
## Quickstart
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
Start with a network-free simulation, then connect the same SDK to your assigned runtime sidecar for real tenant enforcement.
|
|
145
145
|
|
|
146
|
-
**1.
|
|
146
|
+
**1. Try the installed local simulation.** No account, API key, tenant, network call, telemetry, or framework package is required:
|
|
147
147
|
|
|
148
|
-
|
|
148
|
+
```bash
|
|
149
|
+
pip install agenticdome-python-sdk
|
|
150
|
+
agenticdome-demo --framework langgraph --scenario refund_hijack
|
|
151
|
+
agenticdome-demo --list-frameworks
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
This is visibly labelled **LOCAL SIMULATION — NOT CLOUD ENFORCEMENT**. It evaluates a small bundled demonstration policy through the real public client contract, but it does not load tenant policy, issue signed decision tokens or execution receipts, write cloud evidence, or provide runtime assurance. To exercise a wrapper inside your own process without credentials, set `AGENTICDOME_MODE=local_sim`. The SDK refuses that mode when `AGENTICDOME_PRODUCTION_MODE=true`.
|
|
155
|
+
|
|
156
|
+
**2. Onboard for real enforcement.** Create an account in the AgenticDome Management Console, obtain your tenant identifier and Runtime / SDK API key, and identify the tenant's assigned runtime sidecar.
|
|
157
|
+
|
|
158
|
+
**3. Install** the SDK with the extra matching your framework:
|
|
149
159
|
|
|
150
160
|
```bash
|
|
151
161
|
pip install "agenticdome-python-sdk[crewai]" # or pydanticai, langgraph, ...
|
|
152
162
|
```
|
|
153
163
|
|
|
154
|
-
**
|
|
164
|
+
**4. Configure** the three required production environment variables (live clients fail with a configuration error rather than silently running unprotected):
|
|
155
165
|
|
|
156
166
|
```bash
|
|
157
167
|
# Tenant runtime sidecar URL. Do not use the control-plane website URL here.
|
|
@@ -160,7 +170,7 @@ export AGENTICDOME_API_KEY="your_api_key_abc123..."
|
|
|
160
170
|
export AGENTICDOME_TENANT_ID="your_tenant_id_xyz789..."
|
|
161
171
|
```
|
|
162
172
|
|
|
163
|
-
**
|
|
173
|
+
**5. Attach** AgenticDome at your framework's boundary — environment variables alone never intercept execution; every framework needs its one-time code attachment (see [Choosing Your Integration Point](#choosing-your-integration-point)):
|
|
164
174
|
|
|
165
175
|
```python
|
|
166
176
|
# CrewAI example: one import in your bootstrap, before crews are built.
|
|
@@ -171,14 +181,21 @@ crew = Crew(agents=[manager, specialist], tasks=[task])
|
|
|
171
181
|
result = crew.kickoff()
|
|
172
182
|
```
|
|
173
183
|
|
|
174
|
-
**
|
|
184
|
+
**6. Verify** locally or against the real assigned sidecar:
|
|
175
185
|
|
|
176
186
|
```bash
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
187
|
+
# Local, deterministic and network-free.
|
|
188
|
+
agenticdome-demo --framework crewai --scenario refund_hijack
|
|
189
|
+
agenticdome-demo --framework langgraph --scenario refund_hijack
|
|
190
|
+
agenticdome-demo --framework claude --scenario metadata_exfil
|
|
191
|
+
agenticdome-demo --framework smolagents --scenario metadata_exfil
|
|
192
|
+
|
|
193
|
+
# Live: uses AGENTICDOME_API_BASE/API_KEY/TENANT_ID and the assigned sidecar.
|
|
194
|
+
agenticdome-demo --framework langgraph --scenario safe_lookup --live
|
|
180
195
|
```
|
|
181
196
|
|
|
197
|
+
Every Python integration listed below is selectable through `agenticdome-demo --framework ...`; the demo prints the correct package extra and integration import for that framework. Local simulation proves SDK compatibility and control flow only. The live command proves the configured tenant-sidecar path.
|
|
198
|
+
|
|
182
199
|
---
|
|
183
200
|
|
|
184
201
|
## Installation
|
|
@@ -2320,6 +2337,44 @@ client.report_incident(
|
|
|
2320
2337
|
|
|
2321
2338
|
---
|
|
2322
2339
|
|
|
2340
|
+
## Brokered Execution and the Enforcement Gateway
|
|
2341
|
+
|
|
2342
|
+
For high-impact tools, authorise at the last responsible moment and bind the decision to the real destination, HTTP method, tool version/digest, and workload identity. The sidecar returns a short-lived, single-use execution receipt; attach it to the actual outbound request that traverses the AgenticDome enforcement gateway.
|
|
2343
|
+
|
|
2344
|
+
```python
|
|
2345
|
+
from agenticdome_sdk import AgentGuardClient
|
|
2346
|
+
|
|
2347
|
+
client = AgentGuardClient(
|
|
2348
|
+
"https://your-sidecar.example.com",
|
|
2349
|
+
execution_broker_mode="enforce",
|
|
2350
|
+
)
|
|
2351
|
+
decision = client.guardrail_validate(
|
|
2352
|
+
text="Read customer account",
|
|
2353
|
+
agent_id="support-agent-1",
|
|
2354
|
+
direction="outbound",
|
|
2355
|
+
platform="mcp",
|
|
2356
|
+
tool_name="crm.lookup",
|
|
2357
|
+
tool_args={"customer_id": "123"},
|
|
2358
|
+
tool_version="1.4.2",
|
|
2359
|
+
tool_digest="sha256:" + "a" * 64,
|
|
2360
|
+
execution_destination="https://crm.example.com/customers/123",
|
|
2361
|
+
execution_http_method="GET",
|
|
2362
|
+
workload_id="spiffe://customer.example/agent/support-agent-1",
|
|
2363
|
+
)
|
|
2364
|
+
|
|
2365
|
+
# Apply these headers to the real HTTP request, not to a simulated callback.
|
|
2366
|
+
headers = client.enforcement_headers(
|
|
2367
|
+
decision,
|
|
2368
|
+
workload_id="spiffe://customer.example/agent/support-agent-1",
|
|
2369
|
+
)
|
|
2370
|
+
```
|
|
2371
|
+
|
|
2372
|
+
The control-plane website, provenance registry, SBOM registry, and LLM are not called on this request path. Approved provenance and policy bundles are already cached in the assigned sidecar. If the gateway is in enforce mode, a missing, expired, replayed, destination-mismatched, method-mismatched, or workload-mismatched receipt fails closed.
|
|
2373
|
+
|
|
2374
|
+
Framework adapters share this core client, but the application still owns the final executor boundary: pass the real destination/method and attach the returned headers where the framework invokes the external tool. Customers using an AgenticDome-managed sidecar install only the SDK; the deployment administrator operates Envoy, Tetragon/eBPF, SPIFFE, and sandbox infrastructure.
|
|
2375
|
+
|
|
2376
|
+
---
|
|
2377
|
+
|
|
2323
2378
|
## Production Deployment
|
|
2324
2379
|
|
|
2325
2380
|
### Fail-safe behavior
|
|
@@ -2400,6 +2455,7 @@ python -m pytest -q tests/test_langgraph_integration.py
|
|
|
2400
2455
|
| :--- | :--- | :--- |
|
|
2401
2456
|
| Core SDK client | `python -m pytest -q tests/test_client.py` | Request validation, headers, guardrail calls, A2A/MCP JSON-RPC calls, Mesh DLP, HTTP errors, JSON handling |
|
|
2402
2457
|
| Attack demos | `python -m pytest -q tests/test_attack_demo.py` | Offline vulnerable-vs-protected CLI coverage, including AutoGen, Claude Agent SDK, and Hugging Face smolagents |
|
|
2458
|
+
| Local simulation parity | `python -m pytest -q tests/test_local_simulation.py` | No-credential/no-network mode, production refusal, broker fail-closed behavior, installed demo catalog and constructor coverage for every supported Python adapter |
|
|
2403
2459
|
| CrewAI | `python -m pytest -q tests/test_crewai_integration.py` | Prompt/tool hooks, handoff token injection, specialist verification, output redaction, schema checks, rate limits, retries, streaming DLP |
|
|
2404
2460
|
| PydanticAI | `python -m pytest -q tests/test_pydanticai_integration.py` | Agent hooks, secure tools, sanitized arguments, token-store fallback, production session enforcement, rate limits, retries, streaming output |
|
|
2405
2461
|
| LangGraph / LangChain | `python -m pytest -q tests/test_langgraph_integration.py` | Graph input, transition, tool, retrieval, middleware, security routing, token consumption, output DLP, streaming events |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agenticdome-python-sdk
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.9
|
|
4
4
|
Summary: Official Python SDK for AgenticDome security guardrails, DLP, tool authorization, and multi-agent delegation enforcement.
|
|
5
5
|
Author: AgenticDome
|
|
6
6
|
License: Proprietary
|
|
@@ -8,6 +8,7 @@ Project-URL: Homepage, https://www.agenticdome.io
|
|
|
8
8
|
Project-URL: Repository, https://github.com/agenticdome/agenticdome-python-sdk
|
|
9
9
|
Project-URL: Documentation, https://github.com/agenticdome/agenticdome-python-sdk#readme
|
|
10
10
|
Project-URL: Issues, https://github.com/agenticdome/agenticdome-python-sdk/issues
|
|
11
|
+
Project-URL: Examples, https://github.com/agenticdome/agenticdome-python-sdk/tree/main/examples
|
|
11
12
|
Keywords: agentguard,agenticdome,ai-security,agent-security,guardrails,a2a,mcp,zero-trust,runtime-security
|
|
12
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
13
14
|
Classifier: Intended Audience :: Developers
|
|
@@ -27,16 +28,16 @@ License-File: LICENSE
|
|
|
27
28
|
Requires-Dist: requests>=2.31.0
|
|
28
29
|
Requires-Dist: urllib3>=2.0.0
|
|
29
30
|
Provides-Extra: crewai
|
|
30
|
-
Requires-Dist: crewai<=1.15.
|
|
31
|
+
Requires-Dist: crewai<=1.15.14,>=1.15.5; extra == "crewai"
|
|
31
32
|
Provides-Extra: redis
|
|
32
33
|
Requires-Dist: redis>=4.5.0; extra == "redis"
|
|
33
34
|
Provides-Extra: pop
|
|
34
35
|
Requires-Dist: cryptography>=42.0.0; extra == "pop"
|
|
35
36
|
Provides-Extra: pydanticai
|
|
36
|
-
Requires-Dist: pydantic-ai<=2.
|
|
37
|
+
Requires-Dist: pydantic-ai<=2.27.0,>=2.16.0; extra == "pydanticai"
|
|
37
38
|
Requires-Dist: anyio>=4.0.0; extra == "pydanticai"
|
|
38
39
|
Provides-Extra: pydantic
|
|
39
|
-
Requires-Dist: pydantic-ai<=2.
|
|
40
|
+
Requires-Dist: pydantic-ai<=2.27.0,>=2.16.0; extra == "pydantic"
|
|
40
41
|
Requires-Dist: anyio>=4.0.0; extra == "pydantic"
|
|
41
42
|
Provides-Extra: langgraph
|
|
42
43
|
Requires-Dist: langgraph<=1.2.10,>=1.2.9; extra == "langgraph"
|
|
@@ -52,48 +53,48 @@ Provides-Extra: foundry
|
|
|
52
53
|
Requires-Dist: azure-ai-projects<=2.4.0,>=2.3.0; extra == "foundry"
|
|
53
54
|
Requires-Dist: azure-identity==1.25.3; extra == "foundry"
|
|
54
55
|
Provides-Extra: agno
|
|
55
|
-
Requires-Dist: agno<=2.8.
|
|
56
|
+
Requires-Dist: agno<=2.8.7,>=2.8.0; extra == "agno"
|
|
56
57
|
Provides-Extra: openai-agents
|
|
57
|
-
Requires-Dist: openai-agents<=0.19.
|
|
58
|
+
Requires-Dist: openai-agents<=0.19.4,>=0.18.3; extra == "openai-agents"
|
|
58
59
|
Provides-Extra: mcp
|
|
59
60
|
Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "mcp"
|
|
60
61
|
Provides-Extra: bedrock
|
|
61
|
-
Requires-Dist: boto3<=1.43.
|
|
62
|
+
Requires-Dist: boto3<=1.43.67,>=1.43.54; extra == "bedrock"
|
|
62
63
|
Provides-Extra: aws-bedrock
|
|
63
|
-
Requires-Dist: boto3<=1.43.
|
|
64
|
+
Requires-Dist: boto3<=1.43.67,>=1.43.54; extra == "aws-bedrock"
|
|
64
65
|
Provides-Extra: llamaindex
|
|
65
66
|
Requires-Dist: llama-index==0.14.23; extra == "llamaindex"
|
|
66
67
|
Provides-Extra: llama-index
|
|
67
68
|
Requires-Dist: llama-index==0.14.23; extra == "llama-index"
|
|
68
69
|
Provides-Extra: google-adk
|
|
69
|
-
Requires-Dist: google-adk<=2.6.
|
|
70
|
+
Requires-Dist: google-adk<=2.6.3,>=2.5.0; extra == "google-adk"
|
|
70
71
|
Provides-Extra: adk
|
|
71
|
-
Requires-Dist: google-adk<=2.6.
|
|
72
|
+
Requires-Dist: google-adk<=2.6.3,>=2.5.0; extra == "adk"
|
|
72
73
|
Provides-Extra: claude
|
|
73
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
74
|
+
Requires-Dist: claude-agent-sdk<=0.2.134,>=0.2.126; extra == "claude"
|
|
74
75
|
Provides-Extra: claude-agent-sdk
|
|
75
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
76
|
+
Requires-Dist: claude-agent-sdk<=0.2.134,>=0.2.126; extra == "claude-agent-sdk"
|
|
76
77
|
Provides-Extra: smolagents
|
|
77
78
|
Requires-Dist: smolagents==1.26.0; extra == "smolagents"
|
|
78
79
|
Provides-Extra: all
|
|
79
|
-
Requires-Dist: crewai<=1.15.
|
|
80
|
+
Requires-Dist: crewai<=1.15.14,>=1.15.5; extra == "all"
|
|
80
81
|
Requires-Dist: redis>=4.5.0; extra == "all"
|
|
81
82
|
Requires-Dist: cryptography>=42.0.0; extra == "all"
|
|
82
|
-
Requires-Dist: pydantic-ai<=2.
|
|
83
|
+
Requires-Dist: pydantic-ai<=2.27.0,>=2.16.0; extra == "all"
|
|
83
84
|
Requires-Dist: anyio>=4.0.0; extra == "all"
|
|
84
85
|
Requires-Dist: langgraph<=1.2.10,>=1.2.9; extra == "all"
|
|
85
86
|
Requires-Dist: langchain-core<=1.5.3,>=1.5.0; extra == "all"
|
|
86
87
|
Requires-Dist: langchain-openai==1.3.5; extra == "all"
|
|
87
88
|
Requires-Dist: autogen-agentchat==0.7.5; extra == "all"
|
|
88
|
-
Requires-Dist: agno<=2.8.
|
|
89
|
+
Requires-Dist: agno<=2.8.7,>=2.8.0; extra == "all"
|
|
89
90
|
Requires-Dist: azure-ai-projects<=2.4.0,>=2.3.0; extra == "all"
|
|
90
91
|
Requires-Dist: azure-identity==1.25.3; extra == "all"
|
|
91
|
-
Requires-Dist: openai-agents<=0.19.
|
|
92
|
+
Requires-Dist: openai-agents<=0.19.4,>=0.18.3; extra == "all"
|
|
92
93
|
Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "all"
|
|
93
|
-
Requires-Dist: boto3<=1.43.
|
|
94
|
+
Requires-Dist: boto3<=1.43.67,>=1.43.54; extra == "all"
|
|
94
95
|
Requires-Dist: llama-index==0.14.23; extra == "all"
|
|
95
|
-
Requires-Dist: google-adk<=2.6.
|
|
96
|
-
Requires-Dist: claude-agent-sdk<=0.2.
|
|
96
|
+
Requires-Dist: google-adk<=2.6.3,>=2.5.0; extra == "all"
|
|
97
|
+
Requires-Dist: claude-agent-sdk<=0.2.134,>=0.2.126; extra == "all"
|
|
97
98
|
Requires-Dist: smolagents==1.26.0; extra == "all"
|
|
98
99
|
Provides-Extra: dev
|
|
99
100
|
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
@@ -112,7 +113,7 @@ Dynamic: license-file
|
|
|
112
113
|
|
|
113
114
|
> **Production-grade security guardrails, DLP, tool authorization, and cryptographically verified multi-agent delegation for Python autonomous AI runtimes.**
|
|
114
115
|
|
|
115
|
-
`agenticdome-python-sdk` is the official Python SDK and middleware package for [AgenticDome](https://agenticdome.io). It enforces deterministic security controls at every boundary your agents cross — prompt ingress, tool execution, agent-to-agent handoffs, and output egress —
|
|
116
|
+
`agenticdome-python-sdk` is the official Python SDK and middleware package for [AgenticDome](https://agenticdome.io). It enforces deterministic security controls at every boundary your agents cross — prompt ingress, tool execution, agent-to-agent handoffs, and output egress — using the tenant's assigned AgenticDome runtime sidecar.
|
|
116
117
|
|
|
117
118
|
**One security pattern, fifteen runtimes:** CrewAI · PydanticAI · LangGraph/LangChain · Microsoft Agent Framework · Microsoft AutoGen · Microsoft AI Foundry · OpenAI Agents SDK · Claude Agent SDK · Hugging Face smolagents · Agno · Google ADK · LlamaIndex · AWS Bedrock · MCP hosts/gateways · custom Python.
|
|
118
119
|
|
|
@@ -136,7 +137,7 @@ result = crew.kickoff() # hostile prompts, unsafe tools, and rogue
|
|
|
136
137
|
5. [Configuration](#configuration)
|
|
137
138
|
6. [Choosing Your Integration Point](#choosing-your-integration-point)
|
|
138
139
|
7. [Framework Integrations](#framework-integrations)
|
|
139
|
-
- [CrewAI](#crewai) · [PydanticAI](#pydanticai) · [LangGraph](#langgraph) · [Microsoft Agent Framework](#microsoft-agent-framework) · [Microsoft AutoGen](#microsoft-autogen) · [Microsoft AI Foundry](#microsoft-ai-foundry) · [OpenAI Agents SDK](#openai-agents-sdk) · [Agno](#agno) · [Google ADK](#google-adk) · [LlamaIndex](#llamaindex) · [AWS Bedrock](#aws-bedrock) · [MCP Host / Gateway](#mcp-host--gateway)
|
|
140
|
+
- [CrewAI](#crewai) · [PydanticAI](#pydanticai) · [LangGraph](#langgraph) · [Microsoft Agent Framework](#microsoft-agent-framework) · [Microsoft AutoGen](#microsoft-autogen) · [Microsoft AI Foundry](#microsoft-ai-foundry) · [OpenAI Agents SDK](#openai-agents-sdk) · [Claude Agent SDK](#claude-agent-sdk) · [Hugging Face smolagents](#hugging-face-smolagents) · [Agno](#agno) · [Google ADK](#google-adk) · [LlamaIndex](#llamaindex) · [AWS Bedrock](#aws-bedrock) · [MCP Host / Gateway](#mcp-host--gateway)
|
|
140
141
|
8. [Core SDK Client (Custom Runtimes)](#core-sdk-client-custom-runtimes)
|
|
141
142
|
9. [Production Deployment](#production-deployment)
|
|
142
143
|
10. [Package Build and Verification](#package-build-and-verification)
|
|
@@ -247,17 +248,27 @@ AgenticDome uses a **hybrid split-plane architecture**. Your local Python runtim
|
|
|
247
248
|
|
|
248
249
|
## Quickstart
|
|
249
250
|
|
|
250
|
-
|
|
251
|
+
Start with a network-free simulation, then connect the same SDK to your assigned runtime sidecar for real tenant enforcement.
|
|
251
252
|
|
|
252
|
-
**1.
|
|
253
|
+
**1. Try the installed local simulation.** No account, API key, tenant, network call, telemetry, or framework package is required:
|
|
253
254
|
|
|
254
|
-
|
|
255
|
+
```bash
|
|
256
|
+
pip install agenticdome-python-sdk
|
|
257
|
+
agenticdome-demo --framework langgraph --scenario refund_hijack
|
|
258
|
+
agenticdome-demo --list-frameworks
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
This is visibly labelled **LOCAL SIMULATION — NOT CLOUD ENFORCEMENT**. It evaluates a small bundled demonstration policy through the real public client contract, but it does not load tenant policy, issue signed decision tokens or execution receipts, write cloud evidence, or provide runtime assurance. To exercise a wrapper inside your own process without credentials, set `AGENTICDOME_MODE=local_sim`. The SDK refuses that mode when `AGENTICDOME_PRODUCTION_MODE=true`.
|
|
262
|
+
|
|
263
|
+
**2. Onboard for real enforcement.** Create an account in the AgenticDome Management Console, obtain your tenant identifier and Runtime / SDK API key, and identify the tenant's assigned runtime sidecar.
|
|
264
|
+
|
|
265
|
+
**3. Install** the SDK with the extra matching your framework:
|
|
255
266
|
|
|
256
267
|
```bash
|
|
257
268
|
pip install "agenticdome-python-sdk[crewai]" # or pydanticai, langgraph, ...
|
|
258
269
|
```
|
|
259
270
|
|
|
260
|
-
**
|
|
271
|
+
**4. Configure** the three required production environment variables (live clients fail with a configuration error rather than silently running unprotected):
|
|
261
272
|
|
|
262
273
|
```bash
|
|
263
274
|
# Tenant runtime sidecar URL. Do not use the control-plane website URL here.
|
|
@@ -266,7 +277,7 @@ export AGENTICDOME_API_KEY="your_api_key_abc123..."
|
|
|
266
277
|
export AGENTICDOME_TENANT_ID="your_tenant_id_xyz789..."
|
|
267
278
|
```
|
|
268
279
|
|
|
269
|
-
**
|
|
280
|
+
**5. Attach** AgenticDome at your framework's boundary — environment variables alone never intercept execution; every framework needs its one-time code attachment (see [Choosing Your Integration Point](#choosing-your-integration-point)):
|
|
270
281
|
|
|
271
282
|
```python
|
|
272
283
|
# CrewAI example: one import in your bootstrap, before crews are built.
|
|
@@ -277,14 +288,21 @@ crew = Crew(agents=[manager, specialist], tasks=[task])
|
|
|
277
288
|
result = crew.kickoff()
|
|
278
289
|
```
|
|
279
290
|
|
|
280
|
-
**
|
|
291
|
+
**6. Verify** locally or against the real assigned sidecar:
|
|
281
292
|
|
|
282
293
|
```bash
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
294
|
+
# Local, deterministic and network-free.
|
|
295
|
+
agenticdome-demo --framework crewai --scenario refund_hijack
|
|
296
|
+
agenticdome-demo --framework langgraph --scenario refund_hijack
|
|
297
|
+
agenticdome-demo --framework claude --scenario metadata_exfil
|
|
298
|
+
agenticdome-demo --framework smolagents --scenario metadata_exfil
|
|
299
|
+
|
|
300
|
+
# Live: uses AGENTICDOME_API_BASE/API_KEY/TENANT_ID and the assigned sidecar.
|
|
301
|
+
agenticdome-demo --framework langgraph --scenario safe_lookup --live
|
|
286
302
|
```
|
|
287
303
|
|
|
304
|
+
Every Python integration listed below is selectable through `agenticdome-demo --framework ...`; the demo prints the correct package extra and integration import for that framework. Local simulation proves SDK compatibility and control flow only. The live command proves the configured tenant-sidecar path.
|
|
305
|
+
|
|
288
306
|
---
|
|
289
307
|
|
|
290
308
|
## Installation
|
|
@@ -2426,6 +2444,44 @@ client.report_incident(
|
|
|
2426
2444
|
|
|
2427
2445
|
---
|
|
2428
2446
|
|
|
2447
|
+
## Brokered Execution and the Enforcement Gateway
|
|
2448
|
+
|
|
2449
|
+
For high-impact tools, authorise at the last responsible moment and bind the decision to the real destination, HTTP method, tool version/digest, and workload identity. The sidecar returns a short-lived, single-use execution receipt; attach it to the actual outbound request that traverses the AgenticDome enforcement gateway.
|
|
2450
|
+
|
|
2451
|
+
```python
|
|
2452
|
+
from agenticdome_sdk import AgentGuardClient
|
|
2453
|
+
|
|
2454
|
+
client = AgentGuardClient(
|
|
2455
|
+
"https://your-sidecar.example.com",
|
|
2456
|
+
execution_broker_mode="enforce",
|
|
2457
|
+
)
|
|
2458
|
+
decision = client.guardrail_validate(
|
|
2459
|
+
text="Read customer account",
|
|
2460
|
+
agent_id="support-agent-1",
|
|
2461
|
+
direction="outbound",
|
|
2462
|
+
platform="mcp",
|
|
2463
|
+
tool_name="crm.lookup",
|
|
2464
|
+
tool_args={"customer_id": "123"},
|
|
2465
|
+
tool_version="1.4.2",
|
|
2466
|
+
tool_digest="sha256:" + "a" * 64,
|
|
2467
|
+
execution_destination="https://crm.example.com/customers/123",
|
|
2468
|
+
execution_http_method="GET",
|
|
2469
|
+
workload_id="spiffe://customer.example/agent/support-agent-1",
|
|
2470
|
+
)
|
|
2471
|
+
|
|
2472
|
+
# Apply these headers to the real HTTP request, not to a simulated callback.
|
|
2473
|
+
headers = client.enforcement_headers(
|
|
2474
|
+
decision,
|
|
2475
|
+
workload_id="spiffe://customer.example/agent/support-agent-1",
|
|
2476
|
+
)
|
|
2477
|
+
```
|
|
2478
|
+
|
|
2479
|
+
The control-plane website, provenance registry, SBOM registry, and LLM are not called on this request path. Approved provenance and policy bundles are already cached in the assigned sidecar. If the gateway is in enforce mode, a missing, expired, replayed, destination-mismatched, method-mismatched, or workload-mismatched receipt fails closed.
|
|
2480
|
+
|
|
2481
|
+
Framework adapters share this core client, but the application still owns the final executor boundary: pass the real destination/method and attach the returned headers where the framework invokes the external tool. Customers using an AgenticDome-managed sidecar install only the SDK; the deployment administrator operates Envoy, Tetragon/eBPF, SPIFFE, and sandbox infrastructure.
|
|
2482
|
+
|
|
2483
|
+
---
|
|
2484
|
+
|
|
2429
2485
|
## Production Deployment
|
|
2430
2486
|
|
|
2431
2487
|
### Fail-safe behavior
|
|
@@ -2506,6 +2562,7 @@ python -m pytest -q tests/test_langgraph_integration.py
|
|
|
2506
2562
|
| :--- | :--- | :--- |
|
|
2507
2563
|
| Core SDK client | `python -m pytest -q tests/test_client.py` | Request validation, headers, guardrail calls, A2A/MCP JSON-RPC calls, Mesh DLP, HTTP errors, JSON handling |
|
|
2508
2564
|
| Attack demos | `python -m pytest -q tests/test_attack_demo.py` | Offline vulnerable-vs-protected CLI coverage, including AutoGen, Claude Agent SDK, and Hugging Face smolagents |
|
|
2565
|
+
| Local simulation parity | `python -m pytest -q tests/test_local_simulation.py` | No-credential/no-network mode, production refusal, broker fail-closed behavior, installed demo catalog and constructor coverage for every supported Python adapter |
|
|
2509
2566
|
| CrewAI | `python -m pytest -q tests/test_crewai_integration.py` | Prompt/tool hooks, handoff token injection, specialist verification, output redaction, schema checks, rate limits, retries, streaming DLP |
|
|
2510
2567
|
| PydanticAI | `python -m pytest -q tests/test_pydanticai_integration.py` | Agent hooks, secure tools, sanitized arguments, token-store fallback, production session enforcement, rate limits, retries, streaming output |
|
|
2511
2568
|
| LangGraph / LangChain | `python -m pytest -q tests/test_langgraph_integration.py` | Graph input, transition, tool, retrieval, middleware, security routing, token consumption, output DLP, streaming events |
|