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.
Files changed (58) hide show
  1. {agenticdome_python_sdk-1.2.7/agenticdome_python_sdk.egg-info → agenticdome_python_sdk-1.2.9}/PKG-INFO +87 -30
  2. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/README.md +67 -11
  3. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9/agenticdome_python_sdk.egg-info}/PKG-INFO +87 -30
  4. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_python_sdk.egg-info/SOURCES.txt +7 -0
  5. agenticdome_python_sdk-1.2.9/agenticdome_python_sdk.egg-info/entry_points.txt +2 -0
  6. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_python_sdk.egg-info/requires.txt +18 -18
  7. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/__init__.py +5 -0
  8. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/_framework_firewall.py +2 -1
  9. agenticdome_python_sdk-1.2.9/agenticdome_sdk/_mode.py +35 -0
  10. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/agno.py +2 -1
  11. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/aws_bedrock.py +2 -1
  12. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/client.py +195 -17
  13. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/crewai.py +3 -2
  14. agenticdome_python_sdk-1.2.9/agenticdome_sdk/demo.py +120 -0
  15. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/google_adk.py +2 -1
  16. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/langgraph.py +2 -1
  17. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/llamaindex.py +2 -1
  18. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/mcp_host.py +2 -1
  19. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/microsoft_agent_framework.py +2 -1
  20. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/microsoft_ai_foundry.py +3 -4
  21. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/openai_agents.py +2 -1
  22. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/pydantic.py +2 -1
  23. agenticdome_python_sdk-1.2.9/agenticdome_sdk/simulation.py +174 -0
  24. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/examples/attack_demo.py +34 -12
  25. agenticdome_python_sdk-1.2.9/examples/langgraph_agenticdome_firewall.py +72 -0
  26. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/pyproject.toml +23 -19
  27. agenticdome_python_sdk-1.2.9/tests/test_execution_broker.py +92 -0
  28. agenticdome_python_sdk-1.2.9/tests/test_local_simulation.py +135 -0
  29. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/LICENSE +0 -0
  30. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/MANIFEST.in +0 -0
  31. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_python_sdk.egg-info/dependency_links.txt +0 -0
  32. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_python_sdk.egg-info/top_level.txt +0 -0
  33. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/autogen.py +0 -0
  34. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/claude.py +0 -0
  35. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/identity.py +0 -0
  36. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/proof.py +0 -0
  37. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/agenticdome_sdk/smolagents.py +0 -0
  38. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/examples/crewai_agenticdome_firewall.py +0 -0
  39. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/setup.cfg +0 -0
  40. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/setup.py +0 -0
  41. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_agno_integration.py +0 -0
  42. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_attack_demo.py +0 -0
  43. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_autogen_integration.py +0 -0
  44. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_aws_bedrock_integration.py +0 -0
  45. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_claude_integration.py +0 -0
  46. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_client.py +0 -0
  47. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_crewai_integration.py +0 -0
  48. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_google_adk_integration.py +0 -0
  49. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_identity_context.py +0 -0
  50. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_langgraph_integration.py +0 -0
  51. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_live_tenant.py +0 -0
  52. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_llamaindex_integration.py +0 -0
  53. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_mcp_host_integration.py +0 -0
  54. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_microsoft_agent_framework_integration.py +0 -0
  55. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_microsoft_ai_foundry_integration.py +0 -0
  56. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_openai_agents_integration.py +0 -0
  57. {agenticdome_python_sdk-1.2.7 → agenticdome_python_sdk-1.2.9}/tests/test_pydanticai_integration.py +0 -0
  58. {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.7
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.10,>=1.15.5; extra == "crewai"
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.22.0,>=2.16.0; extra == "pydanticai"
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.22.0,>=2.16.0; extra == "pydantic"
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.6,>=2.8.0; extra == "agno"
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.2,>=0.18.3; extra == "openai-agents"
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,>=1.43.54; extra == "bedrock"
62
+ Requires-Dist: boto3<=1.43.67,>=1.43.54; extra == "bedrock"
62
63
  Provides-Extra: aws-bedrock
63
- Requires-Dist: boto3<=1.43.62,>=1.43.54; extra == "aws-bedrock"
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.1,>=2.5.0; extra == "google-adk"
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.1,>=2.5.0; extra == "adk"
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.128,>=0.2.126; extra == "claude"
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.128,>=0.2.126; extra == "claude-agent-sdk"
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.10,>=1.15.5; extra == "all"
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.22.0,>=2.16.0; extra == "all"
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.6,>=2.8.0; extra == "all"
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.2,>=0.18.3; extra == "all"
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.62,>=1.43.54; extra == "all"
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.1,>=2.5.0; extra == "all"
96
- Requires-Dist: claude-agent-sdk<=0.2.128,>=0.2.126; extra == "all"
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 — backed by the AgenticDome central policy plane.
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
- Five steps from zero to a protected runtime.
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. Onboard.** Create an account in the AgenticDome Management Console (AU region), copy your tenant identifier from organization settings, and generate a production API key from the access-control section.
253
+ **1. Try the installed local simulation.** No account, API key, tenant, network call, telemetry, or framework package is required:
253
254
 
254
- **2. Install** the SDK with the extra matching your framework:
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
- **3. Configure** the three required environment variables (all clients fail with a configuration error rather than silently running unprotected):
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
- **4. 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)):
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
- **5. Verify** by running the vulnerable-vs-protected attack demo:
291
+ **6. Verify** locally or against the real assigned sidecar:
281
292
 
282
293
  ```bash
283
- python examples/attack_demo.py --framework crewai --scenario refund_hijack
284
- python examples/attack_demo.py --framework claude --scenario metadata_exfil
285
- python examples/attack_demo.py --framework smolagents --scenario generated_code_exfil
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 — backed by the AgenticDome central policy plane.
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
- Five steps from zero to a protected runtime.
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. Onboard.** Create an account in the AgenticDome Management Console (AU region), copy your tenant identifier from organization settings, and generate a production API key from the access-control section.
146
+ **1. Try the installed local simulation.** No account, API key, tenant, network call, telemetry, or framework package is required:
147
147
 
148
- **2. Install** the SDK with the extra matching your framework:
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
- **3. Configure** the three required environment variables (all clients fail with a configuration error rather than silently running unprotected):
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
- **4. 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)):
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
- **5. Verify** by running the vulnerable-vs-protected attack demo:
184
+ **6. Verify** locally or against the real assigned sidecar:
175
185
 
176
186
  ```bash
177
- python examples/attack_demo.py --framework crewai --scenario refund_hijack
178
- python examples/attack_demo.py --framework claude --scenario metadata_exfil
179
- python examples/attack_demo.py --framework smolagents --scenario generated_code_exfil
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.7
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.10,>=1.15.5; extra == "crewai"
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.22.0,>=2.16.0; extra == "pydanticai"
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.22.0,>=2.16.0; extra == "pydantic"
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.6,>=2.8.0; extra == "agno"
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.2,>=0.18.3; extra == "openai-agents"
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,>=1.43.54; extra == "bedrock"
62
+ Requires-Dist: boto3<=1.43.67,>=1.43.54; extra == "bedrock"
62
63
  Provides-Extra: aws-bedrock
63
- Requires-Dist: boto3<=1.43.62,>=1.43.54; extra == "aws-bedrock"
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.1,>=2.5.0; extra == "google-adk"
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.1,>=2.5.0; extra == "adk"
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.128,>=0.2.126; extra == "claude"
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.128,>=0.2.126; extra == "claude-agent-sdk"
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.10,>=1.15.5; extra == "all"
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.22.0,>=2.16.0; extra == "all"
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.6,>=2.8.0; extra == "all"
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.2,>=0.18.3; extra == "all"
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.62,>=1.43.54; extra == "all"
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.1,>=2.5.0; extra == "all"
96
- Requires-Dist: claude-agent-sdk<=0.2.128,>=0.2.126; extra == "all"
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 — backed by the AgenticDome central policy plane.
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
- Five steps from zero to a protected runtime.
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. Onboard.** Create an account in the AgenticDome Management Console (AU region), copy your tenant identifier from organization settings, and generate a production API key from the access-control section.
253
+ **1. Try the installed local simulation.** No account, API key, tenant, network call, telemetry, or framework package is required:
253
254
 
254
- **2. Install** the SDK with the extra matching your framework:
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
- **3. Configure** the three required environment variables (all clients fail with a configuration error rather than silently running unprotected):
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
- **4. 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)):
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
- **5. Verify** by running the vulnerable-vs-protected attack demo:
291
+ **6. Verify** locally or against the real assigned sidecar:
281
292
 
282
293
  ```bash
283
- python examples/attack_demo.py --framework crewai --scenario refund_hijack
284
- python examples/attack_demo.py --framework claude --scenario metadata_exfil
285
- python examples/attack_demo.py --framework smolagents --scenario generated_code_exfil
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 |