Vigila cualquier página.
Actúa en cuanto se mueva.
Apunta un monitor a cualquier valor de cualquier página: un precio, un estado, una zona visual, tan rápido como cada 10 segundos. Cuando cambia, Writ actúa en el mismo compás: avisa a un agente, llama a un webhook o lanza un workflow.
Un número, un elemento o toda una zona.
Toma una referencia sobre un valor, un selector CSS o una región de captura. Writ vigila solo eso y solo te avisa cuando de verdad cambia. Elige un objetivo:
La reacción parte de la sesión ya abierta de la persona — sin inicio en frío. Si la acción falla, Writ registra el run y aplica la política de reintentos que configuraste.
Tan a menudo como cada diez segundos.
Elige con qué frecuencia comprueba el monitor. La cadencia más rápida la marca tu plan, y las comprobaciones HTTP ligeras van más apretadas que los renderizados de navegador. Elige un intervalo:
Detecta el cambio. Dispara la acción.
Cuando un monitor detecta un cambio, ese evento se convierte en un disparador de automatización: lanza un workflow, opcionalmente retenido tras una validación. De la detección a la acción, automático. Pruébalo:
La acción es una automatización que lanza un workflow. Mira el patrón completo en Watch-and-Act.
Se ejecuta en tu máquina, gratis, o en la nube.
Los monitores locales se ejecutan en tu propia máquina sin cargo de cómputo. Los monitores en la nube corren en la flota gestionada, comprobados desde la región que elijas. Elige dónde:
Cadencia honesta - sin asteriscos.
La frecuencia de comprobación es un suelo fijo por plan. Las comprobaciones HTTP (páginas estáticas) son más rápidas que los renderizados JS (páginas dinámicas), que lanzan un navegador completo.
| Plan | HTTP (estático) | Renderizado JS (dinámico) |
|---|---|---|
| Free | cada 5 min | cada 15 min |
| Starter | cada 1 min | cada 10 min |
| Pro | cada 1 min | cada 10 min |
| Growth | cada 30 s | cada 5 min |
| Scale | cada 10 s | cada 2 min |
| Enterprise | cada 10 s | cada 2 min |
Estos suelos son las mismas cifras que en la página de precios - nunca un «contáctanos» para una cadencia que publicamos. La comprobación cada 10 segundos es el suelo de los planes superiores.
Acción desatendida, sobre raíles que tú fijas.
Cada disparo recorre los mismos siete pasos, en orden, y los pasos sensibles te esperan. Nada actúa directamente desde un cambio de página.
La detección corre al suelo de cadencia de tu plan - Free 5 min · Starter 1 min · Pro 1 min · Growth 30 s · Scale 10 s · Enterprise 10 s. Los mismos suelos que en la página de precios, nunca reajustados aquí a mano.
Una acción con puerta espera tu aprobación explícita; todo lo que pueda gastar dinero vive además bajo un tope de gasto estricto. Writ se ejecuta en tus propias cuentas, con tus propias credenciales, en los sitios que elijas. Automatiza un trabajo que una persona podría hacer a mano - dentro de límites estrictos, nunca más allá. Consulta la política de uso aceptable.
De la vuelta a stock a un workflow preparado - una sola configuración.
El trigger, la acción y las barreras de seguridad viven en una sola configuración. Llama al Workflow resultante como un endpoint, o deja que el cambio lo dispare automáticamente.
# Monitor: out-of-stock PDP, every 10s (Scale), JS render, selector ".stock-status"
# Automation: on change to "In stock" -> run Workflow "reserve-and-notify"
# Workflow: navigate -> fill (order form, Persona) -> submit -> capture confirmation
# Rails: confirm_gate=on, dry_run=false, rate_cap=1/min, idempotency_key=<sku+event>
POST https://api.usewrit.app/v1/reserve-and-notify/run
Authorization: Bearer wt_...
-> { "status": "awaiting_approval", "run_id": "...", "gate": "confirm-gate" } Cablea monitores desde el código.
Arma un monitor por la API en cualquier lenguaje: fija el objetivo, la cadencia y qué se dispara al cambiar. Elige un lenguaje y ejecútalo:
Un monitor es un solo POST con una clave. Sin instalación, sin agente que arrancar — Writ revisa la página a tu cadencia y registra cada cambio.
# Watch a page on Writ Cloud — no install, just the key.
curl -X POST https://api.usewrit.app/api/targets \
-H "Authorization: Bearer $WRIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com",
"check_type": "content",
"selector": "h1",
"check_period_ms": 300000}' Un intervalo por debajo del mínimo de tu plan se rechaza sin más, nombrando el límite — nunca se ralentiza en silencio.
Apunta tu asistente a Writ y podrá crear y cablear monitores por su cuenta — vigilar una página y ejecutar algo cuando cambie.
claude mcp add writ-cloud \
-e WRIT_API_KEY=wt_your_api_key \
-- npx -y writ-mcp
# then, one line in the session:
writ_create_monitor({ url: "https://example.com",
selector: "h1", interval_minutes: 5 })
writ_wire_monitor({ monitor_id: 47, action: "notify",
channels: ["email"] }) Clientes con archivo de config — Claude Desktop · Cursor · Windsurf
Los mismos monitores aparecen en la app, la API y los SDK; cambia dónde corre, no el monitor.
npm install github:usewrit/writ-sdks --workspace typescript
import { CloudApi } from "@usewrit/agent-sdk";
const cloud = new CloudApi({ apiKey: process.env.WRIT_API_KEY }); // wt_…
const mon = await cloud.monitors.create({
url: "https://example.com",
selector: "h1",
check_period_ms: 300_000,
});
const changes = await cloud.monitors.changes(mon.id, { limit: 50 }); pip install "git+https://github.com/usewrit/writ-sdks#subdirectory=python"
from writ_agent import Cloud
cloud = Cloud(api_key=os.environ["WRIT_API_KEY"]) # wt_… — no daemon needed
mon = cloud.monitors.create({
"url": "https://example.com",
"selector": "h1",
"check_period_ms": 300_000,
})
changes = cloud.monitors.changes(mon["id"], limit=50) go get github.com/usewrit/writ-sdks/go
client := writ.New(writ.WithAPIKey(os.Getenv("WRIT_API_KEY")))
mon, err := client.Cloud.Monitors.Create(ctx, writ.CloudMonitorParams{
URL: "https://example.com",
Selector: writ.Ptr("h1"),
CheckPeriodMs: writ.Ptr(int64(300_000)),
})
changes, _ := client.Cloud.Monitors.Changes(ctx, mon.ID, writ.Ptr(50)) cargo add writ-client --git https://github.com/usewrit/writ-sdks
use serde_json::json;
use writ_client::CloudClient;
let cloud = CloudClient::from_env()?; // reads WRIT_API_KEY
let mon = cloud.monitors().create(json!({
"url": "https://example.com",
"selector": "h1",
"check_period_ms": 300_000
})).await?;
let changes = cloud.monitors().changes(mon.id, Some(50)).await?;