Skip to main content

Scheduled Tasks

/schedule saves a prompt to run once at a time you pick. A small scheduler runs in the background on your machine, starts again when you log in, and launches each task when it is due — AdaL does not have to be open.

This is different from /cron: cron repeats a prompt inside the chat you are sitting in and stops when you quit. A scheduled task runs once, in its own session, whether or not you are there.

/schedule works in the terminal and in AdaL Desktop. It is not offered in the web chat, which cannot install a service on your machine.

Quick Start​

# Run a prompt in 30 minutes
/schedule add +30m Summarize today's commits and write them to NOTES.md

# Open the task manager
/schedule

# Daemon status, start, stop, uninstall
/schedule daemon

Commands​

CommandDescription
/scheduleOpen the task manager — list tasks, add one, open a task's details
/schedule add <when> <prompt>Save a prompt to run at <when>
/schedule daemonShow the scheduler's status and start, restart, stop, or uninstall it

Time formats​

<when> is in your machine's local time zone unless it carries its own offset.

FormExampleMeaning
+<n><unit>+45s, +30m, +2h, +3dThat far from now
HH:MM14:30The next 14:30 — today, or tomorrow if it has passed
Date and time2026-10-10T09:00, 2026-10-10 09:00A local date and time
Exact instant2026-10-10T09:00:00Z, 2026-10-10T09:00:00+09:00A moment with its own offset

The time has to be in the future and no more than a year away. A time that does not exist in your time zone — February 30, or an hour skipped by daylight saving — is refused rather than moved.

The task manager​

Type /schedule to open it.

  • Add task asks when: In 10 minutes, In 1 hour, Next 09:00, or a custom date or time. Picking one fills your input with /schedule add <when> so you only type the prompt.
  • Each row shows the task's id, its status, and the start of its prompt.
  • Selecting a task shows its full prompt, folder, scheduled and finished times, exit code, and any error. From there you can View output (the last 25 lines of its log) or Remove task, which asks for confirmation first.

Removing a task that is running stops the run.

A task is pending, running, succeeded, failed, or missed.

How a task runs​

Each task runs as its own headless AdaL session:

adal -q "<your prompt>" --yolo --output text

Three things follow from that:

  • No approval prompts. --yolo means the run can edit files and execute commands without asking. Only schedule prompts you would approve unattended.
  • It runs in the folder where you added it. That folder's AGENTS.md and .env apply, exactly as if you had typed adal -q there.
  • It is a real chat you can continue. The task's details show an adal -r <session-id> command that reopens the conversation the run had.

Limits the scheduler enforces:

  • Three tasks run at once; the rest wait for a free slot.
  • A run still going after 6 hours is stopped and marked failed.
  • A prompt can be up to 8 KiB.
  • A task whose time passed by more than a minute while the machine was off or asleep is marked missed instead of running late with stale instructions.

The scheduler itself​

The first /schedule add registers the scheduler with your operating system, so it starts at login and starts again if it exits:

PlatformWhere it is registered
macOSlaunchd user agent ai.sylph.adal.scheduler
Linuxsystemd --user unit adal-scheduler.service
WindowsTask Scheduler task AdaL Scheduler (runs without a console window)

If the service manager cannot be used, the scheduler still starts as a plain background process — it then runs until you log out, and /schedule add says so.

/schedule daemon shows whether the scheduler is running, whether it starts at login, how many tasks are pending and running, and where its files are. Its actions are Start, Restart, Stop, Uninstall, and Refresh. Uninstall asks for confirmation, stops the scheduler, and removes it from login — your saved tasks are kept.

On AdaL Desktop​

Desktop carries its own copy of the scheduler, so you do not have to install the CLI or put it on your PATH. Type /schedule in the chat box to open the same panel: the task list, Add task with the same time choices, a task's details and its output, and the daemon actions Start, Restart, Stop and Uninstall.

Each Desktop version carries the scheduler it was built with. Start and Restart switch scheduling to the copy inside the Desktop app you pressed them in. Opening a different Desktop version does not switch it by itself.

Folder access​

A run opens the folder its task was added in. If the operating system still wants permission for that folder, nobody is at the computer to answer when the task is due, and the run fails. So AdaL asks earlier: at CLI startup, when Desktop launches, after /schedule add, and after Start or Restart.

The scheduler makes the check itself, because it is the program the operating system grants access to — a check made by your terminal or by AdaL.app says nothing about the scheduler. It opens every pending task's folder:

PlatformWhat happens
macOSThe "would like to access" prompt appears for Desktop, Documents, Downloads, iCloud, and external or network volumes. Answer it now and the run works later.
WindowsNo prompt. The check creates and deletes one small file, which is what Controlled folder access refuses.
LinuxNo prompt. The check reads the folder and asks the kernel for read, write and search access, so a permissions or SELinux/AppArmor problem shows up now.

You see nothing when there is nothing to check or every folder is fine. When a folder is refused you get one line naming it and what to change — on macOS, System Settings → Privacy & Security → Files and Folders (Full Disk Access if the scheduler is not listed); on Windows, Controlled folder access or the folder's Security tab; on Linux, the folder's owner and permissions. A folder that can be read but not written is reported on its own, because tasks that only read files still work.

Files​

Everything lives in one folder, ~/.adal/scheduler/:

FileContents
schedules.jsonYour tasks: prompt, time, folder, status, result
daemon.logWhat the scheduler did — starts, task launches, errors
runs/<id>.logThe full output of one task's run

Deleting that folder is a full reset.