Skip to main content

raucle-bench

CI License

Public adversarial leaderboard for prompt-injection detection. Benchmarks open-source LLM guardrails on a shared, version-controlled dataset of attack and benign prompts.

Every guardrail vendor claims accuracy. Almost none publish reproducible numbers. This is the referee.

  • Live leaderboard: raucle.com/bench/ — client-side dashboard that always reflects results/latest.json in this repo.
  • Dataset: 165 curated prompts across 6 attack classes + benign baseline. Grows toward 10k+.
  • Methodology: precision, recall, F1, false-positive rate, strict-action match, p50/p99 latency per adapter.
  • License: MIT (code and dataset).

Why this exists

Lakera, Llama Guard, LLM Guard, Rebuff, Vigil, NeMo, raucle-detect — every prompt-injection detector ships with marketing numbers and no way to reproduce them. There is no SPEC2017 for AI security. The result is that:

  • Vendors compete on claims rather than on evidence.
  • Customers cannot tell whether a detector actually protects them.
  • Researchers measuring detection quality have to write the benchmark themselves every time.

raucle-bench fixes this by being the same dataset run against every adapter, with the script and outputs in version control. Anyone can re-run the benchmark, submit a new adapter, or contribute a prompt the dataset is missing.

What's in v0.1

Adapter Status
always-allow baseline ✅ Built in
always-block baseline ✅ Built in
raucle-detect (strict / standard / permissive) ✅ Built in
llm-guard ✅ Built in (install with pip install '.[llm-guard]')
rebuff ⏳ Adapter PR welcome
vigil ⏳ Adapter PR welcome
nemo-guardrails ⏳ Adapter PR welcome
llama-guard ⏳ Adapter PR welcome
lakera-guard ⏳ Adapter PR welcome (API key required)

If you maintain a detector — open or commercial — we want to benchmark it. The adapter interface is ~30 lines of Python (see src/raucle_bench/adapter.py).

Quick start

pip install -e '.[raucle]'
raucle-bench --list-adapters
raucle-bench                          # runs everything, writes results/<timestamp>.json|md|html
raucle-bench --adapters raucle-strict # one adapter only

CLI flags:

--datasets-dir DIR     directory of *.jsonl files (default: datasets/)
--results-dir DIR      where to write outputs (default: results/)
--adapters NAME...     limit to specific adapters
--run-id ID            override the timestamp
--validate-only        load and validate the dataset without running anything
--list-adapters        print registered adapter names

Scoring methodology

A prediction is positive if the adapter says ALERT or BLOCK, negative if it says ALLOW. Ground truth is positive for any non-benign prompt.

For each adapter we report:

Metric What it tells you
F1 Harmonic mean of precision and recall. Single-number summary.
Detection rate Fraction of attacks correctly flagged. Same as recall.
False-positive rate Fraction of benign prompts incorrectly flagged. The thing that breaks production.
Strict match rate Fraction of prompts where predicted action exactly matches expected action. Catches "detected but recommended wrong remediation."
p50 / p99 latency Per-prompt wall-clock time.

No single metric is sufficient. A detector that always says BLOCK has 100% recall and a meaningless 100% FPR. A detector that always says ALLOW has 0% FPR and 0% recall. The leaderboard reports both and the trivial baselines so you can calibrate the real entries.

Dataset

165 prompts as of v0.1, broken down by attack class:

Class Prompts What it tests
direct_injection 25 Override / role hijack / ChatML / context stuff
jailbreak 25 DAN, developer mode, hypothetical pretext, multi-turn escalation
data_exfiltration 20 System prompt extraction, credential leakage, exfil channels
tool_abuse 20 Shell injection, path traversal, SQL injection, SSRF, code injection
evasion 20 Base64 / ROT13 / hex smuggling, homoglyphs, zero-width, leet, case-flip
indirect_injection 15 Document injection, tool poisoning, RAG poisoning, markdown exfil
benign 40 Clean prompts including hard negatives (mentions of "ignore", "system prompt", "developer mode" in legit contexts)

See datasets/README.md for the schema, source labelling, and ethical considerations. The dataset is MIT-licensed; please ensure contributions carry compatible rights.

Adding an adapter

# src/raucle_bench/adapters/my_tool.py
from raucle_bench.adapter import Prediction

class MyToolAdapter:
    name = "my-tool-v1"
    version = "0.1.0"

    def setup(self) -> None:
        self._scanner = my_tool.Scanner()

    def teardown(self) -> None:
        self._scanner = None

    def predict(self, prompt: str) -> Prediction:
        result = self._scanner.scan(prompt)
        action = "BLOCK" if result.is_attack else "ALLOW"
        return Prediction(action=action, confidence=result.score)

Register it in src/raucle_bench/cli.py under _register_optional_adapters() so missing deps don't break the rest of the benchmark.

Adding a prompt

  1. Pick the right datasets/<class>.jsonl file.
  2. Add a JSONL line with the next free ID in the sequence.
  3. Run raucle-bench --validate-only to confirm the dataset still loads.
  4. Open a PR with the dataset label.

See datasets/README.md for the schema.

Weekly auto-run

.github/workflows/weekly-run.yml runs the full benchmark every Monday at 06:00 UTC and commits the results directly to main. The latest snapshot is at results/latest.json and results/latest.html.

Roadmap

  • v0.2: dataset to 500+ prompts; LLM Guard, Vigil, Rebuff adapters; balanced-accuracy metric alongside F1.
  • v0.3: dashboard at bench.raucle.com (Cloudflare Pages); time-series view of every adapter's score across weekly runs.
  • v0.4: Llama Guard, NeMo Guardrails, Lakera (API key in repo secret) adapters.
  • v1.0: 10k+ prompts; multimodal (image + audio); third-party submission process.

Related

License

MIT for both code and dataset. Contributions are welcomed under the same terms.

Metadata

Release files for raucle-bench 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for raucle-bench 0.1.0
File Size Uploaded
raucle_bench-0.1.0.tar.gz 32.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for raucle-bench 0.1.0
File Interpreter ABI Platform
raucle_bench-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 51.9 kB

Release files / raucle_bench-0.1.0.tar.gz

Download URL raucle_bench-0.1.0.tar.gz
Size 32.0 kB
Tags Source
SHA-256 checksum
How to use checksums
e79a6f97b1517118efad9b69de019a5ad7aad886d4435b0fea6724d0f3f4a65e
BLAKE2b-256 checksum
How to use checksums
59df3602a271bc74c28282832d2253d5b309aa2fad023e3e45196886410a9dcc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 14, 2026.

Transparency log

Release files / raucle_bench-0.1.0-py3-none-any.whl

Download URL raucle_bench-0.1.0-py3-none-any.whl
Size 19.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
29e3be2f7ec35c2c4200e25af860f46e1f25099a0e4b27c6894c41ba4e5d501f
BLAKE2b-256 checksum
How to use checksums
a212bd5c6f26d858dcb51181c55b3003ef1e1b0327f3a695bf610ea22d352c52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page