Scheduler#
Ask Claude#
“Schedule a task called daily-backup to run every day at 9am”
“Schedule expense-report to run every Friday at 5pm”
“List my scheduled tasks”
“Run the daily-backup task now”
“Remove the hourly-check schedule”
Claude adds, lists, and removes schedules. Start the daemon separately so they actually run:
opendesk scheduler start
Start the background runner#
Schedules are saved to disk but only execute when the daemon is running:
opendesk scheduler start
To list schedules without starting the daemon:
opendesk scheduler list
Natural language tasks (non-replay) require Claude API access:
export ANTHROPIC_API_KEY=sk-ant-...
export OPENDESK_MODEL=claude-sonnet-4-6 # optional, this is the default
opendesk scheduler start
Timing formats#
Format |
Example |
Meaning |
|---|---|---|
Interval |
|
Every 30 minutes |
Interval |
|
Every 2 hours |
Interval |
|
Every day |
Daily |
|
Daily at 9am |
Weekly |
|
Every Friday at 5pm |
Weekly |
|
Every Monday at 8am |
Cron |
|
Raw cron expression |
Installation#
pip install 'opendesk[learn]' # recording and replay (pynput)
pip install 'opendesk[schedule]' # scheduled tasks (apscheduler)
pip install 'opendesk[all]' # everything
Storage#
Procedures: .opendesk/learned/<name>.json
Schedules: .opendesk/schedules.json
Both are plain JSON — you can edit, share, or version-control them.
Platform support#
Feature |
macOS |
Linux |
Windows |
|---|---|---|---|
Recording |
✓ |
✓ |
✓ |
Accessibility context (optional) |
atomacos |
pyatspi |
pywinauto |
Replay |
✓ |
✓ |
✓ |
Scheduling |
✓ |
✓ |
✓ |
That’s the full automation system. If you want to run tasks on a remote machine, check out Remote Computer Use →