Je hebt het één keer voorgedaan. Waarom doe je het nog steeds zelf?
Skill Recorder is een Chrome-extensie die kijkt hoe je een browsertaak één keer doorloopt — en schrijft dan een SKILL.md: een platte-markdown-specificatie die Claude Code (of elke agent op de browse-CLI) afspeelt zonder selectors, glue code of toezicht.
↑ een inkooporderflow van vijf minuten, één keer opgenomen en eeuwig herhaald.
Anatomie
Drie stappen, één klik uit elkaar.
Wat we leveren is een kleine Chrome-MV3-extensie en een distillatie-pipeline van 4 KB. De opnemer haakt in chrome.debugger voor DOM-niveau trouw; de distillatie draait volledig in de service worker; het afspelen leest de resulterende SKILL.md via de browse-CLI. Geen server. Geen glue code.
i.
Vastleggen
Zijpaneel
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
Een poort per frame in het content script stuurt elk DOM-event door naar de service worker. Shadow DOM en same-origin iframes worden transparant doorgeprikt.
Zeskwartiers selectoroplossing (testid → id → aria → text → css → xpath)
tabPorts: Map<tabId, Map<frameId, Port>>
IME-bewuste invoerbuffering · paste · drag
23 events →
ii.
Distilleren
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
Zes kleine doorgangen veranderen een rumoerig event-log in een deterministische specificatie. Autoparametrisering vuurt alleen boven 0,7 vertrouwen; daaronder vraagt de opnemer in plaats van te gokken.
paramConfidence(step) — heuristische ladder
auth-boundary-detectie — ondoorzichtige token + cookies
UUID · numeriek ID · email · ISO-datum · valuta
SKILL.md →
iii.
Afspelen
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
De browse-CLI leest SKILL.md als platte markdown — geen schema, geen runtime, geen ontsnappingsluikjes. Elke stap is controleerbaar.
idempotente herstarts · auth-pauze + hervatting
gestructureerde logs ↦ JSONL-replay-historie
werkt met Claude Code, Cline, gewone shell
Specificatie
Wat overleeft een opname? Dertien harde gevallen, end-to-end.
De browser zit vol valkuilen voor opnemers — gehashte klassen, lui geladen modals, Shadow DOM, multi-tab-flows, IME-compositie, drag-and-drop. Elke rij hieronder is een echte fixture in de playground; klik op een willekeurige om er zelf tegen op te nemen.
Dertien van zestien. Plus vier composite-fixtures — Notion, Linear, Jira, Salesforce — die twaalf tot vijftien van deze technieken aaneenrijgen tot één samenhangende flow. Naar de playground →
Uitgewerkt voorbeeld
Een vijf-minuten browserritueel, gedistilleerd tot dertig seconden.
VeldnotitiesOpgenomen 2026-02-19, 16:42 UTC50× afgespeeld zonder ingrijpen
Elke maandagochtend opent een operations-engineer bij een kleine leverancier hetzelfde portaal, klikt op Nieuwe inkooporder, plakt een SKU uit een CSV, typt een aantal en klikt op Verzenden. Dan opnieuw. En opnieuw. Tweehonderd rijen per week, elke week, al veertien maanden. Een vijf-minuten ritueel, herhaald tot het werkblad eindigt.
Precies het soort taak waarvoor een opnemer wordt aangeprezen — en precies het soort waarop de meeste opnemers struikelen. Het leveranciersportaal roteert Tailwind-hashklassen bij elke deploy. De Verzenden-knop zit in een dynamische tabelrij die na elke opslag opnieuw rendert. Het auth-cookie verloopt om twaalf uur. Selenium-scripts tegen deze pagina overleven gemiddeld twee weken en beginnen dan stilletjes te falen.
De opname
De engineer zet de extensie vast in de werkbalk, opent het portaal, klikt op Opname starten en voert de taak exact één keer uit. Acht klikken, twee getypte waarden, één verzenden. Het zijpaneel toont een live feed van events terwijl ze gebeuren — inclusief ruis: scroll, focus, blur, per ongeluk over het help-icoon bewogen muis. Drieëntwintig events vastgelegd in 4,6 seconden.
Het ruwe log bewaart alles; distillatie beslist wat ertoe doet.
De distillatie
main.example.p4
before / after23 events → 4 stappen
— 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
Acht toetsaanslagen worden één geparametriseerde fill — dezelfde vorm bij elke replay.
De overdracht
De engineer plaatst de resulterende markdown in ~/.claude/skills/create-purchase-order/SKILL.md en typt één zin tegen Claude Code. De agent vindt de skill op naam, lost de precondition op (het opgeslagen cookie is geldig tot twaalf uur), itereert over de vijftig rijen in het CSV en rapporteert terug. Drie minuten elf seconden later is het werk gedaan. Niemand keek toe.
claude code · stdout3 m 11 s · 0 retries
> 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
Eén zin erin, vijftig inkooporders eruit. De agent stelde geen enkele vraag.
Postscriptum
De kosten van een vijf-minuten ritueel, uitgesmeerd over een werkjaar.
Gratis tijdens de open beta. Geen account, geen upload, geen telemetrie. De hele bundel is 4,5 MB; opnames leven op jouw machine tot jij ze exporteert.