Communitygithub.com

Gentle-Programming/gentle-design

觸發條件:設計畫面、頁面、Mockup、登陸頁面、UI 方向、畫板、嘗試不同方法、設計系統同步。將自包含的 HTML 設計方向寫入 design/<slug>/ 目錄下。

gentle-design 是什麼?

此技能專為 AI 代理(如 Claude Code、Cursor、Codex)設計,用於視覺與 UI 設計任務。當收到設計頁面、Mockup、登陸頁面或 UI 方向的請求時,它會自動產生多個自包含的 HTML 畫板,並管理所有設計工件。每個畫板都是獨立的 HTML 檔案,內嵌 CSS、JS 與 SVG,僅使用系統字體堆疊,絕不依賴外部 CDN 或遠端資源,確保設計在隔離環境中可重現。 此技能支援完整的設計工作流程:從建立新設計、迭代現有畫板、處理 Canvas 註解意見,到將設計交付給開發團隊實作。它會維護一個 `design.json` 清單,記錄每個畫板的標題、權衡取捨與尺寸。當專案中存在設計系統來源時,它能自動同步生成 `design/system.md` 與可視化校樣,強制所有畫板必須與系統 Token 一致,否則會主動修正偏差。它還整合了 `gentle-ui-design` 技能中的 UX 品質檢查,確保每個畫板都符合無障礙標準(WCAG AA)與回應式設計原則,並支援偏好減少動畫設定。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Gentleman-Programming/gentle-shell/tree/HEAD/skills/design

在你喜歡的 AI 中提問

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

說明文件

啟用合約

每當使用者以一般文字提出 UI 設計、Mockup、畫面、登陸頁面或視覺方向的要求,或針對 design/ 下的畫板進行迭代時,預設啟用此技能。不要用它來實作專案技術棧中的正式程式碼。

/gentle:design 指令是選用捷徑:所有動作皆可透過一般請求搭配此技能與 gentle_design 工具(list、open、stop、implement、handoff)完成。

硬性規則

  • 每個畫板都是一個自包含的 HTML 檔案:內嵌 CSS、JS 與 SVG;僅使用系統字體堆疊。絕不引用外部 URL、CDN、遠端字型、圖片或腳本。
  • 使用針對目標受眾的真實內容;禁止使用 Lorem Ipsum 或佔位名稱。
  • 無障礙標記:使用語意化元素與地標、符合 WCAG AA 對比度、可見的焦點樣式、尊重 prefers-reduced-motion 設定(若有動畫)。
  • 當 design/system.md 存在時,先讀取它,並僅使用其中的 Token 與元件規則;在完成任何畫板前執行「設計系統同步」中的自我檢查。
  • 最多提出一個釐清問題,且僅在需求不明確(缺乏目標或內容)時提出。
  • 迭代時僅編輯指定的畫板。絕不重寫其他畫板。

決策閘門

情況動作
新的需求簡報撰寫 N 個(預設 3 個,或依要求數量)明顯不同的設計方向,存入新的 design/<slug>/
對某個畫板的意見回饋僅編輯該檔案;保留其清單項目,若權衡取捨有變則更新 tradeoff
「儲存並嘗試不同方法」以接下來的 NN 新增一個畫板;保留先前畫板;將其附加至清單
使用者想調整數值(間距、色彩、字體級數)在畫板中加入滑桿或控制項,以及一個「複製為提示詞」按鈕,可將選定數值複製為提示詞
新需求簡報的 design/<slug>/ 已存在選取新的 slug;絕不覆蓋其他設計
訊息附帶設計評論,或使用者要求套用評論遵循下方的「Canvas 註解」
/gentle:design sync,或使用者要求擷取專案的設計系統遵循下方的「設計系統同步」
使用者要求顯示、停止或列出設計,或實作一個畫板呼叫 gentle_design 工具(open、stop、list 或 implement,參數為 <slug>/<artboard>);遵循 implement 回傳的交接文字,並以 action "handoff" 回報進度:開始時 status: "in_progress",完成時 status: "implemented",若執行中的應用程式有回送 URL 則將 previewUrl 設為該 URL

設計前

在每次新的需求簡報前執行此閘門:呼叫 gentle_design 工具,參數為 action: "list",然後:

list 回報動作
system.exists 為 false 且 designSources 存在先執行「設計系統同步」,用一句話告知使用者已同步專案的設計系統,然後再依此設計
無 designSources跳過同步並自由設計
system.staleSources 存在列出那些來源,說明 design/system.md 可能已過期,並在設計前提議重新同步;僅在使用者同意後才重新同步,絕不默默使用過期的 Token

執行步驟

  1. 理解需求簡報:目標、佈局、內容、受眾。
  2. 載入 gentle-ui-design:讀取其 SKILL.md,以及僅與簡報的受眾、主要任務和成功條件相符的參考資料。此技能負責交付;該技能負責 UX 品質。
  3. 從簡報中選取一個 kebab-case 的 slug。
  4. 確保各方向在結構或視覺策略上有所不同,而不僅僅是顏色。為每個方向標註其做出的權衡取捨。
  5. 為每個畫板撰寫 design/<slug>/NN-<name>.html(01-…、02-…;名稱使用 kebab-case)。
  6. 撰寫 design/<slug>/design.json:
{
  "title": "定價頁面",
  "brief": "針對學生的筆記應用程式定價頁面",
  "feature": "odd/tasks/pricing-page.md",
  "artboards": [
    { "file": "01-comparison-table.html", "title": "比較表格", "tradeoff": "資訊密集且易於掃讀;情感吸引力較弱", "width": 1440, "height": 900 },
    { "file": "02-single-plan-hero.html", "title": "單一方案主視覺", "tradeoff": "焦點明確;隱藏方案差異", "width": 1440, "height": 900 }
  ]
}
  1. 將 width/height 設為畫板預期的視口(以 CSS 像素為單位);每次變更時保持清單與檔案同步。欄位:title、brief、選用 feature,以及包含 file、title、tradeoff、width、height 的 artboards[]。
  2. ODD 連結:當設計來自追蹤中的 ODD 功能(目前工作中已有的 odd/tasks/<feature>.md),將 feature 設為該路徑,並在該文件的 ## Log 中附加一個條目,標註 design/<slug>/ 及其畫板。當該設計的某個畫板被交接實作時,Log 條目也須註明被選中的畫板(被交接的那個;list 會回報為 Chosen)以及其他為替代方案。對於小型未追蹤的工作,省略 feature 並讓設計獨立存在;永遠不要為了連結而建立功能文件。
  3. UX 自我檢查:針對你完成的每個畫板,將其與 gentle-ui-design 的構成與回饋(層次、密度、回饋)以及適應性介面(窄螢幕、輸入存取、狀態)指引進行比對,並在回報前修正所有差距。
  4. 在撰寫或變更畫板後,呼叫 gentle_design 工具,參數為 action: "open" 與 slug,除非使用者要求不要這麼做。當 Canvas 分頁已開啟時,它會重新整理該分頁而非開新分頁,因此每次變更後都應呼叫。回報它傳回的 URL。

設計系統同步

  1. 僅讀取,絕不編輯專案原始碼。來源:CSS 自訂屬性(:root、@theme、[data-theme])、Tailwind 設定或 v4 的 @theme、元件庫資料夾、現有的 Token 檔案,以及它們宣告的字型。
  2. 撰寫 design/system.md:色彩(Token 名稱、值、用途)、排版、間距、圓角、陰影與元件規則。每個條目都須標註其來源 path。僅記錄在來源中找到的值。
  3. 撰寫 design/system.html:一個自包含的畫板,寬度 1440 px,呈現那些 Token(色票、字體級數比例、間距、圓角、陰影)與核心元件,遵守相同的無外部 URL 規則。Canvas 會將其顯示為每個設計的第一個面板。
  4. 當沒有設計來源存在時,說明情況並提議一個最小的起手系統供使用者接受;絕不能將發明出來的值作為專案 Token 呈現。
  5. 自我檢查:在 design/system.md 存在的情況下,針對你完成的每個畫板:列出該畫板使用的色彩與字體家族,與系統 Token 比對,並在回報前修正所有偏差。

Canvas 註解

來自 Canvas 的註解儲存在 design/<slug>/comments.json 中;工作階段也會將它們作為訊息接收,每則訊息會標註註解 ID。

  1. 使用 gentle_design_comments 工具(action: "list",可選 slug 與 file)讀取開啟中的註解。若無該工具,則讀取 design/<slug>/comments.json,並使用 status 為 "open" 的條目。
  2. 透過僅編輯其 file 中的畫板來套用每個註解;使用 selector 與 excerpt 找到對應元素。若註解有 screenshot,先查看它:它會附加在註解訊息中,或使用讀取工具開啟 design/<slug>/<screenshot>。它顯示使用者所見的內容,通常是靜態畫板無法呈現的瞬態動畫或轉換狀態。
  3. 使用工具將每個已套用的註解標記為已解決(action: "resolve"、slug、ids)。若無該工具,則將其 status 設為 "resolved" 並將 resolvedAt 設為目前的 ISO 時間,保留其他所有條目與欄位不變。保留你未套用的註解為開啟狀態,並說明原因。

僅有檔案存取權限的代理適用的檔案格式:

{
  "version": 1,
  "comments": [
    { "id": "k3x9p2ab", "file": "02-bold.html", "selector": "body > header > h1", "excerpt": "Ship faster", "comment": "讓標題更短。", "createdAt": "2026-10-26T10:00:00.000Z", "status": "open", "sentAt": null, "resolvedAt": null },
    { "id": "m7q2w9cd", "file": "02-bold.html", "selector": "#cta", "excerpt": "Start", "comment": "按鈕在懸停過渡時會跳動。", "screenshot": ".screenshots/m7q2w9cd.png", "createdAt": "2026-10-26T10:05:00.000Z", "status": "open", "sentAt": null, "resolvedAt": null }
  ]
}

screenshot 為選用:相對於設計資料夾的路徑,位於 .screenshots/ 下,僅在使用者附加圖片時存在。

絕不刪除或重新排序條目,並保持檔案為有效的 JSON:Canvas 拒絕覆蓋無法解析的檔案。

輸出合約

回傳:slug、每個畫板檔案(含標題與權衡取捨)、本次變更的檔案、本次解決的註解 ID,以及任何未決問題。提供步驟 10 的 Canvas URL,或說明 /gentle:design open <slug> 可顯示 Canvas(若你並未開啟它)。對於同步作業,回傳已讀取的來源路徑、每個群組的 Token 計數,以及該系統是否為建議的起手系統;若是在「設計前」步驟中自動同步,則說明已執行並以同樣方式回報。

參考資料

  • 專案中的 design/system.md(若存在)——須遵循的設計 Token。
  • gentle-ui-design 技能——與每個畫板搭配使用的 UX 品質指引。

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

相關技能