Cron & Scheduling

Run skills on a schedule using cron expressions.

Defining schedules in Agentfile.toml

Add a schedule field to any skill:

[skills.cool]
script = "skills/cool.sh"
description = "NTU COOL LMS scanning"
schedule = "0 8 * * *"           # daily at 8:00 AM

[skills.email]
script = "skills/email.sh"
description = "Email triage"
schedule = "0 */4 * * *"         # every 4 hours

The schedule uses standard 5-field cron syntax:

minute  hour  day-of-month  month  day-of-week
  0      8        *           *        *

Managing schedules at runtime

List scheduled jobs

$ aide.sh cron ls
INSTANCE  SKILL   SCHEDULE       NEXT RUN
jenny     cool    0 8 * * *      2025-06-15 08:00
jenny     email   0 */4 * * *    2025-06-15 12:00

Add a schedule

$ aide.sh cron add jenny cool "30 9 * * 1-5"
Schedule set: jenny/cool at 30 9 * * 1-5 (weekdays at 9:30 AM)

Remove a schedule

$ aide.sh cron rm jenny cool
Schedule removed: jenny/cool

Daemon mode

Scheduled jobs only run when the daemon is active:

$ aide.sh up
Daemon started (PID 12345)
Dashboard: http://localhost:3939
Cron scheduler: active (2 jobs)

Without the daemon, schedules defined in Agentfile.toml are stored but not executed.

To stop the daemon:

$ aide.sh down
Daemon stopped.

Viewing cron status in the dashboard

The dashboard at http://localhost:3939 shows a cron panel with:

  • All scheduled jobs across all instances
  • Next scheduled run time
  • Last execution result (exit code, duration, truncated output)
  • Execution history (last 10 runs per job)

Cron output and logs

Cron job output is captured in the instance log:

$ aide.sh logs jenny --filter cron
[2025-06-14 08:00:01] cron/cool: 3 courses, 2 new assignments
[2025-06-14 12:00:01] cron/email: 5 unread messages

Failed jobs (non-zero exit code) are flagged in the dashboard and logs.