Create scheduled tasks for recurring or one-time automated execution. Use when users want to set up tasks that run automatically at specified times (daily, weekly, monthly, cron, or one-time).
Use this skill when users want to:
Confirm the following with the user (if not provided):
One-time execution (at):
{ "type": "at", "datetime": "2026-03-15T09:00:00" }
Cron expression (cron) — 5-field format: minute hour day month weekday
{ "type": "cron", "expression": "0 9 * * *" }
Common cron examples:
| Expression | Meaning |
|---|---|
0 9 * * * | Every day at 9:00 AM |
0 8 * * 1 | Every Monday at 8:00 AM |
0 9 * * 1-5 | Weekdays at 9:00 AM |
0 0 1 * * | First day of month at midnight |
*/30 * * * * | Every 30 minutes |
0 * * * * | Every hour on the hour |
0 9,18 * * * | Every day at 9:00 AM and 6:00 PM |
Use the backend API to create scheduled tasks. The API endpoint should support the following payload structure:
{
"name": "Task name",
"schedule": { "type": "cron", "expression": "0 9 * * *" },
"prompt": "Detailed instructions Claude will execute when task runs...",
"workingDirectory": "/path/to/project",
"description": "Optional detailed description",
"systemPrompt": "Optional custom system prompt",
"executionMode": "auto",
"expiresAt": "2026-12-31",
"notifyPlatforms": ["dingtalk", "feishu", "telegram", "discord"],
"enabled": true
}
| Field | Required | Description |
|---|---|---|
name | ✅ | Short task name |
prompt | ✅ | Instructions Claude receives when task runs (should be clear and complete) |
schedule | ✅ | Schedule configuration (see types above) |
workingDirectory | ❌ | Execution directory (defaults to empty) |
description | ❌ | Detailed description (defaults to empty) |
systemPrompt | ❌ | Custom system prompt (defaults to empty) |
executionMode | ❌ | "auto" / "local" / "sandbox" (defaults to "local") |
expiresAt | ❌ | Expiration date "YYYY-MM-DD" (defaults to null, no expiration) |
notifyPlatforms | ❌ | Notification platform array: ["dingtalk","feishu","telegram","discord"] (defaults to []) |
enabled | ❌ | Whether to enable immediately (defaults to true) |
API returns JSON response:
{ "success": true, "task": { "id": "...", "name": "...", ... } }{ "success": false, "error": "error message" }Confirm the following with the user:
prompt should describe "what to do when the task triggers", not pre-execute the task and embed static results. Example: write "Fetch yesterday's AI news and send summary" instead of fetching news first and embedding the list in the prompt.node -e 'const d=new Date();const p=n=>String(n).padStart(2,"0");console.log(`${d.getFullYear()}-${p(d.getMonth()+1)}-${p(d.getDate())}T${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`)'
prompt is the only instruction Claude receives when the task runs independently, so write it clearly and completelytype: "at" are automatically disabled after execution