---
title: Cron
url: https://arcana.otnelhq.com/docs/cron
---

# Cron Jobs



Schedule recurring prompts, reports, reviews, and checks that run automatically from the Arcana runtime. Cron jobs let you set and forget AI workflows — daily standups, weekly code reviews, hourly monitoring alerts, or any other repeated task.




## Quick Start



```
# Every 4 hours: run code review
arcana cron add --name "review PRs" --schedule "0 */4 * * *" --prompt "review open PRs for bugs"

# Daily summary at 9 AM
arcana cron add --name "daily digest" --schedule "0 9 * * *" --prompt "summarize today's changes"

# Run the daemon (blocks, evaluates jobs every 60s)
arcana cron start
```




## Commands



| Command | Description |
| --- | --- |
| `arcana cron add` | Create a new scheduled job |
| `arcana cron list` | List all jobs with status and last run |
| `arcana cron remove --id <id>` | Delete a job |
| `arcana cron pause --id <id>` | Disable a job without deleting it |
| `arcana cron resume --id <id>` | Re-enable a paused job |
| `arcana cron run --id <id>` | Run a job immediately (manual trigger) |
| `arcana cron start` | Start the scheduler daemon |




## Adding a Job



```
arcana cron add \
  --name "daily review" \
  --schedule "0 9 * * *" \
  --prompt "review today's git commits and summarize changes" \
  --skill "git" \
  --tz "America/New_York"
```




### Options



| Flag | Required | Description |
| --- | --- | --- |
| `--schedule`, `-s` | Yes | Cron expression or alias (see below) |
| `--prompt`, `-p` | Yes | The prompt sent to the agent |
| `--name`, `-n` | No | Human-readable job name |
| `--skill` | No | Activate a specific skill for this job |
| `--timezone`, `--tz` | No | Timezone for the schedule (default: `UTC`) |




## Schedule Syntax



Standard 5-field cron expressions are supported:



```
┌───────── minute (0–59)
│ ┌──────── hour (0–23)
│ │ ┌─────── day of month (1–31)
│ │ │ ┌────── month (1–12)
│ │ │ │ ┌───── day of week (0–7, 0 and 7 = Sunday)
│ │ │ │ │
* * * * *
```




### Examples



| Schedule | Meaning |
| --- | --- |
| `0 9 * * *` | Every day at 9:00 AM |
| `0 */4 * * *` | Every 4 hours |
| `30 8 * * 1-5` | Weekdays at 8:30 AM |
| `0 0 1 * *` | First of every month |
| `*/15 * * * *` | Every 15 minutes |




### Aliases



| Alias | Expands to |
| --- | --- |
| `@hourly` | `0 * * * *` |
| `@daily` | `0 0 * * *` |
| `@weekly` | `0 0 * * 0` |
| `@monthly` | `0 0 1 * *` |
| `@yearly` | `0 0 1 1 *` |




## Managing Jobs



```
# List all scheduled jobs with their next run time
arcana cron list

# Run a job immediately (regardless of schedule)
arcana cron run <job-id>

# Pause a job without removing it
arcana cron pause <job-id>

# Resume a paused job
arcana cron resume <job-id>

# Remove a job permanently
arcana cron remove <job-id>
```




## Starting the Daemon



```
arcana cron start
```



The scheduler evaluates all enabled jobs every 60 seconds (configurable). Press `Ctrl+C` to stop.



```
# Output
Cron scheduler running (interval: 60s). Ctrl+C to stop.
[2026-07-20T09:00:00.000Z] Running job: daily review
[output] Today's changes include 3 commits to packages/engine...
```




## Configuration



Cron settings live in `~/.arcana/config.json`:



```
{
  "cron": {
    "enabled": true,
    "intervalSeconds": 60
  }
}
```



| Key | Default | Description |
| --- | --- | --- |
| `cron.enabled` | `true` | Enable or disable the cron system |
| `cron.intervalSeconds` | `60` | How often the scheduler checks for due jobs |




## How It Works



- Jobs are stored in `~/.arcana/data/cron-jobs.json`.
- Each job gets its own agent session with conversation history and memory integration.
- Destructive shell commands are blocked by default (safe mode) unless the job prompt explicitly requires them.
- Jobs integrate with the memory system — the agent can read and write facts across runs.
- If a job specifies a `--skill`, that skill's instructions are injected into the agent's system prompt.




## License Requirement



Cron jobs require a valid API key (`ARCANA_API_KEY` or provider-specific keys). The agent runs unattended with your configured provider and model.
