Scheduling
Any prompt can be queued to run later in a specific workspace. The Schedule view (desktop) lists everything queued across every workspace; the Lectern daemon (lecternd) runs each one when it comes due.
From the desktop
Open the clock button in a chat's composer to queue that prompt in that session's folder, pick when it should run, and it appears in the Schedule view as pending. When the daemon runs it, the status moves to done (or error), and the result is a normal session you can open. The view also clears finished entries and cancels pending ones.
From the CLI
lectern schedule add --at +2h --backend opencode "run the test suite and summarize failures" lectern schedule list # pending / done / cancelled, with time-to-run lectern schedule cancel 55151f86 # by the short id the list prints lectern schedule run-due # run everything currently due (what the daemon calls)
--at accepts now, a relative offset (+30m, +2h, +1d), or a Unix timestamp. Cancel accepts the short id shown by schedule list, and tells you if nothing matched rather than pretending it worked.
How due tasks run
| State | Meaning |
|---|---|
| pending | Queued; not yet due |
| running | Claimed by the daemon and executing (a guard stops two runners double-firing) |
| done | Finished; open it as a session |
| error | The run failed; the reason is recorded |
| cancelled | You cancelled it before it ran |
The daemon claims a due task atomically before running it, so a second daemon (or a manual run-due) can never fire the same task twice. Keep lecternd running for schedules to fire on their own; without it, schedule run-due runs whatever is due on demand.