Signed decision evidence for Google ADK.
Attach a native Google Agent Development Kit BasePlugin to an ADK App and capture run, model and tool evidence while ADK continues to execute the agent. LoopGrid preserves and verifies the evidence; it does not execute the business action.
loopgrid-google-adk v0.1.0 · validated with google-adk 2.10.0 · LoopGrid Core 0.8.1-design-partner.
ADK reports framework lifecycle facts. The application owns the external-action claim. after_tool_callback is recorded as a tool result; authoritative execution is recorded only when the application can prove it happened.
Install the native Google ADK integration.
pip install loopgrid-google-adk
Version 0.1.0 is published on PyPI through GitHub OIDC Trusted Publishing and installs a compatible Google ADK runtime plus the LoopGrid Python SDK.
Attach the plugin at the ADK App boundary.
from google.adk.agents import Agent
from google.adk.apps import App
from google.adk.runners import InMemoryRunner
from loopgrid_google_adk import LoopGridADKPlugin
plugin = LoopGridADKPlugin(
authority={"scope": "refunds", "max_amount": 50},
policy={
"policy_id": "refund-policy-v3",
"decision": "auto_allowed",
},
proposed_action={"type": "refund", "amount": 25},
context={"prompt_version": "support-v7"},
)
root_agent = Agent(
name="support_agent",
model="gemini-2.5-flash",
tools=[...],
)
app = App(
name="support_app",
root_agent=root_agent,
plugins=[plugin],
)
runner = InMemoryRunner(app=app)LOOPGRID_BASE_URL, for example http://127.0.0.1:8000LOOPGRID_WORKSPACE_ID, for example defaultLOOPGRID_API_KEY for authenticated deploymentsFor per-invocation evidence, call plugin.bind_run(...) and use the returned value as ADK's invocation_id. This keeps application-owned authority, policy and correlation data scoped to the current run.
Use ADK plugin callbacks instead of a generic wrapper.
before_run_callback creates the LoopGrid decision envelope from explicit run evidence.
after_model_callback records model completion/provenance. Application policy is recorded only when explicitly supplied.
before_tool_callback records tool_requested before the framework produces a tool result.
after_tool_callback records tool_result — not an automatic execution claim.
The application calls record_action_executed(...) only when it has authoritative evidence that the consequential tool body actually ran.
The application calls observe_outcome(...) after it observes the authoritative downstream/business result.
Do not turn an ADK tool result into stronger evidence than it proves.
ADK before_tool_callback → LoopGrid tool_requested ADK after_tool_callback → LoopGrid tool_result → framework result observed application confirms external execution → plugin.record_action_executed(...) → LoopGrid tool_executed application observes authoritative business result → plugin.observe_outcome(...) → LoopGrid outcome_observed → evidence_complete → verify valid:true
ADK allows callbacks to short-circuit a tool call and return a result without invoking the underlying tool body. That is why LoopGrid keeps framework-observed result evidence separate from the application's authoritative execution claim.
Commit to content without storing it by default.
capture_content = false by default. Raw user content, model responses, tool arguments, tool results and exception messages are not stored by this integration unless the application deliberately opts in.
SHA-256 commitments preserve evidence linkage while reducing unnecessary raw-content retention. The integration is also fail-closed by default with fail_open = false, so an evidence-required path does not silently continue when evidence recording fails.
Validated through the actual ADK runtime and a real LoopGrid Core E2E.
App + InMemoryRunner + deterministic BaseLlm + native function tool loopevidence_completevalid: true with Ed25519 + SHA-256 workspace hash chainloopgrid-google-adk==0.1.0 clean-installed from PyPIreal_money_moved=false; LoopGrid did not execute the refundThe runtime test used the real Google ADK plugin/runner lifecycle with a deterministic custom model, so no Gemini API key, paid Google Cloud billing account or credit card was required. Verification establishes captured integrity/provenance; it does not prove that the underlying decision was correct or legally compliant.
Keep ADK native. Make the evidence portable.
Install the PyPI package, attach the native plugin at the App boundary, and preserve consequential decision evidence without replacing the Google ADK runtime.