关于 impeccable
impeccable 是面向编码 Agent 的设计技能,通过项目上下文检查、经用户确认的设计方案,以及构建、评审和优化命令来指导前端工作。
主要功能
- 01项目上下文预检
- 02经用户确认的设计方案
- 03用户体验评审与技术审计
- 04针对性界面优化命令
适用场景
- 01构建前端功能
- 02检查无障碍与性能
- 03优化排版、颜色或布局
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tyfarrago-hub/ taste --skill impeccable安装后在 Claude Code 中输入/impeccable确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference/adapt.mdanimate.mdaudit.mdbolder.mdbrand.mdclarify.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.mdproduct.mdquieter.mdresponsive-design.mdshape.md详细介绍
设计并迭代可用于生产环境的前端界面。提供真正可用的代码、明确的设计决策和出色的工艺水准。
设置(必选)
在进行任何设计工作或编辑文件之前,必须通过以下关卡。跳过这些关卡会导致输出流于泛泛,无法体现项目特色。
| 关卡 | 必要检查 | 未通过时 |
|---|---|---|
| 上下文 | 已知通过 node {{scripts_path}}/load-context.mjs 获取的 PRODUCT.md / DESIGN.md 加载结果。 | 继续之前先运行加载器。 |
| 产品 | PRODUCT.md 存在且内容不为空或占位文本(含 [TODO] 标记或少于 200 个字符)。 | 运行 {{command_prefix}}impeccable teach,刷新上下文,然后继续。切勿仅凭用户的原始提示自行编写 PRODUCT.md。 |
| 命令 | 使用子命令时,已加载相应的命令参考。 | 继续之前先加载参考。 |
| 工艺 | {{command_prefix}}impeccable craft 已为此任务取得用户确认的形态设计简报。teach / PRODUCT.md 均不能替代形态设计。 | 运行 {{command_prefix}}impeccable shape,并等待用户明确确认简报。 |
| 图像 | 已生成所需的视觉探查结果 / 模拟图,或说明跳过的原因。 | 编写代码前,先按照 shape.md 或 craft.md 中的说明完成图像生成关卡。 |
| 修改 | 以上所有适用的关卡均已通过。 | 暂勿编辑项目文件。 |
Codex 风格的 Agent 必须在编辑文件前声明以下内容:
IMPECCABLE_PREFLIGHT: context=pass product=pass command_reference=pass shape=pass|not_required image_gate=pass|skipped:<reason> mutation=open
对于 {{command_prefix}}impeccable craft,只有在用户另行回复并批准形态设计简报,或用户在请求中提供了已确认的简报后,shape=pass 才有效。切勿在编写 PRODUCT.md、总结假设或自行起草未经确认的简报后,将其标记为 shape=pass。
其他执行环境在能够显示此状态时,也应遵循同一清单。
1. 收集上下文
有两个文件,文件名不区分大小写。加载器默认在项目根目录中查找;若根目录中没有文件,则会回退到 .agents/context/ 和 docs/。使用 IMPECCABLE_CONTEXT_DIR=path/to/dir 覆盖此设置(路径可为绝对路径,也可相对于当前工作目录)。
- 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. 确定设计类型
每项设计任务都属于 品牌(营销、落地页、营销活动、长篇内容、作品集:设计本身就是产品)或 产品(应用界面、管理后台、仪表板、工具:设计服务于产品)。
设计前先确定类型。优先级依次为:(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)。不要使用弹跳或弹性效果。
绝对禁忌
发现苗头就拒绝。如果正准备编写以下任何内容,请改用不同的结构来重做该元素。
- 侧边条纹边框。 在卡片、列表项、提示框或警报上使用宽度大于 1px 的
border-left或border-right作为彩色强调。绝不可有意使用。改用完整边框、背景色调、前置数字/图标,或完全不加。 - 渐变文字。 将
background-clip: text与渐变背景结合使用。纯装饰,毫无意义。使用单一纯色,并通过字重或字号来强调。 - 默认使用玻璃拟态。 为装饰目的使用模糊效果和玻璃卡片。只有在少见且确有必要时才使用,否则就不要用。
- 主视觉指标模板。 大数字、小标签、辅助统计数据、渐变强调。典型 SaaS 陈词滥调。
- 完全相同的卡片网格。 一再重复相同尺寸、包含图标 + 标题 + 文本的卡片。
- 第一反应就是弹窗。 弹窗通常是偷懒的做法。先穷尽内嵌式和渐进式方案。
文案
- 每个词都应物尽其用。不要重述标题,也不要用重复标题内容的引言开篇。
- 不要使用 em dash。 请使用逗号、冒号、分号、句号或括号。也不要使用
--。
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。