Tu l'as fait une fois. Pourquoi tu le fais encore ?
Skill Recorder est une extension Chrome qui te regarde accomplir une tâche dans le navigateur une fois — puis écrit un SKILL.md, une spécification en markdown pur que Claude Code (ou n'importe quel agent sur la CLI browse) rejoue sans sélecteurs, sans glue code, sans surveillance.
↑ un flux de bon de commande de cinq minutes, enregistré une fois et rejoué à l'infini.
Anatomie
Trois étapes, à un clic d'écart.
Ce que nous livrons, c'est une petite extension Chrome MV3 et un pipeline de distillation de 4 Ko. L'enregistreur s'accroche à chrome.debugger pour la fidélité au niveau DOM ; la distillation tourne entièrement dans le service worker ; la rejouabilité lit le SKILL.md résultant via la CLI browse. Aucun serveur. Aucun glue code.
i.
Capturer
Panneau latéral
Skill RecorderREC
00:01click nav.Orders
00:02click btn.New
00:04focus #sku
00:05type "SKU-1029"
00:06blur #sku
00:08type "50" → #qty
00:09click btn.Submit
Un port par frame dans le content script transmet chaque évènement DOM au service worker. Le Shadow DOM et les iframes de même origine sont traversés de manière transparente.
Résolveur de sélecteurs à 6 niveaux (testid → id → aria → text → css → xpath)
tabPorts: Map<tabId, Map<frameId, Port>>
Tampon d'entrée conscient de l'IME · paste · drag
23 évènements →
ii.
Distiller
Service worker · 30 s
✓dedupe consecutive clicks23 → 16
✓fold keystrokes into type()16 → 11
✓detect inputs as {{params}}conf 0.94
✓mark auth boundary+1 precondition
✓parameterize URL segments2 swapped
✓flag dynamic-list clicks1 ⚠ note
Six petites passes transforment un journal d'évènements bruyant en spécification déterministe. L'auto-paramétrage ne se déclenche qu'au-dessus de 0,7 de confiance ; en dessous, l'enregistreur demande au lieu de deviner.
paramConfidence(step) — échelle heuristique
détection d'auth-boundary — token opaque + cookies
UUID · ID numérique · email · date ISO · monnaie
SKILL.md →
iii.
Rejouer
browse CLI
~/work $ claude
> create POs for these 50 rows
Reading ~/.claude/skills/create-purchase-order/SKILL.md
Loaded 4 steps · 2 params · 1 precondition
▸ resolving precondition: signed in to supplier portal
✓ cookie present, expires 2026-08-04
▸ running batch [50 rows]
✓ 50/50 in 3m 11s
✓ 0 retries, 0 manual rescues
La CLI browse lit SKILL.md comme du markdown pur — pas de schéma, pas de runtime, pas d'échappatoire. Chaque étape est auditable.
Que survit à un enregistrement ? Treize cas durs, de bout en bout.
Le navigateur est plein de pièges pour les enregistreurs — classes hashées, modales paresseuses, Shadow DOM, flux multi-onglets, composition IME, glisser-déposer. Chaque ligne ci-dessous est une fixture réelle du playground ; clique sur n'importe laquelle pour enregistrer toi-même contre.
Treize sur seize. Plus quatre fixtures composites — Notion, Linear, Jira, Salesforce — qui enchaînent douze à quinze de ces techniques en un flux cohérent. Voir le playground →
Exemple travaillé
Un rituel navigateur de cinq minutes, distillé en trente secondes.
Carnet de terrainEnregistré 2026-02-19, 16:42 UTCRejoué 50× sans intervention
Chaque lundi matin, une ingénieure ops d'un petit fournisseur ouvre le même portail, clique sur Nouveau bon de commande, colle un SKU depuis un CSV, tape une quantité et clique sur Soumettre. Puis recommence. Et recommence. Deux cents lignes par semaine, chaque semaine, depuis quatorze mois. Un rituel de cinq minutes répété jusqu'à la fin de la feuille.
C'est exactement le type de tâche pour laquelle on pitche un enregistreur — et exactement le type sur laquelle la plupart échouent. Le portail fournisseur tourne ses hash de classe Tailwind à chaque déploiement. Le bouton Soumettre vit dans une ligne de table dynamique qui se re-rend après chaque enregistrement. Le cookie d'auth expire à midi. Les scripts Selenium contre cette page survivent deux semaines en moyenne, puis commencent à échouer en silence.
L'enregistrement
L'ingénieure épingle l'extension à sa barre d'outils, ouvre le portail, clique sur Démarrer l'enregistrement et exécute la tâche exactement une fois. Huit clics, deux valeurs tapées, une soumission. Le panneau latéral affiche un flux en direct des évènements — bruit inclus : scroll, focus, blur, mouvements de souris accidentels sur l'icône d'aide. Vingt-trois évènements capturés en 4,6 secondes.
Le log brut garde tout ; la distillation décide ce qui compte.
La distillation
main.example.p4
before / after23 évènements → 4 étapes
— BEFORE (raw)
type"S" → #sku
type"K" → #sku
type"U" → #sku
type"-" → #sku
type"1" → #sku
type"0" → #sku
type"2" → #sku
type"9" → #sku
+ AFTER (distilled)
fill"#sku" with {{sku}}
+ AUTO-DETECTED
// 8 chars · alphanumeric · prefix SKU-
// confidence 0.94
Huit frappes deviennent un fill paramétré — même forme à chaque rejouabilité.
Le passage de relais
L'ingénieure dépose le markdown obtenu dans ~/.claude/skills/create-purchase-order/SKILL.md et tape une phrase à Claude Code. L'agent trouve le skill par son nom, résout la précondition (le cookie sauvegardé est valide jusqu'à midi), itère sur les cinquante lignes du CSV et rend compte. Trois minutes onze secondes plus tard, le boulot est fait. Personne ne l'a regardé tourner.
claude code · stdout3 m 11 s · 0 réessai
> create purchase orders for the rows in ~/Desktop/feb-orders.csv▸ Reading ~/.claude/skills/create-purchase-order/SKILL.md
✓ 4 steps · 2 params · 1 precondition
▸ Resolving precondition: signed in to supplier portal
✓ cookie present (expires 2026-02-19 12:00 UTC)
▸ Running batch (50 rows)
✓ 50/50 submitted
✓ 0 retries · 0 manual rescues
✓ median 3.8s per row · longest 5.1s
Une phrase en entrée, cinquante bons de commande en sortie. L'agent n'a posé aucune question.
Post-scriptum
Le coût d'un rituel de cinq minutes, amorti sur une année de travail.
Gratuit pendant la bêta ouverte. Aucun compte, aucun upload, aucune télémétrie. Le bundle complet fait 4,5 Mo ; les enregistrements vivent sur ta machine jusqu'à ce que tu choisisses de les exporter.