用途
定时任务 Skill(scheduled-task)用于创建定时任务,支持一次性、每日、每周、每月、Cron 等调度方式。当用户想设置定期自动执行的任务时使用。
使用场景包括:
- 设置定时执行的任务(每天、每周、每月、自定义 Cron)
- 创建一次性定时执行的任务
- 安排定时自动化检查、报告生成、代码备份等
- 设置定期监控或提醒
主要能力与调度类型
支持两种 schedule 类型:
- 一次性执行(at):如
{ "type": "at", "datetime": "2026-03-15T09:00:00" } - Cron 表达式(cron),5 字段格式:分 时 日 月 周,如
{ "type": "cron", "expression": "0 9 * * *" }
常用 Cron 示例:
| 表达式 | 含义 |
|---|---|
| 0 9 * * * | 每天 9:00 |
| 0 8 * * 1 | 每周一 8:00 |
| 0 9 * * 1-5 | 工作日 9:00 |
| 0 0 1 * * | 每月1号 0:00 |
| */30 * * * * | 每30分钟 |
| 0 * * * * | 每小时整点 |
| 0 9,18 * * * | 每天 9:00 和 18:00 |
使用方式
Step 1:收集信息
先与用户确认以下信息(如果用户未提供):
- 任务名称(必填)— 简短描述
- 执行内容(必填)— 任务运行时 Claude 收到的 prompt 指令
- 执行频率(必填)— 一次性、每天、每周、每月或自定义 Cron
- 工作目录(可选)— 默认为当前会话的工作目录
- 通知平台(可选)— 任务完成后发送通知
Step 2:构建 JSON 并执行脚本
含中文 payload 时,不要把整段 JSON 直接作为命令行参数传入。请先写入 UTF-8 文件,再用 @文件路径 传给脚本(推荐,避免 Windows 中文编码问题):
cat > /tmp/scheduled-task.json <<'JSON'
{
"name": "任务名称",
"schedule": { "type": "cron", "expression": "0 9 * * *" },
"prompt": "任务运行时 Claude 将执行的详细指令...",
"workingDirectory": "/path/to/project"
}
JSON
bash "$SKILLS_ROOT/scheduled-task/scripts/create-task.sh" @/tmp/scheduled-task.json
字段说明:
| 字段 | 必填 | 说明 |
|---|---|---|
| name | 是 | 简短的任务名称 |
| prompt | 是 | 任务运行时 Claude 收到的指令(应清晰完整) |
| schedule | 是 | 调度配置(见上方类型说明) |
| workingDirectory | 否 | 执行目录(默认空) |
| description | 否 | 详细描述(默认空) |
| systemPrompt | 否 | 自定义系统提示词(默认空) |
| executionMode | 否 | "auto" / "local" / "sandbox"(默认 "local") |
| expiresAt | 否 | 过期日期 "YYYY-MM-DD"(默认 null,不过期) |
| notifyPlatforms | 否 | 通知平台数组:["dingtalk","feishu","telegram","discord"](默认 []) |
| enabled | 否 | 是否立即启用(默认 true) |
Step 3:确认结果
脚本返回 JSON 响应:
- 成功:
{ "success": true, "task": { "id": "...", "name": "...", ... } } - 失败:
{ "success": false, "error": "错误信息" }
向用户确认以下信息:
- ✅ 任务名称和 ID
- ⏰ 执行频率(人类可读格式,如"每天早上 9:00")
- 📋 执行内容摘要
- 💡 提示用户可在「设置 → 定时任务」中管理
适用场景
适合需要按计划自动触发执行内容的场景,如定时检查、报告生成、代码备份、定期监控与提醒等。
限制与注意事项
- 编码安全(Windows 必看):含中文 payload 必须优先使用 @file 方式,避免命令行参数编码导致标题/提示词乱码
- 相对时间(Windows 必看):当用户说"X 分钟后 / 明早 9 点 / 今天下午"等相对时间时,先用本机命令获取当前本地时间,再换算目标时间。不要直接猜测当前时间,也不要使用 UTC 时间。推荐命令(跨平台):
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())}`)' - 创建顺序(防过期):当用户要求"1 分钟后/5 分钟后"等短延时一次性任务时,先立即创建定时任务,再进行任何耗时操作;不要先联网检索、总结内容再创建任务。
- Prompt 边界:prompt 应描述"任务触发时要执行的动作",不要提前执行任务并把静态结果写进 prompt。示例:写"到点后检索昨天 AI 新闻并发送摘要",不要先把新闻列表整理好再塞进 prompt。
- 自动执行:定时任务运行时所有工具调用自动批准(auto-approve),无需人工审批
- 独立运行:prompt 是任务独立运行时 Claude 收到的唯一指令,应写得清晰完整
- 自动禁用:连续失败 5 次的任务会自动禁用
- 一次性任务:type: "at" 的任务执行后自动禁用
- Cowork 会话:每次执行会创建一个新的 Cowork 会话(标题前缀为「[定时]」),可在 Cowork 列表中查看执行详情