[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XDXF60ZP1RATSWZ39SG1KE":3,"skill-same:01M6XDXF60ZP1RATSWZ39SG1KE":53},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":14,"repositoryHtmlUrl":36,"repositoryHomepageUrl":6,"ownerHtmlUrl":37,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":38,"install":39,"resources":52},"01M6XDXF60ZP1RATSWZ39SG1KE","visual-verdict",null,"Structured visual QA verdict for screenshot-to-reference comparisons","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcodex\u002Fvisual-verdict\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27],"visual","verdict","visual verdict","qa","screenshot","reference","structured","visual qa","for","2026-11-10 10:12:30",false,"---\nname: visual-verdict\ndescription: Structured visual QA verdict for screenshot-to-reference comparisons\n---\n\n\u003CPurpose>\nUse this skill to compare generated UI screenshots against one or more reference images and return a strict JSON verdict that can drive the next edit iteration.\n\u003C\u002FPurpose>\n\n\u003CUse_When>\n- The task includes visual fidelity requirements (layout, spacing, typography, component styling)\n- You have a generated screenshot and at least one reference image\n- You need deterministic pass\u002Ffail guidance before continuing edits\n\u003C\u002FUse_When>\n\n\u003CInputs>\n- `reference_images[]` (one or more image paths)\n- `generated_screenshot` (current output image)\n- Optional: `category_hint` (e.g., `hackernews`, `sns-feed`, `dashboard`)\n\u003C\u002FInputs>\n\n\u003COutput_Contract>\nReturn **JSON only** with this exact shape:\n\n```json\n{\n  \"score\": 0,\n  \"verdict\": \"revise\",\n  \"category_match\": false,\n  \"differences\": [\"...\"],\n  \"suggestions\": [\"...\"],\n  \"reasoning\": \"short explanation\"\n}\n```\n\nRules:\n- `score`: integer 0-100\n- `verdict`: short status (`pass`, `revise`, or `fail`)\n- `category_match`: `true` when the generated screenshot matches the intended UI category\u002Fstyle\n- `differences[]`: concrete visual mismatches (layout, spacing, typography, colors, hierarchy)\n- `suggestions[]`: actionable next edits tied to the differences\n- `reasoning`: 1-2 sentence summary\n\n\u003CThreshold_And_Loop>\n- Target pass threshold is **90+**.\n- If `score \u003C 90`, continue editing and rerun `$visual-verdict` before any further code edits in the next iteration.\n- Persist the verdict in `.omx\u002Fstate\u002F{scope}\u002Fralph-progress.json` with both:\n  - numeric signal (`score`, threshold pass\u002Ffail)\n  - qualitative signal (`reasoning`, `suggestions`, `next_actions`)\n\u003C\u002FThreshold_And_Loop>\n\n\u003CDebug_Visualization>\nWhen mismatch diagnosis is hard:\n1. Keep `$visual-verdict` as the authoritative decision.\n2. Use pixel-level diff tooling (pixel diff \u002F pixelmatch overlay) as a **secondary debug aid** to localize hotspots.\n3. Convert pixel diff hotspots into concrete `differences[]` and `suggestions[]` updates.\n\u003C\u002FDebug_Visualization>\n\n\u003CExample>\n```json\n{\n  \"score\": 87,\n  \"verdict\": \"revise\",\n  \"category_match\": true,\n  \"differences\": [\n    \"Top nav spacing is tighter than reference\",\n    \"Primary button uses smaller font weight\"\n  ],\n  \"suggestions\": [\n    \"Increase nav item horizontal padding by 4px\",\n    \"Set primary button font-weight to 600\"\n  ],\n  \"reasoning\": \"Core layout matches, but style details still diverge.\"\n}\n```\n\u003C\u002FExample>\n","\u003CPurpose>\nUse this skill to compare generated UI screenshots against one or more reference images and return a strict JSON verdict that can drive the next edit iteration.\n\u003C\u002FPurpose>\n\n\u003CUse_When>\n- The task includes visual fidelity requirements (layout, spacing, typography, component styling)\n- You have a generated screenshot and at least one reference image\n- You need deterministic pass\u002Ffail guidance before continuing edits\n\u003C\u002FUse_When>\n\n\u003CInputs>\n- `reference_images[]` (one or more image paths)\n- `generated_screenshot` (current output image)\n- Optional: `category_hint` (e.g., `hackernews`, `sns-feed`, `dashboard`)\n\u003C\u002FInputs>\n\n\u003COutput_Contract>\nReturn **JSON only** with this exact shape:\n\n```json\n{\n  \"score\": 0,\n  \"verdict\": \"revise\",\n  \"category_match\": false,\n  \"differences\": [\"...\"],\n  \"suggestions\": [\"...\"],\n  \"reasoning\": \"short explanation\"\n}\n```\n\nRules:\n- `score`: integer 0-100\n- `verdict`: short status (`pass`, `revise`, or `fail`)\n- `category_match`: `true` when the generated screenshot matches the intended UI category\u002Fstyle\n- `differences[]`: concrete visual mismatches (layout, spacing, typography, colors, hierarchy)\n- `suggestions[]`: actionable next edits tied to the differences\n- `reasoning`: 1-2 sentence summary\n\n\u003CThreshold_And_Loop>\n- Target pass threshold is **90+**.\n- If `score \u003C 90`, continue editing and rerun `$visual-verdict` before any further code edits in the next iteration.\n- Persist the verdict in `.omx\u002Fstate\u002F{scope}\u002Fralph-progress.json` with both:\n  - numeric signal (`score`, threshold pass\u002Ffail)\n  - qualitative signal (`reasoning`, `suggestions`, `next_actions`)\n\u003C\u002FThreshold_And_Loop>\n\n\u003CDebug_Visualization>\nWhen mismatch diagnosis is hard:\n1. Keep `$visual-verdict` as the authoritative decision.\n2. Use pixel-level diff tooling (pixel diff \u002F pixelmatch overlay) as a **secondary debug aid** to localize hotspots.\n3. Convert pixel diff hotspots into concrete `differences[]` and `suggestions[]` updates.\n\u003C\u002FDebug_Visualization>\n\n\u003CExample>\n```json\n{\n  \"score\": 87,\n  \"verdict\": \"revise\",\n  \"category_match\": true,\n  \"differences\": [\n    \"Top nav spacing is tighter than reference\",\n    \"Primary button uses smaller font weight\"\n  ],\n  \"suggestions\": [\n    \"Increase nav item horizontal padding by 4px\",\n    \"Set primary button font-weight to 600\"\n  ],\n  \"reasoning\": \"Core layout matches, but style details still diverge.\"\n}\n```\n\u003C\u002FExample>\n",{"name":5,"description":7},"main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcodex\u002Fvisual-verdict","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill visual-verdict",{"tool":45,"command":46},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill visual-verdict",{"tool":48,"command":49},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill visual-verdict","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcodex\u002Fvisual-verdict\u002FSKILL.md",true,[],[54,78,104,114,127,146],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":65,"publishedAt":28},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[60],{"categoryNo":61,"categoryName":62,"taxonomyType":63,"taxonomyTypeDesc":64},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[66,67,68,69,70,71,72,73,74,75,76,77],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":28},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[85,86,87,88,89,90,68,91,92,93,94,95,96,97,98,99,100,101,102,103],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"publishedAt":28},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[111,112,85,96,97,98,99,89,68,101,113,102,103,95,93,92,91,100,90,88],"trend radar","radar","pulse",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":28},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[121,122,123,124,125,126],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":138,"publishedAt":28},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[133],{"categoryNo":134,"categoryName":135,"taxonomyType":136,"taxonomyTypeDesc":137},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[129,74,139,140,141,77,96,142,143,144,87,145,100],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":28},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[148,153,154,155,100,156,143,157,158,159,160,161],"status","play","go","latest","github","discover","control","cmd","volume"]