Communitygithub.com

Levango7/design-md-skill

基於 Google Stitch 規範的 DESIGN.md 設計契約工作流——為任意專案生成 / 提煉 / 驗收前端設計系統,產出機器可讀令牌、雙形式 CSS、Tailwind 映射與視覺化預覽頁,並內建 WCAG 2.1 對比度門禁。

design-md-skill 是什麼?

此技能實作了一套完整的「DESIGN.md 設計契約工作流」,靈感源自 Google Stitch 的概念,旨在將前端設計決策從散落的樣式程式碼中抽離,沉澱為一份 AI Agent 與人類皆可讀的 DESIGN.md 文件。它涵蓋從研究、提煉、產出、應用到驗收的完整閉環,支援直接從參考網站提取設計令牌草案(`extract.py`),一鍵生成 `tokens.css`(含十六進位與 RGB 通道雙形式)、`tailwind.extend.js` 以及可直接預覽的 HTML 頁面(`scaffold.py`)。核心驗收機制 (`wcag.py`) 會自動對比所有顏色組合,確保文字 ≥ 4.5:1、UI 元件 ≥ 3:1,並能以 exit code 形式整合進 CI/CD 流程,在構建階段阻斷不合規的顏色改動。此外,它整合了 84 個真實品牌的 awesome-design-md 參考庫,並可選用 DeepSeek Search/Fetch 進行即時網頁研究(此功能為付費直連,預設關閉,需使用者明確同意並加上 `--yes-billing` 標誌才會啟用;若無金鑰或未經同意,則會優雅降級為內建抓取)。技能規範嚴格,強調雙形式令牌、品牌色分拆、避免 Alpha 稀釋陷阱等關鍵規則,適合需要在多個前端專案或團隊中建立並維護一致設計語言的開發者。

相容平台✓Claude Code~Codex CLI✓Cursor✓OpenCode
npx skills add Levango7/design-md-skill

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

design-md · DESIGN.md 設計契約工作流

把「設計決策」從散落的樣式程式碼裡抽出來,沉澱成 DESIGN.md——一份 AI agent 與人都能讀的 設計契約。本 skill 覆蓋完整閉環:

研究(可選聯網) → 提煉(extract) → 生成(scaffold) → 應用到程式碼 → 驗收(verify) → CI 門禁

DESIGN.md 是 Google Stitch 提出的概念:純文字設計系統文件,放在專案根目錄, 任何 AI coding agent 讀了之後產出的 UI 都能保持視覺一致。 AGENTS.md 管「怎麼建構」,DESIGN.md 管「長什麼樣」。

目錄結構

位置用途
scripts/wcag.pyWCAG 2.1 對比度引擎:解析 tokens.css / design-tokens.json,自動按約定配對核算(文字 4.5:1、UI 3:1),exit code 可直接當 CI 門禁
scripts/extract.py從任意 URL 提煉設計令牌草稿(配色排名 / 字體堆疊 / 圓角),產出 tokens-draft.json + DESIGN.draft.md 骨架
scripts/scaffold.py從令牌 JSON 一鍵生成:tokens.css(雙形式令牌)+ tailwind.extend.js + preview.html 視覺化目錄 + 對比度報告
scripts/fetch_ref.py從 awesome-design-md 拉取參考 DESIGN.md(84 個品牌,raw → gh api 雙通道回退)
scripts/research.pyDeepSeek Search/Fetch 聯網研究(計費直連、預設關閉:需使用者明確同意後帶 --yes-billing;金鑰從本機檔案 / 環境變數讀取,永不回顯)
references/spec.mdDESIGN.md 檔案規範:frontmatter + YAML 令牌 + 11 節正文 + 寫法規則
references/lessons.md血淚教訓集:雙形式令牌、alpha 稀釋陷阱、accent 拆分、資料契約等(來自真實生產審計)
references/research.mdDeepSeek Search/Fetch API 用法 + awesome-design-md 參考庫目錄(84 slug 全量)
references/verify.md驗收清單 + CI 接線模板(npm script / GitHub Actions)
templates/design-tokens.example.json可直接跑通的輸入範例(雙主題、全部通過 AA),照它改即可

快速開始

# 0) 環境:python3 ≥ 3.9,僅用標準庫
python3 scripts/wcag.py --help

# 1) 研究(可選):從參考站點提煉令牌草稿
python3 scripts/extract.py --url https://example.com --out-dir ./design-draft
#    → design-draft/tokens-draft.json + design-draft/DESIGN.draft.md

# 2) 拉一個知名品牌 DESIGN.md 當參考(當靈感,不當抄襲)
python3 scripts/fetch_ref.py --list                 # 看 84 個 slug
python3 scripts/fetch_ref.py --slug linear.app      # → ./DESIGN.reference-linear.app.md

# 2b) (可選)DeepSeek 聯網研究——付費直連(5 元/1000 次成功請求),預設關閉:
#     僅當使用者明確同意後,才帶 --yes-billing 執行;金鑰由本機檔案提供,永不進對話/日誌
python3 scripts/research.py --yes-billing check     # 驗證金鑰(預設讀 %USERPROFILE%\.deepseek\api_key)
python3 scripts/research.py --yes-billing search --query "fintech dashboard design site:dribbble.com" --count 8

# 3) 生成完整令牌工程(以你對齊後的 tokens JSON 為輸入)
python3 scripts/scaffold.py --tokens my-tokens.json --out ./design-out
#    → tokens.css / design-tokens.json / tailwind.extend.js / preview.html / contrast-report.txt

# 4) 驗收(獨立跑,也可接 CI)
python3 scripts/wcag.py --tokens ./design-out/tokens.css     # CSS 輸入
python3 scripts/wcag.py --tokens ./design-out/design-tokens.json   # JSON 輸入
python3 scripts/wcag.py --pair "#E6E9EF:#0A0C10:4.5"         # 單對 hex 速查

標準工作流(給 agent 的執行順序)

  1. 定需求:讀專案現狀(有沒有 DESIGN.md / tokens / 元件庫),明確主題方向(暗色優先?品牌色?行業調性——金融/開發者工具/醫療…)。
  2. 研究(可選):用 references/research.md 裡的方法做設計研究——DeepSeek Search 找參考站點(付費直連且預設關閉:先向使用者展示費用口徑並取得明確同意,才能帶 --yes-billing;未同意則一律走內建抓取),DeepSeek Fetch / 內建抓取把頁面轉 Markdown 細讀;從 awesome-design-md 拉 1-3 個同行業 DESIGN.md 參考。
  3. 提煉/起草:extract.py 出草稿 → 按 references/spec.md 的 11 節結構人工/agent 歸併角色(把「出現 200 次的 #5e6ad2」變成「品牌主色,用於 CTA 與焦點環」)。
  4. 生成:整理成規範 tokens JSON → scaffold.py 產出全套工程檔案(含預覽頁給使用者看效果)。
  5. 應用:把 tokens.css / tailwind 映射接進專案;元件按 DESIGN.md §4 的元件規則實現。
  6. 驗收:wcag.py 全綠 + references/verify.md 清單逐項過;把門禁接進 CI(見 verify.md 模板)。
  7. 迭代:改任何色值 → 必須重跑 wcag.py,不憑觀感;設計決策變更寫回 DESIGN.md(版本註記)。

硬規則(務必遵守)

  1. 對比度不靠觀感:任何顏色改動都要跑 wcag.py。文字 ≥4.5:1,UI 控制項/邊框 ≥3:1。
  2. 雙形式令牌:每個顏色同時輸出 --x(hex)與 --x-rgb(通道),否則 Tailwind 透明度修飾符靜默失效(詳見 lessons.md #1)。
  3. 不要用 bg-{warn}/10 之類的 alpha 稀釋做淺底——淺底必須是獨立令牌(--warn-soft)。實測稀釋法在淺色主題下對比度反而惡化。
  4. 品牌色拆兩檔:--accent(文字/連結)與 --accent-solid(實底按鈕)。同一個值不可能同時滿足「暗背景上的亮文字」和「白字下的暗底」兩個 ≥4.5:1。
  5. 可互動邊界用 --border-strong(3:1),--border 只做裝飾性分隔。
  6. 誠實標註 Known Gaps:沒提取到的(表單錯誤態、亮色版、私有字體替代)如實寫進 DESIGN.md,不裝完整。
  7. 參考 ≠ 照抄:awesome-design-md 的分析對象是各品牌的公開 CSS 特徵;引用時讀它們的「方法」(層級、節奏、取捨),不要冒充品牌身份;商業專案注意商標與字體授權。

安全

  • 絕不回顯任何 API Key。金鑰解析順序:--key-file → 環境變數 DEEPSEEK_API_KEY → 環境變數 DEEPSEEK_API_KEY_FILE → 預設檔案 %USERPROFILE%\.deepseek\api_key(推薦讓使用者 自行在終端建立,金鑰不經過對話/日誌)。research.py 全鏈路輸出做 sk-*** 遮罩。
  • 計費保護(預設關閉,2026-10):DeepSeek Search/Fetch 為直連計費 API(各 5 元/1000 次 成功請求;帳號級 Search 100 QPS / Fetch 25 QPS)。research.py 未帶 --yes-billing (且環境變數 DEEPSEEK_BILLING_CONSENT 非 1)時直接拒絕執行(exit 3)——agent 必須先 向使用者說明費用並取得明確同意,才可加旗標;opencode 等按量計費環境預設視為未同意。
  • 未設定金鑰時不做 docstring 所謂的「必須聯網」假設——extract.py 走本地 urllib 抓取,DeepSeek 只是增強項。
  • 抓取遵守 robots 與存取頻率;extract.py 預設最多抓 5 張樣式表、單張 512KB 上限。

與其他能力的關係

  • awesome-design-md(VoltAgent,MIT):84 個真實站點的 DESIGN.md 分析集合。本 skill 提供 fetch_ref.py 一鍵取用;它是「參考素材庫」,本 skill 是「工作流程引擎」。
  • DeepSeek Search/Fetch:https://api.deepseek.com/v1/tools/search|fetch。設計研究階段的即時網頁檢索與正文抓取(含 site:/lang:/after: 語法)。按次計費(5 元/1000 次成功請求——僅「返回 200 且結果非空」計費,失敗/超時/空結果不計費)。帳號級限速 Search 100 QPS / Fetch 25 QPS(超出返回 429,research.py 自動退避重試)。本 skill 提供 scripts/research.py 封裝呼叫(金鑰永不回顯;預設關閉——需使用者明確同意並帶 --yes-billing,見 §安全)。
  • Google Stitch 官方 lint(可選):npx @google/design.md lint DESIGN.md。

相關技能