Saltar al contenido principal

API de Tareas Programadas

@grant CAT.agent.task

La API de tareas programadas permite a un script crear tareas basadas en expresiones Cron, con dos modos de ejecución.

Modos de ejecución

Modo interno

Manejado automáticamente por el sistema Agent:

  • Crea o reanuda una conversación automáticamente cuando se activa el Cron
  • Envía el prompt configurado al LLM
  • Se puede especificar un modelo y Skills
  • El historial de ejecución y uso de tokens se registra automáticamente

Modo evento

Manejado por el propio script:

  • Se envía una notificación de evento al script cuando se activa el Cron
  • El script escucha el evento mediante addListener
  • La lógica de manejo es completamente personalizable

create — crear una tarea

const task = await CAT.agent.task.create(options);

Parámetros (AgentTaskCreateOptions):

ParámetroTipoRequeridoDescripción
namestringNombre de la tarea
crontabstringExpresión Cron estándar (5 campos: minuto hora día mes día_semana)
mode"internal" | "event"Modo de ejecución
enabledbooleanNoSi está habilitada, por defecto true
notifybooleanNoSi enviar notificación del navegador cuando se activa
promptstringNoPrompt para modo interno
modelIdstringNoID del modelo a usar en modo interno
skillsstring[]NoSkills a cargar en modo interno
maxIterationsnumberNoMáximo de rondas de llamadas a herramientas en modo interno, por defecto 10

Devuelve AgentTask:

CampoTipoDescripción
idstringID de la tarea
namestringNombre de la tarea
crontabstringExpresión Cron
modestringModo de ejecución
enabledbooleanSi está habilitada
notifybooleanSi se envían notificaciones
nextruntimenumberMarca de tiempo de la próxima ejecución
lastruntimenumberMarca de tiempo de la última ejecución
conversationIdstringID de conversación asociada en modo interno (opcional)
lastRunStatus"success" | "error"Estado de la última ejecución
lastRunErrorstringMensaje de error de la última ejecución
createtimenumberMarca de tiempo de creación

Ejemplos de expresión Cron:

ExpresiónDescripción
* * * * *Cada minuto
0 9 * * *Todos los días a las 09:00
0 */2 * * *Cada 2 horas
30 8 * * 1-5Días laborables a las 08:30
0 0 1 * *00:00 el día 1 de cada mes

list — listar todas las tareas

const tasks = await CAT.agent.task.list();

Devuelve todas las tareas creadas por el script actual.

get — obtener detalles de una tarea

const task = await CAT.agent.task.get(taskId);

Devuelve undefined si la tarea no existe.

update — actualizar una tarea

const task = await CAT.agent.task.update(taskId, partial);

Campos actualizables:

await CAT.agent.task.update(task.id, {
name: "Nuevo nombre",
crontab: "0 10 * * *",
enabled: false,
prompt: "Nuevo prompt",
notify: true
});

nextruntime se recalcula automáticamente después de una actualización.

remove — eliminar una tarea

const success = await CAT.agent.task.remove(taskId);

runNow — ejecutar inmediatamente

await CAT.agent.task.runNow(taskId);

Activa la ejecución de la tarea una vez inmediatamente, sin esperar su Cron (sin bloqueo, se ejecuta en segundo plano).

addListener — escuchar activaciones de tareas

const listenerId = await CAT.agent.task.addListener(taskId, callback);

Solo se usa para tareas en modo evento. El callback se ejecuta cuando se activa el Cron.

Parámetro del callback (AgentTaskTrigger):

CampoTipoDescripción
taskIdstringID de la tarea
namestringNombre de la tarea
crontabstringExpresión Cron
triggeredAtnumberMarca de tiempo de activación

removeListener — eliminar un listener

await CAT.agent.task.removeListener(listenerId);

Ejemplos completos

Modo interno — la IA lo ejecuta automáticamente

// ==UserScript==
// @name Resumen de noticias programado
// @match *://*/*
// @grant CAT.agent.task
// ==/UserScript==

const task = await CAT.agent.task.create({
name: "Resumen diario de noticias",
crontab: "0 9 * * *", // Todos los días a las 9
mode: "internal",
prompt: "Por favor busca las noticias tecnológicas de hoy y guarda un resumen breve en OPFS",
skills: ["web-search"],
maxIterations: 10,
notify: true
});

console.log("Tarea creada, próxima ejecución:", new Date(task.nextruntime));

Modo evento — el script lo maneja

// ==UserScript==
// @name Recolección de datos programada
// @match *://*/*
// @grant CAT.agent.task
// @grant CAT.agent.dom
// ==/UserScript==

const task = await CAT.agent.task.create({
name: "Recolección de datos bursátiles",
crontab: "*/30 9-15 * * 1-5", // Cada 30 minutos, 9-15 en días laborables
mode: "event",
enabled: true,
notify: false
});

await CAT.agent.task.addListener(task.id, async (trigger) => {
console.log(`Tarea activada: ${trigger.name} en ${new Date(trigger.triggeredAt)}`);

// Lógica de recolección personalizada
await CAT.agent.dom.navigate("https://finance.example.com/stock");
const content = await CAT.agent.dom.readPage({ selector: ".stock-table" });

// Procesar los datos...
console.log("Recolección completada");
});