From 511376abdcc53e3a7816b69fd76b23a9f1bf0479 Mon Sep 17 00:00:00 2001 From: shiva-guntoju-09 Date: Tue, 28 Apr 2026 04:06:53 +0530 Subject: [PATCH 1/2] docs(integrations): add Cisco AI Defense integration page (#1672) * docs(integrations): add Cisco AI Defense integration page Add documentation for the Cisco AI Defense plugin for Google ADK, providing runtime LLM and MCP tool inspection with monitor and enforce modes. Includes logo asset and code examples for both plugin and callback approaches. Resolves #1665 Made-with: Cursor * Formatting and copy edits --------- Co-authored-by: Kristopher Overholt --- docs/integrations/assets/cisco-ai-defense.png | Bin 0 -> 17570 bytes docs/integrations/cisco-ai-defense.md | 189 ++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 docs/integrations/assets/cisco-ai-defense.png create mode 100644 docs/integrations/cisco-ai-defense.md diff --git a/docs/integrations/assets/cisco-ai-defense.png b/docs/integrations/assets/cisco-ai-defense.png new file mode 100644 index 0000000000000000000000000000000000000000..5425016436584294530e1ede987f382d626d2d03 GIT binary patch literal 17570 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 + Supported in ADKPython + + +[Cisco AI +Defense](https://www.cisco.com/site/us/en/products/security/ai-defense/index.html) +is an enterprise AI security platform that provides runtime guardrails to +protect against threats like prompt injection, data leakage, and harmful +content. The [ADK +plugin](https://github.com/cisco-ai-defense/ai-defense-google-adk) integrates +these guardrails directly into the ADK Runner lifecycle: it inspects prompts, +model responses, and tool calls, then allows or blocks them based on configurable +security policies. + +## Use cases + +- **Runtime protection for model calls**: Inspect user prompts before model + calls and model outputs after generation, then allow or block based on policy + (`monitor` or `enforce`). +- **Tool and MCP call inspection**: Inspect tool call requests before execution + and tool responses after execution, and block unsafe tool behavior in + `enforce` mode with clear metadata. +- **Auditable decision trace and alerts**: Capture decision context (action, + severity, classifications, request_id/event_id) and optionally trigger an + `on_violation` callback for monitoring and incident response. + +## Prerequisites + +- [Cisco AI Defense](https://www.cisco.com/site/us/en/products/security/ai-defense/index.html) account and API key +- Python >= 3.10 +- [ADK](https://adk.dev) >= 1.0.0 + +## Installation + +```bash +pip install cisco-aidefense-google-adk +``` + +Set the `AI_DEFENSE_API_KEY` environment variable (and `AI_DEFENSE_MCP_API_KEY` +for tool inspection). + +## Use with agent + +### Quickstart + +Add Cisco AI Defense to any ADK agent with a single line: + +```python +from aidefense_google_adk import defend + +agent = defend(agent, mode="enforce") +``` + +Or get a plugin for the entire app: + +```python +from aidefense_google_adk import defend + +plugin = defend(mode="enforce") +app = App(name="my_app", root_agent=agent, plugins=[plugin]) +``` + +### Global plugin + +Use `CiscoAIDefensePlugin` to apply inspection globally to all agents in a +Runner: + +```python +from google.adk.agents import LlmAgent +from google.adk.apps import App +from google.adk.runners import Runner +from google.adk.sessions import InMemorySessionService + +from aidefense_google_adk import CiscoAIDefensePlugin + +agent = LlmAgent( + model="gemini-flash-latest", + name="assistant", + instruction="You are a helpful assistant.", +) + +app = App( + name="my_app", + root_agent=agent, + plugins=[ + CiscoAIDefensePlugin(mode="enforce"), + ], +) +runner = Runner(app=app, session_service=InMemorySessionService()) +``` + +### Per-agent callbacks + +Use `make_aidefense_callbacks` to wire inspection into a specific agent: + +```python +from google.adk.agents import LlmAgent +from aidefense_google_adk import make_aidefense_callbacks + +cbs = make_aidefense_callbacks(mode="enforce") + +agent = LlmAgent( + model="gemini-flash-latest", + name="assistant", + instruction="You are a helpful assistant.", +) +cbs.apply_to(agent) # wires all 4 callbacks +``` + +## Modes + +The plugin supports three operating modes: + +Mode | Behavior +---- | -------- +`monitor` | Inspect all traffic, log violations, never block (default) +`enforce` | Inspect all traffic, block requests/responses that violate policy +`off` | Skip inspection entirely + +Modes can be set globally or per-channel: + +```python +CiscoAIDefensePlugin( + mode="monitor", # default for both + llm_mode="enforce", # override for LLM only + mcp_mode="off", # override for tools only +) +``` + +## Violation callback + +Use the `on_violation` callback to receive notifications for every violation in +both `monitor` and `enforce` modes: + +```python +def handle_violation(result): + print(f"Violation: {result.action} / {result.severity}") + +CiscoAIDefensePlugin( + mode="monitor", + on_violation=handle_violation, +) +``` + +## Retry and fail-open support + +For automatic retry with exponential backoff, fail-open/fail-closed semantics, +and structured `Decision` objects, use the `AgentsecPlugin` variant: + +```python +from aidefense_google_adk import AgentsecPlugin + +app = App( + name="my_app", + root_agent=agent, + plugins=[ + AgentsecPlugin( + mode="enforce", + fail_open=True, + retry_total=3, + retry_backoff=0.5, + ), + ], +) +``` + +Or at the per-agent level: + +```python +from aidefense_google_adk import make_agentsec_callbacks + +cbs = make_agentsec_callbacks(mode="enforce", fail_open=True) +cbs.apply_to(agent) +``` + +## Additional resources + +- [GitHub Repository](https://github.com/cisco-ai-defense/ai-defense-google-adk) +- [PyPI Package](https://pypi.org/project/cisco-aidefense-google-adk/) +- [Cisco AI Defense](https://www.cisco.com/site/us/en/products/security/ai-defense/index.html) +- [cisco-aidefense-sdk on PyPI](https://pypi.org/project/cisco-aidefense-sdk/) From 7f7e59e09046dd45475b8935fe91dbb88c4a71c2 Mon Sep 17 00:00:00 2001 From: David Ditzenberger Date: Mon, 27 Apr 2026 21:38:06 -0400 Subject: [PATCH 2/2] Fix typo: 'notes' to 'nodes' in data-handling.md (#1695) --- docs/workflows/data-handling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/workflows/data-handling.md b/docs/workflows/data-handling.md index 8b43da1c21..0d8b2573f5 100644 --- a/docs/workflows/data-handling.md +++ b/docs/workflows/data-handling.md @@ -4,7 +4,7 @@ Supported in ADKPython v2.0.0Beta -Structuring and managing data between agents and graph-based notes is critical +Structuring and managing data between agents and graph-based nodes is critical for building reliable processes with ADK. This guide explains data handling within graph-based workflows and collaboration agents, including how information is transmitted and received between graph nodes using ***Events***. It covers