Google ADK
Integrate Intutic governance with Google's Agent Development Kit (ADK).
ADK is governed on two independent surfaces:
- LLM egress — point the model client's
base_urlat the Intutic proxy (or launch underintutic exec). - Local tool execution — ADK tools run as plain Python callables inside your process. No config or hook file can gate them, so the blocking gate ships SDK-side in
intutic-clawde.
How it works
The google-adk adapter is detected when pyproject.toml, requirements.txt, or uv.lock declares a google-adk dependency. It writes a .env.intutic file with proxy base-URL env vars plus a comment block pointing at the SDK gate.
Setup
1. Initialize Intutic
intutic init2. Route LLM traffic through the proxy
Source .env.intutic, launch under intutic exec, or set base_url explicitly — same as LangGraph.
3. Gate local tool execution (SDK)
pip install intutic-clawde[google-adk]ADK documents before_tool_callback — returning a non-None dict skips the real tool call and that dict becomes the (synthetic) tool result. Two ways to wire it, matching ADK's own two registration surfaces:
Global, via a plugin (every tool call across an App):
from google.adk.apps.app import App
from intutic_clawde.gate import Gate, GateConfig, install
from intutic_clawde.gate.adapters.google_adk import IntuticPlugin
install(Gate(GateConfig()))
app = App(name="my_app", root_agent=agent, plugins=[IntuticPlugin()])Per-agent fallback (for callers not using App(plugins=[...])):
from google.adk.agents.llm_agent import LlmAgent
from intutic_clawde.gate.adapters.google_adk import intutic_before_tool_callback
agent = LlmAgent(..., before_tool_callback=intutic_before_tool_callback)The two surfaces use different keyword conventions on ADK's own call sites (tool_args= for the plugin, args= for the per-agent callback) — both adapter functions match their respective site exactly.
On deny, either callback returns a synthetic error dict ({"status": "error", "error": "[Intutic Governance] BLOCKED: ...", ...}) instead of letting the tool run.
4. Trace attribution
from google.adk.models.lite_llm import LiteLlm # needs google-adk[extensions]
from intutic_clawde.gate import intutic_headers
model = LiteLlm(
model="openai/gpt-5-mini",
api_base="http://localhost:4000/v1",
extra_headers=intutic_headers(session_id=run_id, harness="google-adk"),
)LiteLlm passes api_base and extra_headers through to each LiteLLM completion call.
What gets written
Same shape as LangGraph's .env.intutic — proxy URLs plus a pointer at intutic_clawde.gate.adapters.google_adk.IntuticPlugin.
To undo what intutic gates install writes here, run intutic disconnect --harness google-adk: each file goes back to what it held before Intutic first wrote it, or is deleted if Intutic created it, and edits you made since are kept. .env.intutic stays while another harness that writes it is still connected. See intutic disconnect.
What the adapter does NOT do
Same structural gaps as every SDK-gated framework — see LangGraph's "What the adapter does NOT do". In short: there is no sync-daemon hook file, argument-level gating requires wiring the plugin/callback into your own agent code, and x-intutic-harness attribution is client-supplied, not authorization.
Config details
| Property | Value |
|---|---|
| Harness type | google-adk |
| Config file | .env.intutic |
| Detection | google-adk in pyproject.toml, requirements.txt, or uv.lock |
| Format | Shell environment variables |
| Write strategy | Atomic (write to .intutic-tmp, then rename) |
| Tool gate | SDK-side (intutic_clawde.gate.adapters.google_adk.IntuticPlugin, ADK's before_tool_callback) — no sync-daemon hook file |