关于 sniff
sniff 是一款 QA 与无障碍扫描工具,可在真实浏览器中操作运行中的 Web 应用并报告可复现的问题。它为发现项提供证据,也可作为命令行工具或 MCP 服务运行。
主要功能
- 01在真实浏览器中遍历应用流程
- 02检查 12 类问题
- 03发现项附带步骤和证据
- 04生成终端、HTML 和 JSON 报告
- 05按严重程度设置 CI 退出码
- 06支持登录态遍历和源码扫描
适用场景
- 01发布前检查开发中的应用
- 02依据证据复现浏览器流程问题
- 03按发现问题的严重程度拦截 CI 构建
- 04检查需要登录的应用流程
MCP 相关
sniff 可作为 MCP 服务供 Agent 使用。README 展示了在 Claude Code 或 Codex 中添加它的方式,并说明可选择扫描和已保存结果读取能力,而不启动浏览器。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
English · 简体中文 · 日本語 · Español · Français
将它指向正在运行的应用。它会在真实浏览器中体验真实用户流程,并用证据告诉你哪些地方确实出了问题。
功能介绍 · 安装 · 使用方法 · 你将获得什么 · 适用于你的编辑器 · 须知
claude plugin marketplace add Aboudjem/10x
claude plugin install sniff@10x
功能介绍
大多数代码检查工具只读取源代码,从不运行你的应用;端到端测试框架则要求你自行编写和维护测试。sniff 会在真实浏览器中打开正在运行的应用,像用户一样点击和填写内容,并判断实际发生了什么。
- 它能发现 12 类错误,包括 HTTP 500 路由和失效链接,以及占位数据、失效的提交按钮、点击返回按钮后表单内容被清空、卡住的加载动画和移动端溢出等问题。
- 每个问题都有证据。 每条发现都包含对应路由和导致问题的一系列有序步骤,以及检查时捕获的屏幕截图和控制台或网络记录片段。没有步骤,就不会报告问题。
- 它经过了测试验证。 在一个植入了涵盖全部 12 类错误共 21 个缺陷的测试应用中,另有一个无缺陷的对照页面,sniff 找出了 21 个缺陷中的全部 21 个,且没有在对照页面上报告任何问题。
安装
上方代码块介绍的是 Claude Code 的安装方式,通过 10x marketplace 安装。对于其他 Agent,Vercel skills CLI 会安装同样的三个技能:
npx skills add Aboudjem/sniff
如果要将它用作普通命令行工具,而不使用编辑器:
npx sniff-qa --url http://localhost:3000
npm 包名是 sniff-qa,安装的二进制文件名是 sniff。不要运行 npx sniff,那是一个无关的包。
Node 版本、项目安装和 CI
需要 Node.js 22 或更高版本。npm install -D sniff-qa 会将它添加到项目的 devDependencies 中,而 npx sniff-qa ci 会生成一个包含浏览器缓存和报告构件的 GitHub Actions 工作流。
1. 启动应用, 使用项目现有的任意开发服务器。
npm run dev
2. 从另一个终端运行 Walk。 sniff 会自动检测常见端口上的开发服务器,因此
--url 是可选的,但传入该参数可以避免猜测。
npx sniff-qa --url http://localhost:3000
3. 查看检查结果。 结果按严重程度分组显示。以下是针对本仓库预置缺陷测试场景的一次实际运行结果摘录,命令为
npx sniff-qa --url http://localhost:4321 --ci --max-pages 12:
sniff v0.8.0 walking http://localhost:4321
26 findings (+1 low-confidence hidden; use --all)
CRITICAL (1)
• [confirmed] Page returns HTTP 500
/crash (route/broken-page)
- Navigate to /crash
- Server responded with HTTP 500
fix: The route throws server-side. Check the server logs/handler for this path and return a valid page or a proper error page.
shot: sniff-reports/crawl/_crash-desktop.png
✓ Scan complete: 26 issue(s) found. Exit code 1 so CI fails on bugs; pass --fail-on none to always exit 0.
添加 --report 可生成可独立查看的 HTML 页面,方便发送给他人。如果环境似乎不正常,请运行 npx sniff-qa doctor。
你将获得
- 终端报告:按严重程度分组,每项检查结果都包含步骤、修复方法和截图路径。
- 可分享的文件:使用
--report生成可独立查看的 HTML 报告,或使用--json生成 JSON。 - 退出码:当检查结果达到
--fail-on指定的严重程度时返回非零值,让 CI 因实际缺陷而失败。 - 置信度标签:每项检查结果都会标注置信度。除非传入
--all,否则终端中会隐藏uncertain结果。
0.8.0 版新增:
--caps scan,report将 MCP 服务限制为源代码扫描和已保存结果读取,不启动浏览器,也不下载浏览器。--storage-state auth.json可检查已登录的应用。该文件中的 Cookie 和令牌值会从所有生成报告的文本中脱敏,但截图像素中不会脱敏。sniff.config中的assert块可按严重程度限制检查结果数量(maxCritical、maxHigh、maxTotal);命令行中的 walk、源代码扫描和发现流程都会执行这些限制。
可在编辑器中使用
可通过 npx skills add 在 Claude Code、Cursor、Codex、Copilot、Gemini CLI 及其他 70 多种 Agent 中使用。Skills 采用 Markdown 格式,因此可使用编辑器指定的任意模型运行。
| Agent | 一行安装命令 |
|---|---|
| Claude Code | claude plugin install sniff@10x |
| 任意 70 多种 Agent | npx skills add Aboudjem/sniff |
| Codex、Gemini CLI、OpenCode、Pi | ./install.sh codex |
| VS Code(Copilot) | ./install.sh copilot |
| 其他所有编辑器 | 请参阅 docs/editors.md |
改为将其添加为 MCP 服务
claude mcp add sniff-qa npx -- -y sniff-qa --mcp
codex mcp add sniff-qa -- npx -y sniff-qa --mcp
Cursor、VS Code、Gemini CLI、Windsurf、Continue、OpenCode 和 Zed 使用相同的命令,只需将其配置为 JSON 或 TOML 条目即可。每种编辑器对应的配置片段都在 docs/editors.md 中。
须知
重要
无需 API 密钥、账户或注册;除非你自行配置,否则也不会使用 AI 提供商。Walk 和扫描都不会修改源代码。只有
sniff fix会重写代码,而且仅在你运行该命令时才会执行。
说明
Walk 会点击按钮并提交真实表单,因此可能创建真实数据。请对开发或预发布应用运行,不要对生产环境运行。首次 Walk 还会下载 Chromium 构建版本并缓存,因此该次运行需要联网。
- 需要运行中的应用。 如果没有启动开发服务器,它会回退到仅扫描源代码,并告知你如何启动完整 Walk。运行
npx sniff-qa scan可主动执行此类扫描。 - 死链检查会访问外部链接, 因此 Walk 会向你自己页面已链接的第三方 URL 发起请求。
- 发现缺陷的 Walk 会有意以状态码 1 退出, 让 CI 构建失败。这不是崩溃。
--fail-on none可关闭严重程度门槛,但assert预算仍可能导致运行失败。
了解更多
- docs/editors.md,为每个受支持的 Agent 提供安装说明和 MCP 代码片段
- docs/authenticated-walks.md,使用
--storage-state浏览已登录的应用 - docs/assert-budgets.md,在
sniff.config中按严重程度限制发现的问题 - docs/comparison.md,了解 sniff 与代码检查工具、链接检查器和 E2E 框架的区别
- docs/faq.md,本页面未解答的问题
- CHANGELOG.md · CONTRIBUTING.md · LICENSE
由 Adam Boudjemaa 构建 · Apache 2.0 · 基于 Playwright 和 axe-core
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。