Other scanners read tool names and guess. Lucin reads the code inside every tool your agent can call and traces the exact path from a poisoned prompt to your data leaving the building β then hands you the cut that closes it.
See what it prints β
Most scanners guess. Lucin proves. #
One model of the agent β the information-flow graph β used three ways.
Reads the real code inside your tools. Maps every path from untrusted input to a dangerous action, with file:line
. One command, no signup. For most teams this is the whole product, and it's free forever.
The path SCAN flagged, enforced live. A deterministic gate on the flow β not the prompt β so the model can be fully compromised and still not exfiltrate.
Attacks generated against your own tools, so a finding ships with proof it's real β and proof it's fixed.
A finding you can act on in one read. #
Severity, the proof-witness path, the exact cut that closes it, and the line of code. Same finding, three surfaces.
$ lucin scan ./support-agent/
Target: ./support-agent/ (2 agents, 14 tools, 1 MCP server)
Scan completed in 842ms
ββ SECURITY SCORE βββββββββββββββββββββββββββββ
ββββββββββββββββββββ 62/100 β Needs attention
ββ RISK SUMMARY βββββββββββββββββββββββββββββββ
CRITICAL βββ 1
HIGH ββββββ 2
MEDIUM ββββββ 3
ββ CRITICAL Β· AG-TRIFECTA βββββββββββββββββββββ
Untrusted input reaches an external sink
Agent: support_agent Tool: post_webhook
Proof:
control: read_email β __llm__ β post_webhook
data: query_customers β __llm__ β post_webhook
Min-cut fix: restrict 1 tool to break every exfil path
post_webhook (allow-list hosts, or require approval)
OWASP: LLM06 Excessive Agency
Location: agents/support.py:88
post_webhook
to an allow-listed host, or require approval before it fires.
- uses: Madhav2310/lucinlabs@v1
with:
fail-on: critical
format: sarif
ββββββββββββββββββββββββββββββββββββββββββββββ
Error: AG-TRIFECTA Β· agents/support.py:88
Untrusted input reaches an external sink
read_email β __llm__ β post_webhook
1 critical, 2 high β 549 passing β SARIF uploaded to code scanning
Process completed with exit code 1.
We publish the receipts. #
Every number above regenerates from a committed command. Run them yourself β we'd rather you reproduce the numbers than trust our marketing. What it misses β
17,600 actions. Two and a half days. Nobody watching the flow. #
Hugging Face, July 2026. Not a sophisticated exploit β one bad edge, traversed roughly 17,600 times over four days of logs because nothing was watching. Every agent you ship has the same skeleton.
Writing on agent security. #
Get GUARD before everyone else. #
We're taking a small number of design partners. Tell us what you're running; we reply within a day.