Documentation
Schedules
A schedule creates a task on a recurring basis. The scheduler runs inside the worker process and keeps all of its state in PostgreSQL. It does not depend on a browser tab, and schedule changes survive restarts.
Creating one
A schedule has the same settings as a task (instruction, connection, model, tools, limits, memory, project) plus:
- Recurrence: every N minutes or hours, hourly at a minute, daily at a time, weekly on chosen days, or a five-field cron expression.
- Time zone: an IANA name such as
Asia/Jakarta. "Daily at 09:00" means 09:00 in that zone, including across daylight-saving changes.
The form shows the next five runs before you save. The schedule list shows the next run of each schedule.
Tasks created by a schedule cannot propose memory entries, and a tool with policy ask will stop them for approval like any other task, so prefer auto tools with a narrow allowed-domain list for unattended runs.
Overlap
If the previous task from the same schedule is still open (queued, running, paused, waiting for approval or review) when the next run is due, that run is skipped and recorded as skipped_overlap. Runs never pile up behind a slow or blocked task.
Missed runs
When the worker was not running at the scheduled time:
| Policy | After downtime |
|---|---|
| Start one catch-up run (default) | One task is started, however many runs were due. The run record says how many were missed. |
| Skip the missed runs | Nothing is started. The missed occurrence is recorded as skipped_missed. |
Either way there is never a burst of catch-up runs. A run counts as missed when it is more than two minutes late or when a later run has also passed.
Pausing a schedule clears its next run. Resuming or changing the timing schedules from now; nothing is backfilled.
Duplicates
Each occurrence is recorded once under a unique key of schedule and scheduled time, and the scheduler takes a row lock on the schedule while it handles it. With several workers running the scheduler, an occurrence still starts at most one task.
History
Each schedule shows its previous runs: when it was due, what happened (started, skipped_overlap, skipped_missed, error) and the task it created. error means the task could not be created, for example because the connection was removed.