一、导读
让大模型生成一个「能跑」的落地页早已不难,难的是让生成的页面不一眼假:紫色渐变、卡里套卡、每段标题上蹲一个 eyebrow 小字、虚构的「10,000+ 团队信赖」。GitHub 本周趋势榜第三名 Hallmark(2026-10-25 当日涨星 567)把这个问题当成工程问题来解:Together AI 把一整套「反 AI 味」设计规范写成 16 条不可豁免的硬底线、71 组分级 Gate,再用一个 4400 行的零依赖 linter 把其中大半变成机器可判定的检查,让 Claude Code、Codex、Cursor、OpenCode 四家编码智能体在生成前端时被同一套审美纪律约束。本文拆解它的分层架构、Gate 分级与豁免台账机制、防重复发牌算法与评测矩阵,并给出四类可直接落地的使用场景。
二、项目速览
| 项目 | 信息 |
|---|---|
| 仓库 | Nutlope/hallmark(MIT,v2.0.0) |
| 作者 | Hassan El Mghari(@Nutlope)与 Youssef E. Mghari,Together AI 团队出品 |
| 数据 | 31,708 星 / 1,633 fork,创建于 2026-04-27(截至 2026-10-25,GitHub API) |
| 当日表现 | GitHub Trending Daily 第 3,单日 +567 星(2026-10-25) |
| 形态 | npm 包 hallmark,随包分发 SKILL.md + 参考文档 + Node 脚本,支持 Claude Code / Codex / Cursor / OpenCode |
| 组成 | 1 份 SKILL.md(约 1.8 万字符)、71 组设计 Gate、48 套主题、4,422 行 linter、一套评测矩阵 |
它不是一个模型,也不是一个框架,而是一个「技能包」:一层架在任意编码智能体之上的设计纪律,全部用 Markdown 指令加零依赖 JavaScript 脚本实现。
三、为什么是它:一条陡峭的涨星曲线
Hallmark 的走红路径值得细看。仓库 2026 年 4 月底创建,7 月 26 日登上 Hacker News 时只有 7 分 9 条评论,是一个不温不火的社区工具;10 月 22 日,作者合入 v2.0.0(PR #79),这是一次从零重写——48 套主题体系、按「页面使命」组织信息的构建流程、redesign 与 audit 两个动词,都是 v2 才有的能力。作者同时在社交平台宣布「We rebuilt Hallmark from scratch」。三天内,仓库从约 1.1 万星量级冲到 3.17 万星(2026 年中约 11.1 千星,检索口径;10 月 25 日 GitHub API 实测 31,708 星),并挤进 Trending Daily 前三。
涨星动因可以归到三条:
- 痛点足够普遍。各家前端能力强的模型都在同质化的 SaaS 模板语料上训练,跳过设计约束就会收敛到同一批机器味套路——任何用编码智能体搭过落地页的人都被刺过。
- v2 把「品味」做成了工程。不是泛泛的提示词,而是可执行、可机检、可豁免留痕的规则体系,「软规范硬化」本身就值得借鉴到其他领域。
- 踩中品类风口。Anthropic 的 frontend-design skill 验证了需求,impeccable 等同类项目接连爆火,Hallmark v2 赶上了「设计技能」的流量高点。
四、架构原理
Hallmark 的架构价值在于回答了一个问题:如何把「审美」这种主观判断,翻译成大模型既能理解、又无法偷懒绕过的执行体系。它给出的是一条四层流水线:指令层定义纪律,参考层按需供给知识,工具层提供机械判定,验证层回测整条链路。

flowchart TD
A["用户一句需求"] --> B["Pre-flight 预检:读 design.md、package.json 与真实产品"]
B --> C["Ask once:一次性收齐素材、受众、页面使命、语气"]
C --> D["theme.mjs deal:按 genre 发 3 套主题,读日志防重复"]
D --> E["Picks block:一次性列出全部设计决策"]
E --> F["scaffold:生成 tokens.css 与 base.css"]
F --> G["先建 Hero 首屏,冷启动复审"]
G --> H["铺开 6 至 9 个 section"]
H --> I{"sloplint --render"}
I -- "FAIL 或 REFLEX" --> H
I -- "0 FAIL" --> J["走查 J 类 Gate 与 Finish 复审"]
J --> K["盖章交付,写回 .hallmark 日志"]
分层拆解:从 SKILL.md 到 4,400 行 linter
指令层是 skills/hallmark/SKILL.md,约 1.8 万字符,只有两块内容:一条 Floor 和一段 Flow。Floor 是 16 条任何情况下不可豁免的硬规则——不许紫蓝渐变、不许卡里套卡、不许裸黑裸白(颜色必须过 token 且带一点点色度)、每个交互元素必须有 :focus-visible、每个动画必须有 prefers-reduced-motion 降级、不许虚构任何数字与客户证言、首屏 80 词以内、1280×800 下标题一句话主按钮必须完整可见。Flow 则是 0 到 7 共八步流程:预检(读项目里已有的 design.md、字体、框架,能用真实产品就直接截图)、只问一次素材问题、按页面使命定骨架、发牌选主题、一次性列决策清单、建页、清扫。英文提示词常把流程写成散文,Hallmark 的指令是带分支和退出条件的伪代码,这是它与普通 prompt 包的本质差别。
参考层是 references/ 下 49 份非主题文档:4 个 genre(editorial、modern-minimal、atmospheric、playful)各一份、21 种页面骨架(macrostructures,从 Bento Grid 到 Type Specimen)、版式、图像、交互、暗色模式、动效等专项文档。加载纪律写在明面上:「loading more is the largest avoidable cost」——构建时只读选中的那一份骨架、一个 genre、一个主题文件。这套渐进披露是 token 成本控制的关键:48 套主题若全量注入上下文将极其昂贵,而实际每次只读一个 ≤8KB 的主题文件加一张示例图。
工具层是 scripts/ 下的 Node 脚本,全部零依赖:theme.mjs 负责发牌(deal)、画骨架(draw)、生成脚手架(scaffold,直接产出 tokens.css 与 base.css)、从 755 张 Wikimedia Commons 开放授权照片库挑图(photos.json 只存清单不存图,页面上逐张署名;刻意不用 Unsplash/Pexels,因为其条款禁止 AI 工具选图);capture.mjs 对用户的真实产品截图;sloplint.mjs 是整个仓库真正的重器——4,422 行、约 305 个函数的静态加渲染检查器,读 HTML、CSS、Vue、TSX 与 Tailwind 类名;install-hook.mjs 可以给 Claude Code 挂编辑时钩子,对已有页面的小改动也强制过 Floor。
验证层是 eval/:Tier A 用真实的 claude -p 驱动 Claude Code 二进制并解析 stream-json 转录,断言技能加载、文件产出、参考文档加载顺序与花费;Tier B 把技能编译成纯系统提示词打裸 API,测「有多少成分纯靠提示词就能存活」。8 条测试简报里 b4 是个陷阱——客户明确说早期没有客户与营收数据,看模型会不会依然编一个数字看板;b6 测试模型拿不到截图时是否老实承认看不见。
核心机制:把品味翻译成可判定的条款
Hallmark 最有意思的设计是 Gate 的三维正交。第一维是 tier(严厉程度):Floor 不可豁免;Reflex 是「模型容易滑进去的默认值」,可以有理由地记账豁免;Finish 是不影响交付的工艺细节,只报告必须回应;Ledger 是纯记录。第二维是 class(谁来查):M 静态可测(linter 直接查 CSS 与标记)、M/R 静态加渲染、R 只能渲染测(起真实浏览器,在 8 个宽度下量折叠线、用逐像素对比度算文字可读性、用 tab 遍历找焦点环)、R/J 渲染或模型判、J 只能由模型判定(比如「这个 hero 有没有记住点」)。第三维是 grade(裁决结果):FAIL、REFLEX、WAIVED、WARN、ANSWERED、NOTE 六种,「0 FAIL」始终是一条关于 Floor 的真话。
截至 v2.0.0,gates.md 的表里共有 71 组编号、88 条条款(含 a/b 子句),另有 14 个退役编号永不复用,保证老页面上的印章记录永远可读。摘录三条有代表性的:
| Gate | 层级 | 判什么 | 怎么修 |
|---|---|---|---|
| 2a | Floor | 任何位置的紫蓝、紫粉渐变(含 background-clip: text) |
换单一锚点色的实色 |
| 54 | Floor | eyebrow:标题上方那行宣告式小字(任何几何形态) | 直接删掉,是典型机器味 |
| 85 | Reflex | 页尾邮箱订阅兜底:与页面使命无关的「订阅我们」 | 换成该品类自然的收尾 |
第二核心机制是豁免台账。Reflex 豁免不是悄悄改掉完事,而要在 CSS 印章块里写一行结构化注释:
/* Hallmark · waive 47b · one frame, a real terminal capture inside · the terminal is the product being sold */
三个字段缺一不可:条款号、守护证据(说明为什么这条 Reflex 在此不成立)、具体理由(不少于 24 字符、不得与其他豁免逐字重复)。linter 会重新推导守护条件——写不出守护证据的豁免通常会发现条件其实不成立。同一条款连续三次被豁免,系统就提示这已经是「房子风格」,该写进项目级 design.md 固化,而不是继续逐次豁免。这套设计把「规则与例外」的张力变成了可审计的账本,是整篇指令里工程含金量最高的部分。
第三核心机制是反重复发牌。theme.mjs deal 按提示词与 genre 从 48 套主题里发 3 张牌并展示成品样图,构建者选一张;发牌前读 .hallmark/log.json,与近期构建指纹(shape、hero、nav、imagery 等字段)比对,命中即换牌。SKILL.md 还要求自查一个「镜像测试」:同品类隔壁那条提示词会不会得到一模一样的组合?会的话就换一个决策并说明。同页面构建前还有一次六轴自评——Philosophy(有一个读者可以反驳的立场)、Hierarchy(眯眼测试)、Execution、Specificity(只属于这个产品的细节)、Restraint、Variety(与最近三次构建在至少三个结构轴上不同)——任何一轴低于 3 分先改设计再动手。
性能与成本的取舍
验证被明码标价:「一批检查、一批修复、至多一轮确认」。hero 先建先审(冷启动子代理在其余页面不存在时只看首屏),因为首屏错误向下游传播的修复成本最高;渲染检查一次跑 8 个宽度,把手机端破版从人眼验收变成机器断言;静态 M 类条款全部不依赖浏览器,没装 Chrome 时 Floor 仍然可用。--fast 模式再砍部分环节换速度。同类路线分工也清晰:impeccable 把确定性检测写成 Rust 二进制、强调浏览器内实时迭代(工具重),Hallmark 把重心放在指令工程与主题库(品味库重),linter 只承担可以机检的部分;两者共同的祖先是 Anthropic 的 frontend-design skill。这条光谱说明:让大模型守规范,纯提示词不够,纯工具也接不住审美判断——混合分级是当前的主流答案。
五、应用场景

场景一:从零生成产品落地页,拒绝「一眼假」
痛点:直接对编码智能体说「帮我做一个 XX 的官网」,得到的多半是紫色渐变 hero、三张等宽功能卡、计数动画和虚构的「深受 10,000+ 团队信赖」,改起来比从头写还累。如何解决:安装 Hallmark 后正常描述需求即可,技能会自动接管;它先向你要素材(截图、真实数字、照片),然后发牌选一套主题,按品类把「转化动作」放在该在的位置,逐条过 Floor 与 Gate。最小示例:
use hallmark to build a landing page for a webhook API called Relay,
audience is backend engineers, tone is technical and austere
收益:Floor 条款(对比度、焦点环、首屏信息密度、禁虚构数据)由 linter 机械断言,无需人眼逐项验收;主题发牌让两次构建不撞脸。边界:素材决定上限——不提供截图与真实数字时,页面会留出明确的占位槽而不是编内容;如果你要的恰恰是「先看个大概」的草稿,这套纪律会显得偏慢,用 --fast 或直接不用它。
场景二:老站重设计,内容与功能零丢失
痛点:让智能体重做现有页面,最常见的翻车是改完之后某个表单字段、事件处理器或路由悄悄消失。如何解决:/hallmark redesign <路径>,先以 polish(只去机器味)、restyle(保留布局换皮)、full(换系统换布局)三档之一重做;重做前 sloplint --before 记录页面上全部链接、表单字段、处理器与标题,重做后 --kept 逐一核对,缺一个即 FAIL。最小示例:
/hallmark redesign ./src/app
收益:功能保全是机器断言而非口头承诺,交付时附带前后并排对比。边界:它是按页面为单位工作的,大型多页应用要逐页推进;对复杂状态管理的前端(重交互的 dashboard 类),redesign 只保证「接线上不丢」,视觉改动的幅度建议先从 restyle 档试起。
场景三:独立 linter 审计任意页面
痛点:人写的页面同样有机器味,设计评审全靠资深设计师肉眼。如何解决:sloplint 可脱离技能单独运行,对任意 HTML/CSS/Tailwind/Vue/TSX 项目出报告——静态检查不需要浏览器,--render 追加渲染层断言。最小示例:
node skills/hallmark/scripts/sloplint.mjs ./index.html --render
收益:输出按 grade 分级,「0 FAIL」语义明确,可作 CI 门禁的机器可读依据。边界:J 类审美条款仍需模型或人评,把 linter 结果当全部设计质量是误用。
场景四:CI 与编辑时钩子,防止规范回退
痛点:今天合格的页面,明天一句「把这里改改」又把机器味加回去了。如何解决:install-hook.mjs 给 Claude Code 挂编辑时钩子,改动 Hallmark 页面的小编辑强制过 Floor;CI 里直接跑 sloplint。最小示例:
node skills/hallmark/scripts/install-hook.mjs
收益:规范从一次性生成约束变成常驻代码规约。边界:钩子目前是可选项,只覆盖已接入的 harness;非 Claude Code 用户需在 CI 层自行包装。
场景五:多页面站点的一致性治理
痛点:逐页生成后风格漂移,站点像素材拼接板。如何解决:单页完成后说「lock the system」,把品牌轴(色板、字体、声音)锁进项目级 design.md,后续页面共享同一系统;.hallmark/log.json 的指纹同时在站点层面防止页面结构重复。收益:站点级一致性由文件保证,不靠记忆。边界:跨页自动协调还在路线图(「Multi-page coherence」),现阶段靠 design.md 加人工确认。
六、快速上手
前提:Node 18 及以上;渲染层检查需另装 Chrome 与 puppeteer-core(不装则静态检查照常可用)。
npx skills add nutlope/hallmark -g
-g 全局安装(Claude Code 落在 ~/.claude/skills/hallmark,Codex CLI 落在 ~/.agents/skills/hallmark,Cursor 与 OpenCode 会自动发现上面的副本);去掉 -g 只装当前项目。也可以只装单个 harness(--agent claude-code),或作为 Claude Code 插件安装(/plugin marketplace add nutlope/hallmark 后 /plugin install hallmark@hallmark)。使用时两种触发方式都行:显式调用 /hallmark <需求>,或直接描述新页面构建任务让技能自动触发(不放心就在提示词里点名 hallmark)。首次构建它只会问一轮素材问题,答完或说「go ahead」即可;结束时页面 CSS 头部会有一段印章注释,记录主题、豁免与清扫结果,可供复查。
七、横向对比
| 方案 | 形态与规模 | 设计知识载体 | 约束执行 | 适合谁 |
|---|---|---|---|---|
| Hallmark v2(31.7k 星) | 技能包:SKILL.md + 71 组 Gate + 48 主题 + 4,422 行 JS linter | 主题库与参考文档(Markdown) | 静态 + 渲染 + 模型判定三级,豁免记账 | 要开箱即用、在意页面不重样的人 |
| impeccable(86k 星) | Rust 二进制 + 技能:1 技能、24 条命令、62 条确定性检测 | PRODUCT.md 产品事实 + 命令词汇表 | Rust 静态检测 + 浏览器实时迭代 | 想要重型工具链与细粒度命令的人 |
| Anthropic frontend-design | 官方基础技能(两者共同的先祖) | 一份通用设计指南 | 全靠模型自觉 | 轻量起步,自己长规则 |
三者的差异本质是路线选择:Anthropic 给方向,impeccable 把检查做成编译型工具,Hallmark 把规则做成带账本的法规体系。前者赢在工程深度(Rust 检测器跑得快、规则精确),后者赢在「审美供给侧」——48 套成品的主题材料与发牌机制是独一份的。截至 2026-10-25,两者当日涨星(567 对 541)几乎并驾齐驱,说明这个品类还处在共同做大阶段的早期。
八、局限与风险
- 覆盖面偏前端落地页。当前纪律围绕网页与落地页设计(app 屏幕有专门分支但检查项还在建设中),对管理后台、数据密集界面的约束力弱于营销页;移动端原生 UI 不在范围内。
- 渲染检查有环境依赖。
--render需要 Chrome,CI 里要装无头浏览器;纯静态模式下 R 类条款(折叠线、逐像素对比度、tab 焦点)缺位,防线退化为静态那部分。 - J 类判断仍不客观。「hero 有没有记住点」由模型判定,换模型结论可能不同;官方 eval 只对 Claude Code 做了一致性验证,Codex 与 OpenCode 的全量跑通还在路线图上。
- 规则会被时代追上。ROADMAP 已承认米白纸底、胶囊按钮、「近黑配一点酸性色」这些新默认值正在变成新的机器味,主题目录需要持续淘汰重做——反 AI 味是一场移动靶追逐。
- 成本不低。一次完整构建要经历发牌、hero 复审、渲染清扫、 Finish 复审多个环节,token 消耗与等待时间显著高于裸生成;「验证预算」只是收敛,不是消除。
- 社区集中度风险。仓库实质贡献者仅 5 人(Luffixos 提交 282 次居首,作者 Nutlope 12 次),迭代节奏高度依赖小团队(截至 2026-10-25,GitHub API)。
九、小结与行动建议
Hallmark 的示范意义大于工具意义:它证明了「设计品味」可以被拆成 16 条硬底线、88 条分级条款和一个带豁免台账的执行闭环,让大模型第一次在大规模生成里为审美纪律负责。给不同读者的行动建议:
- 经常让智能体搭页面的开发者:今天就可以
npx skills add nutlope/hallmark -g,在下一个落地页任务上对比裸生成的差距,重点看首屏信息密度与虚构数据两点。 - 团队负责人:把 sloplint 接进 CI,把「0 FAIL」作为生成类页面的合并门禁;
design.md机制值得用来固化自家品牌系统。 - 提示工程实践者:精读 gates.md 的 tier/class/grade 三维设计与豁免台账——这是把软规范硬化的一套完整范式,可迁移到写作规范、代码风格、安全基线等任何「模型容易滑向默认值」的领域。
- 关注 AI 前端赛道的人:品味库与检测器两条路线大概率会汇合——Hallmark 路线图里的 MCP 实时预览、impeccable 的技能化,都在向对方走。
参考资料
- Nutlope/hallmark 仓库与 README——版本、安装、主题总览与构成说明(获取日期 2026-10-25)
- SKILL.md(v2.0.0)——Floor 16 条与 Flow 八步全文(获取日期 2026-10-25)
- gates.md(v2.0.0)——71 组 Gate 的层级、类别与豁免规则(获取日期 2026-10-25)
- eval/README.md——Tier A/B 评测矩阵与 8 条测试简报设计(获取日期 2026-10-25)
- ROADMAP.md——v2 现状与多页一致性、全 harness 一致性计划(获取日期 2026-10-25)
- pbakaus/impeccable README——对比数据:24 条命令、62 条确定性检测规则、Rust 路线(获取日期 2026-10-25)
- Hacker News:Hallmark 提交页(2026-07-26)——早期社区反响(7 分 9 评,Algolia API 检索,获取日期 2026-10-25)
读者留言
COMMENTS 暂无还没有留言,来说第一句?