---
title: "Scheduler"
id: "1798"
type: "page"
slug: "scheduler"
published_at: "2026-09-20T21:51:53+00:00"
modified_at: "2026-09-21T01:36:28+00:00"
url: "https://xedant.com/agents/data/docs/scheduler"
markdown_url: "https://xedant.com/agents/data/docs/scheduler.md"
excerpt: "The built-in scheduler runs scripts on a schedule — no cron on the server (the…"
---

# Scheduler

[https://xedant.com/agents/data/docs/scheduler.md](https://xedant.com/agents/data/docs/scheduler.md)

The built-in scheduler runs scripts on a schedule — no cron on the server (the system task scheduler) and no other external tools are needed. The whole schedule is one file, `schedule.yml`, in the scripts folder, managed by the agent: you ask in chat “run every day at 9 a.m.” — the agent adds the entry itself.

## How the schedule is arranged

The `schedule.yml` file is a list of entries. Each entry has:

- `id` — the entry’s name;
- `script` — the script’s path inside the folder;
- a description — what this task is for;
- and one of two: `every` — an interval (for example `15m`, `24h`, `7d`) or `cron` — an exact time as six fields: seconds, minute, hour, day of month, month, day of week (in UTC);
- extra flags: `enabled` (the entry is on), `overlap` — what to do when the previous run is still going (skip or queue), `catchUp` — whether to catch up on missed runs.

## Intervals: no drift

A new interval entry runs immediately, then ticks on a fixed grid: every 15 minutes, every 24 hours — precisely, with no accumulated lag. If the application was down (say, the server rebooted), the next run is the grid’s first point in the future, not a “floating” time counted from the restart.

## Exact times

An exact-time entry waits for its clock match (UTC): “every weekday at 7:00”. An expression with no future occurrence (February 31, say) is not lost — it is rechecked later.

## All-or-nothing validation

The whole file is validated at once: one bad entry — and the entire new file is rejected, while the last working version of the schedule stays in force. It is impossible to break the schedule with a single typo; the data never loses its runs. A missing file is not an error: there is simply no schedule, and nothing runs.

## Missed runs

If a run’s time came while the application was off, the run fires at startup (when `catchUp` is enabled) or is skipped by the queue’s rules. Runs are never lost silently — the behavior is always predictable, and no burst of back-runs ever piles up.

## Managing from the interface

The Scheduler section lists every entry: what runs, when and at what interval. From here you can pause the whole schedule at once, put one entry on hold, run a script right now with the “Run now” button, and browse the schedule’s run history. The file itself is not edited in the interface: ask for schedule changes in chat — the agent updates `schedule.yml`, and the changes are picked up on the fly, without restarting the application.

See also: [Runs](/agents/data/docs/runs)
, [Chat with the Agent](/agents/data/docs/chat)
.

[← Back to the documentation index](/agents/data/docs)
