Communitygithub.com

molveau/anti-slop

消除 UI 中由 AI 生成的外观,赋予其独特的设计方向。适用于消除屏幕、落地页或仪表盘中的“AI 感”或通用模板感(如紫色渐变、渐变文字、emoji 标签、发光效果、眉毛药丸、满屏 Inter 字体、噱头文案、间距不均等),在用户要求去 AI 化或让页面摆脱生成痕迹时使用,以及在交付任何 UI 前检查 20 个常见痕迹。包含零依赖的检测脚本和棘轮测试方案。

anti-slop 是什么?

Anti-slop 是一款专为开发者(特别是使用 Claude Code、Cursor、Codex 等 AI 编码代理的用户)设计的技能,旨在系统性地消除 UI 中的“AI 生成感”。它整合了三个核心部分:源自 unslop 的逐项消除方法、源自 taste-skill 的艺术指导机制,以及一个包含 20 个常见痕迹的清单和自动检测脚本。其核心工作流程包括:首先进行“方向门控”,为页面定义独特的性格和视觉焦点;然后,通过九个步骤(间距、色彩、图标、文案、字体、布局、细节、视觉、动效)对页面进行逐项审查和修复;最后使用零依赖的 `detect-tells.mjs` 脚本进行自动检测,并支持通过棘轮测试来防止新的 AI 痕迹进入代码。该技能强调,消除 AI 痕迹只是工作的一半,真正的目标是让 UI 具有独特的产品个性,而非仅仅变得干净。它兼容所有 AI 编码工具,并提供了完整的 Markdown 文档(包括 playbook、tells 列表、tokens 和参考屏幕)。

兼容平台✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/molveau/skills/tree/main/skills/anti-slop

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

anti-slop 是做什么的?

由 AI 生成的 UI 往往以相同的方式失败。本技能将三件事整合为一个工作流: 源自 unslop 的逐项消除方法、源自 taste-skill 的艺术指导机制,以及一个包含 20 个过时痕迹的清单及其检测脚本。

鸣谢与许可证

  • 本方法改编自 unslop(作者:Damir Sokolovsky,https://github.com/heydamir/unslop), 采用 CC BY 4.0 许可(https://creativecommons.org/licenses/by/4.0/)。已适配:精简并与 Leonxlnx 的 taste-skill 以及 Molveau 的 tells(位于 references/playbook.md)合并。在任何副本或改编中均需保留此鸣谢。原始内容未做修改,放在 references/vendor/unslop/ 目录下。
  • 艺术指导流程、内部规则和检查器来自 taste-skill(作者:Leonxlnx,https://github.com/Leonxlnx/taste-skill),采用 MIT 许可,未做修改,放在 references/vendor/taste/ 目录下。
  • 20 个痕迹列表和 scripts/detect-tells.mjs 是 Molveau 的原创作品(MIT 许可)。
  • scripts/story.mjs 改编自 unslop 的渲染器(CC BY 4.0,其头部标明了变更内容);它仍采用 CC BY 4.0 许可,其本地服务器 scripts/story-server.mjs 亦然。scripts/story-contrast.mjs 是 Molveau 的原创作品(MIT 许可)。

从这里开始

首先阅读 references/playbook.md,特别是其“先做这个”部分;仅在需要深入了解或查看工作示例时才打开供应商文件。 该操作手册是合并后的指导原则(方向、步骤、文案、间距、色彩、字体、图标、细节、数据、应用屏幕、图景、动效、检查),包含了来源标签以及在来源相悖时做出的决策。下面的“何时阅读什么”表格是深度索引。

重叠说明:这是针对 AI 外观的消除步骤。ui 技能的点评行是更轻量级的设计审查,而 design-grill 则是深度的多视角审计;当需要超越痕迹检查的设计质量评估时使用它们。

方向门控

在开始新页面或新屏幕的任何代码编写之前,以及在每次重度消除 AI 痕迹操作的第 3 步执行此步骤,即使请求只有一行或只是说“做就是了”。本技能的其余部分旨在消除错误,但不会赋予屏幕个性。如果跳过此步骤,结果将是每个模型都能生成的平庸页面:细节没错,但谁也不拥有它。

  1. 五行定义。 产品:它做什么,为谁而做。性格:两到三个具体的词(例如,“冷静、精确、稍显温暖”),永远不要使用“干净、现代、时尚、极简、高级”。世界:产品所属的地方或材质;它会渗透到中性色中并定义强调色。焦点时刻:一到两处获得丰富色彩和细节的地方。签名元素:仅此产品拥有的一个小细节,需要一致地使用。 焦点时刻是精心绘制的,而不仅仅是清理干净的:一个图表为表达其核心信息而重绘(流畅的线条、镜像对比、真实比例),或者产品本身的对象以重量感和光影呈现。
  2. 清单,然后是创意。 列出 8 到 12 件竞争对手没有的东西(名称、街道、需求中的数字、材料、工具、惯例、行业印刷的文档)。写下:“在这个屏幕上,[一件物品] 变成了 [装置]”。那个装置就是焦点时刻。
  3. 拒绝第二层默认值,除非品牌已经拥有这些元素。这些是模型在明显的痕迹被禁止后通常会选择的东西:
    • 奶油色、石材色或暖白色页面,配以烧橙色、陶土色、鼠尾草绿或森林绿强调色,无论是否带有衬线标题(“纸和墨水”风格是新的默认值,而不是一种方向);
    • 默认使用 Fraunces、Instrument Serif、Playfair 或 Georgia 作为标题字体;仅使用 system-ui 作为字体;
    • Inter 或 Geist 字体搭配白色背景和一个靛蓝或蓝色强调色;
    • 英雄区域、三个特性、客户证言、行动号召,按此顺序排列,且没有论证理由;在应用屏幕中,四个等大的统计卡片放在一个条形图上方;
    • 居中的眉毛标签、标题和两个按钮作为整个第一屏。
  4. 互换测试。 将产品名称和业务替换为竞争对手的。如果屏幕仍然适合,请更改主张、焦点时刻和签名元素,然后再次测试。
  5. 展示并等待。 展示五行定义和创意,并等待项目所有者确认。如果你无法询问(用户只是说“构建它”,或者你没有真人交互),请将这五行作为一个注释写在主文件顶部,并严格按照此定义构建。

深度阅读:anti-slop 操作手册 §2(方向)和 §12(应用屏幕);design-inspiration-index 技能用于获取真实的参考。

核心思想

AI 痕迹将色彩和视觉效果散布在界面的各个部分上:背景、按钮、边框、标签。而精心设计则保持界面安静,将丰富性融入一到两个用户会记住的内容焦点时刻。消除 AI 痕迹只是工作的一半;一个干净但可以属于任何产品的屏幕只是下一个模板。每一次运行都应最终得到一个只属于该产品的屏幕。

工作顺序

  1. 全新页面还是深度重新设计? 遵循 taste-skill 的流程运行(references/vendor/taste/taste-skill.md)并应用操作手册的覆盖规则。应用屏幕:操作手册 §12。
  2. 审视屏幕,尽可能以渲染而非仅代码的形式查看。
  3. 审计:对照标志列表(references/vendor/unslop/unslop/references/signs.md)和 20 个痕迹列表(references/tells.md)进行审计。每个标志一行,并注明其出现位置。
  4. 评估工作量(重度、轻度、无痕迹)并编写方向定义,然后等待项目所有者确认(操作手册 §1 和 §2)。
  5. 通过九个步骤修复,每个步骤覆盖整个屏幕:间距、色彩、图标、文案、字体、布局、细节、视觉、动效(操作手册 §3 至 §14)。
  6. 检查:使用操作手册的检查清单,运行检测脚本,与审计结果进行比较(操作手册 §15)。
  7. 报告:方向定义、每个步骤的简要记录,以及你删除或无法验证的每一处痕迹。

20 个痕迹

包含替换方案的完整表格:references/tells.md。摘要及脚本检测内容如下:

#痕迹脚本检测
1紫色/紫红色/靛蓝色渐变是
2渐变文字是
3文案中的 Emoji是
4通篇使用 Inter 或 Space Grotesk 字体否
5彩色侧边条边框是
6装饰性毛玻璃效果是
7低对比度深色模式否
8三个一排的图标盒子否
9标题上方的眉毛药丸标签否
10默认使用 Lucide 图标是
11未修改的 shadcn/ui否
12滚动进入时的淡入动画是
13跟随鼠标的发光效果否
14按钮悬停时的淡出效果是
15不一致的间距否
16文案中的长破折号 (—)是
17噱头文案是
18衬线字体斜体的强调词否
19Space Grotesk 与其常见显示衬线字体的搭配(组合见 references/tells.md)是
20在渐变上添加噪点纹理否

检测器

node <skill folder>/scripts/detect-tells.mjs [--json] [--include-tests] <paths...>

零依赖,需要 Node 20 或更高版本,无此技能文件夹外的导入,因此即使单独安装此技能也能工作。退出码:0 表示干净,1 表示有发现,2 表示用法错误。它会跳过 node_modules .git .next dist build .open-next coverage 和测试文件。报告格式为 path:line #tell label match。限制值列在 references/tells.md 结尾处;将命中视为“查看此处”的提示。

项目中的棘轮测试

棘轮测试会固定当前的痕迹数量,并在数量增加时使测试失败,从而确保痕迹只会减少。以下是 node:test 的示例代码(适配路径和基线值):

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { readFileSync, globSync } from 'node:fs'; // globSync 需要 Node 22;在 Node 20 上需要自行遍历文件夹
import { detectTells } from './.agents/skills/anti-slop/scripts/detect-tells.mjs';

const BASELINE = { 10: 8, 5: 1 }; // tell number -> allowed findings today
test('no new vibe-coded tells', () => {
  const files = globSync('{app,components}/**/*.{ts,tsx,css}').map((path) => ({ path, text: readFileSync(path, 'utf8') }));
  const now = {};
  for (const f of detectTells(files)) now[f.tell] = (now[f.tell] ?? 0) + 1;
  for (const [tell, n] of Object.entries(now)) assert.ok(n <= (BASELINE[tell] ?? 0), `tell ${tell}: ${n} findings, baseline ${BASELINE[tell] ?? 0}`);
});

每当修复一个痕迹时降低基线值;切勿提高它。

故事视频

一个大约 10 秒的方形剪辑,展示屏幕如何逐步消除 AI 痕迹并带有红线标记。仅在被要求时才制作。完全按照 unslop 的“故事视频”部分所述构建故事文件(references/vendor/unslop/unslop.md:一个 story.html, .s1 到 .s5 的 CSS, data-gap、data-radius、data-slop、data-swap 属性),然后使用本技能适配的渲染器渲染:

node <skill folder>/scripts/story.mjs unslop-story/story.html unslop-story.mp4   # --wide 用于 16:9,--play 用于预览观看

相对于 unslop 渲染器增加的内容:

  • 可访问性步骤。 一个名称中包含 Accessibility 的步骤会显示实时测量结果。在 2 到 4 个对比度会变化的文本元素上放置 data-contrast 属性;每个元素会显示其 WCAG 比率,低于 4.5:1(大文本为 3:1)时显示红色,通过后显示白色并带 AA 标签,当颜色无法读取(如 lab() 或 color(display-p3 ...)) 时显示灰色 ?:请在这些元素上使用 sRGB、十六进制或 oklch() 颜色。在 1 到 2 个控件上放置 data-target 属性;每个控件会显示其尺寸,小于 24x24 像素时显示红色。选择在“之前”状态中不合格的元素;切勿标记在“之后”状态中仍不合格的元素。
  • 字幕,<meta name="story-caption" content="...">,显示在左下角。仅陈述关于本次运行的真实信息,例如使用的模型以及屏幕未经手动编辑。
  • 署名 molveau/skills · unslop method by @heydamir 会绘制在每一帧上,这是 unslop 的 CC BY 4.0 许可的要求。请勿删除。

故事是对真实文件的演示:第 0 步是原始的“之前”状态,最后一步等同于你交付的干净文件。请不要将故事打磨得超出交付的屏幕质量。

何时阅读什么

需求阅读
合并后的规则、值和冲突处理references/playbook.md
20 个痕迹及其替换方案和检测器的限制references/tells.md
unslop 的完整方法、方向、九个步骤、检查清单、故事视频references/vendor/unslop/unslop.md
精确值(间距、字号层级、色阶、动效曲线)references/vendor/unslop/unslop/references/tokens.md(其动效值已被覆盖:ui 操作手册 §10 和 motion §5 优先,操作手册冲突 19 条)
审计用的标志列表references/vendor/unslop/unslop/references/signs.md
英雄视觉、图片提示、哪些风格有效references/vendor/unslop/unslop/references/visuals.md
字形、半色调、抖动和双色调代码references/vendor/unslop/unslop/references/effects.md
完成的参考屏幕(图片)references/vendor/unslop/unslop/references/refs.md
为处理副本而截取一个实时 URLreferences/vendor/unslop/unslop/scripts/snapshot.mjs
从零开始的页面或深度重新设计:清单、处理后的方向定义、创意、内部规则、门控references/vendor/taste/taste-skill.md
仪表盘、管理和设置屏幕深度指南references/vendor/taste/taste-skill/references/app-screens.md
文案甲板、两行算账、无需编造的验证references/vendor/taste/taste-skill/references/copy.md
字号层级、展示设置、字体加载references/vendor/taste/taste-skill/references/type.md
调色板角色、字段、深色页面、对比度references/vendor/taste/taste-skill/references/colour.md
外边距、空白空间、框线、分区、移动端references/vendor/taste/taste-skill/references/layout.md
查找、署名、放置和处理图片及视频references/vendor/taste/taste-skill/references/imagery.md
动效配方(可选:motion 操作手册 §9)和滚动场景references/vendor/taste/taste-skill/references/motion.md、references/vendor/taste/taste-skill/references/scenes.md
用量表评判结果references/vendor/taste/taste-skill/references/critique.md
按时期划分的过时痕迹注册表references/vendor/taste/taste-skill/references/tells.md
taste 数据背后的研究references/vendor/taste/taste-skill/references/research.md

供应商文件保留了其上游布局,因此其中的一些相对链接可能在此处无法解析。taste-skill 的脚本读取其 library/ 文件夹(不要整体读取;运行 draw.mjs);某些脚本需要 Node 22、浏览器、Playwright、ffmpeg 或网络访问。运行哪些视觉检查由 ui 操作手册中的冲突 14(本操作手册的冲突 14 指向此处)决定。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

molveau/design-inspiration-index

Routing index for design inspiration. Use when you need visual references or ideas for a UI (a hero, landing page, SaaS page, navbar, CTA, motion or micro-interaction, brand or rebrand, component, icon) and want to know which curated gallery to pull from. Maps a need to the best source among galleries, component registries and optional MCP servers. Use it before hunting blindly for inspiration.

molveau/ui

Builds, restyles, polishes and reviews user interfaces with taste. Use when building, restyling or improving a UI, page, screen or component, including a hero, navbar, header, cards, a form or a section ("make it better", "make it pop", "add polish"); working on layout, spacing, typography, color, dark mode or design tokens; polishing hover and focus states or details when something "feels off"; responsive or mobile layout; critiquing, auditing or redesigning an interface; doing a design review or UI roast; simplifying or making a design bolder; or writing prompts that get production-grade UI out of an AI tool.

molveau/vitrine

Playbook for a vitrine, a business showcase / brochure site for a local business. Use at the start of a small business website, brochure site, landing page for a local business, service-business site, or when adding pricing, booking, city pages, local SEO, bilingual FR/EN or a Québec privacy setup to one. Says what such a site needs, in which order to apply the ui, ux, anti-slop, motion, french-typography and loi-25-website skills, and gives a done checklist.

相关技能