Pulsa / para buscar

Toda la documentación
docs Enseñar al agente Grabar un workflow

Se ejecuta enWrit CloudDesktopAutoalojado

workflows ▸ grabar o describir

Workflows.

Un workflow es una lista ordenada de pasos que se ejecuta en un navegador real y devuelve datos estructurados. Créalo una vez — grabándolo o describiéndolo — y luego ejecútalo bajo demanda, según una programación, desde un webhook, o como endpoint publicado y MCP tool.

Writ se ejecuta en tus propias cuentas, con tus propias credenciales y datos, en los sitios que estás autorizado a usar.

objeto ▸ la forma

El objeto workflow.

Un workflow es JSON simple: un nombre, un array steps ordenado y las entradas declaradas por defecto contra las que se resuelven sus placeholders. Cada paso es un objeto pequeño con un type y una config.

{
  "name": "Product extractor",
  "description": "Prices from the catalog",
  "workflow_type": "recorded",
  "steps": [
    { "type": "navigate", "config": { "url": "{{url}}" } },
    { "type": "extract",  "config": { "fields": {
        "title": ".product .title",
        "price": ".product .price"
    } } }
  ],
  "form_data": { "url": "https://example.com/catalog" },
  "timeout_ms": 120000,
  "headless": true
}

crear ▸ grabar o describir

Grábalo, o descríbelo.

Hay dos vías principales para producir ese JSON — y una tercera para sitios con una API aprovechable debajo.

VíaCómo funciona
GrabarHaz clic por el sitio en el grabador; cada clic, relleno y navegación se convierte en un paso reproducible con un selector estable.
Describir (Scribe)Cuéntale a Scribe el objetivo en palabras sencillas. Una AI session conduce un navegador en vivo hacia él y graba los pasos que funcionaron en un workflow reutilizable.
API discoveryMientras navegas, Writ observa las propias llamadas de red de la página y puede construir pasos api_call a partir de los endpoints que encuentra — a menudo más rápido que manejar la interfaz.

Ambas vías terminan en el mismo lugar: una lista de pasos editable. Un workflow descrito no es una caja negra — puedes leerlo, recortarlo y volver a grabar cualquier parte. Consulta AI sessions para la vía de describir al completo.

pasos ▸ el vocabulario

30+ tipos de paso.

Los pasos se ejecutan en orden, y cada uno puede leer lo que produjeron los anteriores. El vocabulario abarca navegación, interacción, esperas, extracción, pestañas, IA, autenticación y control de flujo — cada tipo está en la referencia de pasos con sus campos, un ejemplo real y su comportamiento.

Navegación

navigatenavigated_to

Interacción

clickhoverpressfocusfilltypeselectcheckuncheckscrollscroll_into_viewupload

Esperas

waitwait_for_changewait_for_download

Extracción

extractevaluatecodegenscreenshotapi_call

Pestañas

open_tabwait_for_tabswitch_tabtab_closed

IA

ai_fillai_fill_formai_continueai_navigate

Autenticación

login_posttwofacaptcha

Flujo

returnend_pointassert

Abrir la referencia de pasos →

io ▸ entradas y salidas

Entradas dentro, datos estructurados fuera.

Una ejecución lleva sus entradas en el campo de cuerpo form_data. Dentro de los valores de los pasos, los placeholders se resuelven al ejecutar — la receta se mantiene genérica y nada sensible se guarda en ella:

PlaceholderSe resuelve en
{{key}}La clave correspondiente del form_data de la ejecución, en su defecto los valores por defecto guardados del workflow.
{{vault:name}}Un secreto de tu vault, inyectado al ejecutar. Los secretos son interpolación dentro del valor de un paso — nunca un paso propio.
{{extracted:key}}Un valor extraído por un paso anterior de la misma ejecución — para encadenar peticiones api_call.
{{file:slot}}Un archivo almacenado vinculado al hueco con nombre (subidas, descargas capturadas).

A la salida, los pasos extract rellenan extracted_data y la ejecución se resuelve con result_data — la carga estructurada que lee tu llamador.

ejecutar ▸ la api

Ejecutar un workflow.

Un solo endpoint inicia una ejecución. Por defecto la llamada espera el veredicto; desactiva wait para recibir de inmediato un identificador de tarea.

POST /api/v1/workflows/{workflow_id}/runs?wait=true&timeout=120
Authorization: Bearer wt_xxxxxxxxxxxx
{ "form_data": { "url": "https://example.com/catalog" } }

# wait=true (default) — the call blocks until the run settles:
{
  "status": "success",
  "success": true,
  "result_data": { "title": "…", "price": "…" },
  "extracted_data": { "title": "…", "price": "…" },
  "error": null,
  "duration_ms": 8412
}

# wait=false — returns immediately with a task handle:
{ "task_id": "…", "status": "pending", "workflow": { "…": "…" } }
Parámetro de consultaRol
waittrue por defecto — la llamada HTTP bloquea hasta que la ejecución se resuelve.
timeoutCuánto esperar, en segundos. 120 por defecto, rango aceptado 10–300.

Con wait=false la respuesta es {"task_id", "status": "pending", "workflow"} — consulta la ejecución, o suscríbete a sus eventos.

Desde los SDKs

En tu propia máquina, los SDKs publicados descubren el agente local y ejecutan el mismo workflow sin cargo de cómputo:

run.ts

import { WritAgent, runRowId } from "@usewrit/agent-sdk";

const client = new WritAgent();              // discovers the running agent + token
const { data: workflows } = await client.workflows.list();
const run = await client.workflows.runAndWait(workflows[0].id, {
  inputs: { city: "Paris" },
});
const { data: rows } = await client.runs.data(runRowId(run));
console.log(run.status, rows);

Dónde se ejecuta una run decide su coste: tu agente local la ejecuta gratis; una ejecución cloud se descuenta del uso incluido de tu plan — consulta la facturación.

ciclo de vida ▸ ocho estados

El ciclo de vida de una ejecución.

Cada ejecución informa uno de ocho estados normalizados:

EstadoSignificado
queuedUna ejecución cloud esperando un hueco — expone su posición en la cola y una estimación.
pendingDirigida a un agente de escritorio, esperando a ser recogida. Sin posición de cola — el agente tira cuando está listo.
runningLos pasos se ejecutan en un navegador en vivo.
repairingLa reparación con IA trabaja sobre el workflow. Un estado superpuesto mientras la reparación retiene el workflow, no un estado almacenado.
successLa ejecución se resolvió y sus salidas están disponibles.
failedLa ejecución se resolvió con error — el campo error dice por qué.
cancelledDetenida a petición antes de resolverse.
skippedNo ejecutada — por ejemplo, retenida por su propia configuración.

queued vs pending: queued es del lado cloud (se abrirá un hueco; puedes ver tu posición). pending es de escritorio (tu agente recoge la ejecución cuando se conecta) — no tiene posición de cola que mostrar.

El feed de ejecuciones unifica cinco tipos en un solo flujo — workflow, check, ai_session, automation y crawl — todo lo que se ejecutó aparece en un mismo lugar, con los mismos estados.

Eventos en vivo

Mientras una ejecución corre, el progreso paso a paso llega en stream por SSE — cada SDK lo expone en su idioma nativo:

events.ts

for await (const ev of client.runs.events(runRowId(run))) {
  console.log(ev.type, ev);
}

límites ▸ por plan

Cuánto puede durar una ejecución.

Cada plan fija una duración máxima de ejecución. Una run que alcanza su tope se detiene y se resuelve como failed — no puede facturar sin fin.

PlanDuración máx. de ejecución
Free2 min
Starter4 min
Pro5 min
Growth10 min
Scale / Enterprise15 min

Las sesiones de grabación en cloud tienen su propio tope: 10 minutos en Free, hasta 60 minutos en Scale y Enterprise. Las sesiones de streaming se limitan aparte — consulta la referencia de streaming.

reparación ▸ ia opcional

Reparación con IA.

Los sitios cambian. Con ai_repair_enabled en un workflow (desactivado por defecto), una ejecución que rompe por un selector obsoleto dispara una reparación en lugar de simplemente fallar. La reparación opera en dos niveles:

Reparación de selectorEl selector se vuelve a derivar sobre la página en vivo; un candidato validado sustituye al obsoleto y el paso se reintenta en el sitio.
Regrabación con base realPara cambios estructurales, un navegador en vivo recorre el flujo de nuevo y la receta se regraba a partir de lo que funciona realmente ahora.

La reparación siempre corre en el servicio de IA gestionado en la nube y se mide por los tokens que usa — nunca con una clave BYO.

Mientras un workflow se repara queda bloqueado: las demás ejecuciones en cola del mismo workflow se retienen hasta que la reparación termina, para que no fallen todas en el mismo paso roto.

Cada workflow conserva sus últimas 50 entradas de reparación, cada una etiquetada con repair_type selector o rerecord — puedes auditar exactamente qué cambió y por qué.

Fallo honesto por defecto. Sin el flag, un selector roto hace fallar la ejecución y lo dice. No hay cadena silenciosa de selectores de respaldo ni «autocuración» sin IA — una ejecución reproduce la receta tal como se grabó, o la reparación (activada) la corrige a la vista.

siguiente ▸ a dónde ir

Sigue adelante.