Scheduled tasks
Circle can run a prompt on a clock: a nightly summary of the day, a weekly triage,
one check tomorrow morning. A schedule is a standing prompt for one folder; each time it is
due, Circle runs it headless, like circle -p, and writes the answer to a log. It never
forgets a prompt you gave it once, and nothing runs when nothing is due.
circle schedule add notes "summarize yesterday's commits in NOTES.md" --daily 09:30
circle schedule start
What a schedule is
A schedule has a name, a prompt, one folder it works in, and a clock. The folder is the
project it answers about: the run trusts the folder (you chose it when you made the
schedule), reads its instruction files and runs its tools there, exactly as a
circle -p "..." <folder> would. A run is a conversation of its own; it is saved like any
other session and can be opened with /resume. What it printed goes to a log under the
data folder (schedules/<name>/runs/), and each schedule keeps its last fifty runs in a
history.
The clocks:
| Flag | Meaning |
|---|---|
--every 15m |
a plain spacing: 45s up to 365d, at least one minute |
--daily 09:30 |
every day at that local time |
--cron "30 9 * * 1-5" |
five fields — minute, hour, day of month, month, day of week — in local time; *, lists (1,15), ranges (1-5) and steps (5/15, */10) |
--at "2026-11-02 07:00" |
once, then done; a bare --at 07:00 means the next time that clock reads |
Circle’s own words for these are in the CLI reference, CLI, and
in circle schedule --help.
Managing schedules
circle schedule add NAME PROMPT <clock> [-w FOLDER] [-m MODEL] [--yolo] [--extensions]
circle schedule list
circle schedule show NAME
circle schedule pause NAME
circle schedule resume NAME
circle schedule remove NAME
circle schedule run NAME
- Without
-w, a schedule works in the folder you made it from. - Without
-m, it uses the model from settings,default_thinkingand all. circle schedule run NAMEruns it once, now, apart from its clock: the clock does not move and a failed manual run is not counted.listshows each schedule, its clock and its next run;showadds the prompt, the folder, the flags and the last five runs.
Keeping the clock running
Schedules fire while the scheduler runs. It is one background process per data folder:
circle schedule start # keep firing schedules in the background
circle schedule stop
circle schedule status # whether it runs, and what comes next
start detaches; the scheduler’s own output goes to schedules/daemon.log in the data
folder. circle schedule daemon runs the same loop in the terminal you can watch. While no
scheduler runs, nothing fires: a missed time is skipped and the next one waits. To keep
that window small, run circle schedule tick from your own cron or Task Scheduler
instead of the daemon: it fires everything that is due and exits.
One run of one schedule at a time, whatever asked for it: a tick that finds a schedule
still running leaves it for the next. The scheduler runs at most three schedules at once
and takes the rest on the next tick; circle schedule tick fires everything due at once. A run that passes four hours is stopped. The run’s approvals
follow your saved default_mode; for an unattended schedule that should edit or run
commands freely, give it --yolo when you make it. --extensions loads your extensions
and MCP servers into the run, as they are for circle -p --extensions. A project’s hooks
files that you have not approved are skipped, as in any headless run.
When a run fails
The status, exit code and log line of every run are kept in the schedule’s history. If
three scheduled runs of one schedule fail in a row, Circle pauses it and says why, so a
broken endpoint or a moved folder does not burn tokens all night; fix the cause and
circle schedule resume NAME. A --at schedule that fails its one run pauses with a note
instead of trying again every tick; one that answers is marked done.
Safety
- The prompt, folder and clock of a schedule are kept in
schedules/<name>/schedule.json, readable only by you. - A schedule runs with your model endpoint and your key, without asking. Make the prompt
the kind you would leave running on your own machine;
--yolomeans no approvals on a run that nobody is watching. - Removing a schedule deletes its folder with its logs:
circle schedule remove NAME. - Schedules are stored in the data folder, not in the project they work in.
Notes
- Clocks follow your machine’s local time. A wall time that daylight saving skips does not come that day.
- The first run of
--everyis one spacing after you add it, not at once. If you want it now, runcircle schedule run NAME. - The desktop application does not show or run schedules yet.