
Day27,妙筆俠客 Google Stitch 登場,
在畫布上把快問快答、吃金幣、俄羅斯方塊改了一版。
設計圖有了,接下來要照圖施工,把新門面裝進府裡!
長輩可能拿手機,也可能把平板立在桌上;
有人習慣直放、有人習慣橫放,還有人會把系統字級調到最大。
今天,俠客不只在畫布上作畫,還要和 coding agent 搭上線,一起把設計帶回 App。
今天就讓我們看看:
Stitch 交出來的設計稿裡,有什麼可以帶回 App?
MCP、CLI、SDK、Agent Skills、DESIGN.md,各是什麼、差在哪?
AI 一起設計,跟 AI 自己改,差在哪?
選好畫面,按 More → Download,會下載一個 zip,
解壓縮後有三個檔:

| 檔案 | 內容 |
|---|---|
screen.png |
畫面的截圖 |
code.html |
完整的網頁,樣式用 Tailwind CSS |
DESIGN.md |
這個專案的設計規則 |
官方說明:
Stitch 的設計,有「圖片」和「HTML 程式碼」兩種輸出。DESIGN.md 則是 跟著畫面一起放進 zip:
它是一份獨立的文件,離開 Stitch 也能用,
More → Export,可以把設計送到其他地方:

Export 是新功能(選單上標 NEW),官方文件還沒有說明;
標 PREVIEW 的選項還在預覽階段,這裡以介面為準(2026-10-12)。
HTML 是完整的網頁,樣式用 Tailwind CSS 寫在 class 裡。
例如作答畫面的選項按鈕:
<button class="h-[76px] rounded-xl border-[3px]
border-outline bg-surface-container-lowest">
<span class="w-12 h-12 rounded-lg bg-surface-variant">2</span>
<span class="text-label-xl font-bold">綠豆</span>
</button>
從這幾行,讀得出設計的意圖:
官方把 HTML 定位成 轉換的基礎:
LLM 拿 HTML 加上參考圖,可以轉成 React、Vue,
也可以轉成 Flutter、Jetpack Compose、SwiftUI 這類非網頁的框架。
HTML 是施工圖;變成 Flutter,要照圖再蓋一次。
官方說明:
DESIGN.md 是一份純文字的設計系統文件,人和 AI 都讀得懂、改得了。
官方拿它跟 AGENTS.md 對照:
| 檔案 | 誰讀 | 寫什麼 |
|---|---|---|
| README.md | 人 | 這個專案是什麼 |
| AGENTS.md | coding agent | 怎麼建置這個專案 |
| DESIGN.md | 設計 agent | 這個專案的外觀和使用感受 |
一份 DESIGN.md 分成兩層:
上半部(YAML):精確的設計 token,例如色碼、字型、間距。下半部(Markdown):為什麼這樣設計。這兩層怎麼分工,DESIGN.md 的介紹頁 是這樣寫的:
token 給 AI 精確的數值,文字告訴它這些數值為什麼存在。
產生 DESIGN.md 有三種方式:
① 依描述產生
這次的設計規則就是這樣來的:
第一個畫面產生時,Stitch 自動建了一份。
在畫布上按Modify → DESIGN.md,就看得到它:

檔案內容節錄如下:
---
name: Warm Clarity Senior Quiz
colors:
surface: '#f9f9fc'
on-surface: '#1a1c1e'
primary: '#005445'
primary-container: '#0d6e5c'
outline: '#6f7975'
typography:
label-xl:
fontFamily: Noto Sans
fontSize: 24px
fontWeight: '700'
---
## Colors
- Primary (#0D6E5C 深松青綠):主要行動按鈕底色。
搭配純白文字時對比度高達 6.3:1……
② 從現有的素材萃取
官方說明:
給它網址或圖片,它會找出配色、字型和風格,
照已經有的東西寫成 DESIGN.md。
入口在同一個面板的
Start with your design,
介面上能當素材的,比文件寫的還多:

這次實際試了一次:
上傳三張原版 App 的截圖,
補充說明寫「照現在的樣子萃取,不要重新設計」。

同樣的三張 App 截圖,分別在原本的專案、新開的專案各跑一次:

| 原版 App | 原本的專案 | 新開的專案 | |
|---|---|---|---|
| 底色 | 深色 | 淺色 | 深色 |
| 綠色 | #4A9D7E、#6FD8AE | #005445 | #7EC8AC |
| 紅色 | #FF6B6B | 沒有 | #E55656 |
萃取完,要對照原本的設計再核對一次。
③ 自己手寫
官方說明:
進階使用者可以直接手寫,把想要的設計精確地寫進去。每一段都只是 Markdown,開頭可以再加 YAML 放設計 token;
除了標準的 Markdown 和 YAML,沒有特殊語法。
段落的順序照 DESIGN.md 規格:
Overview → Colors → Typography → Layout → … → Do's and Don'ts,
用不到的段落可以省略。
App 的顏色集中在 app_theme.dart,DESIGN.md 的 token 可以這樣對過去:
| DESIGN.md | Flutter |
|---|---|
colors(primary、surface…) |
ColorScheme |
| typography(headline、body、label) | 文字的字級、字重 |
| rounded | 按鈕、卡片的圓角 |
| spacing | 間距 |
節錄 app_theme.dart 裡表格第一列「colors → ColorScheme」的部分,
註解標示每個值來自 DESIGN.md 的哪個 token:
ThemeData buildLightTheme() => ThemeData(
colorScheme: ColorScheme.fromSeed(
// primary-container: '#0d6e5c',當作產生整組配色的種子色
seedColor: const Color(0xFF0D6E5C),
brightness: Brightness.light,
).copyWith(
// primary: '#005445',按鈕綠,白字 8.92:1
primary: kPrimaryDeep,
// surface: '#f9f9fc',底色
surface: kPaper,
// on-surface: '#1a1c1e',文字
onSurface: kInk,
),
useMaterial3: true,
);
搬的時候,有兩個地方沒有照抄:
- 按鈕綠:DESIGN.md 寫白字配 #0D6E5C「高達 6.3:1」,
用 WCAG 公式重算是 6.17:1,沒到主要文字 7:1;
改用同一份色票裡更深的 primary #005445(8.92:1)。- 字型:Plus Jakarta Sans、Noto Sans 沒有中文字,
中文會退回系統字型,所以沒有搬。
DESIGN.md 裡的數字,帶回 App 前自己再算一次。
Day27 是自己在網頁上點選、輸入提示詞。
整個 App 有幾十個畫面,一個一個上傳、下載、比對,會比較花時間。
Stitch 也替開發者準備了入口,讓 coding agent 直接操作 Stitch。
MCP(Model Context Protocol)是一個開放的協定,
規定 AI 應用程式怎麼接上外部的工具和資料。
MCP 官方網站 用 USB-C 比喻它:
一個標準的接口,各種工具都能接上。
Stitch 的 MCP 伺服器,
讓 Cursor、Antigravity、Gemini CLI 這些 AI 工具,
直接操作你的 Stitch 專案。
官方特別說明,它跟一般的 MCP 伺服器不一樣:
大部分的 MCP 伺服器在本機(Local),讀電腦裡的檔案、跑電腦上的指令;
Stitch 是遠端(Remote)的 MCP 伺服器,在雲端。
所以要先確認身分:代替你操作的 AI 工具,真的有權限改你的設計。
確認身分的方式有兩種:
| 方式 | 適合 |
|---|---|
| API 金鑰 | 自己的電腦、工具可以把金鑰寫在設定檔(大部分情況最快) |
| OAuth(瀏覽器登入) | 不能把金鑰存在硬碟的環境、想隨時在 Stitch 設定頁登出撤銷 |
MCP 是接上 Stitch 的其中一種方式。
Stitch 官方文件 列給開發者的入口,一共有五種:
| 入口 | 是什麼 | 適合 |
|---|---|---|
| MCP | 雲端的 MCP 伺服器 | 在對話裡請 AI 工具產生、修改、下載畫面 |
| CLI | 終端機指令 @google/stitch | 自己下指令、寫腳本、上傳參考圖 |
| SDK | TypeScript 套件 @google/stitch-sdk | 寫程式自動化、整合進自己的工具 |
| Agent Skills | 給 coding agent 的技能包 | 讓 agent 照寫好的流程做事 |
| DESIGN.md | 設計規則檔 | 讓每個畫面、每段程式用同一份規則 |
它們不是五套各自獨立的東西:
官方說明 SDK 連的就是同一台 MCP 伺服器,
工具跟 AI agent 用的一模一樣。
技能 是寫好的步驟說明,
告訴 agent 該用哪些工具、照什麼順序,例如把畫面轉成 React 元件。
另外有擷取本機網頁、比對 DESIGN.md 的工具,
對象是網頁的開發伺服器。
不管從哪個入口產生畫面,都可以照同一份。

MCP 是地基;SDK、Agent Skills 蓋在上面,DESIGN.md 是大家共用的規則。
這個 App 是 Flutter,不是網頁,CLI 的擷取、比對工具用不上。
需要的是:
在對話裡請 Stitch 畫、看結果、再請它改。
| 要做的事 | 用哪個入口 |
|---|---|
| 建專案、產生和修改畫面、下載 HTML 與截圖 | MCP |
| 上傳 App 的截圖當參考圖 | CLI(MCP 沒有上傳圖片的工具) |
| 共用的色票、字級 | Stitch 自動產生的 DESIGN.md |
SDK 也能上傳圖片,但要另外寫 TypeScript;
這次只上傳幾張截圖,用 CLI 一行指令就夠。
1. 建立 API 金鑰
Stitch 右上角的設定 → API key → Create key,
建好之後先複製起來。

官方提醒:
金鑰不要放在公開的地方、不要 commit 到公開的程式庫。
設定頁也寫著:公開出現的金鑰,會被自動停用。
2. 加入 MCP
在專案資料夾的終端機執行(macOS 預設的 zsh):
read -s "KEY?貼上 Stitch API 金鑰:"; echo
claude mcp add-json stitch "{\"type\":\"http\",\
\"url\":\"https://stitch.googleapis.com/mcp\",\
\"headers\":{\"X-Goog-Api-Key\":\"$KEY\"},\
\"timeout\":600000}"
unset KEY
claude mcp list
- read -s:貼上的金鑰不會顯示,也不會留在指令紀錄。
- "timeout": 600000:等候上限拉長到 10 分鐘(見下方說明)。
- 看到 stitch: … ✔ Connected 就接上了;
重開 Claude Code,對話裡才會出現 Stitch 的工具。

Stitch 產生一個畫面要一、兩分鐘,官方工具說明 也提醒不要重試;
而 Claude Code 對 HTTP 的 MCP 伺服器,預設 60 秒內沒收到回應就中斷。
Stitch 設定頁產生的 claude mcp add 指令沒有 timeout 參數,所以改用 add-json。
3. 登入 CLI,上傳參考圖
npx -y @google/stitch@0.11.1 login
npx -y @google/stitch@0.11.1 upload screen 04_quiz_home.png \
--project <專案 ID>
- login 會打開瀏覽器,用 Google 帳號登入;
要跟建 API 金鑰的是同一個帳號。- 上傳之後,畫布上會多一張參考圖,有自己的畫面 ID。

接上之後,Claude Code 用 MCP 的工具操作 Stitch。
這次用到四個:
| 工具 | 做什麼 |
|---|---|
| create_project | 建一個新專案 |
| edit_screens | 對畫面或參考圖下指令,產生新畫面 |
| list_screens | 列出專案裡的畫面 |
| get_screen | 拿畫面截圖和 HTML 的下載網址 |
以作答畫面為例,
對上傳的原版截圖呼叫 edit_screens:
edit_screens
selectedScreenIds: ["7978104963828594464"] 原版作答畫面的截圖
deviceType: MOBILE
modelId: GEMINI_3_8_FLASH
prompt: Idea……Theme……Content……Image……(Day27 的四段式)
一兩分鐘後,Stitch 回來的內容有:
- 新畫面的 ID、標題、截圖和 HTML 的下載網址。
- Stitch 改寫過的提示詞:
例如把「內文至少 20pt」寫成「20pt(26px+)」。- 設計說明,和下一步的建議,
例如「設計長輩點選答案後的即時確認狀態」。
回來的不只是一張圖,還看得到 Stitch 怎麼理解你的話。
Day27 定好檢查表後,
我先讓 Claude Code 照同一張表,自己把 App 改成淺色;
今天的版本,則是加上 Stitch 一起做。
| 版本 | 怎麼改的 |
|---|---|
| 原版 | 深色,黑客松時的樣子 |
| Claude 單獨 | Claude Code 照檢查表,自己改成淺色 |
| Claude+Stitch | Stitch 出設計稿,Claude Code 審稿、寫成 Flutter |
對比是文字和它正後方顏色的亮度比,
WCAG 的公式算出來,從 1:1(同一個顏色)到 21:1(黑配白)。
檢查表用的標準:一般文字 4.5:1 以上,主要文字 7:1 以上。

同一組畫面、同一台模擬器:

| 項目 | 原版 | Claude 單獨 | Claude+Stitch |
|---|---|---|---|
| 字夠大(字級 200%) | 標題斷字、題目只剩一半 | 題目只剩一半 | 完整顯示 |
| 對比:最低的文字 | 3.27:1(標出的正解) | 5.20:1(答對的提示) | 6.46:1(錄影中);其他 7.76:1 以上 |
| 按鈕夠大、分得開 | 「開始」高 56 | 「開始」高 56 | 「開始」、選項高 76 |
| 一次一件事 | 是 | 是 | 是 |
| 圖示配文字 | 返回、齒輪沒有字 | 返回、齒輪沒有字 | 「← 返回」「⚙ 家人設定」 |
| 對錯不只靠顏色 | 圖示+文字 | 圖示+文字 | 圖示+文字+不同顏色,正解加打勾 |
| 平板 | 拉寬 | 拉寬 | 限制寬度,字放大 1.4 倍 |
| 橫放 | 沒有另外設計 | 沒有另外設計 | 左右兩欄 |
長輩常把系統字級調大,
Android 模擬器的字級設成 200%:

各自的優點,和要注意的地方:
Claude 單獨:
優點:快,不用另外開工具;照檢查表改顏色,按鈕的對比到 7:1。
要注意:版面沿用原本的,平板、橫放、題目被切掉的問題還在。
Claude+Stitch:
優點:多了設計的眼光,帶來原本沒想到的版面,
例如「← 返回」「⚙ 家人設定」圖示加字、倒數做成白底小卡、
答錯不用紅色而是寫「正確答案是 1」、平板限寬、橫放兩欄;
還留下一份 DESIGN.md,之後的畫面可以照同一套規則。
要注意:它寫的數字(說 7:1,實際 6.17:1)和自己加的元素,要審稿時再修。
設計稿看不到的:
系統字級調到 200% 時,畫面會變成什麼樣子,
Stitch 的稿看不出來,只看程式碼也看不出來;
題目被切掉、標題斷字,都是實際跑起來、截圖之後才發現的。
Stitch 出點子,Claude Code 算數字;兩邊都看過,才帶回 App。
設計交給 Stitch,數字自己算;量體裁衣,最後要穿在使用者身上試過。
今天的畫面,都是在模擬器和自己的手機上看的。明天請幾位中高齡的使用者實際用用看:字看得清楚嗎?按得到嗎?哪裡會卡住?
感謝有緣看到這邊的你~
希望佛菩薩也祝福你:🌟平安自在 順遂健康🌟
南無觀世音菩薩🍀 南無地藏菩薩🏠 南無阿彌陀佛☀️