prototype (mattpocock/skills)
建構一次性原型,用來驗證狀態邏輯是否合理或探索介面方向。
Matt Pocock 的 prototype:遵循它自己的 UI 變體規則(4.95,對照組為 3.71),成本與未使用技能時相近。
Codex CLI · gpt-6-astra
27.2 / 30
相對未使用技能的提升:+1.23 · 推薦 · 18 次執行
推薦:總分 27.2/30 至少 22,產出品質 5.0 至少 3.5,提升幅度 +1.23 至少 +1.0。
SOTA
透過使用 Codex 測試。
涵蓋 Codex, Claude Code
Codex CLI 0.166(SOTA 等級):18 次評分執行。依我們的等級規則,在這裡通過也涵蓋 Claude Code;但這不代表第二等級的結果。
分數
每個維度為 0 到 5 分,六個維度相加即為滿分 30 的總分。每個維度都是 5 分最好。成本 5 分代表便宜又快速;安裝 5 分代表容易安裝。
- 觸發可靠性
- 5.0
- 相對未使用技能的提升
- 3.2
- 產出品質
- 5.0
- Token 與時間成本
- 5.0
- 安裝與可攜性
- 4.0
- 安全性
- 5.0
安全審查
安全靜態掃描:1 CRITICAL / 1 HIGH / 0 MEDIUM。人工審查:可在無網路沙箱中安全執行(已說明掃描器的發現)。掃描結果不能證明技能一定安全。
安裝
npx skills@latest add mattpocock/skills --skill prototype
固定 Commit: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
測試日期: 2026-11-02
我們測了什麼
- 製作訂閱狀態模型原型 — 我無法判斷我們的訂閱生命週期在付款失敗時是否合理。狀態:trial、active、past_due、paused、canceled。事件:試用期結束、付款成功、付款失敗、使用者暫停、使用者恢復、使用者取消、使用者重新啟用。規則:兩次失敗…
- 製作定價頁變體原型 — 這個小型靜態網站(三個方案)的 pricing.html 上,我不確定方案該怎麼呈現。請為該區塊製作幾個不同的設計選項,讓我能用瀏覽器比較;真實的定價內容必須保留。不要加入建置步驟。
- 製作折扣疊加規則原型 — 折扣疊加起來的感覺對嗎?目前規則:優惠券 SAVE10 享 10% 折扣,優惠券 HALF 享 50% 折扣,訂單滿 $50 免運,忠誠會員再享 5% 折扣。我無法決定套用順序,也無法決定哪些可以疊加。我想試一些案例,看看會發生什…
優點
- 相對未使用技能,平均分數從 3.71 提升到 4.95(+1.23)。
- 技能即使未被點名也會被採用:6/6 次實驗組執行都讀取了技能檔案。
- 沒有 Token 額外負擔:Token 用量是未使用技能的 1.02 倍。
- 使用技能後的絕對品質很高:4.95 / 5。
缺點
- 每個任務的每個組別 n=2;約 1 分以內的差異屬於雜訊。
評測
在 Mac 測試機上執行 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都使用全新的暫存專案,以及臨時的 HOME/TMPDIR/快取;技能分成已安裝(實驗組)、未安裝(對照組),以及未安裝但把技能的核心要求濃縮成一句話附加在提示詞後(一句話提示組)。每個任務的每個組別各執行 2 次,關閉網路,封鎖 /tmp 寫入。提示詞從未提及技能(下方註明者除外)。共有三個任務:為含有付款失敗情況的訂閱生命週期建立模型(狀態問題)、比較靜態定價區塊的幾種選項(外觀問題,真實方案內容必須保留),以及讓使用者在開始寫程式前試玩折扣疊加規則(邏輯問題,存到 prototype/)。規則檢查包括:獨立完整的 HTML、顯示五種狀態、每個事件都有按鈕、引導式情境、標示為 prototype、沒有測試檔案;定價任務還要求至少三個變體、一個 ?variant= URL 參數,以及固定式浮動切換器。
三組對照
| 組別 | 平均分數(0-5) | 每次執行 Token 用量 |
|---|---|---|
| 未使用技能 | 3.71 | 133k |
| 一句話提示 | 4.72 | 89k |
| 使用技能 | 4.95 | 136k |
以 Codex CLI 執行 18 次,採規則式檢查評分,不經 LLM 評審。總分 27.2 / 30,評級為 推薦。
判定:推薦(27.2 / 30)。 來源:mattpocock/skills,skills/engineering/prototype,固定於提交 4ae2317。安裝:npx skills@latest add mattpocock/skills --skill prototype。授權條款: MIT(儲存庫 LICENSE)。
這是什麼
來自 mattpocock/skills 的 prototype 技能:建立一個用完即丟的原型,用來回答某個設計問題。邏輯或狀態問題會得到單一 HTML 檔案,內含狀態面板、自由操作按鈕與引導式走查;外觀問題則在同一路由上提供幾個截然不同的版本,以 URL 參數與底部浮動列切換。規則:明確標示為用完即丟、執行方式極簡、不持久化、不琢磨細節、沒有測試。SKILL.md 加上 LOGIC.md 與 UI.md,總計約 2,600 字;僅有 Markdown。
我們如何測試
在 Mac 測試機上使用 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都使用全新的暫存專案與暫存 HOME/TMPDIR/快取,安裝技能(實驗組)、未安裝(對照組),或未安裝但將技能核心要求濃縮成一句話附加在提示詞後(一句話提示組),每個任務每組執行 2 次,網路關閉,/tmp 寫入封鎖。提示詞從未提及技能(以下註明的措辭除外)。
三項任務:為包含付款失敗的訂閱生命週期建立模型(狀態問題)、比較靜態定價區塊的選項(外觀問題,必須保留真實方案內容),以及讓使用者在寫程式前試玩折扣疊加規則(邏輯問題,存到 prototype/)。規則檢查包括自含 HTML、顯示五種狀態、每個事件一個按鈕、引導式情境、標示為原型、沒有測試檔案;定價任務還要求至少三個版本、?variant= URL 參數與固定的浮動切換器。
- 為訂閱狀態模型建立原型 — 我不確定我們的訂閱生命週期在付款失敗時是否合理。狀態:trial、active、past_due、paused、canceled。事件:試用結束、付款成功、付款失敗、使用者暫停、使用者恢復、使用者取消、使用者重新啟用。規則:兩次失敗…
- 為定價頁版本建立原型 — 在這個小型靜態網站的 pricing.html(三個方案)上,我不確定方案該如何呈現。為該區塊做幾個不同的設計選項,讓我能用瀏覽器比較;真正的定價內容必須保留。不要建置步驟。
- 為折扣疊加規則建立原型 — 折扣疊加起來的感覺對嗎?目前規則:優惠券 SAVE10 可折 10%,優惠券 HALF 可折 50%,訂單滿 $50 免運,忠誠會員額外折 5%。我無法決定套用順序,也無法決定哪些可以疊加。我想試各種案例並觀察…
評分方式為程式化檢查(隱藏測試/植入問題召回/限制條件檢查/視情況進行渲染與 OCR),每次執行 0–5 分。沒有任何 LLM 評審決定分數。
結果
提供給第三組的一句話提示:「建立一個用完即丟的原型,回答一個明確陳述的問題:邏輯或狀態問題用單一自含 HTML 檔案,內含清楚陳述的問題、每次點擊後重新渲染的可讀狀態面板、每個動作一個按鈕,以及引導式走查情境(正常路徑、邊界情況、非法操作);外觀問題則在同一頁提供三個截然不同的版本,以 ?variant= URL 參數與底部浮動列切換。不要測試,不要琢磨細節。」
| 任務 | 對照組分數 | 一句話提示 | 使用技能 | 對照組 Token 數 | 一句話提示 Token 數 | 使用技能 Token 數 | 技能讀取 |
|---|---|---|---|---|---|---|---|
| t1-subscription-logic | 4.64 | 4.4 | 4.84 | 155k | 51k | 134k | 2/2 |
| t2-pricing-ui | 2.5 | 5.0 | 5.0 | 125k | 153k | 133k | 2/2 |
| t3-discount-stacking | 4.0 | 4.75 | 5.0 | 119k | 62k | 139k | 2/2 |
平均分數:未使用技能 3.71,使用技能 4.95(差異 +1.23)。每次執行 Token 數:133k 對 136k(1.02 倍);時間 186 秒對 149 秒。一句話提示組:4.72(技能相較一句話提示的增益:+0.23;一句話提示相較無技能的增益:+1.01);一句話提示每次執行 89k Token,因此技能的成本是一句話提示的 1.52 倍。
實際發生了什麼
- 平均分數:對照組 3.71、一句話版本 4.72、技能 4.95。技能相較對照組 +1.24,相較一句話提示 +0.23;每次執行 136k Token,對照組 133k(1.02 倍),一句話提示 89k(1.5 倍)。
- 外觀任務顯示了效果:技能在兩次執行中都產生三個版本,附有底部浮動切換器與可用 URL 切換的版本(依我們的檢查為 5.0 與 5.0);對照組得分為 4.0 與 1.0:兩次都沒有浮動列,其中一次有三種版面加上切換器與 URL 參數,另一次則沒有,而且有一次頁面漏掉了一個方案價格。
- 在兩項邏輯任務中,對照組已經建出互動式 HTML(訂閱模型 4.4-4.8,折扣疊加 4.0);技能額外加入走查情境與原型標示:情境出現在 4/4 次技能組執行中,對照組則為 2/4。
- 一句話版本在定價任務上表現同樣好;它在邏輯任務上略遜一籌,因為沒有每次都把檔案標示為原型(4 次中有 2 次)。
各面向分數
| 面向 | 分數 | 原因 |
|---|---|---|
| 1_輸出品質 | 4.95 | 使用技能時平均分數 4.95/5(程式化檢查,見各任務 表格)。 |
| 2_相較無技能的提升 | 3.23 | 相較未使用技能的 3.71,+1.23 分(每項任務 n=2;約 1 分以下 屬於雜訊)。 |
| 3_觸發 | 5.0 | 技能檔案在 6/6 次實驗組執行中被讀取。 |
| 4_指令可攜性 | 4 | 平實的 Markdown;假設有任務執行器與 git 可用於「capture」步驟, 此步驟為選用。 |
| 5_效率 | 5 | 1.02 倍 Token(每次執行 136k 對 133k)與 0.80 倍時間(149 秒對 186 秒)。 |
| 6_安全性與衛生 | 5 | 僅有 Markdown;沒有指令碼。 |
這項測試的限制
- 以規則檢查功能(版本、浮動列、情境);設計品質與原型是否回答問題,並未由人評判。
- 評分在分析期間修正過兩次:版本可以放在獨立的 CSS/JS 檔案中,版面切換也算一種版本;第一次計分低估了這些,因此較早的數字不予採用。
- 技能建議將原型提交到用完即丟的分支,並在 issue 留下指標;這在臨時資料夾中無法測試。
- 每項任務每組 n = 2:約 1 分以下的差異屬於雜訊。
- 規則式評分只能衡量檢查看得到的部分;無法評判品味,也無法判斷結果是否為最佳可能。
安全性
見 security.md。掃描:CRITICAL 1 / HIGH 1 / MEDIUM 0。判定:可安全執行(網路關閉的沙箱)。乾淨的掃描結果不能證明技能安全。
總結
這項技能明顯能讓 Codex 建出它所描述的那種原型(可用 URL 切換的版本、浮動列、引導式情境),而單純的要求做不到,且不會增加 Token 成本。一句話的摘要就能達到大部分相同行為,但技能額外補上邏輯走查與原型標示的細節。
完整紀錄
執行日誌:prototype (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 欄位:任務、組-輪次、得分(0-5)、token、秒、通過的檢查、代理開啟的 skill 檔案。 t1-subscription-logic control-1: 得分 4.84, token 138434, 秒 186.6, 檢查 6/7, 未開啟 t1-subscription-logic control-2: 得分 4.44, token 171950, 秒 379.3, 檢查 6/7, 未開啟 t1-subscription-logic oneliner-1: 得分 4.68, token 51299, 秒 95.1, 檢查 6/7, 未開啟 t1-subscription-logic oneliner-2: 得分 4.13, token 52046, 秒 163.3, 檢查 5/7, 未開啟 t1-subscription-logic treatment-1: 得分 4.68, token 144823, 秒 163.1, 檢查 6/7, 開啟 prototype t1-subscription-logic treatment-2: 得分 5.0, token 124780, 秒 165.0, 檢查 7/7, 開啟 prototype t2-pricing-ui control-1: 得分 4.0, token 169276, 秒 134.1, 檢查 5/6, 未開啟 t2-pricing-ui control-2: 得分 1.0, token 81988, 秒 97.9, 檢查 2/6, 未開啟 t2-pricing-ui oneliner-1: 得分 5.0, token 153260, 秒 107.2, 檢查 6/6, 未開啟
18 次執行、3 個產出檔案
範例產出
SOTA · 装了 skill:prototype/index.html(t1-subscription-logic,第 1 次,Codex)
<!doctype html> <html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Subscription lifecycle prototype</title> <style> *{box-sizing:border-box}body{font:16px/1.5 system-ui,sans-serif;background:#f3f6f3;color:#243b31;margin:0}main{max-width:1080px;margin:auto;padding:32px 24px}h1{font-size:32px;letter-spacing:-1px;margin:8px 0}h2{font-size:19px;margin-top:0}.eyebrow{color:#49715f;letter-spacing:2px;font-size:12px;text-transform:uppercase}.panel{background:white;border:1px solid #d8e3db;border-radius:12px;padding:24px;margin:20px 0}.buttons,.tabs,.flow{display:flex;flex-wrap:wrap;gap:8px}button,select{font:inherit;color:#245940;background:white;border:1px solid #b6ccbe;border-radius:6px;padding:9px 12px}button{cursor:pointer}button:hover{background:#edf5ef}button:focus-visible,select:focus-visible{outline:3px solid #589c7b;outline-offset:2px}button:disabled{opacity:.45;cursor:default}.current,[aria-selected=true]{background:#206d50;color:white}.flow span{padding:6px 15px;border:1px solid #d8e3db;border-radius:25px}dl{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}dt,small,.muted{color:#5a7064}dt{font-size:12px}dd{margin:4px 0;font-weight:650}.notice{background:#eef6f0;border-left:3px solid #206d50;padding:12px}.columns{display:grid;grid-template-columns:1.2fr 1fr;gap:20px}.columns .panel{margin:0}.steps{display:grid;gap:8px}.steps button{text-align:left}.history{max-height:360px;overflow:auto}table{width:100%;border-collapse:collapse;font-size:13px}td,th{text-align:left;padding:10px 6px;border-bottom:1px solid #e0e8e2;vertical-align:top}li{margin:10px 0}select{max-width:100%;margin-top:10px}summary{cursor:pointer;font-weight:600}@media(max-width:700px){.columns{grid-template-columns:1fr}dl{grid-template-columns:repeat(2,1fr)}main{padding:20px 16px}} </style><main> <div class="eyebrow">Throwaway prototype · No saved data</div><h1>When payments fail, what happens next?</h1><p>Do these five subscription states behave as intended? Try events, inspect the full state, and walk through payment failures, pauses, and reactivation before implementation.</p> <section class="panel"><label for="policy"><strong>Interpret “two failed payments in a row while past_due”</strong></label><br><select id="policy"><option value="3">Two more failures while already past due (3 total)</option><option value="2">Two consecutive failures total (including entry into past due)</option></select><p><small>Default: literal “while already past due” reading. Changing the interpretation resets the simulation.</small></p><div id="snapshot"></div><div class="notice" id="notice" role="status" aria-live="polite">New trial account. No charges attempted.</div></section> <section class="panel"><h2>Try any event</h2><div class="buttons" id="events"></div><p><small>Payment buttons represent new charge attempts and their outcomes, not delayed notifications. Invalid events stay clickable so you can see why they are blocked.</small></p><div class="buttons"><button id="day">Advance 1 day</button><button id="month">Advance 30 days</button><button id="reset">Reset to trial</button></div></section> <div class="columns"><section [... excerpt: first 3200 of 13238 characters]