| name | scheduler |
| description | Natural language task scheduling for Kite. Create, list, and cancel scheduled jobs in plain English with a human-readable registry of what's running and why. |
| category | system |
| maturity | stable |
| tags | ["cron","crontab","scheduling","natural-language","registry"] |
Scheduler Skill
Natural language task scheduling for Kite. Create, list, and cancel scheduled jobs in plain English with a human-readable registry of what's running and why.
Quick Trigger Phrases
| User says | Kite does |
|---|
| "Schedule X every Y" | node scheduler.cjs add --name "X" --every "Y" --command "..." --why "..." |
| "Remind me to X at Y" | node scheduler.cjs add --name "X" --at "Y" --command "..." --why "..." |
| "What's scheduled?" / "List scheduled tasks" | node scheduler.cjs list |
| "Cancel the morning brief" / "Remove X" | node scheduler.cjs remove morning-brief |
| "Check scheduler health" / "Any drift?" | node scheduler.cjs status |
| "Sync the scheduler" | node scheduler.cjs sync |
Files
- Registry:
~/.openclaw/schedule.json — human-readable source of truth
- CLI:
${SCHEDULER_HOME:-$HOME/projects/scheduler}/scheduler.cjs — manages registry + crontab
- Skill copy:
${CLAUDE_SKILLS_DIR:-$HOME/.claude-agent/.claude/skills}/scheduler/scripts/scheduler.cjs
Usage
node ${SCHEDULER_HOME:-$HOME/projects/scheduler}/scheduler.cjs add \
--name "Morning brief" \
--every "9am Monday-Friday" \
--command "/usr/bin/node $HOME/scripts/brief.cjs" \
--why "Daily summary of overnight events"
node ${SCHEDULER_HOME:-$HOME/projects/scheduler}/scheduler.cjs add \
--name "Check deployment" \
--at "2026-02-21 18:00" \
--command "/usr/bin/node $HOME/scripts/check-deploy.cjs" \
--why "Verify prod deploy went smoothly"
node ${SCHEDULER_HOME:-$HOME/projects/scheduler}/scheduler.cjs list
node ${SCHEDULER_HOME:-$HOME/projects/scheduler}/scheduler.cjs status
node ${SCHEDULER_HOME:-$HOME/projects/scheduler}/scheduler.cjs remove morning-brief
node ${SCHEDULER_HOME:-$HOME/projects/scheduler}/scheduler.cjs sync
node ${SCHEDULER_HOME:-$HOME/projects/scheduler}/scheduler.cjs help-times
How It Works
- Registry (
schedule.json) is the source of truth — stores name, cron, command, why, status
- Crontab is the executor — scheduler adds tagged comment blocks so it knows what it manages
- sync reconciles any drift between the two
- status shows what's managed vs unmanaged, and flags missing entries
Crontab Format
Scheduler entries look like this in crontab:
# [scheduler] id=morning-brief name="Morning Brief"
0 9 * * 1-5 /usr/bin/node $HOME/scripts/brief.cjs
The comment tag lets the CLI track its own entries without touching others.
References
references/time-formats.md — all supported natural language patterns
references/cron-reference.md — quick cron syntax reminder