Observed since 20 Oct, 19:36 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Public Preview — Agent Governance Toolkit integration for Google ADK: policy enforcement, trust verification, and audit trails for 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.
adk-agentmesh implements the PolicyEvaluator protocol
(google/adk-python#4897)
backed by the Agent Governance Toolkit's deterministic policy engine.
pip install adk-agentmesh
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
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,
)
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 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 |
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)
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)
See the full sample policy at
examples/policies/adk-governance.yaml.
MIT
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 3.7.0 | 20 May 2026 | 3 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 19:36 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:099549e66ccd9bcddfeb864f5036c80dd7aeb0ee0eeaae6e304a0098da18c5e2