From scheduler
Create, manage, and run scheduled Claude Code tasks. Use when the user wants to schedule automated tasks, set up recurring jobs, list or remove scheduled tasks, pause/resume schedules, run a task immediately, or view task logs. Recognizes time expressions like "every weekday at 9am", "daily", "every hour", cron expressions, and similar scheduling language.
How this skill is triggered — by the user, by Claude, or both
Slash command
/scheduler:scheduleThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You help users create and manage scheduled Claude Code tasks that run automatically via the operating system's native scheduler (launchd on macOS, crontab on Linux).
You help users create and manage scheduled Claude Code tasks that run automatically via the operating system's native scheduler (launchd on macOS, crontab on Linux).
All scripts are located at ${CLAUDE_PLUGIN_ROOT}/scripts/. Always use the full path with ${CLAUDE_PLUGIN_ROOT} when calling them.
# Create a new task
${CLAUDE_PLUGIN_ROOT}/scripts/task-manager.sh create \
--name "Task name" \
--schedule "0 9 * * 1-5" \
--schedule-human "Every weekday at 9am" \
--working-dir "/path/to/project" \
--prompt "What Claude should do" \
--allowed-tools "Read,Grep,Glob" \
--max-turns 10 \
--notify true
# List all tasks
${CLAUDE_PLUGIN_ROOT}/scripts/task-manager.sh list --format table
# Get task details
${CLAUDE_PLUGIN_ROOT}/scripts/task-manager.sh get <task-id>
# Update a task
${CLAUDE_PLUGIN_ROOT}/scripts/task-manager.sh update <task-id> --status paused
# Delete a task (also removes logs)
${CLAUDE_PLUGIN_ROOT}/scripts/task-manager.sh delete <task-id>
# Register task with launchd/crontab
${CLAUDE_PLUGIN_ROOT}/scripts/platform-scheduler.sh register <task-id>
# Unregister (remove from scheduler)
${CLAUDE_PLUGIN_ROOT}/scripts/platform-scheduler.sh unregister <task-id>
# Force immediate execution (macOS: launchctl start; Linux: no-op, cron fires within 60s)
${CLAUDE_PLUGIN_ROOT}/scripts/platform-scheduler.sh start <task-id>
# Check registration status
${CLAUDE_PLUGIN_ROOT}/scripts/platform-scheduler.sh status <task-id>
# Check all tasks
${CLAUDE_PLUGIN_ROOT}/scripts/platform-scheduler.sh status-all
${CLAUDE_PLUGIN_ROOT}/scripts/run-task.sh <task-id>
Note: One-shot tasks (created with --one-shot true) automatically unregister from the scheduler and mark themselves as completed after execution.
When the user wants to schedule something:
task-manager.sh create with all parametersplatform-scheduler.sh register with the returned task IDFor the --prompt argument, write a detailed, self-contained prompt. The task runs in a completely fresh Claude session with no conversation history, so the prompt must include everything Claude needs to know. Be specific about what to do and where to put the output.
Bad prompt: "Send a greeting to the user"
Good prompt: "Write a friendly greeting for Bryan to stdout. Mention the current day of the week and wish him a productive day."
Bad prompt: "Review the code"
Good prompt: "In the repository at /Users/bryan/project, review all commits from the last 24 hours. Summarize what changed, flag anything that looks risky, and write the summary to stdout."
For --allowed-tools, choose appropriate tools based on what the task needs:
"Read,Grep,Glob""Read,Grep,Glob,Bash""Read,Grep,Glob,Edit,Write,Bash"${CLAUDE_PLUGIN_ROOT}/scripts/task-manager.sh list --format table
Present the output to the user. If they want more detail on a specific task, use get.
Always unregister from the OS scheduler first, then delete the task:
${CLAUDE_PLUGIN_ROOT}/scripts/platform-scheduler.sh unregister <task-id>
${CLAUDE_PLUGIN_ROOT}/scripts/task-manager.sh delete <task-id>
IMPORTANT: You CANNOT call run-task.sh from within this Claude session. It invokes claude -p which starts a nested Claude process, and nested Claude sessions are not supported. The call will fail.
Instead, to run a task "now":
--one-shot true and schedule "* * * * *"platform-scheduler.sh registerplatform-scheduler.sh startThe start command calls launchctl start on macOS to trigger the job immediately via launchd (not as a nested process). On Linux, cron will fire within 60 seconds.
The task automatically cleans up after itself: run-task.sh unregisters the task from the scheduler and marks it as completed after execution. A lock file prevents duplicate runs.
Tell the user the task is running now (macOS) or will run within 60 seconds (Linux). They'll get a desktop notification with the output when it completes.
# Create a one-shot task
${CLAUDE_PLUGIN_ROOT}/scripts/task-manager.sh create \
--name "One-time task" \
--schedule "* * * * *" \
--one-shot true \
--working-dir "$(pwd)" \
--prompt "The task prompt"
# Register and start immediately
${CLAUDE_PLUGIN_ROOT}/scripts/platform-scheduler.sh register <task-id>
${CLAUDE_PLUGIN_ROOT}/scripts/platform-scheduler.sh start <task-id>
The user can check the result afterward with:
cat ~/.claude-scheduler/logs/<task-id>/latest
Unregister from scheduler and update status:
${CLAUDE_PLUGIN_ROOT}/scripts/platform-scheduler.sh unregister <task-id>
${CLAUDE_PLUGIN_ROOT}/scripts/task-manager.sh update <task-id> --status paused
Update status and re-register:
${CLAUDE_PLUGIN_ROOT}/scripts/task-manager.sh update <task-id> --status active
${CLAUDE_PLUGIN_ROOT}/scripts/platform-scheduler.sh register <task-id>
cat ~/.claude-scheduler/logs/<task-id>/latest
Or list all log files:
ls -la ~/.claude-scheduler/logs/<task-id>/
run-task.sh from this session. It starts a nested claude -p process which will fail. Use the register-then-unregister pattern for immediate execution.claude CLI must be installed and in PATH for scheduled execution~/.claude-scheduler/logs/<task-id>/--dangerously-skip-permissions — they run with the allowed tools specifiednpx claudepluginhub intertwine/claude-code-schedulerManages scheduled Claude Code tasks: add recurring/one-off skills/prompts/scripts, list/pause/resume/remove, view results/logs, test execution with safety controls and notifications. Cross-platform (macOS/Linux/Windows).
Schedules recurring or one-off tasks via local OS entries (cron/Task Scheduler) or remote CronCreate. Automates periodic commands and session-scoped schedules.
Schedules recurring prompts or one-time reminders with /loop and cron tools to poll deployments, check builds, review PRs, or set session alerts in Claude Code.