Skip to content

[FEAT] Tamper-evident callback hook for agent tool calls — EU AI Act Article 12 compliance #5998

@arian-gogani

Description

@arian-gogani

Problem

ADK currently provides callbacks (before_tool_callback, after_tool_callback) for tool execution. These are excellent for instrumentation, but the evidence they produce lives in operator-controlled infrastructure — logs, databases, observability tools.

For regulated industries (finance, healthcare, government) deploying ADK agents, the audit requirement is stronger: independently verifiable records that an auditor can check without trusting the operator's infrastructure. EU AI Act Article 12 enforcement begins August 2, 2026.

Proposed integration pattern

The existing after_tool_callback hook is the right interception point:

from google.adk.agents import Agent
from google.adk.tools.tool_context import ToolContext
from nobulex import Agent as NobulexAgent

nobulex = NobulexAgent('my-adk-agent')

def compliance_after_tool(
    tool, args: dict, tool_context: ToolContext, tool_response
):
    receipt = nobulex.sign_receipt(
        action_type=tool.name,
        scope=str(args)
    )
    # Ed25519 signed, hash-chained, independently verifiable
    # Auditor verifies offline with only the public key
    tool_context.state['last_receipt_ref'] = receipt.action_ref
    return tool_response  # unmodified

agent = Agent(
    name='compliance_agent',
    model='gemini-2.0-flash',
    tools=[...],
    after_tool_callback=compliance_after_tool
)

What this provides

  • Tamper-evident: every tool call is signed; modify any receipt and verification fails
  • Hash-chained: the full action history is linked — any gap or modification is detectable
  • Independently verifiable: auditor needs only the agent's public key, no ADK or operator dependency
  • EU AI Act Article 12: export the chain as a regulator-facing evidence package

Request

  1. Confirm that after_tool_callback is the intended integration surface for post-execution audit layers
  2. Consider a contrib/compliance/ example showing this pattern for regulated deployments

pip install nobulex — live on PyPI, cross-validated test vectors, LangChain/CrewAI integrations already shipping. Happy to contribute the ADK example.

Metadata

Metadata

Assignees

Labels

documentation[Component] This issue is related to documentation, it will be transferred to adk-docsspam[Status] Issues suspected of having comments which are spam
No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions