关于 impeccable
impeccable 是用于设计和迭代前端界面的技能,覆盖从方案规划、实现到评审与发布前修整的多种命令。它要求先读取产品和设计上下文,并按品牌或产品界面选择设计规范。
主要功能
- 01构建功能并规划界面
- 02评审可用性与技术质量
- 03提取设计令牌和组件
- 04调整布局、颜色、动效与文案
- 05处理无障碍、性能和国际化细节
适用场景
- 01为新功能规划并实现界面
- 02检查现有界面的响应式与性能
- 03将既有样式整理为设计系统
- 04为发布前的界面进行质量修整
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ boraoztunc/ skills --skill impeccable安装后在 Claude Code 中输入/impeccable确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSENOTICE.mdagents/impeccable-asset-producer.mdreference/adapt.mdanimate.mdaudit.mdbolder.mdbrand.mdclarify.mdcodex.mdcognitive-load.mdcolor-and-contrast.mdcolorize.mdcraft.mdcritique.mddelight.mddistill.mddocument.mdextract.mdharden.mdheuristics-scoring.mdinteraction-design.mdlayout.mdlive.mdmotion-design.mdonboard.mdoptimize.mdoverdrive.mdpersonas.mdpolish.md详细介绍
设计并持续迭代可用于生产环境的前端界面。提供真正可用的代码、明确的设计选择和卓越的工艺。
设置
在进行任何设计工作或编辑文件之前:
- 使用加载脚本加载上下文(PRODUCT.md / DESIGN.md)。
- 确定设计类型,并加载匹配的类型参考(brand.md 或 product.md)。
- 如果用户调用了子命令(例如
craft、shape、audit),也要加载该命令的参考文件。 这点不可妥协:如果没有加载craft.md就执行craft,你会跳过用户期待的塑形与确认步骤。
跳过这些步骤会导致输出泛泛而谈,忽略项目本身。
1. 收集上下文
文件共两个,文件名不区分大小写。默认情况下,加载器会查找项目根目录;如果根目录中没有文件,则会回退到 .agents/context/ 和 docs/。使用 IMPECCABLE_CONTEXT_DIR=path/to/dir 覆盖路径(绝对路径或相对于 cwd 的路径)。
- PRODUCT.md:必需。包含用户、品牌、语气、反面参考和战略原则。
- DESIGN.md:可选,强烈建议提供。包含颜色、字体、层级、组件。
通过一次调用同时加载两者:
node {{scripts_path}}/load-context.mjs
完整读取 JSON 输出。切勿通过 head、tail、grep 或 jq 管道处理。输出中的 contextDir 字段会告知文件的解析位置。
如果本次会话的对话历史中已有输出,则无需重新运行。但以下情况必须重新加载:刚刚运行了 {{command_prefix}}impeccable teach 或 {{command_prefix}}impeccable document(它们会重写文件),或用户手动编辑了文件。
{{command_prefix}}impeccable live 会通过 live.mjs 预加载上下文。如果本次会话已运行 live.mjs,则不要再运行 load-context.mjs。
如果 PRODUCT.md 缺失、为空或是占位内容(包含 [TODO] 标记,或少于 200 个字符):运行 {{command_prefix}}impeccable teach,然后使用新加载的上下文继续用户最初的任务。如果最初的任务是 {{command_prefix}}impeccable craft,则应先继续执行 {{command_prefix}}impeccable shape,再进行任何实现工作。
如果 DESIGN.md 缺失:每个会话提醒一次(“运行 {{command_prefix}}impeccable document,获取更符合品牌风格的输出”),然后继续。
2. 设计类型
每项设计任务都属于 brand(营销、落地页、营销活动、长篇内容、作品集:设计本身就是产品)或 product(应用 UI、管理后台、仪表板、工具:设计服务于产品)。
设计前先确定类型。优先级:(1)任务本身的线索(“落地页”还是“仪表板”);(2)关注的界面(正在处理的页面、文件或路由);(3)PRODUCT.md 中的 register 字段。按优先级匹配,采用第一个匹配项。
如果 PRODUCT.md 中没有 register 字段(旧版文件),则根据其中的“Users”和“Product Purpose”部分推断一次,并在本次会话中缓存推断结果。建议用户运行 {{command_prefix}}impeccable teach,以显式添加该字段。
加载匹配的参考:reference/brand.md 或 reference/product.md。以下共享设计准则适用于两者。
共享设计准则
适用于两种类型的每项设计。让实现复杂度与美学愿景相匹配:极繁主义需要精心繁复的代码,极简主义则需要精准克制。发挥创造力。不同项目采用不同方案;切勿趋同于相同的选择。{{model}} 能创造非凡作品,不要有所保留。
颜色
- 使用 OKLCH。随着明度接近 0 或 100,降低色度;极端明度下的高色度会显得刺眼。
- 切勿使用
#000或#fff。让每种中性色都带有品牌色调(色度 0.005–0.01 即可)。 - 先确定配色策略,再挑选颜色。承诺程度分为四个层级:
- 克制:带色调的中性色 + 一种占比 ≤10% 的强调色。产品默认方案;品牌极简风格。
- 鲜明:一种饱和色占据 30–60% 的表面。以品牌识别为核心的页面默认方案。
- 完整调色板:设定 3–4 种明确的角色色,并有意使用。品牌宣传活动;产品数据可视化。
- 浸染:表面本身就是颜色。品牌主视觉、宣传活动页面。
- “一种强调色占比 ≤10%”这条规则只适用于克制方案。鲜明、完整调色板和浸染方案会有意超出这一比例。不要不加思考地把每种设计都简化成克制方案。
主题
深色还是浅色,绝不能默认决定。不要因为“工具用深色看起来很酷”就选深色,也不要为了“稳妥”就选浅色。
选择前,先用一句话描述具体场景:谁在什么地方、什么环境光线下、以什么心情使用。如果这句话无法决定答案,说明场景还不够具体。继续补充细节,直到答案明确。
“可观测性仪表盘”无法决定答案。“凌晨 2 点,SRE 在昏暗的房间里瞥一眼 27 英寸显示器上的事件严重程度”则可以。依据场景描述判断,而不是依据类别。
排版
- 正文行长控制在 65–75ch 以内。
- 通过字号和字重的对比构建层级(相邻层级的比例 ≥1.25)。避免平淡的字号层级。
布局
- 通过变化间距营造节奏。处处使用相同内边距会显得单调。
- 卡片是偷懒的做法。只有在确实最适合表达时才使用。嵌套卡片永远不合适。
- 不要把所有内容都包在容器里。大多数内容不需要容器。
动效
- 不要为 CSS 布局属性添加动画。
- 使用指数曲线缓出(ease-out-quart / quint / expo)。不要使用弹跳或橡皮筋效果。
绝对禁用
识别并拒绝。如果你准备使用以下任何一种做法,请改用不同结构重写该元素。
- 侧边条纹边框。 在卡片、列表项、提示框或警报中,将
border-left或border-right设置为大于 1px 的彩色强调边框。绝不使用。改用完整边框、背景色调、前置编号或图标,或者什么都不加。 - 渐变文字。 将
background-clip: text与渐变背景结合使用。它只是装饰,毫无实际意义。使用单一纯色,通过字重或字号来强调。 - 默认使用玻璃拟态。 纯装饰性地使用模糊效果和玻璃卡片。只在少见且有明确目的时使用,否则就不用。
- 主视觉指标模板。 大数字、小标签、辅助统计数据、渐变强调色。这是 SaaS 老套设计。
- 完全相同的卡片网格。 相同尺寸的卡片反复排列,每张都包含图标、标题和文字。
- 第一反应就是用模态框。 模态框通常是偷懒的做法。先尝试行内方案或渐进式替代方案。
文案
- 每个词都必须有存在的理由。不要重复标题,也不要用重复标题的开场白。
- 不要使用破折号。 使用逗号、冒号、分号、句号或括号。也不要使用
--。
AI 味测试
如果有人看一眼这个界面就能毫不怀疑地说“这是 AI 做的”,那它就没通过测试。跨风格的失败情形是上述绝对禁区。各风格专属的失败情形见对应参考。
类别反射检查。 分两个层次进行;第二层能发现第一层遗漏的问题。
- 第一层: 如果有人仅凭类别就能猜出主题和配色(“可观测性 → 深蓝色”“医疗保健 → 白色 + 青绿色”“金融 → 藏青色 + 金色”“加密货币 → 黑底霓虹色”),那就是第一种训练数据反射。重新设计场景描述和色彩策略,直到答案不再能从领域中一眼看出。
- 第二层: 如果有人能根据类别和反面参考猜出美学风格(“不是 SaaS 米白风格的 AI 工作流工具 → 编辑式排版风格”“不是藏青配金色的金融科技 → 原生终端深色模式”),那就是更深一层的陷阱。避开了第一种反射,却没避开第二种。重新设计,直到两种答案都不再显而易见。品牌风格的反射式审美禁区列出了目前已经泛滥的风格。
命令
| 命令 | 类别 | 描述 | 参考 |
|---|---|---|---|
craft [feature] | 构建 | 先规划,再端到端构建功能 | reference/craft.md |
shape [feature] | 构建 | 编写代码前规划 UX/UI | reference/shape.md |
teach | 构建 | 设置 PRODUCT.md 和 DESIGN.md 上下文 | reference/teach.md |
document | 构建 | 根据现有项目代码生成 DESIGN.md | reference/document.md |
extract [target] | 构建 | 将可复用的令牌和组件提取到设计系统中 | reference/extract.md |
critique [target] | 评估 | 通过启发式评分进行 UX 设计评审 | reference/critique.md |
audit [target] | 评估 | 技术质量检查(a11y、性能、响应式) | reference/audit.md |
polish [target] | 优化 | 发布前进行最后一轮质量检查 | reference/polish.md |
bolder [target] | 优化 | 强化保守或平淡的设计 | reference/bolder.md |
quieter [target] | 优化 | 弱化激进或过度刺激的设计 | reference/quieter.md |
distill [target] | 优化 | 提炼本质,去除复杂性 | reference/distill.md |
harden [target] | 优化 | 为生产环境做好准备:错误、i18n、边界情况 | reference/harden.md |
onboard [target] | 优化 | 设计首次使用流程、空状态和激活体验 | reference/onboard.md |
animate [target] | 增强 | 添加有目的的动画和动效 | reference/animate.md |
colorize [target] | 增强 | 为单色 UI 添加经过策略考量的色彩 | reference/colorize.md |
typeset [target] | 增强 | 改进排版层级和字体 | reference/typeset.md |
layout [target] | 增强 | 修复间距、节奏和视觉层级 | reference/layout.md |
delight [target] | 增强 | 增添个性和令人难忘的细节 | reference/delight.md |
overdrive [target] | 增强 | 突破常规限制 | reference/overdrive.md |
clarify [target] | 修复 | 改进 UX 文案、标签和错误消息 | reference/clarify.md |
adapt [target] | 修复 | 适配不同设备和屏幕尺寸 | reference/adapt.md |
optimize [target] | 修复 | 诊断并修复 UI 性能问题 | reference/optimize.md |
live | 迭代 | 视觉变体模式:在浏览器中选择元素并生成替代方案 | reference/live.md |
另有两个管理命令:pin <command> 和 unpin <command>,详见下文。
路由规则
- 无参数:将上表作为面向用户的命令菜单,按类别分组显示。询问用户想做什么。
- 首个单词与某个命令匹配:加载该命令的参考文件并遵循其说明。命令名之后的所有内容都是目标。
- 首个单词不匹配:作为常规设计调用处理。应用设置步骤、共享设计原则和已加载的寄存器参考,并将完整参数作为上下文。
此时,设置(上下文收集、寄存器)已加载;子命令不会再次调用 {{command_prefix}}impeccable。
如果首个单词是 craft,仍先运行设置步骤,但后续流程由 reference/craft.md 负责。如果设置过程将 teach 作为阻塞步骤调用,请先完成 teach,刷新上下文,然后继续执行原始命令和目标。
固定 / 取消固定
固定会创建独立快捷方式,使 {{command_prefix}}<command> 直接调用 {{command_prefix}}impeccable <command>。取消固定会移除该快捷方式。脚本会写入项目中存在的所有 harness 目录。
node {{scripts_path}}/pin.mjs <pin|unpin> <command>
有效的 <command> 是上表中的任意命令。简洁地报告脚本结果。成功时确认新快捷方式;出错时逐字转述 stderr。