assay
面向网页的 agent 原生 QA CLI:无需编写测试、无需 LLM,确定性运行并报告页面自相矛盾之处。
- 源仓库
- awss1i/assay
- Star 数
- ★ 110
- 最近更新
- 1 天前
- License
- MIT
- 主语言
- Python
- FA 评分
- 61/100 · 存在缺口
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台Codex · Claude Code
- 费用
- 免费,无需付费服务
- 上手难度
- 低 · 几分钟可跑通
- 开始前需要
- 典型场景
- 编码 agent 在 Claude Code 或 Codex 中写完一个静态页面后,由 skill 或插件自动触发 assay,确认页面没有明显自相矛盾再交付。
- 不适合
- 需要验证业务逻辑正确性(如总价计算)的团队
- 需要爬取多页面或登录后流程的测试场景
- 期望工具自动执行 npm install 或构建步骤的用户
- 源码审查
- 61/100 · 存在缺口
这个 Agent 能做什么,适合哪些场景?
assay 是一个用 Python 编写的命令行工具,安装后即可对本地网页做端到端质量检查。它把目标文件夹在 localhost 上启动,用 Chromium 打开页面,等到页面控件稳定后列出浏览器渲染出的所有控件——包括可点击的 div、拖拽手柄和可编辑区域——再据此规划检查项。每条检查都在全新标签页中执行,对比操作前后的页面状态,并只报告页面自相矛盾的地方,例如抛出错误、撤销首次无效第二次才生效、空列表却显示 1、出现 NaN 等。它不需要模型或 API 密钥,因此每次运行结果一致,除首次下载 Chromium 外不写磁盘。除 CLI 外,它还提供可在多种编码 harness 中安装的 skill 与 plugin,让 agent 在写完页面后自动运行检查。
运行 assay 时,它先为该文件夹启动本地 HTTP 服务并在 Chromium 中打开页面,然后等待控件停止变化。接着枚举所有可交互元素,并据此生成检查计划:对每个按钮单击一次和两次、向输入框填入空字符串、普通文本、超长文本和 HTML 内容、切换下拉框、在画布上绘制、填写并提交表单等。每条检查都在一个新标签页中执行,比较操作前后的页面快照,只把页面自我矛盾的现象作为发现上报,例如抛出异常、Undo 首次无效、空列表计数为 1、新增条目总额上升但删除后不回落、出现 NaN,或任何控件都无响应。重复的根因会被合并为“same finding as C003”。输出可写入带截图的 HTML 报告(--report),也可用 --one-line 输出简短摘要供脚本和 agent 使用;有失败项时退出码非零。它还提供 Python API,可传入验收标准来检查意图。
- 编码 agent 在 Claude Code 或 Codex 中写完一个静态页面后,由 skill 或插件自动触发 assay,确认页面没有明显自相矛盾再交付。
- 前端开发者在本地把构建好的 HTML 文件夹交给 assay 快速做一次冒烟检查,无需提前写任何 Playwright 用例。
- CI 脚本中调用 assay --one-line,根据非零退出码判断页面是否出现异常或控件全部失效。
- 独立开发者或非专业测试人员接手 AI 生成的小型 Web 应用时,用 assay 快速发现死按钮、空状态计数错误等问题。
- 需要在无 API 密钥、无网络模型调用的环境下做确定性回归的团队,把 assay 作为可重复的检查步骤。
如何安装或部署这个 Agent?
需要 Python 3.10 或更高版本;首次运行会自动下载 Chromium。
pip install assay-ui没有 Python 3.10+ 时可以用 uv 自动下载解释器:
uv tool install assay-ui或用 pipx 安装到隔离环境:
pipx install assay-ui若找不到 pip,可改用 python3 -m pip install assay-ui。要在本地开发 assay 本身:
git clone https://github.com/awss1i/assay.git && cd assay
pip install -e ".[dev]"如何使用这个 Agent?
把 CLI 指向包含 index.html 的文件夹即可开始检查:
assay ./my-app同时生成带截图的 HTML 报告:
assay ./my-app --report out.html在脚本或 agent 中获取简短摘要:
assay ./my-app --one-line若有检查失败,退出码非零。在 Claude Code 中还可通过插件市场安装 hook,让每轮改动页面后自动运行检查:
/plugin marketplace add awss1i/assay
/plugin install assay@assay其他受支持的 harness 需按 harness 文档安装 skill 或 plugin。
这个 Agent 有哪些优点和局限?
- 不需要编写任何测试用例:检查项由页面上的实际控件自动生成。
- 不依赖 LLM、API 密钥或视觉基线,每次运行结果一致,成本为零。
- 只报告页面自相矛盾(如 NaN、计数错误、撤销失效),在 205 个正常页面中零误报。
- 对重复根因合并为“same finding as Cxxx”,避免同一 bug 刷屏。
- 提供 CLI、带截图的 HTML 报告、--one-line 摘要和 Python API 多种接入方式。
- 内置面向 Claude Code、Codex、Cursor 等十五种 harness 的 skill,以及自动 hook 的插件。
- 无法判断业务意图:总价计算错误这类逻辑 bug 通常会被放过。
- 只检查单个本地文件夹中的页面,不爬取、不登录,页面在检查期间仍可访问外网。
- 不执行 npm install 或构建,需要用户先自行产出可运行的构建结果。
- 对于已结束且无法重开的游戏页面,可能误报“无任何响应”。
- 内置规则在植入 bug 的基准上仅命中 50 个中的 12 个,且该结果属于样本内。
- 首次运行需联网下载 Chromium,页面检查耗时从数秒到一分钟不等。
这个 Agent 与同类方案有什么区别?
README 明确将其与三类方案对比:Playwright、Cypress 需要有人先写测试;Percy、Chromatic 需要参考基线截图;让模型审查代码则是读源码而不是运行程序。assay 的定位是不需要预先写测试、不需要基线、并且真正运行整个页面。
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| assay 当前 | 61 · 存在缺口 | 命令行工具免费 | ★ 110 | 1 天前 | Python | Codex · Claude Code |
| Webcmd | 63 · 存在缺口 | 命令行工具免费 + 模型费 | ★ 2.8k | 18 天前 | TypeScript | Codex · Claude Code |
| agent-qa | 49 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 856 | 今天 | TypeScript | Codex · Claude Code |
| Playwright 浏览器自动化 MCP | 60 · 存在缺口 | MCP 服务器免费 | ★ 39k | 1 天前 | TypeScript | Codex · Claude Code |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
SECURITY.md 与 tests/test_browser.py 显示服务仅绑定 127.0.0.1、拒绝隐藏文件与越界符号链接,最小权限做得较实;但沙箱无法启动时会无沙箱运行(仅警告),且页面可访问互联网并外发所服务文件,敏感数据仅靠用户自律,故 sensitive_data_handling 与 least_privilege 未给满分。用户确认方面,插件钩子会在每轮自动运行 assay,属自动执行而非逐次确认,仅扣至 1。依赖仅声明 playwright>=1.40 无上限也无锁定,依赖安全证据薄弱。回滚方面除退出码与不写盘外无恢复机制说明。来源归属仅作者名 awss1i,发布者未经验证,故 1。
测试文件覆盖了 CLI 选择、缺失页面、无浏览器、沙箱关闭等失败路径,失败信息具体且可读,failure_messages 给 3。自洽性上 README、usage 与测试描述一致,给 2。依赖可用性仅靠首次运行下载 Chromium,无离线或版本固定说明,给 1。
README 明确列出限制(不检查意图、仅网页、不构建、游戏结束误报),capability_boundaries 给 3。面向编码代理与 15 种 harness 的场景清晰,但触发精度依赖钩子与 --if-page 行为,证据有限给 2。环境适配覆盖 Python 3.10–3.14 与 pip/uv/pipx,但需 Chromium 与网络,给 2。
文档结构清晰、多语言、安装说明完整;已知限制详尽,license 为完整 MIT 文本给 3。但版本仅 pyproject 中 0.3.1,changelog 仅指向 releases 无内嵌记录,给 1。命名稳定性无 API 稳定性承诺,给 1。维护责任仅指向 Issues/Discussions,发布者未验证,给 1。
输出含退出码、--json、--one-line、HTML 报告与截图,可用性较好给 2。边际价值在于无需写测试即可执行页面,但基准显示植入 bug 仅检出 12/50 且为 in-sample,价值有限给 2。成本上无需 LLM、每页数秒到一分钟,成本收益合理给 2。
基准数字声称由评分脚本写入,但所给文件未含 bench 脚本或结果,claim_traceability 仅 1。跨源佐证有限,README 与 usage 示例一致但无独立来源,给 1。事实与推断分离较好,明确标注 in-sample 与限制,给 2。
- 沙箱无法启动时会无沙箱运行 Chromium,仅打印警告;在 root 或容器环境中风险上升。
- 被检查页面可访问互联网并外发服务目录中的文件,切勿在待检目录放置密钥或 .env。
- 插件钩子会在每轮自动运行 assay,属自动执行,需确认其不会意外触发或干扰代理对话。
- 依赖仅 playwright>=1.40 未锁定版本,构建可复现性与供应链安全证据不足。
- 基准中植入 bug 检出率仅 12/50 且为 in-sample,实际检出能力可能被高估。
- 发布者身份未经验证,维护责任与更新路径不明确。