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.

TypeDescriptionExample 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.

text
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"
text
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"
text
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"
Reminders are delivered to the same channel

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.

FieldRangeSpecial 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

PatternFires
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
Cron vs. interval

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.

text
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.

json
// 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"
  }
}
json
// 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"
  }
}
json
// cancel_reminder — cancel by job ID
{
  "type": "tool_use",
  "id": "toolu_09Nv2R",
  "name": "cancel_reminder",
  "input": {
    "id": "sched_01j9xk4p8m2f"
  }
}