From a running app to a bug report an agent can fix.
01
antiQA (QA Anything) is an end-to-end tester for any app. It reads a pack that describes your product, plays your user stories in a real browser, crawls for what the stories missed, runs accessibility checks, and writes a bug report a coding agent can pick up.
It is one offline binary, antiqa, written in Rust. The old command name qaa still works and runs the same binary. The core never names a product: everything product-specific lives in its pack.
02
Download the Linux build from the download section, make it executable and put it on your PATH.
chmod +x antiqa
./antiqa --version
macOS and Windows builds were not made for 0.0.8. planned
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl03
http://127.0.0.1:8080.antiqa onboard --name myapp --url http://127.0.0.1:8080 --repo ../myappantiqa --product myapp --url http://127.0.0.1:8080reports/. Read BUG-REPORT.md, and hand evidence.zip to whoever fixes it.antiqa dashboard serves your local runs for the antiQA window.
04
A pack lives in packs/<product>/. It holds:
qaa.play/2 format.A template pack is included for adding a new app.
05
Pick a stage with --stage. The default is all, which runs the six in order. Each stage is a gate: if it fails, the run stops with exit code 2.
| Stage | What it does |
|---|---|
study | packs/<product>/STUDY.md must have the required sections. |
stories | Checks the story schema, the plays and the coverage checklist. |
harness | Starts or attaches to the app, checks health, and refuses forbidden writes. |
run | Plays the stories, crawls the app and runs accessibility checks on each palette. |
triage | Classifies every miss. |
report | Writes BUG-REPORT.md and evidence.zip. |
06
| Flag | Use it when |
|---|---|
--url <address> | The app is already running. antiQA will not stop it. |
--core <path> --fe <path> | You have checkouts the pack knows how to start. |
--stub | Use the pack's harness stand-in. Good for testing the pack itself; not a verdict on the product. |
07
--agents stub is the default. Every stage is deterministic and no LLM is used, which suits CI.
--agents external writes agents/*.prompt.md plus the inputs into the report's handoff folder, and stops if the expected artifact is missing. Your own agent does that step, then you continue the run.
08
Reports go to reports/ (change it with --out). A failing story is played again to show how often it fails: 3 times for all, triage and report, once for a bare run. Change it with --repro.
| Exit | Meaning |
|---|---|
| 0 | No product defect. |
| 1 | At least one defect. |
| 2 | A gate failed. This includes a failure with no video, a report that says “always” without N of M, a shared evidence hash, or a missing binary stamp. |
09
| Option | What it does |
|---|---|
--story <id>[,id] | Run only these stories. The crawl is skipped. |
--headed | Show the browser. |
--real-seats | Allow real CLIs on PATH. Off by default. |
--skip-build | Reuse an existing product binary. |
--no-crawl | Skip the exploratory crawl. |
--include-fixtures | Also run the recorder self-check. |
--delay <ms> | Pause between actions. Default 120. |
--reuse-study, --reuse-stories, --reuse-run, --reuse-triage | Reuse earlier output instead of redoing that stage. --run-dir picks the report folder. |
--version | Print the version. |
QAA_PLAN=1 prints the parsed config and pack result as JSON instead of running. NO_PROMO=1 hides the credit line in --help.
10
A gate failed. The output names it. Fix the pack (study sections, story schema) or the harness, then run again, using --reuse-* to skip stages that already passed.
Use --story <id> --headed to watch it play.
11
No. It is a single Rust binary.
Runs and reports stay on your machine. With --agents stub no AI is used at all.
The window is being built on Tauri. planned