用途
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 浏览器上下文中进行——无无头升级