Lo demostraste una vez. ¿Por qué sigues haciéndolo tú?
Skill Recorder es una extensión de Chrome que te ve recorrer una tarea del navegador una vez — y luego escribe un SKILL.md, una especificación en markdown puro que Claude Code (o cualquier agente sobre la CLI browse) reproduce sin selectores, glue code ni supervisión.
↑ un flujo de orden de compra de cinco minutos, grabado una vez y reproducido para siempre.
Anatomía
Tres etapas, a un clic de distancia.
Lo que enviamos es una pequeña extensión de Chrome MV3 y una pipeline de destilación de 4 KB. El grabador engancha chrome.debugger para fidelidad a nivel DOM; la destilación corre íntegra en el service worker; la reproducción lee la SKILL.md resultante a través de la CLI browse. Sin servidor. Sin glue code.
i.
Capturar
Panel lateral
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 puerto por frame en el content script reenvía cada evento DOM al service worker. Shadow DOM e iframes del mismo origen se atraviesan de forma transparente.
Resolutor de selectores de 6 niveles (testid → id → aria → text → css → xpath)
tabPorts: Map<tabId, Map<frameId, Port>>
Buffer de entrada consciente de IME · paste · drag
23 eventos →
ii.
Destilar
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
Seis pequeñas pasadas convierten un log ruidoso de eventos en una especificación determinista. La autoparametrización solo se activa por encima de 0,7 de confianza; por debajo, el grabador pregunta en vez de adivinar.
paramConfidence(step) — escalera heurística
detección de auth-boundary — token opaco + cookies
UUID · ID numérico · email · fecha ISO · moneda
SKILL.md →
iii.
Reproducir
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 lee SKILL.md como markdown puro — sin esquema, sin runtime, sin escapatorias. Cada paso es auditable.
re-ejecución idempotente · pausa + reanudación de auth
logs estructurados ↦ historial JSONL
funciona con Claude Code, Cline, shell plano
Especificación
¿Qué sobrevive a una grabación? Trece casos duros, de punta a punta.
El navegador está lleno de trampas para grabadores — clases con hash, modales perezosos, Shadow DOM, flujos entre pestañas, composición IME, drag-and-drop. Cada fila abajo es una fixture real del playground; haz clic en cualquiera para grabar tú mismo contra ella.
Trece de dieciséis. Más cuatro fixtures composite — Notion, Linear, Jira, Salesforce — que encadenan de doce a quince de estas técnicas en un único flujo coherente. Ver el playground →
Ejemplo trabajado
Un ritual del navegador de cinco minutos, destilado a treinta segundos.
Cuaderno de campoGrabado 2026-02-19, 16:42 UTCReproducido 50× sin intervención
Cada lunes por la mañana una ingeniera de operaciones de un pequeño proveedor abre el mismo portal, hace clic en Nueva orden de compra, pega un SKU desde un CSV, escribe una cantidad y hace clic en Enviar. Luego lo hace otra vez. Y otra. Doscientas filas por semana, cada semana, durante los últimos catorce meses. Es un ritual de cinco minutos repetido hasta que la hoja de cálculo termina.
Es justo el tipo de tarea para la que se vende un grabador — y exactamente el tipo en la que la mayoría de los grabadores fallan. El portal del proveedor rota hashes de clase Tailwind en cada despliegue. El botón Enviar vive dentro de una fila de tabla dinámica que se re-renderiza tras cada guardado. La cookie de auth caduca al mediodía. Los scripts de Selenium contra esta página sobreviven dos semanas de promedio y luego empiezan a fallar en silencio.
La grabación
La ingeniera ancla la extensión a la barra de herramientas, abre el portal, hace clic en Iniciar grabación y ejecuta la tarea exactamente una vez. Ocho clics, dos valores escritos, un envío. El panel lateral muestra un feed en vivo de eventos mientras ocurren — incluyendo el ruido: scroll, focus, blur, mousemoves accidentales sobre el icono de ayuda. Veintitrés eventos capturados en 4,6 segundos.
El log crudo conserva todo; la destilación decide qué importa.
La destilación
main.example.p4
before / after23 eventos → 4 pasos
— 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
Ocho pulsaciones se vuelven un fill parametrizado — la misma forma cada reproducción.
El traspaso
La ingeniera coloca el markdown resultante en ~/.claude/skills/create-purchase-order/SKILL.md y escribe una sola frase a Claude Code. El agente encuentra el skill por nombre, resuelve la precondición (la cookie guardada sigue válida hasta mediodía), itera sobre las cincuenta filas del CSV y reporta de vuelta. Tres minutos once segundos después, el trabajo está hecho. Nadie lo vio correr.
claude code · stdout3 m 11 s · 0 reintentos
> 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
Una frase entra, cincuenta órdenes salen. El agente no hizo ninguna pregunta.
Posdata
El coste de un ritual de cinco minutos, amortizado en un año de trabajo.
Gratis durante la beta abierta. Sin cuenta, sin subida, sin telemetría. El bundle completo es de 4,5 MB; las grabaciones viven en tu máquina hasta que decidas exportarlas.