실제 제품을 적절한 조작 환경에서 실행해 변경 사항을 검증하고, 사용자가 확인할 수 있는 증거를 모아 인수 보고서로 게시합니다. 기존 검증 계획을 확인하거나 점검 항목을 만들고, `lh` CLI로 결과를 게시할 수 있습니다.
- 변경된 제품 동작을 실제로 확인하기
- 스크린샷 등 검증 증거 수집하기
- 검증 계획과 보고서 작성하기
웹·데스크톱·모바일 제품 UI를 업무 이해부터 화면 구조와 흐름, 시각 요소, 문구, 출시 전 검토까지 단계적으로 설계하고 개선합니다. 요청 범위에 따라 필요한 작업 단계를 선택합니다.
Single entry for LobeHub UI design work. Routes any instruction — macro ("重做这个后台", "整体打磨一下"), medium ("把列表页的交互和空态补齐") or fine ("这个按钮颜色不对", "修 K-07") — into a business-first, layered pipeline of focused stages: 00 brief → 05 init → 10 decode → 20 direction → 30 structure → 40 flow → 50 visual → 60 system → 70 detail → 75 copy → 80 review. Covers seven scenarios: 0→1 visual pages (landing / portfolio / campaign), polishing existing product UI, admin consoles / dashboards / forms / workflows, design-system unification, screenshot restoration, pre-launch audit, and project bootstrap (AGENTS.md). Grounded in classic analysis models (double diamond, Gestalt, Nielsen heuristics, Kano, peak-end, Fogg, journey map, cognitive load) and in a layered component boundary: take atoms from the host's component library and build business composites yourself. Platform-aware (web / desktop / mobile, read from the project layer): web takes atoms from @lobehub/ui (/form, /pro-table) with cssVar tokens; React Native takes them from the project's own library (e.g. @lobehub/ui-rn) with useTheme() tokens. Web ecosystem: @lobehub/charts / icons / fluent-emoji / streamdown. Runnable lint (platform-gated), route, refs and bootstrap checks; in-product UI copy by product profile (consumer / SaaS / admin / developer), with zh-CN typography. Trigger on lobe-design, lobe-ui, lobehub, LobeChat UI, 控制台, 后台, 看板, 落地页, 官网, 截图还原, 设计稿, 设计系统统一, 打磨, polish, refine, 审查, 上线前检查, 组件选择, 设计准则, AI 味, 文案, 措辞, 中英文空格, 初始化, AGENTS.md.
실행 점수 미검증
설치 방법 보기이 스킬은 UI 설계 요청의 범위에 맞춰 업무 이해부터 출시 전 검토까지 작업을 단계별로 구성합니다. 새 랜딩 페이지나 관리자 화면 설계, 기존 UI 개선, 스크린샷을 바탕으로 한 화면 재현, 디자인 시스템 통일, 프로젝트 초기 설정을 다룹니다. 화면 구조와 조작 흐름, 시각적 위계, 세부 상태와 접근성, 제품에 맞는 UI 문구를 차례로 검토합니다. Web과 React Native는 사용하는 컴포넌트와 테마 값이 다르므로 프로젝트 플랫폼과 설정을 고려해 진행합니다.
“전체적으로 다시 살펴보고 싶다”와 같은 넓은 요청부터 버튼이나 문구 하나를 고치는 구체적인 요청까지 작업 범위에 맞춰 진행할 수 있습니다. 관리자 화면이나 폼을 새로 만들거나, 기존 제품을 다듬거나, 여러 화면의 일관성을 확인하거나, 출시 전에 UI를 점검할 때도 활용할 수 있습니다. 호스트 프로젝트에 도입할 때는 제품 정보와 컴포넌트 안내를 확인한 뒤 설계를 시작합니다.
로컬 검증 스크립트 실행에는 Node.js 18 이상이 필요합니다. 스킬 자료에는 별도 의존 패키지 없이 실행할 수 있다고 설명되어 있습니다. Web과 React Native에는 서로 다른 컴포넌트 규칙이 적용됩니다.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.
점수에는 넣지 않았습니다. 2026년 10월 26일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
一个入口,按需展开。本文件只负责四件事:先理解业务、识别场景、决定跑哪些 stage、规定每一步的输出。具体规则在 stages/ 和 references/ 里,进入某个 stage 时才读取,不要一开始就全部读完。
宿主项目已安装时:把 .agents/ux/product.md(产品画像与适用性)和 .agents/ux/components.md(组件用法)当作本 skill 的一等输入——先读它们,再进 stage。没有这两份时,先跑 05-init(装完 / 升级后也应重跑)。
优先级:product.md 里的平台与适用性(标为「不适用」的规则、按平台限定的规则)优先于本 skill 的通用规则;其余冲突以 skill 为准;项目层要违背通用原则(可达性、P-xx)必须写明理由(init.md I-10)。平台是 mobile(React Native)时,本文件与 references 里 web 专属的条目(@lobehub/ui 原子层、cssVar / createStaticStyles、antd、CSS 类名、outline、font-family)不适用:原子层是项目自己的 RN 组件库(如 @lobehub/ui-rn),lint-lobe.mjs 按平台自动跳过这些规则。
一次把重构、交互、视觉、文案全想一遍,注意力会被稀释:调间距时还在纠结项目是否符合 LobeUI 架构。之前把 pipe 拆得很细,结果又只有精细指令能命中,宏观指令就失灵了。所以这里只用一个路由入口,下面挂十个粗粒度 stage:
每个 stage 只回答一个问题、只加载自己白名单里的 reference,看到别的问题只记一行 遗留 → <stage>。LobeUI 架构的硬规则交给 scripts/lint-lobe.mjs 兜底,所以视觉、流程、细节这几个 stage 不需要把架构规范读进上下文。
| Stage | 文件 | 只回答 | 只加载 |
|---|---|---|---|
| 00 业务理解 | stages/00-brief.md | 给谁、为了哪个决定或任务 | admin-archetypes · models(M-01/04) |
| 05 项目接入 | stages/05-init.md | 指南、产品画像与组件盘点在哪;装完/升级后两轮是否完成 | init |
| 10 截图解析 | stages/10-decode.md | 图里的结构和取值分别映射到哪个组件、哪个 token | design(D-02/04/05/11) |
| 20 视觉方向 | stages/20-direction.md | 这一页靠什么被记住 | aesthetics · craft(K-01/04/09) · models(M-05) |
| 30 结构与组件 | stages/30-structure.md | 零件和骨架对不对(唯一讨论 LobeUI 架构的地方) | components · ecosystem · design(D-01/06/07) · craft(K-10) |
| 40 流程与文案 | stages/40-flow.md | 看得懂、走得通、顺序服务决定;简化、澄清;该有哪些文案 | admin-archetypes · copy(W-01/02/03/07) · models(M-01/06/08) |
| 50 视觉取值 | stages/50-visual.md | 取值像不像一套系统、有没有 AI 味 | design · craft · aesthetics · ecosystem(E-02) · models(M-02/08) |
| 60 系统统一 | stages/60-system.md | 跨页面漂移的盘点、分诊和派发 | design · components(C-03/11) · models(M-02) |
| 70 细节加固 | stages/70-detail.md | 状态、边界、反馈、微文案、a11y、响应式、一致性 | detail-checklist · craft(K-05/07) · copy(W-04/05/06) · models(M-03/07) |
| 75 界面文案 | stages/75-copy.md | 每句话按产品的文案 profile 写准、写一致;中文排版 | copy-core(T-01..09)· copy(W-01..06)· 只读一份 profile:consumer / saas / admin / devtool |
| 80 上线审查 | stages/80-review.md | 能否放行;不能就回流到哪个 stage | evaluator · admin-archetypes |
各 stage 的加载白名单在 scripts/pipeline.json 中登记,由 scripts/check-structure.mjs 校验:一旦某个 stage 引用了不属于它的规则编号(例如 50 引用 C-*),校验就会失败。
这六条不是 stage,而是每个 stage 都要遵守的前提。它们各自的落点都是可校验的资产,不是文字约定。
references/models.md,M-)模型只有一个用途:把模糊的问题拆成可以回答的问题。每个模型都挂载到具体 stage,并有必须产出的字段——不产出字段的模型不要用,那只是把名字念一遍。
| 模型 | 挂载 | 回答什么 | 必须落到哪个字段 |
|---|---|---|---|
| M-01 双钻模型 | 00 · 40 | 真正要解决哪个问题、有哪几条解法 | brief 非目标 + 2 个互斥解法候选 → L2 |
| M-02 格式塔原理 | 40 · 50 · 60 | 用户会把这些看成几组 | 分组靠间距和对齐,不靠边框 |
| M-03 尼尔森启发式 | 70 · 80 | 哪里违反已有心智模型 | 七维覆盖表 / 80 归因语言 |
| M-04 Kano | 00 | 哪些信息必备、哪些加分 | 字段的 Kano 属性;「兴奋」不占主区 |
| M-05 峰终定律 | 20 | 记住哪两个瞬间 | 整页一个记忆点(峰)+ 确定的收尾(终) |
| M-06 福格模型 | 40 | 这个动作为什么没被做 | 判断缺 M / A / P,再给改法 |
| M-07 用户旅程地图 | 70 | 跨页面盲点在哪一段 | 掉状态 / 掉上下文 / 重复问 |
| M-08 认知负荷 | 40 · 50 | 用户要同时处理几件事 | 选项 > 7 先分组;区块 > 7 先分层 |
组件库能覆盖的深度是有限的;越贴近业务语义的组合,越该由项目自己构建。
| 层 | 例子 | 怎么办 |
|---|---|---|
| 原子层 | Button Input Modal Table Tag | web:必须从 @lobehub/ui 取用(C-01 硬性规则,lint 兜底);mobile:用项目的 RN 组件库(如 @lobehub/ui-rn) |
| 皮肤层 | Block Surface ConsoleShell PageHeader | 用 lobe-ui / dashboard 现成的 |
| 组合层 | 会话区、消息体、工作流画布、业务卡片簇 | 优先自建,用原子层 + 皮肤层拼 |
| 领域层 | Agent 会话、模型调用、审批流 | 必须自建 |
判据:布局由业务语义决定 → 自建;需要跨页复用 → 自建一个项目内组件;只是为了外观相近 → 用现成件。
反过来,把 Table / Modal / Input 在项目里重写一遍同样是错的(LOBE-REIMPLEMENT-ATOM)。
自建件内部只能用原子层和皮肤层,取值仍走主题 token(web:cssVar;RN:useTheme() 的 token),并且不要改组件库源码。chat 系列是这条边界的参照实现。
stages/05-init.md,scripts/bootstrap.mjs,scripts/project-scan.mjs)装完或升级后先跑 05(或对 Agent 说「初始化 / 升级后刷新」):
AGENTS.md → CLAUDE.md → 都没有就建立,把入口、触发、纪律、自迭代写进托管块(块外一字不改;--print 后再写)。默认写精简块并跟随宿主语言(--full / --lang zh|en 覆盖,见 init.md I-04)。project-scan.mjs 收集确定性事实 → 写 .agents/ux/product.md(平台、产品类型、用户、核心任务、规则适用性、文案 profile)。.agents/ux/components.md(web:薄包装 / 与 lobe-ui 重复 / 业务组件;mobile:项目原子层 / 薄包装 / 业务组件;无实现细节)。项目层在 .agents/ux/,不进已安装 skill,重装不覆盖。日常 UI 任务先读 product.md 与 components.md,再按 stage 加载。--check / project-scan --check 发现缺失或过期时重跑两轮。
scripts/intent.mjs)「体验不好 / 丑 / 难用」这类原话没有可执行内容。路由器会先把它归一化成 stage + 要说清楚的量,再并入关注点:
| 原话 | 归一化成 | 进入 |
|---|---|---|
| 体验不好 / 难用 | 还原成一次具体失败:谁 · 在哪一步 · 想做什么 · 卡在哪 | 40 |
| 丑 / 难看 | 先指出是 层级 / 留白 / 字阶 / 配色比例 里哪项不合格 | 50 |
| 太乱 | 分组失败:哪几块被看成一组、哪几块本该分开 | 40 |
| 看不清 | 具体元素 + 明暗 + 对比度期望值 | 50 |
| 找不到 | 路径缺口:想做什么、在哪一层找不到入口 | 40 |
| 太慢 / 卡 | 状态缺失:300ms / 2s / 10s 三档有没有处理 | 70 |
| 感觉不对 / 说不上来 | 归一化不了 → 先追问(granularity: clarify),不猜着动手 | — |
scripts/refs.mjs)不要把当前场景无关的内容塞进上下文。 每份 reference 顶部的 refs:meta 块声明 tier 和条目:
tier: flat → 文件小,整份加载。tier: index → 只加载 always 条目 + 命中本次指令的 deep 条目;其余只读标题,需要时按 id 单独展开。tier: profile → 互斥分支,只读被选中的一份。75-copy 的四份文案 profile 按 --profile → product.md 的 copy-profile: → 指令里的触发词选择;都没有就先问。components.md 是 48KB,但一次任务通常只命中 C-01 + 2–3 条;不要整份读。node scripts/refs.mjs "<指令原文>" # 每个 stage 该读哪些条目
node scripts/refs.mjs "<指令>" --stage 75-copy --root <项目根> # 75 只读 product.md 选中的 profile
node scripts/refs.mjs --audit # 审计 tier 划分与 always 预算
CONTRIBUTING.md,scripts/upstream.mjs)本 skill 托管在 https://github.com/lobehub/lobe-design-skill。消费方把通用经验回流上去,回流前先过机械自检:
node scripts/upstream.mjs 只放行同时满足六条的条目:landed 且带版本 · 层在 structure/lint/rule(style 不回流)· occurrences ≥ 2 · 不含品牌或项目专有名词 · symptom / root_cause / artifacts 齐全 · 不是组件问题(组件 bug 与绕法归 lobe-ui)。
回流的是判据(可校验的规则、可复用的契约),不是某个项目的具体取值。
所有 pipeline 都从 00 开始,不能跳过;能变的只是深度。 brief 的字段(主任务、关键决定、决定所需信息、危险操作、密度倾向)是后续每个 stage 的必需输入:
product.md 的文案 profile 定措辞与确认强度深度由路由决定:宏观指令出完整 brief(archetype / subject / reverse / scope 模式),打磨场景出一段压缩版,中等和精细指令出一行 lite(页面类型 · 主任务 · 密度倾向)。已有 brief 时直接复用,不重写。
node scripts/route.mjs "<用户指令原文>" # 人读
node scripts/route.mjs "<用户指令原文>" --json # 机读
node scripts/route.mjs "<指令>" --has-brief # 已有 brief 时,00 改为复用
路由器读取 scripts/pipeline.json,输出场景、颗粒度、有序的 stage 列表和每个 stage 要加载的文件。路由器的结果是默认值;结合对话上下文明显不合理时可以调整,但要在输出里说明理由。
| 场景 id | 场景 | 识别信号 | 默认 pipeline |
|---|---|---|---|
bootstrap | 项目接入 / 初始化 | 初始化、接入、bootstrap、agents.md、产品画像、组件盘点、升级后刷新 | 00(project) → 05(托管块+两轮)→ 自查 |
screenshot-restore | 截图 / 设计稿还原 | 截图、还原、设计稿、figma、照着 | 00(reverse) → 10 → 30 → 50 → 70 → 80(compare) |
pre-launch | 上线前审查 | 上线前、能不能上线、验收、audit、放行 | 00(reuse) → 80(audit) → 回流 ≤3 条 → 80 确认一轮 |
system-unify | 设计系统统一 | 设计系统、统一、不一致、token、收敛、normalize | 00(scope) → 60 → 30 → 50 → 80 |
launch-visual | 0→1 视觉型页面 | 落地页、官网、首页、作品集、活动页、发布页 | 00(subject) → 20 → 30 → 50 → 70 → 80(critique) |
operate-build | 后台 / 看板 / 表单 / 工作流 新建或重做 | 后台、看板、控制台、表单、工作流、审批 且 新建、重做、从零 | 00(archetype) → 40(规划 L1–L6) → 30 → 50 → 70 → 75 → 80 |
product-polish | 已有产品迭代打磨 | 打磨、polish、refine、优化、改版;或者是后台类信号但没有新建信号 | 00(compressed) → 40 → 50 → 70 → 75 → 80 |
区分要点:
AGENTS.md 托管块),不含任何界面改动;信号具体,优先级最高。遗留 → 30 时才插入 30。| 颗粒度 | 判定 | 跑什么 |
|---|---|---|
| 宏观 | 识别出场景,且(有「整体 / 重做 / 从零」类信号,或没有点名具体关注点,或点名的关注点 ≥ 4 个,或只点名了该场景的锚点 stage) | 该场景的默认 pipeline |
| 中等 | 点名了 2–3 个 stage 的关注点 | 00 lite + 被点名的 stage,按 stage 编号排序 |
| 精细 | 只点名了 1 个 stage 的关注点,或点名了规则编号 | 00 lite → 该 stage → 自查(lint + 该 stage 清单,不做完整 80 评分) |
| 模糊 | 既没有场景,也没有关注点(例如「看看这个页面」) | 不执行;给出 2–3 条路径供用户选择 |
| 追问 | 只有抽象说法、归一化不出可执行内容(例如「感觉不对」) | 不猜着动手;先问清「哪个页面、哪个状态、期望什么、实际什么」 |
规则编号(C- D- K- E- P- A- W- M- T- 两位编号,X-n.n 清单项)按 pipeline.json 的 ruleOwners 直达所属 stage;脚本报出的 LOBE-* / DETAIL-* 按脚本自己登记的 stage 直达(DETAIL-* → 70)。点名了编号时以编号为准,指令里的其他关键词只记录、不参与路由(例如「LOBE-RAW-COLOR 报错」进 50,不因「报错」进 70)。
完整设计理由、三类指令的逐步路由演练见 docs/REFACTOR_NOTES.md(给维护者读,执行时不需要加载)。
node scripts/refs.mjs "<指令>",只读它列出的 always + 命中条目;需要别的条目时按 id 单独展开。node scripts/lint-lobe.mjs <改动路径>,FAIL 必须修。每个 stage 结束时输出:
[<stage> · <名称>] 完成
输入引用:brief.<字段>,<上游 stage 的产出>
改动:<文件 / 区域 —— 一句话,带规则编号>
脚本:<命令 + RESULT 行>(没有改代码时写「--」)
遗留:<问题 → stage 编号>(只能指向别的 stage)
缺口:<D-11 格式,没有写「无」>
整个任务结束时输出汇总:
[lobe-design] 场景:<id> 颗粒度:<宏观|中等|精细> Pipeline:00 → … → 80
brief:<一行摘要>
各 stage 改动:…
未解决遗留 / 缺口:…
学习候选:<本次被用户纠正的地方 → `node scripts/check-learnings.mjs --new` 生成条目,按 learnings/README.md 选层回写>
给用户看方案时,示意图只画正在讨论的那个模块,用编号标注讲清为什么这样设计,保持低密度,让人一眼看到要比较的地方,而不是整个应用。
skills/lobe-design/
├─ SKILL.md 唯一入口:路由 + 契约 + 六件贯穿全局的事
├─ stages/ 11 个 stage,每个都有 聚焦 / 不负责 / 输入 / 只加载 / 检查清单 / 输出
├─ references/ 规则库:components(C) design(D) craft(K) ecosystem(E) admin-archetypes(P)
│ aesthetics(A) copy(W) copy-core(T) copy-<profile>(T,四选一) detail-checklist(X)
│ models(M) init(I) evaluator
│ 每份顶部有 refs:meta 块(tier / scope / entries),供渐进式披露解析
├─ scripts/
│ ├─ pipeline.json 路由、隔离与抽象指令归一化的唯一事实源
│ ├─ route.mjs 指令 → 场景 / 颗粒度 / stage 序列 / 加载清单
│ ├─ refs.mjs 渐进式披露:每个 stage 到底该读哪些条目(+ --audit)
│ ├─ intent.mjs 抽象指令翻译:体验不好 / 丑 / 难用 → 可执行表述 + 要说的量
│ ├─ bootstrap.mjs 项目接入:探测并维护 AGENTS.md 托管块(幂等,块外不改)
│ ├─ upstream.mjs 消费方回流:挑出通用、无品牌印记的经验条目
│ ├─ lint-lobe.mjs 架构 + 视觉 + a11y + 文案的静态检查(FAIL/WARN,可写理由豁免)
│ ├─ check-detail.mjs 状态 / 反馈覆盖启发式(loading / error / retry / empty / pending / 结果反馈 / 危险确认 / 禁用原因 / 输入 label)
│ ├─ check-structure.mjs 单入口、stage 契约、规则白名单隔离、悬空编号、场景映射、refs:meta
│ └─ check-learnings.mjs 自进化闸门:经验日志格式、回写约束 L-01..L-06、规则 ↔ 回归 ↔ 版本一致
├─ tests/ 路由用例 + lint / detail / learnings / refs / bootstrap 正反例,`node tests/run.mjs`
├─ learnings/ 结构化经验日志(LOG.md)+ 回写流程与版本化策略(README.md)
├─ CONTRIBUTING.md 回流上游的判据与流程
├─ docs/REFACTOR_NOTES.md 维护者文档:设计理由、架构图、三类指令路由演练(执行时不加载)
└─ CHANGELOG.md 规则版本(每条 lint 规则带 since)
本地运行:需要 Node ≥ 18,零依赖。在 skill 目录下执行 node tests/run.mjs,即可一次跑完结构校验、路由回归、lint / detail 回归、refs 披露、bootstrap 幂等、learnings 闸门和脚本 CLI 契约。所有脚本都支持 --help,退出码 0 通过 / 1 FAIL / 2 用法错误。
aesthetics.md 和 80 的 critique 模式,并按 Lobe 主题改写(A-07)。copy-core.md,只覆盖界面短文案;长篇文档仍请直接使用原 skill。tuning-color-palettes(本机已安装则按技能名调用)。本 skill 的 D-07 / 50-visual 只指向它,不复制其流程。SKILL.md。色板调参 skill 住在 lobe-ui 仓库,按需查阅。아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
실제 제품을 적절한 조작 환경에서 실행해 변경 사항을 검증하고, 사용자가 확인할 수 있는 증거를 모아 인수 보고서로 게시합니다. 기존 검증 계획을 확인하거나 점검 항목을 만들고, `lh` CLI로 결과를 게시할 수 있습니다.
LobeHub에 AI 모델 제공자를 추가하는 과정을 안내합니다. 런타임 연동, 모델 정보와 설정, 브랜드 표시, 문서화 및 인수 확인을 다루며, 기존 제공자에 모델만 추가하는 경우와 새 연동이 필요한 경우를 구분합니다.
서버 환경 변수로 사용자 설정의 기본값을 지정하도록 구현하는 절차를 안내합니다. 변수 검증, 서버 설정 구성, 사용자 저장소 반영부터 예시 환경 파일과 셀프 호스팅 문서 갱신까지 다룹니다.
에이전트 실행 단계, 도구 호출, 사람의 승인, 컨텍스트 압축, 하위 에이전트 호출에 훅을 등록하는 방법을 안내합니다. 이벤트를 관찰하고 로컬 도구 결과를 모의하거나 설정에 따라 웹훅으로 도구 호출을 허용 또는 거부할 수 있습니다.
에이전트의 이벤트 기반 백그라운드 작업을 설계하고 구현하도록 돕습니다. 소스, 시그널, 액션, 정책의 역할을 나누고 비동기 처리, 중복 실행 방지, 완료 기록과 관측 기능을 다룹니다.
실제 데스크톱 채팅 앱에서 봇 채널의 인수 테스트를 진행합니다. Discord, Slack, Telegram, WeChat, Lark, QQ에서 메시지를 보내고 응답을 기다린 뒤 결과 화면을 캡처합니다. iMessage는 BlueBubbles 브리지를 사용합니다.