Example: Multi-Agent Workflow
When you have multiple agents with different responsibilities, AgenticGuard lets you assign different policies and audit each agent independently.
Architecture
Orchestrator Agent (ag_orch_xxx)
│
├──► Research Agent (ag_research_xxx)
│ └── reads GitHub, news APIs
│
└──► Action Agent (ag_action_xxx)
└── creates issues, sends Slack messages
Each agent has its own API key, proxy URL, and policy.
Research agent policy
version: "1"
rules:
# Read-only: only GET calls allowed
- tool: "*"
action: GET
decision: allow
- tool: "*"
action: "*"
decision: deny
message: "Research agent is read-only"
Action agent policy
version: "1"
rules:
# Allow creates with reasoning
- tool: github
action: POST
require_reasoning: true
- tool: slack
action: POST
require_reasoning: true
# Block everything else
- tool: "*"
action: DELETE
decision: deny
- tool: "*"
action: PUT
decision: deny
Orchestrator code
from agentic_guard import AgenticGuard, PolicyViolationError
research_gate = AgenticGuard(api_key="ag_research_xxx", mode="enforce")
action_gate = AgenticGuard(api_key="ag_action_xxx", mode="enforce")
RESEARCH_PROXY = "https://api.agentic-guard.com/proxy/ag_research_xxx/"
ACTION_PROXY = "https://api.agentic-guard.com/proxy/ag_action_xxx/"
import httpx
def research_phase(topic: str) -> dict:
resp = httpx.get(
f"{RESEARCH_PROXY}api.github.com/search/repositories",
params={"q": topic},
)
return resp.json()
def action_phase(repo: str, finding: str) -> dict:
try:
resp = httpx.post(
f"{ACTION_PROXY}api.github.com/repos/{repo}/issues",
json={"title": f"Finding: {finding[:60]}", "body": finding},
headers={"X-Agent-Reasoning": f"Reporting research finding about {repo}"},
)
return resp.json()
except Exception as e:
return {"error": str(e)}
Audit log view
The audit log shows events from both agents, tagged by agent_id:
agent tool action decision reasoning
research-bot github GET allowed —
research-bot github POST denied — ← blocked by policy
action-bot github POST allowed "Reporting research finding"
action-bot github DELETE denied — ← blocked by policy
Benefits
- Each agent's blast radius is limited by its own policy
- Any policy violation surfaces immediately in the audit log
- Credentials are shared at the org level — store once, used by all agents