prototype (mattpocock/skills)
状態モデルやロジックの手応え、UI の方向性を確かめるための使い捨てプロトタイプを作ります。
Matt Pocock's prototype:独自の UI バリアントルールに従い(対照群の 3.71 に対し 4.95)、スキルなしとほぼ同じコストです。
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 もカバーします。第2ティアについては何も述べません。
スコア
各ディメンションは 0〜5 点で、6 つの合計が 30 点満点の合計スコアになります。すべてのディメンションで 5 が最良です。コスト 5 は低コストで高速、インストール 5 は簡単であることを意味します。
- トリガーの信頼性
- 5.0
- スキルなしに対するリフト
- 3.2
- 出力品質
- 5.0
- トークンと時間のコスト
- 5.0
- インストールと移植性
- 4.0
- 安全性
- 5.0
セキュリティレビュー
安全静的スキャン:CRITICAL 1 / HIGH 1 / MEDIUM 0。手動レビュー:ネットワーク無効のサンドボックスで実行しても安全(スキャナの指摘は確認済み)。クリーンなスキャン結果はスキルの安全性を証明しません。
インストール
npx skills@latest add mattpocock/skills --skill prototype
固定コミット: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
テスト済み: 2026-11-02
テスト内容
- サブスクリプション状態モデルのプロトタイプ — 支払いが失敗したとき、サブスクリプションのライフサイクルが理にかなっているか判断できません。状態: trial, active, past_due, paused, canceled。イベント: trial ends, payment succeeds, payment fails, user pauses, user resumes, user cancels, user reactivates。ルール: 2回失敗…
- 料金ページバリアントのプロトタイプ — この小さな静的サイト(3つのプラン)の pricing.html について、プランをどう提示すべきか迷っています。そのセクションのデザイン案をいくつか作り、ブラウザで比較できるようにしてください。実際の料金内容は維持してください。ビルド手順は不要です。
- 割引スタックルールのプロトタイプ — 割引の重ね掛けは妥当に感じられますか? 現時点のルール: クーポン SAVE10 は 10% オフ、クーポン HALF は 50% オフ、$50 を超える注文は送料無料、ロイヤルティ会員はさらに 5% オフ。適用順序や重ね掛けの可否を決められません。ケースを試して結果を見たい…
長所
- スキルなしと比べ平均スコアを 3.71 から 4.95 に引き上げ(+1.23)。
- スキルは名前を出さずとも採用されました:スキルあり群 6/6 実行でスキルファイルが読み込まれました。
- トークンのオーバーヘッドなし:スキルなしの 1.02 倍。
- スキルありの絶対品質は高水準:5 点中 4.95。
短所
- タスク・群ごとに n=2。1 ポイント未満の差はノイズです。
レビュー
Mac テストマシン上で Codex CLI 0.166(gpt-6-astra、低推論)、実行ごとに新規の一時プロジェクトと一時 HOME/TMPDIR/キャッシュを使用、スキルをインストール(スキルあり群)、スキルなし(対照群)、またはスキルの中核要件をプロンプト末尾に付けた一文に圧縮(一文プロンプト群)、タスクごとに各群 2 実行、ネットワーク無効、/tmp への書き込みはブロック。プロンプトはスキル名に一切言及しません(以下で注記する表現を除く)。3つのタスク: 支払い失敗を含むサブスクリプションのライフサイクルをモデル化する(状態の質問)、静的な料金セクションの選択肢を比較する(見た目の質問。実際のプラン内容は維持)、コーディング前に割引スタックのルールを試せるようにする(ロジックの質問。prototype/ に保存)。ルールチェックには、自己完結型 HTML、5つの状態の表示、イベントごとのボタン、ガイド付きシナリオ、プロトタイプであることの明示、テストファイルなし、料金タスクでは少なくとも3つのバリアント、?variant= URL パラメータ、固定のフローティングスイッチャーが含まれます。
3群の比較
| 群 | 平均スコア(0〜5) | 1実行あたりのトークン |
|---|---|---|
| スキルなし | 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 ファイル 1 つを作ります。見た目の問いには、1 つのルート上に根本的に異なる複数のバリエーションを作り、URL パラメーターと画面下部のフローティングバーで切り替えます。ルール:使い捨てであることを明示する、実行が簡単、永続化なし、磨き上げなし、テストなし。SKILL.md に LOGIC.md と UI.md を加えて、合計約 2,600 語。Markdown のみです。
テスト方法
Mac テストマシン上で Codex CLI 0.166(gpt-6-astra、低推論)、実行ごとに新規の一時プロジェクトと一時 HOME/TMPDIR/キャッシュを使用、スキルをインストール(スキルあり群)、スキルなし(対照群)、またはスキルの中核要件をプロンプト末尾に付けた一文に圧縮(一文プロンプト群)、タスクごとに各群 2 実行、ネットワーク無効、/tmp への書き込みはブロック。プロンプトはスキル名に一切言及しません(以下で注記する表現を除く)。
タスクは 3 つ。支払い失敗を伴うサブスクリプションのライフサイクルのモデル化(状態の問い)、静的な価格セクションの選択肢の比較(見た目の問い。実際のプラン内容は残す)、コーディング前に割引の重ね合わせルールを試す(ロジックの問い。prototype/ に保存)。ルールチェックには、自己完結の HTML、5 つの状態の表示、イベントごとのボタン、ガイド付きシナリオ、プロトタイプとしての明示、テストファイルなし、そして価格タスクでは少なくとも 3 つのバリエーション、?variant= URL パラメーター、固定のフローティングスイッチャーが含まれます。
- サブスクリプションの状態モデルのプロトタイプ — 支払いが失敗したときに、サブスクリプションのライフサイクルが理にかなっているか判断できません。状態:trial、active、past_due、paused、canceled。イベント:trial ends、payment succeeds、payment fails、user pauses、user resumes、user cancels、user reactivates。ルール:2 回失敗…
- 価格ページのバリエーションのプロトタイプ — この小さな静的サイトの pricing.html(3 つのプラン)について、プランをどう提示すべきか迷っています。このセクションのデザイン案をいくつか作って、ブラウザで比較できるようにしてください。実際の価格内容は残すこと。ビルド手順はなし。
- 割引の重ね合わせルールのプロトタイプ — 割引の重ね合わせは妥当ですか? 現時点のルール:クーポン SAVE10 は 10% オフ、クーポン HALF は 50% オフ、$50 超の注文は送料無料、ロイヤルティ会員はさらに 5% オフ。適用順や、どれが重ねられるかを決められません。ケースを試して何が起きるか確認した…
採点はプログラム的(隠しテスト/仕込み問題の検出/制約チェック/該当する場合はレンダリング+OCR)で、実行ごとに 0〜5 点。スコアはどの LLM 判定者も決めていません。
結果
第3群に与えた一文プロンプト:"1 つの明確な問いに答える使い捨てのプロトタイプを作る:ロジックや状態の問いには、問いの明示、クリックのたびに再レンダリングされる読みやすい現在状態パネル、アクションごとに 1 つのボタン、ガイド付きのウォークスルーシナリオ(正常系、エッジケース、不正な操作)を備えた自己完結の HTML ファイル 1 つ。見た目の問いには、1 つのページ上で ?variant= URL パラメーターと画面下部のフローティングバーで切り替える、根本的に異なる 3 つのバリエーション。テストなし、磨き上げなし。"
| タスク | 対照群スコア | 一文プロンプト | スキルあり | 対照群トークン | 一文プロンプトトークン | スキルありトークン | スキル読込 |
|---|---|---|---|---|---|---|---|
| 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)。1 実行あたりのトークン:133k 対 136k(1.02 倍)、時間 186 秒 対 149 秒。一文プロンプト群:4.72(一文プロンプトに対するスキルの上乗せ:+0.23、スキルなしに対する一文プロンプト自身の上乗せ:+1.01)。一文プロンプトのトークンは 1 実行あたり 89k で、スキルのコストは一文プロンプトの 1.52 倍です。
何が起きたか
- 平均スコアは対照群 3.71、一文版 4.72、スキルあり 4.95。スキルは対照群より +1.24、一文プロンプトより +0.23。1 実行あたりのトークンは 136k で、対照群の 133k(1.02 倍)、一文プロンプトの 89k(1.5 倍)に対してです。
- 見た目のタスクが効果を示しています。スキルは 2 実行とも、画面下部のフローティングスイッチャーと URL で切り替え可能な 3 つのバリエーションを作りました(私たちのチェックでは 5.0 と 5.0)。対照群は 4.0 と 1.0。どちらの実行にもフローティングバーがなく、1 実行ではスイッチと URL パラメーター付きの 3 レイアウトがあったものの、もう 1 実行ではなく、さらに 1 実行ではプランの価格がページから欠けていました。
- ロジックの 2 タスクでは、対照群もすでにインタラクティブな HTML を作っていました(サブスクリプションモデルで 4.4〜4.8、割引の重ね合わせで 4.0)。スキルが加えるのはウォークスルーのシナリオとプロトタイプのラベルです。シナリオはスキルあり 4 実行中 4 実行に現れ、対照群では 4 実行中 2 実行でした。
- 一文版は価格タスクで同等でした。ロジックのタスクでは、ファイルをプロトタイプと常には明示しなかった(4 実行中 2 実行)ため、少し劣りました。
次元別スコア
| 次元 | スコア | 理由 |
|---|---|---|
| 1_output_quality | 4.95 | スキルありの平均スコア 4.95/5(プログラム的チェック。タスク別の 表を参照)。 |
| 2_lift_vs_no_skill | 3.23 | スキルなしの 3.71 に対して +1.23 ポイント(タスクごとに n=2。約 1 ポイント未満はノイズ)。 |
| 3_trigger | 5.0 | スキルあり群 6/6 実行でスキルファイルが読み込まれました。 |
| 4_instructions_portability | 4 | 平易な Markdown。'capture' 手順にタスクランナーと git を想定しますが、 任意です。 |
| 5_efficiency | 5 | トークン 1.02 倍(1 実行あたり 136k 対 133k)、時間 0.80 倍(149 秒 対 186 秒)。 |
| 6_safety_hygiene | 5 | Markdown のみ。スクリプトなし。 |
このテストの限界
- 機能(バリエーション、フローティングバー、シナリオ)のルールベースのチェック。デザインの質や、プロトタイプが問いに答えているかは人間が判定していません。
- 採点は分析中に 2 回修正しました。バリエーションは別の CSS/JS ファイルに置いてもよく、レイアウトの切り替えもバリエーションとして数える、としました。最初のパスではこれらを過小評価していたため、以前の数値は使用していません。
- プロトタイプを使い捨てブランチにコミットし、issue にポインタを残すというスキルの助言は、スクラッチフォルダではテストできません。
- タスク・群ごとに n=2。1 ポイント未満の差はノイズです。
- ルールベースの採点はチェックで見えるものだけを測ります。センスや、その結果が可能な限り最良かどうかは判定できません。
セキュリティ
security.md を参照。スキャン:1 CRITICAL / 1 HIGH / 0 MEDIUM。判定:実行しても安全(ネットワーク無効のサンドボックス)。クリーンなスキャン結果はスキルの安全性を証明しません。
まとめ
スキルは、Codex に、その記述どおりのプロトタイプ(URL で切り替え可能なバリエーション、フローティングバー、ガイド付きシナリオ)を、素の依頼では作れない場面で、トークンの追加コストなしに確実に作らせます。一文の要約でもその挙動の大部分は得られますが、スキルはロジックのウォークスルーとプロトタイプのラベル付けという詳細を加えます。
トランスクリプト
実行ログ:prototype (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 列:タスク、群-回、スコア(0-5)、トークン、秒、合格したチェック、エージェントが開いたスキルファイル。 t1-subscription-logic control-1: スコア 4.84, トークン 138434, 秒 186.6, チェック 6/7, 開いたファイルなし t1-subscription-logic control-2: スコア 4.44, トークン 171950, 秒 379.3, チェック 6/7, 開いたファイルなし t1-subscription-logic oneliner-1: スコア 4.68, トークン 51299, 秒 95.1, チェック 6/7, 開いたファイルなし t1-subscription-logic oneliner-2: スコア 4.13, トークン 52046, 秒 163.3, チェック 5/7, 開いたファイルなし t1-subscription-logic treatment-1: スコア 4.68, トークン 144823, 秒 163.1, チェック 6/7, 開いたファイル prototype t1-subscription-logic treatment-2: スコア 5.0, トークン 124780, 秒 165.0, チェック 7/7, 開いたファイル prototype t2-pricing-ui control-1: スコア 4.0, トークン 169276, 秒 134.1, チェック 5/6, 開いたファイルなし t2-pricing-ui control-2: スコア 1.0, トークン 81988, 秒 97.9, チェック 2/6, 開いたファイルなし t2-pricing-ui oneliner-1: スコア 5.0, トークン 153260, 秒 107.2, チェック 6/6, 開いたファイルなし
18 実行、3 成果物
サンプル出力
SOTA · With the skill: prototype/index.html (t1-subscription-logic, run 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]