通过实际操作产品验证交付内容,记录用户可查看的证据,并发布验收报告。可检查已有验证计划或创建检查项,选择合适的操作界面,并使用 `lh` CLI 发布结果。
- 实际检查更改后的产品行为
- 收集截图或其他验证证据
- 编写验证计划和报告
本指南说明如何使用仓库中的 LobeHub 实际界面组件和样式,制作可交互的单文件 HTML 原型。内容涵盖运行环境、主题设置和交互检查,便于在正式实现前查看界面状态与操作流程。
Use for interactive HTML prototypes (交互原型) with the real LobeHub UI stack. Excludes production UI implementation.
实测评分 未实测
查看安装方法本指南介绍如何使用 LobeHub 的实际界面组件和样式,制作可交互的单文件 HTML 原型。它会使用仓库中的依赖准备运行环境,再通过 React 形式的代码描述界面和操作。主题可以跟随操作系统的浅色或深色设置,也可以单独指定。生成的 HTML 可直接打开查看,无需运行构建流程或服务器。指南强调界面状态切换、操作后的跳转,以及按钮等控件确实可用。查看时还应检查控制台错误和屏幕截图;适用时也要考虑较窄的屏幕宽度。
想用接近实际产品的界面检查屏幕层级和操作流程时,可以使用本指南。它适合在正式实现之前,与相关人员一起查看空状态、加载状态和错误状态等非正常状态。
运行环境使用仓库中的 node_modules。首次运行时会从 unpkg 获取 babel.min.js。本技能用于制作原型,不负责实现正式界面。
本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。
AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。
不计入评分。 由 AI(OpenAI Codex)于 2026年10月26日 评估。仅供参考,安装前请同时查看原文。
安装前可以查看交给 AI 代理的指令内容。
One HTML file, double-click to open, fully interactive, rendered by the actual
design system (@lobehub/ui 6.x components, compiled style.css, --lobe-* theme tokens — exact
versions from this repo's node_modules) — while the source stays production-style
React (import { Block } from '@lobehub/ui', createStaticStyles(({ css, cssVar }) => …),
hooks, memo). Promotion to production is mostly "split into files", not "rewrite".
Prototype code may be quick-and-dirty (one file, no i18n, inline data) — but the interaction must be complete: states, transitions, and affordances are the point of a prototype, not its code style.
one-time (~2s, cached): scripts/build-runtime.sh → lobe-prototype-runtime.js (IIFE global)
+ lobe-prototype-runtime.css
+ vendored babel.min.js
per prototype (no build): single HTML = <link css> + <script runtime> + babel-standalone
+ <script type="text/babel"> with production-style React
react, react-dom/client, the full @lobehub/ui namespace,
lucide-react and motion from the repo's own node_modules — so tokens/components/
versions match production, and react/emotion/theme-scope are singletons by
construction.entry.mjs also imports @lobehub/ui/theme.css + global.css + style.css (the same
three the app loads in src/layout/GlobalProvider/AppTheme.tsx); esbuild emits them
as lobe-prototype-runtime.css, linked from the template's <head>.window.require shim + babel's transform-modules-commonjs lets the
prototype keep real import statements.setLobeTheme({ appearance }) from prefers-color-scheme (and on change), so
light/dark follow the OS before first paint. Force a theme with
setLobeTheme({ appearance: 'dark' }), or <ThemeScope appearance="dark"> for an
island. The React tree is wrapped in <ConfigProvider motion={motion}> like the app's
AppTheme (motion for Button, Drawer, Modal, …, plus fonts, focus ring and the
popup portal host) and <ToastHost /> for toast.⚠️ Don't re-attempt the pure-CDN route (esm.sh import maps). It was tried and rejected: esm.sh's CJS named-export analysis failed serially across the dep chain and
?bundleleaked an unversionedreact-is404. Bundling from the repo's ownnode_modulesis the only way to match production versions exactly.
Build the runtime into the prototype's directory (any dir works; /tmp is fine):
bash .agents/skills/design-prototype/scripts/build-runtime.sh /tmp/my-proto
Skip if lobe-prototype-runtime.{js,css} + babel.min.js are already there and the
design-system versions haven't bumped. The first run downloads babel.min.js from
unpkg (pinned); later runs reuse it.
Copy references/template.html into the same dir,
rename, and replace the sample App with the real surface. Keep the runtime shim
block untouched.
Open it (open /tmp/my-proto/xxx.html) — no server, no build.
Headless-check it renders with zero console errors (the repo's e2e Playwright works):
// node /tmp/check.mjs — adjust paths
import { chromium } from '<repo>/e2e/node_modules/playwright/index.mjs';
const b = await chromium.launch();
const p = await b.newPage();
const errs = [];
p.on('pageerror', (e) => errs.push(String(e)));
await p.goto('file:///tmp/my-proto/xxx.html');
await p.waitForSelector('#root *', { timeout: 30000 });
await p.screenshot({ path: '/tmp/proto.png' }); // Read the screenshot yourself
console.log('errors:', errs);
await b.close();
Then Read the screenshot — a prototype is a visual deliverable; don't ship it
sight-unseen. Check light + dark (emulate prefers-color-scheme) and a narrow
viewport if the surface has a mobile story.
See assets/entry.mjs — the single source of truth. Currently:
@lobehub/ui: full namespace — every component (Button, Input, Modal,
createModal, confirmModal, Table, Switch, Checkbox, Radio, Badge,
Progress, Slider, Steps, Divider, DropdownMenu, Accordion, Collapsible,
Spin, Skeleton, DraggablePanel, FloatingSheet, …) plus toast / ToastHost,
MotionProvider, setLobeTheme, ThemeScope, useThemeMode, useTheme, and the
styling API createStaticStyles, cssVar, cx, css, keyframes, responsive,
useResponsive@lobehub/icons: Amp, ClaudeCode, Codex, HermesAgent, OpenClaw, OpenCodelucide-react, motion/react, motion/react-m, react, react/jsx-runtime,
react-dom, react-dom/client: full namespacesNot included: @lobehub/ui/form, @lobehub/ui/pro-table, @lobehub/ui/chat and the
other subpaths — add import * as x from '@lobehub/ui/<sub>' + a '@lobehub/ui/<sub>': x
entry and rebuild (~2s). Size ≈ 17MB JS + 0.3MB CSS (fine from disk).
toast.success(…) + <ToastHost />; dialogs: Modal, createModal,
confirmModal.DropdownMenu items={…} (opens on click); context menus: ContextMenuTrigger.Flexbox horizontal gap={…} / Center / Grid — there is no Space.Accordion for several sections, Collapsible for one region.Badge, Checkbox, Divider, Progress, Radio, Slider, Steps, Switch,
Table (columns / dataSource / rowSelection) are root exports.node_modules/@lobehub/ui/es/index.d.mts rather than
guessing; an unknown import is undefined at runtime, not a build error.createStaticStyles + cssVar.* exactly as production does — it is
emotion-backed and inserts at call time, so it needs no build step. Tokens resolve
to var(--lobe-*) and flip with the theme; never hardcode light/dark colors.lobe-base, lobe-popup, lobe-ui), so
any unlayered CSS in the prototype's <style> beats them. Override through
className / style / classNames / styles slot props, not global selectors
like button { … }.<link> to lobe-prototype-runtime.css — without it components render
unstyled and --lobe-* tokens are undefined.<script src> chokes on export.Text type accepts only secondary|success|warning|danger|info; Tag color has
no primary (DESIGN.md "Applying tokens in components").A prototype is a surface — the ux checklists apply to what it demonstrates:
DraggablePanel
(collapse + drag-resize come free), loading follows the ux skill's feedback §4.1
scenario table (Skeleton / Spin, variant="network" only for AI work), modals via createModal-style flows.cursor: zoom-in with no zoom, keycap
chips with no keys) — in an interactive prototype a dead affordance is a spec bug.还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
通过实际操作产品验证交付内容,记录用户可查看的证据,并发布验收报告。可检查已有验证计划或创建检查项,选择合适的操作界面,并使用 `lh` CLI 发布结果。
本技能指导在 LobeHub 中接入 AI 模型提供商,涵盖运行时、模型信息、设置、品牌展示、文档和验收,并帮助判断新增模型是否需要新的提供商集成。
本技能指导如何用服务器端环境变量设置用户偏好默认值,涵盖变量校验、服务器配置、写入用户状态,以及更新 `.env.example` 和自托管文档。
说明如何在智能体执行步骤、工具调用、人工审批、上下文压缩和子智能体调用时注册钩子。钩子可观察事件、模拟本地工具结果,也可通过 Webhook 按配置策略允许或拒绝工具调用。
此技能用于为智能体设计事件驱动的后台工作流,划分来源、信号、动作和策略的职责,并处理异步交接、去重、执行范围、完成记录与运行观测。
本技能在 macOS 桌面聊天应用中测试机器人频道:打开应用、进入频道或联系人、发送消息、等待回复并截图。支持 Discord、Slack、Telegram、微信、飞书和 QQ;iMessage 使用 BlueBubbles 桥接。