SuperAPI AI 工具集

mock-hunter

测试与质量

查看项目

更新于 10-16 04:36

技能介绍

用途

MockHunter 是一个 Claude Code 技能,用于审计一个实时网页,并针对页面上每一个可见数值给出判断:它是真实的、模拟的、LLM 生成的、硬编码的、损坏的,还是未知的。它专为“凭感觉编码”(vibe-coded)的应用设计,例如 Lovable、Bolt、v0、Replit、AI Studio、Cursor Composer 等——这些应用的界面可能看起来完整,但数据层往往并未真正接通。它使用 Playwright MCP 驱动真实浏览器,然后沿网络请求和 DOM 追溯每个可见值的来源。

该技能改编自上游 CodeShuX/mockhunter 项目(社区来源)。

由于此工作流会驱动真实浏览器访问线上页面,应将其视为交互式审计工具,而非插件安全的只读辅助工具。默认仅观察,直到用户确认目标归其所有、指定安全的测试账号或环境,并明确批准任何可能改变状态的点击、提交或需登录的操作。

何时使用

  • 审计 AI 生成的界面,查明哪些数值真正接通了数据
  • 在验收前审查承包商或同事的交付物
  • 在向客户或投资人展示凭感觉编码的 MVP 之前
  • 当仪表盘“看起来太干净”——所有指标都是整齐的整数、时间戳全部聚集、没有方差——怀疑是预置数据时

工作原理

阶段 1:设置与智能提问

  • 问候用户,询问目标 URL
  • 从 URL 自动检测技术栈(.lovable.app、.bolt.new、.v0.app、.replit.app、aistudio.google.com,否则为 Custom)
  • 提出 3-5 个针对性问题:认证模式(公开 / localhost / 表单 / 跳过)、数据库访问(可选)、怀疑点、页面目标
  • 在继续之前,确认审计计划、所有权/权限、目标环境和允许的操作类别

阶段 2:导航与编目

  • 使用 browser_navigate 访问目标 URL
  • 按所选模式处理认证(表单登录:填写字段、点击提交)
  • 等待网络空闲(最长 10 秒)
  • 截取整页截图,捕获无障碍快照
  • 清点所有:标题、按钮、链接、输入框、卡片、徽章、统计值、表格单元格、空状态、图片
  • 捕获初始控制台错误和网络请求

阶段 3:测试交互性

  • 对每个标签页:仅在用户批准导航类交互后点击,然后快照、滚动到底部、重新编目
  • 对每个按钮:仅点击用户批准、列入允许清单、且根据角色、无障碍名称、附近文本、图标、URL/操作目标和预期网络副作用明确为非破坏性的控件;跳过破坏性或含义不明的控件,而不是仅依赖标签正则
  • 对每个表单:识别必填字段,优先使用空提交验证;仅当用户明确批准了确切表单、目标环境和测试账号时,才提交一次性数据
  • 记录每个元素的行为

阶段 4:追踪来源

对每个可见值,运行以下决策树:

是否有任何网络请求返回了该值? ├── 是——在响应中找到: │ ├── 状态 4xx/5xx → BROKEN(损坏) │ ├── 端点匹配 /ai|openai|generate|llm|chat → LLM │ ├── 响应结构匹配模拟库(faker、MSW、mockoon)→ MOCK(模拟) │ ├── 触发一致性标记 → MOCK 或 LLM(需复核) │ ├── 提供了数据库连接? │ │ ├── 运行只读 SELECT,值与数据库行匹配 → REAL(真实) │ │ └── 值不在数据库中 → MOCK │ └── 无数据库 → UNKNOWN(未知,最佳猜测) └── 否——值不在任何网络响应中: ├── DOM 源码中的字符串字面量 → HARDCODED(硬编码) ├── 由 Math.random / Date.now / faker 计算得出 → MOCK └── 无法确定 → UNKNOWN

一致性启发式规则会标记可疑数据:

  • 所有行中的数值完全相同
  • 所有百分比都是整数(50%、75%、90%)
  • 所有时间戳聚集在同一分钟内
  • 10 行以上中唯一值少于 3 个

阶段 5:报告

生成 mockhunter-report.md,包含:

  • 汇总表(判定计数)
  • 按区块/标签页的发现(元素 / 值 / 判定 / 来源 / 严重程度 / 操作)
  • 控制台错误和网络失败
  • NO-OP(无操作)按钮
  • 可疑模式
  • 给用户的智能后续问题

示例

示例 1:审计 Lovable 管理仪表盘

用户:/mockhunter audit https://my-app.lovable.app/admin 技能:[阶段 1] 检测到技术栈:Lovable。认证:跳过。数据库:无。 [阶段 2] 编目:6 个统计卡片、4 个验证队列、8 个活动项。 [阶段 3] 搜索框:NO-OP(零网络请求)。活动链接 → 404。 [阶段 4] 打包体积 2.7 MB。零 /api/、零 supabase、零 axios。 “$42,850” → JSX 中的字符串字面量 → HARDCODED。 “+12% vs last month” → 字符串字面量 → HARDCODED。 [阶段 5] 判定:23 HARDCODED、1 BROKEN、1 NO-OP、0 REAL。 报告已写入 ./mockhunter-report.md

示例 2:公开营销站点(大部分真实)

用户:/mockhunter audit https://example-saas.com 技能:... [阶段 5] 判定:8 REAL、18 HARDCODED(有意的营销文案)、 0 MOCK、0 BROKEN、2 UNKNOWN。 无控制台错误,无损坏端点。

最佳实践

  • ✅ 在可用时提供数据库访问——可将 UNKNOWN 判定提升为 REAL 或 MOCK
  • ✅ 为表单登录认证使用专用测试账号
  • ✅ 运行冷启动测试(零数据)——许多凭感觉编码的应用在此失败
  • ✅ 告知技能哪些区块是有意 AI 生成的,以免误报
  • ❌ 未经许可,不要对不属于你的应用运行主动交互——实时点击和表单提交可能改变状态
  • ❌ 不要仅凭破坏性按钮排除清单——本地化标签、图标、aria 文本和后端路由都可能隐藏改变状态的操作
  • ❌ 如果页面加载失败,不要信任审计——先检查控制台

限制

  • 每次运行仅审计单页——v0.1.0 不支持多页爬取
  • 认证仅支持表单登录——v0.1.0 不支持 OAuth、魔法链接或 2FA
  • 每页最多约 30 个最显眼的按钮
  • 仅输出 Markdown 报告——尚无 JSON 输出
  • 数据库验证支持任何可通过 shell 命令访问的数据库(psql、mysql、mongosh、wrangler、supabase REST),但不直接支持 Firestore

安全与安全说明

  • 该技能仅运行只读数据库 SELECT,绝不执行 INSERT/UPDATE/DELETE
  • 除非用户明确将确切控件和环境列入允许清单,否则跳过看起来具有破坏性、含义不明、仅图标、本地化或外部写入的控件
  • 绝不提交看起来涉及支付、账户删除、外部写入操作、账户变更、邀请、发布、部署、消息发送或资金转移的表单
  • 对任何一次性表单测试使用占位凭据(mockhunter@example.com),绝不使用用户的真实凭据
  • 所有 Playwright 操作都在受控的 MCP 浏览器上下文中进行——无无头升级