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
| Command | Description |
|---|---|
/schedule | Open the task manager — list tasks, add one, open a task's details |
/schedule add <when> <prompt> | Save a prompt to run at <when> |
/schedule daemon | Show 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.
| Form | Example | Meaning |
|---|---|---|
+<n><unit> | +45s, +30m, +2h, +3d | That far from now |
HH:MM | 14:30 | The next 14:30 — today, or tomorrow if it has passed |
| Date and time | 2026-10-10T09:00, 2026-10-10 09:00 | A local date and time |
| Exact instant | 2026-10-10T09:00:00Z, 2026-10-10T09:00:00+09:00 | A 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.
--yolomeans 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.mdand.envapply, exactly as if you had typedadal -qthere. - 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
missedinstead 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:
| Platform | Where it is registered |
|---|---|
| macOS | launchd user agent ai.sylph.adal.scheduler |
| Linux | systemd --user unit adal-scheduler.service |
| Windows | Task 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:
| Platform | What happens |
|---|---|
| macOS | The "would like to access" prompt appears for Desktop, Documents, Downloads, iCloud, and external or network volumes. Answer it now and the run works later. |
| Windows | No prompt. The check creates and deletes one small file, which is what Controlled folder access refuses. |
| Linux | No 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/:
| File | Contents |
|---|---|
schedules.json | Your tasks: prompt, time, folder, status, result |
daemon.log | What the scheduler did — starts, task launches, errors |
runs/<id>.log | The full output of one task's run |
Deleting that folder is a full reset.
Related
- Cron: Scheduled Prompts — repeat a prompt inside the current chat
- Slash Commands
- Headless Mode — the
adal -qruns a task is built from