> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ardor.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Scheduled Tasks

> Recurring or one-off agent runs. Each run starts a fresh chat with your instructions and reports back when it finishes.

A scheduled task is a stored prompt plus a trigger. Every time it fires, Cerebrum opens a
new chat, works through the prompt on its own, and leaves the result there for you to read.

## Creating a Task

<CardGroup cols="2">
  <Card title="Ask in chat" icon="comments">
    "Every Monday at 9, summarize open incidents." Cerebrum turns that into a schedule and
    confirms it with you before saving. It can also list, edit and delete your tasks.
  </Card>

  <Card title="Fill in the form" icon="table-list">
    **Workdesk → Scheduled tasks → New task**. Useful when you want to write the schedule
    expression yourself, or change one without describing it.
  </Card>
</CardGroup>

Asking in chat is usually faster, and it is the better option if you would rather not write a
cron expression — describe the cadence in your own words and let the agent compose it. You can
also paste an expression you already have and ask what it does.

## Triggers

<CardGroup cols="2">
  <Card title="Schedule" icon="clock-rotate-left">
    Fires on a cron expression evaluated in the timezone you pick.
  </Card>

  <Card title="Manual" icon="play">
    **Run now**, always available, whether or not a schedule is set.
  </Card>
</CardGroup>

## Writing the Schedule

The expression takes 5, 6 or 7 space-separated fields:

```
minute hour day-of-month month day-of-week
minute hour day-of-month month day-of-week year
second minute hour day-of-month month day-of-week year
```

```
*  *  *  *  *  *
│  │  │  │  │  │
│  │  │  │  │  └─ Year             (optional)
│  │  │  │  └──── Day of the week  (0 - 7)
│  │  │  └─────── Month            (1 - 12)
│  │  └────────── Day of the month (1 - 31)
│  └───────────── Hour             (0 - 23)
└──────────────── Minute           (0 - 59)
```

Each field accepts an asterisk, a plain number, a list (`1,15`), a range (`1-5`) or a step
(`*/2`). Sunday is both `0` and `7`. Shorthands `@hourly`, `@daily`, `@weekly`, `@monthly`
and `@yearly` stand in for the whole expression.

| Expression        | Fires                                    |
| ----------------- | ---------------------------------------- |
| `0 9 * * 1-5`     | 09:00, Monday to Friday                  |
| `*/15 8-18 * * *` | Every 15 minutes between 08:00 and 18:00 |
| `0 9 1 * *`       | 09:00 on the 1st of every month          |
| `@daily`          | Midnight, every day                      |
| `0 9 21 7 * 2026` | 09:00 on 21 July 2026 — once             |

<Note>
  The form shows the next three runs as you type. That preview is the quickest way to check
  an expression means what you intended.
</Note>

### Two Rules Worth Knowing

<Warning>
  **A year makes the task run once.** With no year the expression repeats forever. Add one
  and the task fires while that year lasts and is then spent — its schedule is dropped,
  though the task itself stays and can still be run by hand. This is how you say "just
  once, on this date".
</Warning>

<Warning>
  **Day-of-month and day-of-week must both match** when you restrict both. `0 9 13 * 5` is
  Friday the 13th, not every 13th plus every Friday. Some other cron implementations treat
  this as "either"; Ardor does not, because the scheduler underneath does not.
</Warning>

### Limits

* Schedules that fire more often than the platform minimum are rejected.
* Ten tasks per user.
* A task whose runs are all in the past is rejected — check the year.
* After several consecutive failures the task is paused automatically, so a broken task does
  not keep burning usage. Re-enable it once the cause is fixed.

## Every Run Is a Fresh Chat

Runs do not share memory, so write the prompt so it stands on its own — the agent brings
nothing forward from the last time.

Mostly the agent receives exactly your prompt and nothing else. A run is a deferred
conversation: you wrote the instructions, so there is nothing to add. One thing is appended,
because the prompt could not have carried it — **when the last run was**. It is absent on a
first run, and it is what makes "summarize what changed since the last run" work: the date
moves every time, so you cannot write it into the prompt yourself.

It comes as a tagged block after your prompt:

```
Summarize anything new in the error tracker.

<routine_context>
  <previous_run>2026-07-25T09:00:00+00:00</previous_run>
</routine_context>
```

The block is addressed to the agent, so the chat hides it — the run's conversation shows your
prompt as you wrote it.

## Settings

<CardGroup cols="2">
  <Card title="Model" icon="microchip">
    Pick a model for the task, or leave it on the workspace default.
  </Card>

  <Card title="Tool approvals" icon="shield-check">
    **Checked** reviews risky tool calls before they run, exactly as in chat. **Full access**
    skips that review — choose it only for a task you are content to leave unsupervised.
  </Card>
</CardGroup>

## Watching a Task

The task page lists recent runs with their status, what triggered them, and a link to the
chat each one produced. `Succeeded` and `Failed` mean what they say; a failed run records the
error, so a task that stops working tells you why.
