ADK AgentMesh — Governance for Google ADK Agents
[!IMPORTANT] Public Preview — The
adk-agentmeshpackage on PyPI is a Microsoft-signed public preview release. APIs may change before GA.
Policy enforcement, trust verification, and audit trails for Google ADK agents — powered by the Agent Governance Toolkit.
What It Does
adk-agentmesh implements the PolicyEvaluator protocol
(google/adk-python#4897)
backed by the Agent Governance Toolkit's deterministic policy engine.
- Tool-level governance — block, allow-list, or require approval for any ADK tool call
- Rate limiting — cap tool calls per agent per session
- Delegation scope — monotonic narrowing ensures sub-agents never exceed parent permissions
- Structured audit — every decision is logged with verdict, rule, and timestamp
Installation
pip install adk-agentmesh
Quick Start
1. Define a governance policy
Create a YAML policy file (see examples/policies/adk-governance.yaml):
adk_governance:
blocked_tools:
- execute_shell
- delete_database
max_tool_calls: 100
require_approval_for:
- send_email
- deploy_service
2. Wire into your ADK agent
from adk_agentmesh import ADKPolicyEvaluator, GovernanceCallbacks
# Load policy
evaluator = ADKPolicyEvaluator.from_config("policies/adk-governance.yaml")
callbacks = GovernanceCallbacks(evaluator)
# Attach to ADK agent
from google.adk.agents import LlmAgent
agent = LlmAgent(
model="gemini-2.0-flash",
name="my-governed-agent",
before_tool_callback=callbacks.before_tool,
after_tool_callback=callbacks.after_tool,
before_agent_callback=callbacks.before_agent,
after_agent_callback=callbacks.after_agent,
)
3. Or use the evaluator directly
import asyncio
from adk_agentmesh import ADKPolicyEvaluator
evaluator = ADKPolicyEvaluator(
blocked_tools=["execute_shell"],
max_tool_calls=50,
require_approval_for=["send_email"],
)
decision = asyncio.run(
evaluator.evaluate_tool_call(
tool_name="search_web",
tool_args={"query": "latest news"},
agent_name="research-agent",
)
)
print(decision.verdict) # Verdict.ALLOW
ADK Lifecycle Mapping
| ADK Hook | Governance Check |
|---|---|
before_tool_callback |
Policy evaluation, rate limiting, tool blocking |
after_tool_callback |
Audit logging |
before_agent_callback |
Delegation scope check |
after_agent_callback |
Delegation audit |
Delegation Scope Narrowing
Sub-agents automatically receive narrowed permissions:
from adk_agentmesh import DelegationScope
parent_scope = DelegationScope(
allowed_tools=["search_web", "read_file", "write_file"],
max_tool_calls=100,
max_depth=3,
)
# Child gets strictly fewer permissions
child_scope = parent_scope.narrow(
allowed_tools=["search_web", "read_file"],
read_only=True,
)
# child_scope.max_depth == 2 (always decrements)
# child_scope.read_only == True (once set, cannot be unset)
Audit Events
Every governance decision is recorded:
evaluator = ADKPolicyEvaluator(blocked_tools=["dangerous_tool"])
# ... after agent runs ...
for entry in evaluator.get_audit_log():
print(entry["event"], entry["timestamp"])
For structured audit handling:
from adk_agentmesh import AuditEvent, LoggingAuditHandler
handler = LoggingAuditHandler()
event = AuditEvent(
event_type="tool_call_denied",
agent_name="my-agent",
tool_name="execute_shell",
verdict="deny",
reason="Tool is blocked by policy",
)
handler.handle(event)
Sample Policy
See the full sample policy at
examples/policies/adk-governance.yaml.
Links
License
MIT
Metadata
Release files for adk-agentmesh 3.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| adk_agentmesh-3.7.0.tar.gz | 11.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| adk_agentmesh-3.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.2 kB
Release files / adk_agentmesh-3.7.0.tar.gz
| Download URL | adk_agentmesh-3.7.0.tar.gz |
|---|---|
| Size | 11.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f65a9f472ed2c3e36c74b4900ae2e18556b7ca553e3c22fbb21bc3a46c78abcc
|
|
BLAKE2b-256 checksum How to use checksums |
f4baa4a03c7aba523a66fc645644feba3c2287f131b5dd4d0e1dba927ae16dd7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|
Release files / adk_agentmesh-3.7.0-py3-none-any.whl
| Download URL | adk_agentmesh-3.7.0-py3-none-any.whl |
|---|---|
| Size | 8.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b9ff16bb8a846b938f2788cb4823fb95ec903ca7f849ea7e0ef59528fbdbc0bc
|
|
BLAKE2b-256 checksum How to use checksums |
a666c5ac701bec7aa4e44ccc9a5298afeff43e145808d5bfa15ec384393b5ee6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|
Security for adk-agentmesh 3.7.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.