assay README

The project's README from github.com/awss1i/assay. As one markdown file: README.md.

assay

python licence X

Drives your web page in a real browser and tells you what broke. No tests to write, no LLM.

A terminal running assay on a list
you reorder by dragging. 7 checks planned from the page, 1 passed and 6
failed. The first failure says nothing on the page changed at all, and the
other five say they are the same finding.

Checking a drag-to-reorder list with a bug in it. pip install assay-ui


assay opens your page in Chromium, finds every control on it, uses all of them, and reports what went wrong.


Contents


Install

pip install assay-ui           # Python 3.10+
uv tool install assay-ui       # no Python 3.10+? uv downloads one
pipx install assay-ui          # its own environment, for when pip says "externally managed"

If pip isn't found, use python3 -m pip install assay-ui. The first run downloads Chromium if needed.

To work on assay itself:

git clone https://github.com/awss1i/assay.git && cd assay
pip install -e ".[dev]"

For coding agents

Install the CLI above first, then follow the harness setup → to add the skill or plugin in any of the fifteen supported harnesses.


Use

assay ./my-app                    # check index.html in this folder
assay ./my-app --report out.html  # also write an HTML report with screenshots
assay ./my-app --one-line         # short summary, for scripts and agents

This repository includes a drawing program whose Undo is broken:

$ assay bench/programs/dsh/gpt-oss-120b/37_draw2
24 case(s) planned, 24 carried out, 23 passed, 1 failed

C016 [FAILED] draw on canvas twice, then press Undo twice
    → pressing this twice from the same starting point, the first press changed nothing and the second did, so it reacts one press late

The exit code is non-zero if anything failed, and nothing is written to disk unless you ask.

The full flags, the Python API and the HTML report →

With coding agents

The skill works in all fifteen supported harnesses: Claude Code, DeepSeek Harness, opencode, Antigravity, Codex App, Codex CLI, Cursor, Devin CLI, Factory Droid, Gemini CLI, GitHub Copilot CLI, Grok Build CLI, Kimi Code, Pi and Hermes Agent. It tells your agent to run assay after finishing a page and end its reply with the result:

assay: checked todo/todo.html, 8 checks, nothing flagged.

The plugin (Claude Code and the DeepSeek Harness) adds a hook that runs the check automatically at the end of each turn that changed a page. Either way, the agent reports what assay found and doesn't change code because of it unless you ask.

/plugin marketplace add awss1i/assay
/plugin install assay@assay

How the skill and plugin work →


Benchmarks

Scored on two sets of pages in this repository. Every number here is written by the scoring script, never typed by hand.

Pages written by AI. 225 small web apps an AI wrote from 75 prompts, three times each, which a person then opened and tried.

Found the real bug on 15 of the 20 broken pages, with 0 of the 205 working pages flagged. Every page and result.

Pages with bugs added on purpose. 10 working apps, each copied with 5 bugs added and written down.

Found 12 of the 50 added bugs, with 0 of the 10 original pages flagged. Every bug and result.


How It Works

  1. Serves the folder on localhost and opens the page in Chromium.
  2. Waits until the page's controls stop changing.
  3. Lists every control the browser renders, including clickable divs, drag handles and editable regions.
  4. Plans checks from those controls: press every button once and twice, type empty, ordinary, very long and HTML-laden text into fields, change every dropdown, draw on canvases, fill in and submit forms, and more.
  5. Runs each check in a fresh tab and compares the page before and after.

assay doesn't know what your page is for, so a button that changes nothing isn't a failure by itself. Instead it reports places where the page contradicts itself. For example:

Every rule →


Why

Playwright and Cypress need tests someone wrote. Visual regression needs a reference screenshot. Asking a model to review the code means reading it, not running it. assay runs it, with nothing prepared in advance.

needs tests written needs a baseline runs the program
Playwright / Cypress yes no yes, the parts you wrote
Percy / Chromatic no yes it screenshots it
ask a model to review it no no no, it reads the source
assay no no yes, all of it

Limits


Contributing

Report bugs and false alarms as issues, send changes as pull requests, and ask questions in Discussions. See CONTRIBUTING.md.


Licence

MIT.

assay (awss1i/assay)

Searching Database…

107 ·GitHub
What is this?'assay' is a tool that opens your web page in a real Chromium browser, automatically presses every button, fills every field and uses every control it finds, then reports what contradicted itself — no tests to write, no LLM involved.
Is this the same kind of thing as Playwright or Cypress?No — Playwright and Cypress run tests a human writes, while assay builds its own checks by discovering the controls on the page, so there's nothing for you to script.
How do I install and run it?Install with 'pip install assay-ui' (or 'python3 -m pip install assay-ui' if pip isn't found); the first run automatically downloads Chromium if it's missing, then you point it at a folder serving your page.
Do I need an API key or an LLM to use it?No — assay has no LLM, no API key and no usage cost, and every run on the same page gives the same result.
Will it catch every bug in my page?No — it can't judge intent, so a page that runs fine but computes the wrong result (like a total adding wrongly) usually passes; it also only checks one locally-served page at a time with no login, live network calls or build step.
How accurate is assay at catching real bugs?On 225 AI-written mini apps, it found the real bug in 15 of 20 broken pages with zero false alarms on the 205 working ones; on apps with bugs added on purpose, it found 12 of 50 added bugs with zero false alarms on the originals.
Does it work automatically with coding agents like Claude Code?Yes — a skill lets it run after any of 15 supported harnesses (Claude Code, DeepSeek Harness, opencode, Codex, Cursor, Gemini CLI, and more) write a page, and a plugin for Claude Code and DeepSeek Harness runs the check automatically after every turn that changes a page.
What kind of problems does it actually flag?It looks for the page contradicting itself: thrown errors, an Undo button that does nothing then suddenly works, an item count showing 1 when the list is empty, totals that rise but don't fall, stray NaN values, or nothing on the page responding at all.
Why not just ask an LLM to review the code instead?Reading code tells you what it's supposed to do, not what it actually does when run; assay instead serves the page, interacts with it in a real browser, and reports observed inconsistencies with no model and no API cost.
Creator
awss1i
Size
0.8 MB
Stars
107
Age
30d
Commits · 90 Days