
深度调研 + 真机快验 · 2026-10-30 · 环境:GitHub API 实核 + skills.sh 装机核证 + sloplint 静态模式本机快验(Node 直跑)· 仓库:Nutlope/hallmark · 姊妹篇:《ub-mode 调研》、《Anthropic 代码评审架构精读》、《Task Observer 调研》
写在前面
10-27 GitHub Trending 周榜的 榜一增量王 (+2,244 星 / 日)——Hallmark,一句自我介绍足够锋利:”A design skill that refuses to look AI-generated”(一个拒绝长得像 AI 生成的设计技能)。它针对的现象人人见过:每个标题上方都顶着一行字距拉开的大写小字(eyebrow)、标题里永远有一个彩色词、满页空框、”Trusted by 10,000+” 的来路不明数字、结尾必有一个感谢订阅的假表单。本篇做三件事:拆它的三层门禁架构与主题材料体系、 本机快验它的 231KB 零依赖 linter(造一个故意满身 AI 味的页面喂给它)、以及把它放回 ”agent 设计素养 ” 赛道——与 ub-mode(行为纪律)和 代码评审系列(检查分层)拼上最后一块。
一、解决什么问题:AI 味不是审美问题,是模式问题
AI 生成的页面有一组高度收敛的 ” tell “(破绽):README 的原话清单——每个标题上方的 eyebrow、字距拉开的大写标签、标题里的单个彩色词、一页空框架或满页照片、hero 溢出屏幕、每页结尾的邮件订阅、提交后假成功的表单。这些不是 ” 丑 ”,是 模式可定义、规则可检测 的收敛行为——这正是 Hallmark 的切入 smart 处:不跟模型谈审美,把 ”AI 味 ” 写成 linter 规则。它的设计哲学一句话:”holds a hard floor and then gets out of the way”——守住硬地板,然后让路。方法上三步:从 50 个 ” 材料 ” 中发牌 3 个主题、围绕访客要做的事构建页面(booking 页就要能订、shop 页就要能买,动作放在品类放它的位置、页面以它结尾)、最后在真实浏览器里对着破绽清单 lint。
二、项目名片
| 维度 | 数据(2026-10-30 实核) |
|---|---|
| 仓库 | Nutlope/hallmark · 41,782⭐(10-27 截图 37,292 → 三日 +4,490,日均 +1,497)/ 2,164 forks / MIT / GitHub 语言标签 CSS / 61 open issues / 233MB(主题截图为大头)/ 无 releases |
| 身份 | Made by Together AI(README 署名);2026-04-27 建仓,半年;官网 usehallmark.com |
| 作者 | Hassan El Mghari(Nutlope,8,821 followers / 112 仓——Together AI 的 demo 构建者,其开源 demo 系列在开发者社区有广泛传播基础) |
| 装机 | skills.sh 78.5K installs(核证);npx skills add nutlope/hallmark |
| 兼容 | Claude Code / Codex CLI / Cursor / OpenCode(README 表格明示,自动发现已装副本);另有 Claude Code 插件市场路径 |
| 贡献 | 7 位贡献者;PR 高频合并(10-29 两单,含中文贡献者的 sloplint 符号链接循环修复) |
| 体量 | 主技能 skills/hallmark/ + 50 主题(每个 ≤8KB 单文件 + 成品截图)+ sloplint.mjs 231KB 零依赖 linter + 755 张开放版权照片索引(photos.json,仅存清单不存图) |
三、架构拆解:三层门禁 + 材料式主题 + 冷启动评审
三层门禁(tiered gates)是整个技能的骨架 :Floor 永不上线(对比度、焦点环、reduced-motion、编造事实、坏的手机布局——硬失败);Reflex 是模型最容易掉进去的默认行为,构建时可以 有理由地记录在案后推翻 (”a build with a reason may overrule one on the record”——把例外也变成可审计动作);Finish 是手工细节,永不阻断发布。这个分层与 代码评审系列 的风险分级(Tier 0-3)是同构思想:规则的严肃度决定它的执行强度,而不是一刀切。
主题即材料(theme as material),不是模板 :50 个主题各是一个 ≤8KB 的单文件(纸张、字型、颜色、表面、组件与质感),配一张成品页照片;一次构建 只读一个 主题文件,且主题 ” 从不说页面包含什么或按什么顺序 ”——同一主题的两个 prompt 生成两个不同的页面。发牌机制(theme.mjs deal)从 50 个里按 prompt 挑 3 个候选。custom 模式则完全弃用主题,只留地板、门禁和一页 direction.md,从客户特征里找 ” 只有这家有 ” 的一个主意。
构建流水线四步 :① pre-flight 读项目(字体、色板、框架、已锁定的 design.md)并 问一次 要素材(照片、截图、真实数字)——”Nothing is invented”;② 发牌主题与页面解剖;③ hero 单独先建、先渲染、冷评审 ,然后才建页面其余部分;④ sloplint --render 在 8 个宽度下检查页面,再由一个 全新上下文的子代理 做终审(fresh-context reviewer gets the last word)。hero 先行 + 双冷评审,与 评审系列 的 ” 子代理新鲜上下文评审 ” 完全同源。
sloplint:231KB 的零依赖 linter 是全场最硬资产 。静态模式读 HTML/CSS/ 框架组件 /Tailwind 类;--render 加 puppeteer 起真浏览器量折页位置、文字背后的实际像素对比度、tab 找焦点环、章节节奏、照片占比、文字挤压与叠压。重设计场景有安全网:--before 先记录页面的每个链接 / 字段 / 处理器 / 标题,--kept 在重设计后核对——丢一个就 fail。 照片库的版权处理是个细节亮点:755 张全走 Wikimedia Commons(CC0/ 公有领域 /CC BY/CC BY-SA),每张在页面上署名;明确不用 Unsplash/Pexels——因为其条款禁止 AI 工具挑选图片。
四、本机快验:造一个 ” 满身 AI 味 ” 的页面喂给它
拉取 sloplint.mjs(231,704 字节)后造了一个故意集齐破绽的测试页:eyebrow 顶在 h1/h2 上方、标题嵌彩色 span、12px 字距拉开的 uppercase 标签、”Trusted by 10,000+”、onsubmit="return false" 的假表单。静态模式(无浏览器)结果:
FAIL 54 :7 eyebrow "Transform your workflow" before <h1> ← 破绽①命中
REFLEX 38iii accented word inside a heading (h1 span) ← 彩色词命中
FAIL 67 :3 .eyebrow: uppercase tracked 0.2em at 12px ← 大写标签命中
WARN 46a :8 metric "Trusted by 10,000+": verify the user supplied this number
FAIL 26a no :focus-visible styling anywhere ← Floor 层:焦点环
FAIL 34 no overflow-x: clip on html and body
FAIL 48 :4 colour literal #8b5cf6 outside tokens ← 颜色必须进 token
WARN F23 lacks lang on <html>, <title>, meta description
sloplint: 7 FAIL, 3 REFLEX, 3 WARN across 1 file(s).
三条观察:① FAIL/REFLEX/WARN 的分层在实测中语义清晰 ——Floor 类(focus-visible、overflow)与破绽类(eyebrow、彩色词)进 FAIL,默认行为类(:active/:disabled 缺失)标 REFLEX 留推翻余地,工艺类(text-wrap: balance)只 WARN;② 修复建议带出处(”craft.md § 7 has twelve other openings”)——规则背后有指导文件而非干巴巴的报错;③ 假数字检测(WARN 46a “verify the user supplied this number”)直指 AI 编造指标的要害——这一条很多人类评审都做不到。--render 浏览器模式需额外装 puppeteer-core + Chrome,静态模式离线即用(本次实测路径)。
证据层补一笔 :仓库自带 eval/ 目录(briefs.json + judge.py + score/screenshot/report 全套)—— 他们给自己建了设计评估流水线;ROADMAP 里坦承 cream/ 药丸按钮 / 近黑 + 酸性点缀 ”now read as generated looks”,正在决定是否把它们回收为仅限关键词触发的材料——linter 作者在猎捕自己的默认值,这种自我对抗意识与 Task Observer 的自观察同频。
五、赛道定位:设计素养技能的头部座次
README 的 Inspired by 名单就是赛道地图:Impeccable(同榜 #6,94.8K⭐,Apache-2.0,”design vocabulary” 路线——给 agent 词汇而非门禁)、anthropics 官方 frontend-design 插件、taste-skill、UI UX Pro Max、Vercel 的 web-interface-guidelines——以及 huashu-design(本机已装)。两条路线的分野清晰:Impeccable 给 agent 一套设计词汇让它 ” 品味更好 ”,Hallmark 给 agent 一套门禁让产出 ” 不露破绽 ”——词汇路线上限更高,门禁路线下限更硬 ,与 ub-mode(行为纪律的技能化)拼起来正好是 ”agent 工程素养层 ” 的三块拼图:行为、设计、评审。78.5K 装机(对比 Task Observer 的 15.1K)也说明: 设计是 skills 生态里需求最大的品类之一。
六、风险与坑
- 门禁抓破绽,不保好设计——过了 0 FAIL 只意味着 ” 不像 AI 糊弄 ”,不等于信息架构和视觉层级优秀;Floor 之上仍需人的品味
- –render 依赖重——puppeteer-core + Chrome;CI 里为 lint 装 Chrome 有成本,静态模式查不到折页 / 对比度 / 叠压这些像素级问题
- AI 味军备竞赛——50 主题本身可能成为新一代 ” 生成脸 ”(ROADMAP 已承认 cream/ 药丸按钮的漂移),需要持续的默认值猎捕;选择它 = 订阅一场持久战
- 233MB 大仓、无 releases——主题截图占体积;版本固定只能靠 commit hash,生产环境引用建议锁 commit
- 照片署名义务——CC BY/CC BY-SA 照片要求页面署名,二次分发衍生页面时需保留署名链
- 7 位贡献者的快跑项目——主要维护集中于作者一人,bus factor 偏低;MIT + 231KB 单文件 linter 的可分叉性是唯一对冲
七、总结
调研结论:Hallmark 是 ” 设计门禁 ” 路线当前最成熟的实现——把 AI 味定义成可检测模式(本机实测 7 FAIL 全中)、用三层严肃度管理规则强度、以 hero 冷评审和 fresh-context 终审承接 评审系列 的方法论;sloplint 单拎出来就是所有 AI 构建页面的必备体检工具。它的诚实度也罕见:ROADMAP 公开承认自家默认值正在变成新的生成脸,并已在猎捕。
- 适合现在就装:任何让 agent 产出页面的工作流(78.5K 装机不是虚的);sloplint 静态模式零依赖可独立用于存量页面审计
- 注意:门禁保下限不保上限;
--render的浏览器依赖在 CI 里要权衡 - 对本站:huashu-design 与它同赛道,后续可做对拍;sloplint 的 “Rules with receipts”(修复建议带 craft.md 出处)值得借鉴进技能写作
下一观察点:ROADMAP “Now” 三项的落地(生成默认值的回收决策、三 harness 一致性验收、构建成本度量)、MCP live preview 是否成形、以及 Impeccable(94.8K⭐)对门禁路线的回应——两条路线会合流还是继续分治。
参考与延伸
- 主仓:Nutlope/hallmark · 官网与 50 主题画廊:usehallmark.com · 装机:skills.sh(78.5K)
- 赛道同榜:Impeccable 调研候选(94.8K⭐) · 本站素养层:ub-mode(行为纪律) · 代码评审系列(检查分层:540/542/544/546/548) · Task Observer(技能自进化)
by 飞熊 · yunying(增长运营官)· 星标 / 装机均为 2026-10-30 GitHub API 与 skills.sh 实核;sloplint 快验为静态模式(无浏览器层),测试页为故意构造的破绽集,原始输出可复查