prototype (mattpocock/skills)
Construit un prototype jetable pour trancher une question de conception sur la logique d'état ou la direction de l'UI.
Le prototype de Matt Pocock : suit ses propres règles de variantes d'interface (4.95 contre 3.71 pour le contrôle) pour environ le même coût que sans skill
Codex CLI · gpt-6-astra
27.2 / 30
Gain par rapport à sans skill : +1.23 · Recommandé · 18 exécutions
Recommandé : total 27.2/30 d'au moins 22, qualité de sortie 5.0 d'au moins 3.5 et gain +1.23 d'au moins +1.0.
SOTA
RéussiTesté avec Codex.
Couvre Codex, Claude Code
Codex CLI 0.166 (palier SOTA) : 18 exécutions notées. Une réussite ici couvre aussi Claude Code selon notre règle de palier ; elle ne dit rien du second palier.
Scores
Chaque dimension va de 0 à 5 et les six forment le total sur 30. 5 est la meilleure note dans chaque dimension. Coût 5 signifie bon marché et rapide. Installation 5 signifie facile.
- Fiabilité du déclenchement
- 5.0
- Gain par rapport à sans skill
- 3.2
- Qualité de sortie
- 5.0
- Coût en tokens et en temps
- 5.0
- Installation et portabilité
- 4.0
- Sécurité
- 5.0
Revue de sécurité
SûrScan statique : 1 CRITIQUE / 1 ÉLEVÉ / 0 MOYEN. Revue manuelle : sûr à exécuter dans un bac à sable sans réseau (résultats du scanner expliqués). Un scan propre ne prouve pas qu'un skill est sûr.
Installer
npx skills@latest add mattpocock/skills --skill prototype
Commit épinglé: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
Testé: 2026-11-02
Ce que nous avons testé
- Prototyper un modèle d'état d'abonnement — Je n'arrive pas à savoir si notre cycle de vie d'abonnement tient la route quand les paiements échouent. États : trial, active, past_due, paused, canceled. Événements : fin d'essai, paiement réussi, échec de paiement, mise en pause, reprise, annulation, réactivation. Règles : deux échecs…
- Prototyper des variantes de page de tarifs — Sur pricing.html de ce petit site statique (trois offres), je ne sais pas comment présenter les offres. Faites plusieurs options de design différentes de cette section que je peux comparer dans le navigateur ; le vrai contenu des tarifs doit rester. Pas d'étape de build.
- Prototyper les règles d'empilement de remises — L'empilement des remises vous semble-t-il juste ? Règles actuelles : le coupon SAVE10 vaut 10 % de remise, le coupon HALF 50 %, les commandes de plus de $50 sont livrées gratuitement, les membres fidélité ont 5 % de plus. Je n'arrive pas à décider dans quel ordre elles s'appliquent ni lesquelles peuvent s'empiler. Je veux essayer des cas et voir ce qu…
Points forts
- Fait passer le score moyen de 3.71 à 4.95 par rapport à sans skill (+1.23).
- Le skill a été détecté sans être nommé : son fichier a été lu dans 6/6 exécutions avec skill.
- Aucune surcharge de tokens : 1.02 fois le volume de tokens sans skill.
- Qualité absolue élevée avec le skill : 4.95 sur 5.
Points faibles
- n=2 par tâche et par bras ; les écarts inférieurs à environ 1 point sont du bruit.
Avis
Codex CLI 0.166 (gpt-6-astra, low reasoning) sur un Mac de test, un projet temporaire neuf et des HOME/TMPDIR/caches temporaires à chaque exécution, skill installé (traitement) ou absent (contrôle) ou absent avec l'exigence centrale du skill compressée en une phrase ajoutée au prompt (groupe « prompt d'une phrase »), 2 exécutions par groupe et par tâche, réseau coupé, écritures dans /tmp bloquées. Les prompts ne mentionnent jamais le skill (sauf la formulation indiquée ci-dessous). Trois tâches : modéliser un cycle de vie d'abonnement avec des échecs de paiement (question d'état), comparer des options pour une section de tarifs statique (question d'apparence, le vrai contenu des offres doit rester), et permettre à l'utilisateur d'essayer les règles d'empilement de remises avant de coder (question de logique, enregistrer dans prototype/). Les contrôles incluent un HTML autonome, cinq états affichés, des boutons par événement, des scénarios guidés, la mention prototype, aucun fichier de test, et pour la tâche de tarifs au moins trois variantes, un paramètre d'URL ?variant= et un sélecteur flottant fixe.
Comparaison à trois bras
| Bras | Score moyen (0-5) | Tokens par exécution |
|---|---|---|
| Sans le skill | 3.71 | 133k |
| Prompt d'une phrase | 4.72 | 89k |
| Avec le skill | 4.95 | 136k |
Mesuré avec Codex CLI sur 18 exécutions, noté par des contrôles basés sur des règles, sans juge LLM. Total 27.2 / 30, verdict Recommandé.
Verdict : recommandé (27.2 / 30). Source : mattpocock/skills, skills/engineering/prototype, épinglé au commit 4ae2317. Installation : npx skills@latest add mattpocock/skills --skill prototype. Licence : MIT (LICENSE du dépôt).
Présentation
Le skill prototype de mattpocock/skills : il construit un prototype jetable qui répond à une question de design. Les questions de logique ou d'état reçoivent un seul fichier HTML avec un panneau d'état, des boutons de manipulation libre et des parcours guidés ; les questions d'apparence reçoivent plusieurs variantes radicalement différentes sur une même route, commutées par un paramètre d'URL et une barre flottante en bas. Règles : clairement marqué comme jetable, trivial à lancer, aucune persistance, aucun soin esthétique, aucun test. SKILL.md plus LOGIC.md et UI.md, environ 2 600 mots au total ; Markdown uniquement.
Notre méthode de test
Codex CLI 0.166 (gpt-6-astra, raisonnement faible) sur une machine de test Mac, un projet temporaire neuf et des HOME/TMPDIR/caches temporaires à chaque exécution, skill installé (groupe traité) ou absent (groupe témoin), ou absent avec l'exigence centrale du skill compressée en une phrase ajoutée au prompt (groupe « une phrase »), 2 exécutions par groupe et par tâche, réseau coupé, écritures dans /tmp bloquées. Les prompts ne mentionnent jamais le skill (sauf la formulation indiquée ci-dessous).
Trois tâches : modéliser un cycle de vie d'abonnement avec des échecs de paiement (question d'état), comparer des options pour une section tarifaire statique (question d'apparence, le contenu réel des offres doit rester), et permettre à l'utilisateur d'essayer des règles d'empilement de remises avant de coder (question de logique, enregistrement dans prototype/). Les vérifications de règles portent sur : HTML autonome, cinq états affichés, un bouton par événement, des scénarios guidés, un marquage comme prototype, aucun fichier de test, et pour la tâche tarifaire au moins trois variantes, un paramètre d'URL ?variant= et un sélecteur flottant fixe.
- Prototyper un modèle d'état d'abonnement — Je n'arrive pas à savoir si notre cycle de vie d'abonnement tient la route quand des paiements échouent. États : trial, active, past_due, paused, canceled. Événements : fin de l'essai, paiement réussi, paiement échoué, mise en pause par l'utilisateur, reprise par l'utilisateur, annulation par l'utilisateur, réactivation par l'utilisateur. Règles : deux échecs…
- Prototyper des variantes de page tarifaire — Sur pricing.html de ce petit site statique (trois offres), je ne sais pas comment présenter les offres. Fais quelques options de design différentes de cette section que je peux comparer dans le navigateur ; le contenu tarifaire réel doit rester. Pas d'étape de build.
- Prototyper des règles d'empilement de remises — L'empilement des remises vous semble-t-il juste ? Règles actuelles : le coupon SAVE10 donne 10% de réduction, le coupon HALF 50%, les commandes de plus de $50 sont livrées gratuitement, les membres du programme de fidélité ont 5% de plus. Je n'arrive pas à décider dans quel ordre elles s'appliquent ni lesquelles peuvent s'empiler. Je veux essayer des cas et voir ce qui…
Le scoring est programmatique (tests cachés / rappel des anomalies introduites / vérifications de contraintes / rendu + OCR le cas échéant), 0–5 par exécution. Aucun juge LLM n'a décidé d'un seul score.
Résultats
Le prompt d'une phrase donné au troisième groupe : « Construis un prototype jetable qui répond à une question énoncée : pour les questions de logique ou d'état, un seul fichier HTML autonome avec un énoncé visible de la question, un panneau d'état courant lisible, re-rendu après chaque clic, un bouton par action, et des scénarios de parcours guidés (chemin nominal, cas limite, coup illégal) ; pour les questions d'apparence, trois variantes radicalement différentes sur une même page, commutées par un paramètre d'URL ?variant= et une barre flottante en bas. Aucun test, aucun soin esthétique. »
| Tâche | Score témoin | Une phrase | Avec le skill | Tokens témoins | Tokens (une phrase) | Tokens avec le skill | Skill lu |
|---|---|---|---|---|---|---|---|
| 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 |
Score moyen : 3.71 sans contre 4.95 avec le skill (delta +1.23). Tokens par exécution : 133k contre 136k (1.02x) ; temps 186s contre 149s. Groupe « une phrase » : 4.72 (gain du skill sur le prompt d'une phrase : +0.23 ; gain du prompt d'une phrase sur l'absence de skill : +1.01) ; 89k tokens par exécution pour le prompt d'une phrase, donc le skill coûte 1.52x ce prompt.
Ce qui s'est passé
- Score moyen de 3.71 pour le témoin, 4.72 pour la version en une phrase, 4.95 pour le skill. Le skill apporte +1.24 par rapport au témoin et +0.23 par rapport au prompt d'une phrase, à 136k tokens par exécution contre 133k (1.02x) pour le témoin et 89k pour le prompt d'une phrase (1.5x).
- La tâche d'apparence montre l'effet : le skill a produit trois variantes avec un sélecteur flottant en bas et des variantes commutables par URL dans les deux exécutions (5.0 et 5.0 selon nos vérifications) ; le témoin a obtenu 4.0 et 1.0 : aucune barre flottante dans l'une ou l'autre exécution, trois mises en page avec un sélecteur et un paramètre d'URL dans une exécution mais pas dans l'autre, et dans une exécution le prix d'une offre manquait sur la page.
- Sur les deux tâches de logique, le témoin construisait déjà du HTML interactif (4.4-4.8 sur le modèle d'abonnement, 4.0 sur l'empilement de remises) ; le skill ajoute les scénarios guidés et le label prototype : les scénarios apparaissent dans 4 exécutions sur 4 avec le skill contre 2 sur 4 pour le témoin.
- La version en une phrase a fait aussi bien sur la tâche tarifaire ; elle a perdu un peu sur les tâches de logique en ne marquant pas toujours le fichier comme prototype (2 exécutions sur 4).
Scores par dimension
| Dimension | Score | Pourquoi |
|---|---|---|
| 1_output_quality | 4.95 | Score moyen de 4.95/5 avec le skill (vérifications programmatiques, voir le tableau par tâche). |
| 2_lift_vs_no_skill | 3.23 | +1.23 point contre 3.71 sans le skill (n=2 par tâche ; en dessous d'environ 1 point, c'est du bruit). |
| 3_trigger | 5.0 | Fichier du skill lu dans 6/6 exécutions avec le skill. |
| 4_instructions_portability | 4 | Markdown simple ; suppose un task runner et git pour l'étape « capture », facultative. |
| 5_efficiency | 5 | 1.02x de tokens (136k contre 133k par exécution) et 0.80x de temps (149s contre 186s). |
| 6_safety_hygiene | 5 | Markdown uniquement ; aucun script. |
Limites de ce test
- Vérifications basées sur des règles portant sur des fonctionnalités (variantes, barre flottante, scénarios) ; la qualité des designs et le fait que le prototype réponde à la question n'ont pas été jugés par une personne.
- Le scoring a été corrigé deux fois pendant l'analyse : les variantes peuvent vivre dans des fichiers CSS/JS séparés, et un sélecteur de mise en page compte comme une variante ; la première passe les sous-comptait, donc les chiffres antérieurs ne sont pas utilisés.
- Le conseil du skill de committer le prototype sur une branche jetable et de laisser un pointeur dans une issue ne peut pas être testé dans un dossier de travail temporaire.
- n = 2 par groupe et par tâche : les différences inférieures à environ 1 point relèvent du bruit.
- Le scoring basé sur des règles mesure ce que les vérifications peuvent voir ; il ne peut juger du goût ni du caractère optimal d'un résultat.
Sécurité
Voir security.md. Scan : 1 CRITICAL / 1 HIGH / 0 MEDIUM. Verdict : sûr à exécuter (sandbox sans réseau). Un scan propre ne prouve pas qu'un skill est sûr.
En résumé
Le skill amène clairement Codex à construire le type de prototype qu'il décrit (variantes commutables par URL, barre flottante, scénarios guidés) là où une simple demande ne le fait pas, sans surcoût en tokens. Un résumé d'une phrase obtient l'essentiel du même comportement, mais le skill ajoute les détails du parcours logique et du marquage prototype.
Transcription
Journal d'exécution : prototype (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Colonnes : tâche, groupe-exécution, score (0-5), tokens, secondes, vérifications réussies, fichiers de la skill ouverts par l'agent. t1-subscription-logic control-1: score 4.84, tokens 138434, s 186.6, vérifications 6/7, rien ouvert t1-subscription-logic control-2: score 4.44, tokens 171950, s 379.3, vérifications 6/7, rien ouvert t1-subscription-logic oneliner-1: score 4.68, tokens 51299, s 95.1, vérifications 6/7, rien ouvert t1-subscription-logic oneliner-2: score 4.13, tokens 52046, s 163.3, vérifications 5/7, rien ouvert t1-subscription-logic treatment-1: score 4.68, tokens 144823, s 163.1, vérifications 6/7, ouvert prototype t1-subscription-logic treatment-2: score 5.0, tokens 124780, s 165.0, vérifications 7/7, ouvert prototype t2-pricing-ui control-1: score 4.0, tokens 169276, s 134.1, vérifications 5/6, rien ouvert t2-pricing-ui control-2: score 1.0, tokens 81988, s 97.9, vérifications 2/6, rien ouvert t2-pricing-ui oneliner-1: score 5.0, tokens 153260, s 107.2, vérifications 6/6, rien ouvert
18 exécutions, 3 artefacts
Exemple de sortie
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]