Repository navigation
feat: add VaidIdentityPlugin for verified agent identity and delegation - #190
Open
solara-associates wants to merge 1 commit into
Open
solara-associates wants to merge 1 commit into
solara-associates wants to merge 1 commit into
Conversation
Adds a thin BasePlugin, VaidIdentityPlugin, over vaid-adk 0.2.0 (https://github.com/solara-associates/vaid, Apache-2.0). It verifies each agent's signed identity (VAID) and delegation chain before the agent runs, before it is delegated to as a sub-agent, and before every tool call, denying fail-closed whenever any of that cannot be positively confirmed. Mirrors the AgentGovernancePlugin shape (google#141): same plugins package location, same optional-extra pattern, same fail-closed ImportError when the extra is not installed, a sample under contributing/samples with a README and a runnable main.py, and tests under tests/plugins. Related to google#189.
solara-associates
marked this pull request as ready for review
October 13, 2026 08:52
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related to #189
Adds VaidIdentityPlugin, a thin BasePlugin in google.adk_community.plugins over vaid-adk 0.2.0 (Apache-2.0, https://github.com/solara-associates/vaid/tree/main/python/vaid-adk).
It verifies each agent's signed identity (VAID) and delegation chain before the agent runs, before it is delegated to as a sub-agent, and before every tool call, denying fail-closed whenever any of that cannot be positively confirmed. Each identity is a signed document that can only narrow as it is delegated (scope, capabilities, expiry, tenant), verified offline with a public key, with pluggable revocation. Registered once on the Runner, it covers every agent and tool in the invocation tree, including sub-agents reached through transfer_to_agent.
This mirrors the AgentGovernancePlugin shape (#141):
VaidIdentityPlugin performs no verification logic of its own; it delegates before_agent_callback and before_tool_callback to vaid_adk.VaidAuthPlugin.
Compatibility
vaid-adk 0.2.0 requires google-adk>=2.0,<3 and python>=3.10. This repo currently resolves google-adk 2.11.0 and requires python>=3.10, so no conflict and no environment marker is needed on the extra.
Testing plan
Unit tests under tests/plugins/test_vaid_identity_plugin.py cover: an allowed in-scope tool call, a denied out-of-scope call before the tool runs, a denied call for an agent with no registered presentation, a denied call for a tool with no entry in tool_authorizations, and the ImportError path when vaid-adk is absent. VAID documents are minted in-test with an Ed25519 key (cheap, no network), the same way vaid-adk's own tests do.
Pytest summary:
Full suite (unrelated to this change) remains green: 82 passed, 14 skipped.
Runner E2E
contributing/samples/vaid_identity/main.py runs through a real ADK Runner with no model or API key (the two agents are plain BaseAgent subclasses, so the sample exercises the genuine ADK plugin_manager extension points rather than a mock of them). A coordinator delegates to a worker holding an attenuated VAID; the worker's in-scope tool call is allowed and its out-of-scope call is denied before the tool runs.
Command:
python contributing/samples/vaid_identity/main.pyConsole output:
Install:
pip install google-adk-community[vaid]