assay

面向网页的 agent 原生 QA CLI:无需编写测试、无需 LLM,确定性运行并报告页面自相矛盾之处。

源仓库
awss1i/assay
Star 数
★ 110
最近更新
1 天前
License
MIT
主语言
Python

30 秒速览

运行形态
命令行工具Agent 插件 / 技能代码库 / SDK
可在哪里用
通用 · 跨平台Codex · Claude Code
费用
免费,无需付费服务
上手难度
低 · 几分钟可跑通
开始前需要
Python 3.10+Chromium(首次运行时下载)Shell / 命令行网络访问本地文件系统
典型场景
编码 agent 在 Claude Code 或 Codex 中写完一个静态页面后,由 skill 或插件自动触发 assay,确认页面没有明显自相矛盾再交付。
不适合
  • 需要验证业务逻辑正确性(如总价计算)的团队
  • 需要爬取多页面或登录后流程的测试场景
  • 期望工具自动执行 npm install 或构建步骤的用户

这个 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,可传入验收标准来检查意图。

  1. 编码 agent 在 Claude Code 或 Codex 中写完一个静态页面后,由 skill 或插件自动触发 assay,确认页面没有明显自相矛盾再交付。
  2. 前端开发者在本地把构建好的 HTML 文件夹交给 assay 快速做一次冒烟检查,无需提前写任何 Playwright 用例。
  3. CI 脚本中调用 assay --one-line,根据非零退出码判断页面是否出现异常或控件全部失效。
  4. 独立开发者或非专业测试人员接手 AI 生成的小型 Web 应用时,用 assay 快速发现死按钮、空状态计数错误等问题。
  5. 需要在无 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?

FollowAgents 源码审查 · FARS-2.1
存在缺口
61/ 100 五分制 3.1 / 5
信任安全 14/29
可靠稳定 9/14
适用触发 14/18
规范维护 11/18
有效结果 9/13
证据核验 4/8
查看各维度的扣分理由
信任安全14 / 29 · 2.4/5

SECURITY.md 与 tests/test_browser.py 显示服务仅绑定 127.0.0.1、拒绝隐藏文件与越界符号链接,最小权限做得较实;但沙箱无法启动时会无沙箱运行(仅警告),且页面可访问互联网并外发所服务文件,敏感数据仅靠用户自律,故 sensitive_data_handling 与 least_privilege 未给满分。用户确认方面,插件钩子会在每轮自动运行 assay,属自动执行而非逐次确认,仅扣至 1。依赖仅声明 playwright>=1.40 无上限也无锁定,依赖安全证据薄弱。回滚方面除退出码与不写盘外无恢复机制说明。来源归属仅作者名 awss1i,发布者未经验证,故 1。

可靠稳定9 / 14 · 3.2/5

测试文件覆盖了 CLI 选择、缺失页面、无浏览器、沙箱关闭等失败路径,失败信息具体且可读,failure_messages 给 3。自洽性上 README、usage 与测试描述一致,给 2。依赖可用性仅靠首次运行下载 Chromium,无离线或版本固定说明,给 1。

适用触发14 / 18 · 3.9/5

README 明确列出限制(不检查意图、仅网页、不构建、游戏结束误报),capability_boundaries 给 3。面向编码代理与 15 种 harness 的场景清晰,但触发精度依赖钩子与 --if-page 行为,证据有限给 2。环境适配覆盖 Python 3.10–3.14 与 pip/uv/pipx,但需 Chromium 与网络,给 2。

规范维护11 / 18 · 3.1/5

文档结构清晰、多语言、安装说明完整;已知限制详尽,license 为完整 MIT 文本给 3。但版本仅 pyproject 中 0.3.1,changelog 仅指向 releases 无内嵌记录,给 1。命名稳定性无 API 稳定性承诺,给 1。维护责任仅指向 Issues/Discussions,发布者未验证,给 1。

有效结果9 / 13 · 3.5/5

输出含退出码、--json、--one-line、HTML 报告与截图,可用性较好给 2。边际价值在于无需写测试即可执行页面,但基准显示植入 bug 仅检出 12/50 且为 in-sample,价值有限给 2。成本上无需 LLM、每页数秒到一分钟,成本收益合理给 2。

证据核验4 / 8 · 2.5/5

基准数字声称由评分脚本写入,但所给文件未含 bench 脚本或结果,claim_traceability 仅 1。跨源佐证有限,README 与 usage 示例一致但无独立来源,给 1。事实与推断分离较好,明确标注 in-sample 与限制,给 2。

风险与缓解建议
  • 沙箱无法启动时会无沙箱运行 Chromium,仅打印警告;在 root 或容器环境中风险上升。
  • 被检查页面可访问互联网并外发服务目录中的文件,切勿在待检目录放置密钥或 .env。
  • 插件钩子会在每轮自动运行 assay,属自动执行,需确认其不会意外触发或干扰代理对话。
  • 依赖仅 playwright>=1.40 未锁定版本,构建可复现性与供应链安全证据不足。
  • 基准中植入 bug 检出率仅 12/50 且为 in-sample,实际检出能力可能被高估。
  • 发布者身份未经验证,维护责任与更新路径不明确。
证据充分度:低 评估于 2026年11月6日 审查版本 223c21ab6cfa
查看完整评分方法 →

常见问题

使用 assay 需要支付模型或 API 费用吗?
不需要。assay 不调用 LLM,没有 API 密钥,也没有按次费用;唯一的运行前提是 Python 3.10+ 和首次下载的 Chromium。
assay 能发现哪些类型的 bug?
它能发现页面自相矛盾的现象,例如抛出异常、Undo 首次无效、空列表显示数量为 1、增减条目时总额不对称、出现 NaN,或所有控件都无响应。它不能验证业务逻辑是否正确。
它会把我的页面代码上传到外部服务吗?
不会。页面由本地 HTTP 服务提供并在本地 Chromium 中运行;除首次 Chromium 下载外,只有你显式指定 --report 时才会写文件。页面在检查期间仍可访问互联网。
如何在编码 agent 中使用?
先安装 CLI,再按 harness 文档安装 skill(支持十五种 harness);在 Claude Code、Codex、Grok Build CLI、Devin CLI、Factory Droid、GitHub Copilot CLI 和 DeepSeek Harness 中还可安装 plugin,让每轮改动页面后自动运行检查。
能否在 CI 中根据结果失败?
可以。只要有检查失败,assay 的退出码即为非零;配合 --one-line 可输出适合脚本解析的简短摘要。
在 GitHub 查看 ↗ 安装 ↓

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents