dsh-taste-skill:给 DSH 装一个前端设计技能,用真浏览器量规范

前言

用 DSH 做前端页面时,模型默认产出的是「见过的页面的平均值」:居中标语、三行副标题、上方一个小标签、一排图标卡片、柔和渐变、几根细分割线、等宽字体注释。单看每条都没错,合起来没有一个决定是为客户做的。

stevenwang15/dsh-taste-skill 是一个 DSH 原生 bundle 插件,把 tasteskill v2(技能名 design-taste-frontend)封装成 DSH 技能。装进 profile 后,DSH 的技能目录里多出一项 design-taste-frontend:模型按描述自动加载,也可以输入 /design-taste-frontend 强制调用。它的思路是:方向由脚本发牌、规范由真浏览器逐条量、返工依据是自己看的截图,而不是把规则写进提示词求模型自觉遵守。

这是什么

插件名 dsh-taste-skill
维护者 stevenwang15
分类 工作流
许可 封装层 MIT;技能本体来自 Leonxlnx/taste-skill,MIT
当前版本 插件 2.1.6 / 上游技能 2.1.5
形态 只注册 1 个原生技能 design-taste-frontend
运行时 Node 22+;Chrome / Edge / Chromium 仅视觉检查需要
依赖 不装任何依赖、不需要 API key

用于落地页、营销站、作品集、产品页、活动页,也覆盖仪表盘、后台、设置、收件箱这类应用界面。它只做三件事:从零设计、重设计、评审(只给意见、不动代码)。明确不做的是:不提供模板、不改 DSH 自己的界面、不自动下载浏览器。

它解决什么问题

模型自己挑方向时,倾向于选最眼熟的那个。这个插件用四件事替代那套平均值:

  1. 方向由脚本发牌。20 个从真实获奖站点研究出来的方向,每次随机发 3 个,模型只能从中挑一个能承载客户自身材料的。
  2. 想法必须来自主体。页面的概念句从客户的盘点清单里长出来(名字的意思、所在的街道、那个限制条件、它产出的东西),再用「最近的竞争者」测试:如果这句话换成隔壁那家也成立,它就属于品类,不属于这个客户。
  3. 规范靠测量,而不是靠自觉。标题两行以内、不要 eyebrow 小标签、不要等宽字体、不要 01/02/03 编号、不要发丝线、不要渐变、静止元素不要阴影、图标卡片和玻璃拟态一律不要——这些由真浏览器逐条量。
  4. 看自己的截图返工。1440 / 768 / 390 三档量测加截图,按评委式评分表挑出最差的三个问题,改完再看,最多三轮。

核心能力

1. 发研究过的方向,不是模型的品味

scripts/draw.mjs 先发 3 个方向让你选,选定后把该方向配套的 Hero 构图(58)、版面蓝图(185)、字体系统(44)、配色(56)、摄影参考(19 组)、动效配方(18)、同类研究站点(202)一次性发下来。抽取会记住最近用过的,连续几个项目不会长得一样。

2. 版面蓝图按「这一节要证明什么」分发

不是模板套到底:先写论证(每节一条主张加证据,没有主张的节直接删掉),再按 section 角色(intro / about / features / list / stats / faq / cta / footer 等)分发布局,相邻两节的构图不会重复。

3. 真实照片,带授权与署名

scripts/assets.mjs 去 Openverse、Wikimedia Commons、芝加哥艺术博物馆、大都会博物馆搜主体世界的真实照片(老照片、地图、材质特写、版画、同类馆藏),默认只返回可商用许可(CC0 / 公有领域 / CC BY / CC BY-SA)。--get 下载并把标题、作者、许可、来源记进 assets/credits.json,--credits 打印页脚要用的署名行。视频同理(--video,取 720p 以内、附 poster 帧)。找不到诚实照片的东西用代码画:主体的物件、它的界面、它的瓷砖。页面至少 4 张真照片,这是硬性下限。

4. 反套路清单:既是规范,也是可测量的闸门

scripts/lint.mjs 静态扫描源码里的禁用模式和套话;scripts/inspect.mjs 在真浏览器里量标题行数、字号、实际加载的字体、颜色、分割线、阴影、渐变、对比度、溢出,以及「框」:左右外边距是否相等、有没有整节挤在一边、有没有超过半屏的空白、首屏有没有标题、每节有没有小标题。有 FAIL 就必须改;WARN 除非能一句话向设计师解释清楚,否则当错处理。

5. 滚动场景与「可以上手的一件事」

有滚动叙事的页面,scripts/scenes.mjs 把每个场景在 0 / 10 … 100% 进度上逐帧拍下来(桌面、手机、减弱动效三套),确认它真的跑起来了,而不是停在第一帧。每个页面还要求有访客能上手的东西(不是装饰性动效):选一种木料看椅子、输入名字看字体、调贷款参数看真实月供。用主体的真实内容做,手机拇指可用,没有脚本时有普通降级。

6. 应用界面也管

仪表盘、后台、设置、收件箱这类「人在里面干活」的界面走 references/app-screens.md 的独立流程:自己的抽卡(draw.mjs --app)、自己的规则(安静的边框、对齐的数字、颜色只花在数据上、手机上导航折叠)、自己的检查(inspect.mjs --app)。共 7 类风格 / 5 个壳 / 25 个屏式。

安装与启用

安装命令来自 README 原文:

dsh plugin --profile desktop add https://github.com/stevenwang15/dsh-taste-skill.git

桌面端也可以在 设置 → 插件 里粘贴同一个仓库地址。装完重启 DSH(开了 HMR 的 profile 会热加载),新会话的技能目录里会出现 design-taste-frontend。

也可以装 Release 里的 tarball,或从本地目录装:

dsh plugin --profile desktop add https://github.com/stevenwang15/dsh-taste-skill/releases/download/v2.1.6/dsh-taste-skill-2.1.6.tgz
dsh plugin --profile desktop add ./dsh-taste-skill      # 本地目录

装好后不用记命令,模型会按描述自己加载,例如:

  • 「做一个精品咖啡烘焙的工作室官网,单页,要有真实照片」
  • 「这个落地页太像 AI 做的了,看看问题在哪,然后重做视觉」
  • 「给我一个 SaaS 后台的仪表盘界面,顺便评审现在这版」

想强制加载就输入 /design-taste-frontend。

构建产物落在工作区的 .taste-skill/:direction.json(方向表)、history.json(抽取历史,跨会话避免重复)、inspect/(截图与 report.json)。

环境要求

  • Node 22+。DSH 内置的 runtime 是 24.x;插件加载时会把可用的 Node 绝对路径写进技能正文,所以宿主 PATH 上是 Node 20 也不影响。
  • Chrome / Edge / Chromium 可选。缺失时 scripts/browser-check.mjs 会明确报出来,inspect.mjs / scenes.mjs 以退出码 2 干净退出,技能走降级路径:只跑 lint.mjs 静态检查,并在报告里说明「没有跑视觉检查」。插件不会自动下载浏览器。
  • 网络只在找图时需要(assets.mjs)。其余全部离线可用。

一次构建怎么走

README 给的完整流程:

步 做什么
1 盘点:8–12 个只属于这个客户的东西
2 写论证:每节一条主张加证据
3 抽方向:draw.mjs 发 3 个方向,选一个能承载盘点项的
4 找想法:写下「〈客户的某样东西〉变成〈方向要求的装置〉」,并用竞争者测试
5 写文案:先文案后版式,标题两行以内,每节内容写满
6 建站:tokens → 首屏 → 各节蓝图 → 图片 → 上手的东西 → 滚动场景 → 满度 → 框 → 状态与语义
7 过闸:lint.mjs + inspect.mjs,有场景再加 scenes.mjs,改到 0 FAIL
8 看图:打开每张截图,按评分表逐条打分,改最差的三个问题,最多三轮
9 动效:签名动作 + 每节入场 + 控件反馈 + 一张会动的照片,只动 transform / opacity,并带 prefers-reduced-motion 降级
10 汇报:方向与种子、概念句、最终评分、每张图的出处、哪些是占位素材

一次完整构建大约 30–45 分钟、几十万 token,大头是找图 / 画图和返工。

内容清单

README 里列的库规模:设计方向 20、Hero 构图 58、版面蓝图 185、字体系统 44、配色 56、研究站点 202(从 247 个精选站点蒸馏)、动效配方 18、应用界面 7 类风格 / 5 个壳 / 25 个屏式、摄影集 19 组、参考文档 11 篇、脚本 6 个(draw、assets、lint、inspect、scenes、browser-check,另有零依赖 lib/)、评估集 evals/evals.json。

与上游的关系

技能内容与上游同构:SKILL.md、references/、library/、scripts/、assets/ 原样收录(上游 2.1.5,commit 12af471),只做三处 DSH 侧适配:

上游 本插件
靠拷贝到 ~/.claude/skills/ 被发现 bundle 注册:ctx.skills.register(),resourceBase 指向包内技能目录
抽取历史写 ~/.taste-skill/history.json 写到工作区 .taste-skill/history.json,按项目隔离
假定 PATH 上有 Node 22 和 Chrome 加载时探测 Node 与浏览器,把绝对路径和探测结果写进技能正文;没浏览器时干净退出并降级

因此上游更新时替换 skills/design-taste-frontend/ 即可,不需要改规则、库和流程。

适用场景与注意

适合在 DSH 里批量生产或重做前端页面、又希望规范不是靠提示词自觉遵守的人。插件以当前 dsh 进程权限运行,安装前应先读源码与许可证(封装层 MIT,技能本体为上游 MIT 原文),确认 cordis.patch.yml 与 index.js 的注册行为符合预期。

两个工程细节值得留意:一是 ctx.skills.register() 必须显式带 source 字段,少了它技能仍会出现在会话目录里,但真正 skill(name) 加载时会抛 loaded skill "…" source must be a string;二是没有浏览器时视觉闸门会降级,报告里必须如实说明「没有跑视觉检查」。

验证命令:

npm test              # 24 项断言:导出、注册契约、描述长度、载荷完整性、加载期校验
npm run doctor        # 打印 Node / 浏览器探测结果
npm pack --dry-run    # 检查发布内容

卸载:

./scripts/uninstall-local.sh desktop

结尾

这个插件的价值不在给模型更多 prompt,而在把「方向、规范、返工」三件事做成可执行的脚本闸门:方向从研究库里发牌,规范由真浏览器逐条量,返工依据是自己看的截图。目录页在 https://www.skillhub.cn/plugins/stevenwang15/dsh-taste-skill,源码在 https://github.com/stevenwang15/dsh-taste-skill,技能本体来自 https://github.com/Leonxlnx/taste-skill 。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜