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
这是什么?「assay」是一个工具,它在真实的 Chromium 浏览器中打开你的网页,自动按下它找到的每一个按钮、填写每一个输入框并使用每一个控件,然后报告页面中自相矛盾的地方——无需编写测试,也不涉及 LLM。
它和 Playwright 或 Cypress 是同一类东西吗?不是——Playwright 和 Cypress 运行人工编写的测试,而 assay 通过发现页面上的控件来自动构建自己的检查,所以你不需要编写任何脚本。
怎么安装和运行它?用 'pip install assay-ui' 安装(如果找不到 pip 就用 'python3 -m pip install assay-ui');首次运行时如果缺少 Chromium 会自动下载,然后你把它指向一个提供你页面的文件夹。
使用它需要 API 密钥或 LLM 吗?不需要——assay 不用 LLM、不需要 API 密钥、没有使用成本,而且对同一页面的每次运行结果都相同。
它能抓住我页面上的每一个 bug 吗?不能——它无法判断意图,所以运行正常但计算结果错误的页面(比如合计加错了)通常能通过;而且它一次只检查一个本地提供的页面,不支持登录、真实网络调用或构建步骤。
assay 抓取真实 bug 的准确率如何?在 225 个 AI 编写的迷你应用上,它在 20 个有问题的页面中找出了 15 个真实 bug,且在 205 个正常页面上零误报;在故意加入 bug 的应用上,它在 50 个被加入的 bug 中找出了 12 个,且对原始版本零误报。
它能与 Claude Code 这类编程代理自动配合工作吗?可以——一个 skill 让它在 15 种受支持的运行框架(Claude Code、DeepSeek Harness、opencode、Codex、Cursor、Gemini CLI 等)中的任意一种写完页面后运行,还有一个面向 Claude Code 和 DeepSeek Harness 的插件,会在每个改动了页面的回合之后自动执行检查。
它实际上会标记什么问题?它寻找页面自相矛盾的地方:抛出的错误、点了没反应后来又突然好用的撤销按钮、列表为空却显示数量为 1、总数只增不减、游离的 NaN 值,或整个页面毫无响应。
为什么不干脆让 LLM 来审查代码?读代码只能告诉你它应该做什么,而不能告诉你它实际运行时做了什么;assay 则是真正把页面跑起来,在真实浏览器中与它交互,并在不使用模型、不产生 API 成本的情况下报告观察到的不一致。
Creator
awss1i
Size
0.8 MB
Stars
107
Age
1mo
Commits · 90 Days