AGENT SECURITY LAB
We study how agents get compromised, publish what we find, and build tools that limit the blast radius.
Read the research →agent-sleuth
Wrap your agent in three lines
from agent_sleuth import Sleuth sleuth = Sleuth(mode="audit") # zero config sleuth.reset(query="Summarize the news and email it to me@myco.com") fetch_url = sleuth.track(fetch_url) send_email = sleuth.track(send_email) # ... run your agent as normal ... print(sleuth.report())
Blocked, in enforce mode
BLOCKED: send_email() called with tainted inputs Taint source: read_email (step 2, untrusted) Injected value in argument: to="attacker@evil.com" Lineage: read_email → "attacker@evil.com" → send_email.to Destination: attacker@evil.com (not allowlisted) Reason: untrusted value reached a consequential sink Action: blocked (mode=enforce)
Catches verbatim injection and structured exfiltration. It runs in two modes: audit, which only logs what would have been blocked, and enforce, which blocks it for real.
Attack Success Rate (AgentDojo Benchmark)
Backbone: gpt-4o-mini-2024-07-18 · v1
Research