一键导入
vverify
截图驱动的视觉 QA 判定器——把当前截图与参考图对比,返回严格 JSON 裁决,驱动下一轮编辑直到通过 90 分阈值
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
截图驱动的视觉 QA 判定器——把当前截图与参考图对比,返回严格 JSON 裁决,驱动下一轮编辑直到通过 90 分阈值
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Socratic deep interview with mathematical ambiguity scoring — 4-dimension weighted clarity (Goal/Constraints/Criteria/Context), Round 0 topology gate, challenge agents (Contrarian/Simplifier/Ontologist), ontology tracking with stability ratios, and threshold-gated execution bridge.
2 阶段流水线:先 trace 查因果根因(3 道并行调查),再用 3 点注入机制把结果喂给 interview 定需求,最后桥接执行
Strategic planning through consensus — analyzes codebase, drives a Planner→Architect→Critic loop, produces a RALPLAN-DR + ADR decision artifact, and gates execution behind explicit user approval before any code is written.
Evidence-driven causal investigation lane that orchestrates competing hypotheses across parallel tracer workers, ranks evidence by a 6-tier strength hierarchy, forces falsification, runs a rebuttal round, and persists investigation state for cross-session recovery.
持久化 markdown 知识库,跨会话累积项目知识(ingest/query/lint/add/delete + 交叉引用 + 自动捕获)
Detect and clean up AI-generated redundant or low-quality code.
| name | vverify |
| description | 截图驱动的视觉 QA 判定器——把当前截图与参考图对比,返回严格 JSON 裁决,驱动下一轮编辑直到通过 90 分阈值 |
这是一台「看截图判差距」的视觉 QA 裁判,不是代码审查器。核心机制:读两张图(参考图 + 当前输出图),对比布局/间距/字体/颜色/层级,吐出一份严格 JSON 裁决(分数 + 通过/修改/失败 + 具体差距 + 可执行修改建议)。分数不到 90 就继续改、重跑,直到过线才算完。像素级 diff 只当辅助调试定位热点,权威判定永远是这份 JSON。
#oms_reviewer 或 #oms_frontend旧版 vverify 是「看代码猜视觉」——读 .tsx/.css,对照设计 token 表格,猜渲染出来啥样。问题是猜得再准也不等于实际渲染对得上。真出了视觉 bug,代码看着没问题,浏览器里就是歪的。omc 的 visual-verdict 把方向反过来:别猜代码,直接看截图。拿当前截图和参考图一比,差距摆在台面上,分数说话,不到 90 不算完。这样判定是证据驱动的,不是直觉驱动的;而且 JSON 结构化输出能被上层流水线当门控用——score < 90 就不让往下走。
收齐三样东西:
reference_images[]:1 张或多张设计稿/目标截图的本地路径。多张时按优先级排(主参考图在前)generated_screenshot:本次编辑后渲染出来的输出图路径category_hint:目标 UI 类别/风格标签,例如 hackernews、sns-feed、dashboard、landing-page。帮判定时对齐「这是该长什么样」的预期用 filesystem-read 把两张图读进来。没有图就别判——vverify 的核心哲学是看截图不看代码,没图等于没证据。
逐项对比参考图 vs 当前截图,五维度:
| 维度 | 看什么 |
|---|---|
| 布局 (layout) | 主区块位置/大小/对齐,flex/grid 结构是否一致 |
| 间距 (spacing) | padding/margin/gap,密集还是松散 |
| 字体 (typography) | 字号/字重/行高/字体族 |
| 颜色 (colors) | 背景/文本/边框/强调色 |
| 层级 (hierarchy) | 视觉权重分布,主次是否突出 |
判定时同时检查 category_match:当前截图整体看起来像不像目标类别该有的样子(例如标签是 sns-feed 但截图长得像表单页,category_match=false)。
只返回 JSON,不返回别的文字。 严格按这个形状:
{
"score": 0,
"verdict": "revise",
"category_match": false,
"differences": ["..."],
"suggestions": ["..."],
"reasoning": "short explanation"
}
字段规则:
score:整数 0-100,对参考图的视觉吻合度verdict:pass(≥90)/ revise(60-89,能改)/ fail(<60,方向就错了)category_match:布尔,截图是否符合 category_hint 描述的 UI 类别/风格(未给 hint 时按参考图整体风格判)differences[]:具体视觉差距,每条绑一个维度(布局/间距/字体/颜色/层级),描述「参考图是 X,当前是 Y」suggestions[]:可执行的下一步编辑动作,与 differences[] 一一对应或明显关联,落到具体改哪个值/哪个组件reasoning:1-2 句总结,说明分数怎么来的score >= 90 且 verdict=pass 才算过score < 90:把 suggestions[] 喂给下一轮编辑,改完重新截图,再跑 /oms:vverifyverdict != pass 就卡住不让往下走当 differences[] 写不出来、差距说不清在哪、或两轮分数卡住不动时,上像素级 diff 定位热点:
terminal-execute 跑像素 diff 工具:
compare -metric AE reference.png current.png diff.pngnpx pixelmatch reference.png current.png diff.pngnpm i -D pixelmatch 或装 ImageMagickdifferences[] + 对应 suggestions[]differences[] 怎么写,不替你打分⚠️ 这不是 vverify 的正常路径。 vverify 的输入契约是严格三输入(参考图 + 当前截图 + 可选 category_hint)。下面这条 fallback 只在 snow-cli 的
filesystem-read暂时不支持读图像二进制时才用,filesystem-read支持读图后必须走标准三输入路径。
触发条件:调用方确实拿不到图(既不能 filesystem-read 读二进制,也不能 terminal-execute 调截图工具现拿一张)。
fallback 行为:
verdict=fail、differences=["缺少参考图/当前截图,无法判定"]、reasoning="vverify 需要截图证据,未拿到图",让调用方补图再来。reasoning 字段里显式标注 "evidence_mode": "description_fallback",提醒调用方判定的证据基础从「截图」退化为「描述」,不等价于标准路径,分数置信度打折。为什么这条单独成章:把 fallback 混进 Phase 1 主流程会让调用方误以为「没图也能跑 vverify」是等价路径,但它不是——看描述判分违背「看截图不看代码」的核心哲学。隔离成独立章节 + 显式标注 + 优先劝退,才能保护输入契约边界。
score 必须有证据:每条 differences[] 都要能对应到截图里具体位置/元素,不能空说「不太对」suggestions[] 必须可执行:落到「改哪个组件/哪个值/加几 px」,不能是「改好点」这种废话score=89 一样不算过verdict=fail,differences=["缺少参考图,无法判定"],让调用方补图verdict 照样 reviseoms-state#oms_frontendseverity、tags、components 等额外字段,或把 verdict 写成 needs_work——调用方按 6 字段解析,多字段就崩differences: [] 但 score=70——分数低就一定有差距,写不出来说明没认真看图evidence_mode,或把它当标准路径推荐给调用方——描述模式是 snow-cli 工具限制的临时 workaround,看描述判分不等价于看截图,必须显式标注 + 优先劝退补图| 工具/agent | 用途 |
|---|---|
filesystem-read | 读参考图和当前截图(若 snow-cli 支持图像读取) |
terminal-execute | 跑像素 diff(ImageMagick compare / pixelmatch CLI);不支持读图时也可拿截图(npx playwright screenshot) |
/oms:vverify | 触发本 skill 的命令入口 |
skill-execute { skill: "oms/vverify" } | 程序化调用入口,上层流水线用这个拿 JSON 当门控 |
#oms_frontend | 代码层面 UI 审查(design token / a11y / 跨浏览器)。仅当 verdict=fail 且差距属代码层问题(token 用错、a11y 缺失、跨浏览器不一致)时介入,截图判定搞不定时补充 |
#oms_designer | 重新设计参考图。仅当 verdict=fail 且差距太大(连参考图都得重画,不是改几个 px 能解决)时介入 |
输入:
reference_images: ["./design/dashboard-v2.png"]generated_screenshot: ./output/current-dashboard.pngcategory_hint: dashboard输出:
{
"score": 87,
"verdict": "revise",
"category_match": true,
"differences": [
"布局:顶部导航条高度比参考图矮 8px,导致主内容区上移",
"间距:侧边栏图标与文字间距比参考图紧 4px",
"字体:主标题字重用了 500,参考图是 600",
"颜色:强调按钮背景色偏亮,参考图更沉"
],
"suggestions": [
"顶部导航条 height 从 56px 改到 64px",
"侧边栏 .nav-item 的 gap 从 8px 改到 12px",
"主标题 font-weight 从 500 改到 600",
"强调按钮 background 从 #3b82f6 改成 #2563eb"
],
"reasoning": "核心布局对得上,但间距/字重/配色四项细节还差一截,改完预计能过 90。"
}