Every agent-security vendor tells you what they block. Nobody tells you what they miss.
That gap is the whole problem. "We stop prompt injection" is a claim you cannot check. You cannot run it, and you cannot tell it apart from the next company saying the same sentence. So security engineers do the rational thing and discard all of it.
I published the opposite. It is called the ARE Incident Database, and it is public: https://aredb.org
32 agent failures that actually happened, each with a real source. A production database dropped during a code freeze. Twenty-five thousand documents deleted in the wrong environment. Credentials read and shipped to an external sink. A budget burned to zero in a loop.
Each one gets a stable id (ARE-2026-001
through ARE-2026-032
), and each one is mapped to its category in the OWASP Agentic Security Initiative Top 10, which is the peer-reviewed catalog of what goes wrong with agents. AREDB does not compete with it. OWASP owns the map. This is the cited incidents underneath it.
Every entry carries a coverage flag, and the flag is about our own product.
We block 23 of the 32 today. Two more are partial, and they say partial. That leaves six of the ten OWASP categories covered at the action layer, and four that we do not cover:
A firewall that claimed all ten would be lying, and every security engineer reading this already knows that. The four we do not cover are named in the registry, with a pointer to the discipline that does own them.
Here is the part I actually care about. Every covered entry ships a repro you can execute. Not a screenshot, not a demo video, not a claim. A snippet.
This is the Replit production wipe, reproduced against the free package:
pip install agentx-security-sdk
python
from agentx_sdk import agentx_protect, is_block
@agentx_protect(agent_id="aredb-repro", action="db_write")
def run_sql(query: str):
return "EXECUTED" # the agent never gets here
result = run_sql("DROP TABLE users;")
print(is_block(result)) # True
print(result) # the block, and the safe path to take instead
No key. No gateway. No account. Nothing leaves your machine. Sixty seconds, and you have checked one of my claims yourself.
A repro that nobody runs is a screenshot with extra steps. So the registry runs its own.
test_repros.py
scrapes the fenced Python block out of each published page and executes it. That means the code a reader copies is byte-for-byte the code we prove blocks. It asserts three things, because "it blocked" is a weaker claim than it sounds:
CI runs it on every push, and weekly on a schedule, because a repro can rot without anyone touching the repo. A future SDK release could quietly change behavior underneath a published claim, and I would rather find that out from a red badge than from you.
So a coverage flag here is a tested fact, not just our opinion. If a claim ever stops being true, the entry gets reclassified. The page does not get reworded.
ARE-2026-NNN
id and it goes in. CONTRIBUTING.md
has the threshold, which is material consequence, not novelty.Registry: https://aredb.org
Repo: https://github.com/vdalal/ARE-Incident-Database
Tell me what it missed: https://discord.gg/PmWRTtaSx2