Skill 解析 · Claude Code

baoyu-design 怎麼運作

它其實就是 Anthropic 官方 claude.ai/design 設計引擎的本地移植版 —— 由宝玉(@dotey / GitHub: JimLiu)打包成任何檔案型 agent 都能跑的 Agent Skill。核心是「用 HTML 當媒材產出設計稿」的一整套方法論。

來源 · github.com/JimLiu/baoyu-design · 安裝於本機 ~/.claude/skills/baoyu-design · 作者 @dotey(宝玉)

00 骨架:一次進場的分層載入

Skill 不是一份大 prompt,而是「一個入口 + 一堆按需載入的檔案」。實際運作時模型會依序讀:

1
SKILL.md — 入口編排
只負責「該讀哪些檔」。判斷 harness、判斷任務類型,把對應檔案指過去。
SKILL.md
2
system-prompt.md — 設計工藝的唯一真理來源
全部的 craft 準則:排版、色彩、React+Babel 慣例、避免 AI slop、CJK 字型堆疊… 這份就是「預設長相」的根源。
system-prompt.md
3
references/<harness>.md — 環境專屬工具
只有四種能力因環境而異:問問題、預覽頁面、截圖、除錯驗證。Claude Code 讀 claude.md。
references/claude.md
4
built-in-skills/*.md — 按任務類型載入
wireframe / hi-fi / deck / mobile / doc / animated-video… 每種輸出各一份,用到才讀。
built-in-skills/hi-fi-design.md · interactive-prototype.md · …

輸出永遠是自包含的 HTML(通常是一個 HTML entry + 幾個 .jsx,用 React 18.3.1 + Babel standalone 在瀏覽器直譯,不需 build step)。它偏好用 CSS 變數當 token、用 flex/grid gap 排版,就是為了讓後續「可被可靠地編輯」。

01 它怎麼「定義」一套 design system?

答案:design system 是一個 code-first、token-first 的資料夾,被一支可攜的 Node 編譯器掃描後,產出可被別的專案載入的 JS bundle。

磁碟上的辨識規則

所有東西都平放在 designs/ 底下,用「根目錄有沒有某個 marker 檔」來區分身分,不是看資料夾名字:

身分根目錄 marker意義
Design System_ds_manifest.json自我描述的可消費系統(編譯器寫的)
一般專案_d_meta.json消費者;綁定的系統放在 _ds/<slug>/

glob designs/*/_ds_manifest.json 就只會撈到「被 author 的系統」,不會誤中被消費的副本(那些在深一層)。這就是它「不維護索引檔、每次靠 glob 即時發現」的設計。

一套系統由四種東西組成

① Tokens(tokens)

全域 CSS(styles.css/tokens.css… 其一)+它 @import 進來的所有檔案。編譯器用正則抽出每個 --var 宣告,還能讀 /* @kind color */ 註解做分類;@font-face 也從這個 closure 讀。

② Components(元件)

任意目錄下的 <Name>.jsx/.tsx + 同目錄 <Name>.d.ts(props 契約)。有 .d.ts 才有 props 契約、adherence 規則、起始點資格。

③ @dsCard(展示縮圖)

在任何 .html 第一行放 <!-- @dsCard group=… -->,preview 頁就會把它當一張卡片渲染。元件目錄需要一張來當縮圖。

④ @startingPoint(種子)

opt-in 的「起始畫面 / 起始元件」。消費端的 picker 會拿它當種子。沒標記,編譯器就忽略。

編譯 → 產出可消費的 artifacts

node <skill>/agents/compile-design-system.mjs designs/<project>

編譯器(ds-core.mjs 是零寫入的共用 parser)掃完之後吐出這些生成檔(絕不手改)

產出作用
_ds_bundle.js把所有元件編譯打包,掛到 window.<Namespace> 上供別的頁面用
_ds_manifest.jsonnamespace、components、tokens、cards、startingPoints、CSS closure 路徑
_adherence.oxlintrc.jsonlint 規則 —— 強制頁面只能用系統的 token,不准亂發明
preview.html單檔互動式檢視頁(跑 build-preview.mjs
一句話
「定義一套 design system」= 寫 CSS 變數當 tokens + 寫 React 元件配 .d.ts + 標好 @dsCard/@startingPoint,然後跑編譯器把它變成一包 window.<Namespace> 的 JS。它是編譯出來的、以 token 為地基的元件庫,不是一份風格描述文件。

02 為什麼你產的設計「看起來都一樣」?

這是最關鍵的一題,而且原因很單純。

根因
你沒有綁任何 design system。沒綁定時,模型 100% 照 system-prompt.mdfrontend-design.md預設 craft 準則走 —— 而那套準則就是一個收斂點。所以每次生成都往同一個「Claude Design 家族長相」靠。

諷刺的是,frontend-design.md 自己白紙黑字要求發散:

Tone: Pick an extreme — brutally minimal, maximalist chaos,
  retro-futuristic, luxury/refined, editorial/magazine,
  brutalist/raw, art deco/geometric …
"NEVER converge on the same choices across generations."

它會收斂,是因為你沒給它可以發散的依據:沒有參考 App、沒有指定 tone、沒有品牌色/字型、沒有 design system。缺了 design context,它就退回安全的預設值 —— SKILL.md 也明講「沒有設計脈絡就開工,必然做出弱設計」。

03 怎麼換一套設計?三個槓桿

依「持久度 / 一致性」由強到弱排序。想要每次都不一樣、又互相一致 → 用 1;想要這一次特別 → 用 2+3。

槓桿 1綁一套真的 design system(最根本、可重用)

先取得一套系統 —— 可從 Figma .fig GitHub repo 現成 HTML 匯入,或自己 author。編譯後,在你的專案裡匯入一份自包含副本:

node <skill>/agents/import-design-system.mjs <dsDir> <projectDir> --primary

它會把系統同步進 <project>/_ds/<slug>/,並生成 _ds/<slug>/_ds_prompt.md —— 這份就是關鍵:模型每次設計前都要讀它,並把它當成強制視覺契約。裡面含綁定宣告、bundle 接線、完整 guide、每個元件的用法節錄、以及准用的 var(--*) token 白名單。之後每個頁面都只能用這套的 tokens 與 window.<Namespace> 元件組出來,不准自己發明色彩/字型/元件。
結果 換系統 = 換一個 _ds/,長相整個變,而且同系統下所有頁面一致。

槓桿 2開案時直接下明確美學方向(一次性、快)

在需求裡就指定一個「極端 tone」+差異化重點。例如:「editorial/magazine 風、襯線大標、黑白配一個朱紅、不要圓角卡片」。這會觸發 frontend-design.md 的 bold-direction 路徑,把它從預設值拉開。

槓桿 3餵參考素材(品質影響最大)

提供參考 App/截圖/品牌色/字型。system-prompt 明說參考素材「對品質影響最高,要主動要」。注意:WebFetch 只回文字不回版面,「想長得像某網站」要直接給截圖。也可以把現成 HTML/GitHub 當 design source 匯入。

最短路徑:下次開案這樣講

與其抱怨長得一樣,不如在第一句就給脈絡。任一即可,越多越準:

/baoyu-design 幫我做一個 X 的 dashboard。
  · 用 designs/<某個已編譯的 design system>   ← 槓桿 1
  · 風格走 brutalist / 深色 / 等寬字為主      ← 槓桿 2
  · 參考這幾張截圖 / 這個 repo               ← 槓桿 3

沒有任何一項時,它就只能給你「那個一直重複的樣子」。

驗證方式:本文所有機制均直接讀取本機 ~/.claude/skills/baoyu-design/SKILL.mdsystem-prompt.mdbuilt-in-skills/{create-design-system,use-design-system,frontend-design}.mdagents/lib/ds-core.mjs 而來,非記憶推測。

來源 repo:github.com/JimLiu/baoyu-design(作者宝玉 @dotey)—— 它是 Anthropic claude.ai/design 引擎的本地 Agent Skill 移植。