Scheduler
Schedule reminders, recurring tasks, and timed operations. The user just asks and ScalyClaw handles the rest — parsing the intent, creating the schedule, and delivering the message back to the same channel at exactly the right time.
Reminders & Tasks
ScalyClaw supports three schedule types, covering everything from a single one-off reminder to a complex recurring cron expression. There are four scheduling tools (schedule_reminder, schedule_recurrent_reminder, schedule_task, schedule_recurrent_task), two cancel tools (cancel_reminder, cancel_task), and two list tools (list_reminders, list_tasks). All scheduling jobs go to the scalyclaw-scheduler BullMQ queue.
| Type | Description | Example schedule value |
|---|---|---|
| One-shot | Fires exactly once at a specific point in time. The job is removed from the queue after it fires. Use for reminders tied to a particular date or time. | "2026-03-01T17:00:00" (ISO 8601 timestamp) |
| Recurring interval | Repeats at a fixed elapsed interval — every N minutes, hours, or days. Useful for regular health-check pings or short-cycle tasks where clock alignment does not matter. | "PT30M" (ISO 8601 duration — every 30 minutes) |
| Cron | Fires on a standard five-field cron schedule. Gives full control over minute, hour, day-of-month, month, and day-of-week. The most expressive option for business-hour or calendar-aligned tasks. | "0 9 * * 1" (every Monday at 9 am) |
All schedules are timezone-aware. When creating a reminder, the timezone parameter accepts any IANA timezone string (e.g. "America/New_York", "Europe/Paris"). If omitted, the instance timezone configured in the dashboard is used as the default. Cron expressions and ISO timestamps are always interpreted in the specified timezone — no UTC conversion surprises.
Example Conversations
You never need to provide a raw cron expression or an ISO timestamp. Just describe what you want in natural language and ScalyClaw picks the right schedule type and calls the appropriate scheduling tool on your behalf.
One-shot — fires once at a specific time You: Remind me to call Mom at 5pm today. ScalyClaw: Done! I'll remind you to call Mom at 5:00 pm. → schedule_reminder called with schedule: "2026-02-24T17:00:00", timezone: "America/New_York"
Cron — fires on a calendar-aligned schedule You: Every Monday at 9am, give me a news summary. ScalyClaw: Got it — I'll send you a news summary every Monday morning at 9:00 am. → schedule_recurrent_reminder called with schedule: "0 9 * * 1"
Recurring interval — fires every N minutes You: Check my server health every 30 minutes. ScalyClaw: I'll check your server health every 30 minutes starting now. → schedule_recurrent_reminder called with schedule: "PT30M"
When a scheduled reminder fires, the message is delivered back to whichever channel it was created in — Telegram, Discord, or any other connected channel. There is no separate notification mechanism. The reminder appears as a normal message from ScalyClaw in the same conversation.
Cron Patterns
ScalyClaw uses standard five-field cron syntax: minute hour day-of-month month day-of-week. All five fields are required. Use * as a wildcard for "every value", */N for "every N units", and comma-separated values for lists.
| Field | Range | Special characters |
|---|---|---|
| Minute | 0–59 | * */N , - |
| Hour | 0–23 | * */N , - |
| Day of month | 1–31 | * */N , - |
| Month | 1–12 | * */N , - |
| Day of week | 0–7 (0 and 7 = Sunday) | * */N , - |
Common Patterns
| Pattern | Fires |
|---|---|
0 9 * * 1 |
Every Monday at 9:00 am |
*/30 * * * * |
Every 30 minutes |
0 0 1 * * |
First day of every month at midnight |
0 8,17 * * * |
Every day at 8:00 am and 5:00 pm |
0 9 * * 1-5 |
Weekdays (Mon–Fri) at 9:00 am |
0 12 * * 0 |
Every Sunday at noon |
Use cron expressions when the schedule needs to align with the clock — "every weekday at 9am" or "on the first of the month". Use an ISO 8601 interval (e.g. PT30M) when you want a fixed elapsed gap between firings regardless of what time it is. For a recurring check every 30 minutes, interval is the right choice; for a daily standup reminder, cron is.
Managing Schedules
The Scheduler page in the dashboard gives you a full view of every active schedule across all channels. Each entry shows the job ID, the message content, the schedule type and expression, the channel it was created in, and the next scheduled fire time.
From the dashboard you can:
- Enable or disable a schedule without deleting it — useful for temporarily pausing a recurring task.
- Edit the message content or schedule expression in place.
- Delete a schedule permanently, removing its BullMQ job from the queue immediately.
Cancelling via Conversation
You can also ask ScalyClaw to cancel a schedule directly in any conversation. It will search for the matching job and call the cancel_reminder or cancel_task tool — no dashboard visit required.
You: Cancel my Monday morning reminder. ScalyClaw: Done — your Monday 9am news summary reminder has been cancelled. → cancel_reminder called with the job ID of the matching schedule
Tool Call Reference
All scheduling tools are available to the LLM at all times. Here is what the underlying tool calls look like when ScalyClaw creates and cancels schedules on your behalf.
// schedule_reminder — one-shot at a specific timestamp { "type": "tool_use", "id": "toolu_08Lm5Q", "name": "schedule_reminder", "input": { "message": "Call Mom!", "schedule": "2026-02-24T17:00:00", "timezone": "America/New_York" } }
// schedule_recurrent_reminder — cron schedule, timezone-aware { "type": "tool_use", "id": "toolu_07Hk3P", "name": "schedule_recurrent_reminder", "input": { "message": "Time for your weekly news summary!", "schedule": "0 9 * * 1", "timezone": "America/New_York" } }
// cancel_reminder — cancel by job ID { "type": "tool_use", "id": "toolu_09Nv2R", "name": "cancel_reminder", "input": { "id": "sched_01j9xk4p8m2f" } }