Curia’s scheduler lets your agents work while you’re not around. You can declare recurring jobs directly in an agent’s YAML file, ask Curia to create them conversationally, or create them programmatically via the HTTP API. All jobs are backed by Postgres — they survive restarts and process crashes without losing state.Documentation Index
Fetch the complete documentation index at: https://curia.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Recurring jobs in agent YAML
The simplest way to schedule work is to declare it in an agent’s YAML file. Jobs defined here are created at startup and updated automatically if the config changes:TIMEZONE in .env). If you need a specific job to run in a different timezone, the scheduler-create skill accepts an optional timezone parameter.
Common cron patterns
| Expression | When it fires |
|---|---|
0 9 * * 1 | Every Monday at 9:00 AM |
0 8 * * 1-5 | Weekdays at 8:00 AM |
0 */4 * * * | Every 4 hours |
0 9 1 * * | First day of each month at 9:00 AM |
30 17 * * 5 | Every Friday at 5:30 PM |
Creating jobs via conversation
You don’t need to edit YAML to schedule tasks. Ask Curia in plain language and it creates the job for you:One-shot jobs
To schedule something for a specific time rather than a recurring schedule, specify a date and time:Managing scheduled jobs
- Via conversation
- Via HTTP API
scheduler-list and scheduler-cancel internally to handle these requests.Scheduler skills
Agents can manage jobs programmatically using these built-in skills:| Skill | What it does |
|---|---|
scheduler-create | Create a cron or one-shot job with optional intent_anchor |
scheduler-list | List jobs filtered by status or agent |
scheduler-cancel | Cancel a job by ID |
scheduler-report | Write a summary of a completed run for use by the next execution |
scheduler-create skill accepts these inputs:
Provide
intent_anchor for every recurring (cron_expr) job. Write it as a description of what the job is meant to accomplish — not which tools to call. Good: “Summarize investor email activity from the past week and alert the CEO to anything requiring follow-up.” Bad: “Call email-list then filter by sender domain.”Do not provide intent_anchor for one-shot (run_at) jobs.Long-running tasks
Some tasks take too long to complete in a single LLM session — a multi-day research project, a large inbox triage, a complex financial reconciliation. Curia handles these through burst execution. When an agent creates a persistent task, Curia:- Writes the task to Postgres with the original intent anchor and an initial progress record
- Creates a scheduled job that fires the next burst
- On each burst: the agent loads its progress from working memory, does a chunk of work, saves updated progress, and schedules the next burst
- The process continues until the task is marked complete or the error budget is exhausted
Intent drift detection
For recurring and long-running tasks, Curia monitors whether each execution burst is still aligned with the original intent anchor. After each burst, it compares what the agent is doing against the anchor. If the task has drifted significantly, Curia pauses the job and notifies you — it doesn’t just log a warning. This prevents agents from gradually evolving their behavior over multiple runs in ways that no single execution looks suspicious but collectively represent significant deviation. You can configure drift detection sensitivity inconfig/default.yaml:
high (the default) pauses only on clear, unambiguous deviations. low pauses whenever any drift is detected.
Error budgets on scheduled tasks
The samemax_turns and max_cost_usd limits that apply to interactive tasks apply to scheduled tasks. Each burst gets a fresh budget allocation:
scheduler-create: