Wroughtery — Studiowroughtery.com · rev 1.0
Quirn — a Wroughtery toolQuirn · LLM Red-Team CLI

Red-team your LLM app
in one CI step.

A single static binary that puts your endpoint through the OWASP LLM Top 10 and gates your build on SARIF findings — zero config, zero Python, your own key.

Get Quirn on GitHub

Free · Apache-2.0 · github.com/wroughtery/quirn

Quirn · v0.1.0
Install
go install github.com/wroughtery/quirn@latest
# or: downloads the release binary and verifies its checksum
curl -fsSL https://raw.githubusercontent.com/wroughtery/quirn/main/scripts/install.sh | sh
Run
QUIRN_API_KEY=sk-… quirn scan --target https://your-endpoint --format sarif --out quirn.sarif
Quirn · Scan
quirn installing, scanning an endpoint, and printing a fail-closed OWASP scorecard
Install, scan, and a fail-closed OWASP scorecard that gates CI.

Into CI in one line

- uses: wroughtery/quirn@v0
  with:
    target: ${{ secrets.QUIRN_TARGET_URL }}
    api-key: ${{ secrets.QUIRN_API_KEY }}
    fail-on: high
    format: sarif
    output: quirn.sarif

Add one upload-sarif step and findings land in the GitHub Security tab — the same shelf as CodeQL, gitleaks and trivy. fail-on sets the severity that breaks the build.

Six of ten, honestly

IDNameStatus
LLM01Prompt Injection Covered · 2 probes (direct always on; indirect canary via --indirect-nonce)
LLM02Sensitive Information Disclosure Covered
LLM03Supply Chain Excluded
LLM04Data and Model Poisoning Excluded
LLM05Improper Output Handling Covered
LLM06Excessive Agency Covered · honeytool upgrades proxy → confirmed
LLM07System Prompt Leakage Covered
LLM08Vector and Embedding Weaknesses Excluded
LLM09Misinformation Covered
LLM10Unbounded Consumption Excluded

LLM03, LLM04, LLM08 and LLM10 aren't in here — they need more than a black box can honestly prove, so Quirn doesn't pretend to check them. The rationale is in the probe registry, not a roadmap.

What it actually does
Single static binary
Stdlib-only Go. No pip, no npm, no vendor cloud.
Fail-closed gate
Exit 0 clean, 1 findings, 2 error. A run where every probe is inconclusive fails the build — never a false green.
Baseline ratchet
--baseline / --write-baseline: accept what's known, block only what's new.
Your own judge
BYO key. The judge model can sit on a different host than the endpoint under test.
Agent mode
A loopback honeytool turns the excessive-agency proxy into a confirmed finding; a nonce canary does the same for indirect injection via RAG.
Four formats
SARIF, JSON, Markdown, text.

Watch it from the bench

--live streams every payload, reply and verdict to your terminal as the scan runs. --dashboard serves the same stream to a local web view — loopback by default, no account.

Quirn · Dashboard
quirn live dashboard: probes flipping to VULNERABLE, one finding expanded to payload, reply and verdict
Probes flip to VULNERABLE in real time; expand any finding for the exact payload, model reply and judge verdict.

It doesn't report what it can't prove. It doesn't pass what it can't check.

Specification
License
Apache-2.0
Binary
single static binary, stdlib-only Go
Platforms
darwin, linux, windows × amd64, arm64
Formats
SARIF · JSON · Markdown · text
Gate
exit 0 / 1 / 2 · fails closed when every probe is inconclusive
Judge model
your own key; reused only on the same host unless split out
Install
go install · install.sh · wroughtery/quirn@v0
Checksums
checksums_sha256.txt on every release

Don't take the binary's word for it

sha256sum --ignore-missing -c checksums_sha256.txt
gh attestation verify quirn_<os>_<arch> --repo wroughtery/quirn