How the scheduler places work
A plan is a list of time blocks built from your tasks and your working hours. The rules are simple and strict, which makes plans predictable — and explains why they change when you re-plan.
What a plan starts with
Section titled “What a plan starts with”A plan is built from four things:
- your open tasks that are switched on for auto-scheduling and have a time estimate. Tasks that are completed, cancelled, archived, missing an estimate or switched to manual are left alone;
- the time blocks the plan must keep: locked blocks, blocks that have already started, in-progress and completed blocks, and blocks of other types such as focus or breaks. These are busy time, and the minutes they cover count towards their task’s estimate;
- the working-hour windows of each task’s schedule preference, or the default windows of Monday to Friday, 09:00 to 17:00 when a task has no preference;
- your timezone and the current moment.
The plan covers the next 14 days, starting at the next 5-minute boundary.
The order tasks are placed
Section titled “The order tasks are placed”Tasks are placed one at a time, most urgent first. Within a priority, the earliest due date comes first, and tasks with a due date go before tasks without one. The ordering is strict: a due date never lifts a task above more urgent work, and a low-priority task due tomorrow waits behind high-priority work with no deadline at all.
Each task then fills the earliest free time that fits it. When a task has used up its estimate, the next task fills what’s left, so a task’s place in the order decides who gets the best slots. Because every re-plan releases all of the planner’s own blocks before it places anything, this also settles arguments between tasks: if an urgent task needs a slot a lower-priority task is currently holding, the urgent task gets it and the other is pushed to whatever room is left, or reported unscheduled if there is none. Work you placed or moved yourself is never taken this way.
Sessions, splitting and cooldowns
Section titled “Sessions, splitting and cooldowns”With autoSplit off, the work goes into a single block of at most maxSessionMinutes; the planner takes the first gap that fits and reports anything beyond one block as unscheduled. With autoSplit on, the estimate is cut into blocks of at most maxSessionMinutes:
- a block is never shorter than
minSessionMinutes, unless it’s finishing the task; - when a block would leave a tail shorter than a minimum session, the planner shortens the current block instead, so the work ends in tidy sessions: with 60-minute sittings, 130 minutes becomes 60, 40 and 30 rather than 60, 60 and a 10-minute stub;
- blocks of the same task are separated by
cooldownMinutes, and one long gap can hold several sessions of the same task back to back with the cooldown between them.
Blocks always start on a 5-minute boundary. The cooldown is kept only between sessions of the same task; blocks of different tasks can sit side by side.
Working-hours boundaries
Section titled “Working-hours boundaries”Windows are weekly: weekday numbers from 0 (Sunday) to 6 (Saturday), with HH:MM start and end times interpreted in your timezone. A window whose end is at or before its start, or whose times aren’t HH:MM, is dropped.
Windows are built day by day across the 14 days and clipped to the plan’s own start and end. Because the times are local, daylight saving is handled: a 09:00 window is 09:00 whether the clocks have changed or not. All busy time is carved out of these windows before anything is placed, and a task with a schedule preference is planned only inside that preference’s windows.
Due dates and risk
Section titled “Due dates and risk”Due dates order tasks within a priority. startAfter is a hard floor: no block starts before it. The planner reports a task as at risk when:
- its due date is already past when the plan runs;
- one of its blocks ends after its due date; or
- it has a due date and work left over that didn’t fit.
The planner never compresses work to meet a deadline. It places work in order and reports what looks unsafe, so a deadline you must meet may need a higher priority.
Work that doesn’t fit
Section titled “Work that doesn’t fit”When free time runs out before an estimate is used up, the leftover minutes produce no blocks. The task is reported as unscheduled — at risk as well if it has a due date — and appears in the Needs scheduling list on the Today page with a hint such as “No free slot”. That list looks at today’s blocks only, so it shows every auto-scheduled task with nothing left later today, including one whose work has already been placed on a later day.
Why re-planning moves things
Section titled “Why re-planning moves things”A re-plan rebuilds the schedule from the current moment: it cancels the unstarted blocks it created and nobody has moved, then places work again. Blocks move whenever the inputs change — a new task, a different priority, an edited estimate or window, or simply time passing. Hand-placed blocks, blocks you have dragged into place, and blocks of a task you switched to manual scheduling survive every re-plan and shrink the room available to everything else, as do locked blocks and blocks that have already started, which are kept along with their remaining minutes.
Worked example
Section titled “Worked example”It’s Saturday 26 September 2026, 08:00 in Sydney. The working window is Monday to Friday 09:00 to 17:00, and every task allows sessions of 30 to 120 minutes with a 60-minute cooldown and auto-splitting on.
| Task | Priority | Estimate | Due |
|---|---|---|---|
| Write proposal | urgent | 30 min | Mon 28 Sep, 12:00 |
| Analyse survey results | high | 130 min | none |
| File timesheet | medium | 60 min | Mon 28 Sep, 09:30 |
The plan runs and produces these blocks on Monday 28 September:
| Time | Task | Why |
|---|---|---|
| 09:00–09:30 | Write proposal | Urgent goes first, and the whole estimate fits the first half hour. |
| 09:30–11:10 | Analyse survey results | High priority goes next; 100 minutes rather than 120, so the rest isn’t a 10-minute tail. |
| 11:10–12:10 | File timesheet | The cooldown between the survey’s sessions leaves exactly enough room. |
| 12:10–12:40 | Analyse survey results | The final 30 minutes, after the cooldown. |
The timesheet’s 09:30 due date doesn’t lift it above high-priority work, so its block ends after the deadline and the task is reported at risk. The proposal ends before its noon deadline and is fine. The work fits in one day, so the rest of the week stays free.
See also
Section titled “See also”- Scheduling and working hours: set windows and session sizes, and run a plan
- Planner: the endpoint that builds a plan
- run_scheduler: run a plan from an agent
- Time blocks: the blocks a plan creates