Skip to main content
Missions can be scheduled to run at a specific time or on a recurring basis. The scheduler checks for due missions every 30 seconds and triggers execution automatically.

Schedule types

One-shot

Fires once at a specific time. Mission status is set to scheduled until it triggers, then moves to active.

Recurring

Fires on every cron tick. Mission status is set to recurring and returns to recurring after each completion.

One-shot schedule

Set schedule to an ISO 8601 timestamp:
{
  "name": "quarterly-audit",
  "prompt": "Run the Q1 security audit",
  "schedule": "2026-04-01T09:00:00Z",
  "tasks": [
    { "title": "Scan dependencies", "assignTo": "security-agent" },
    { "title": "Generate report", "assignTo": "writer", "dependsOn": ["Scan dependencies"] }
  ]
}
The mission status transitions: draft -> scheduled -> active -> completed.
If a one-shot mission fails, it can be retried manually. The scheduler will not re-trigger it automatically.

Recurring schedule

Set schedule to a cron expression:
{
  "name": "daily-standup-summary",
  "prompt": "Summarize yesterday's commits and open PRs",
  "schedule": "0 9 * * 1-5",
  "endDate": "2026-12-31T00:00:00Z",
  "tasks": [
    { "title": "Fetch activity", "assignTo": "data-collector" },
    { "title": "Write summary", "assignTo": "writer", "dependsOn": ["Fetch activity"] }
  ]
}
The mission status transitions: draft -> recurring -> active -> recurring (on each tick). After endDate, the mission moves to completed and stops scheduling new runs. The executionCount field tracks how many times the mission has run.

Cron syntax

Standard 5-field cron expressions: Cron expression format

Supported syntax

SyntaxExampleMeaning
Numbers30 9 * * *9:30 AM every day
Ranges0 9-17 * * *Every hour from 9 AM to 5 PM
Steps*/10 * * * *Every 10 minutes
Lists0 9 * * 1,3,59 AM on Mon, Wed, Fri
Wildcards* * * * *Every minute
ExpressionDescription
0 9 * * 1-5Weekdays at 9 AM
0 0 * * *Midnight daily
0 */6 * * *Every 6 hours
30 14 1 * *2:30 PM on the 1st of each month
0 9 * * 1Every Monday at 9 AM
*/30 * * * *Every 30 minutes
The following cron features are not supported:
  • @yearly, @monthly, @weekly, @daily, @hourly shortcuts
  • Seconds field (6-field cron)
  • L (last day), W (nearest weekday), # (nth weekday) modifiers

End date

For recurring missions, endDate specifies when the schedule stops:
{
  "schedule": "0 9 * * 1",
  "endDate": "2026-06-30T00:00:00Z"
}
After the end date passes, the scheduler skips the mission and sets its status to completed. Any in-progress run will finish normally.

Execution count

The executionCount field is incremented each time a recurring mission fires. Use it to track how many runs have occurred:
{
  "name": "daily-standup-summary",
  "status": "recurring",
  "executionCount": 47
}

Scheduler configuration

The scheduler runs as a background loop within the Polpo server.
SettingDefaultDescription
enableSchedulertrueEnable or disable the scheduler
Polling interval30 secondsHow often the scheduler checks for due missions
Disabling the scheduler (enableScheduler: false) stops all scheduled and recurring missions from firing. One-shot missions that were due while the scheduler was disabled will fire on the next tick after re-enabling.
Override the scheduler setting in your project configuration:
{
  "settings": {
    "enableScheduler": true
  }
}