Hub Cron Migrator — 原生 cron → Hub 定时任务
🚨 何时:用户只要「列出原生 cron」
重要澄清:仅当用户明确提到「原生 cron / Monitor Cron」相关内容时,本 Skill 才能被调用。若用户只说「定时任务/有哪些任务/清单」,一律当成 Hub 定时任务,改走 hub-job-task-manager。
即使用户只说「列出 OpenClaw 原生 cron / 看看原生定时任务有哪些」,也必须:
bash "$SKILL_SCRIPT" list
把脚本 stdout 贴给用户。
❌ 禁止说「做不到 / 被 Hub Skill 禁止 / 请去 Monitor 截图」。
❌ 禁止改去调 job-task-api.sh(那是 Hub 任务,不是原生 cron)。
若 cron-migrate.sh 不存在:说明未安装/未绑定 hub-cron-migrator,如实告知并请绑定本 Skill;仍不要编造「策略禁止列原生」。
🚨 固定三步(迁移时不得跳步、不得合并)
| 步骤 | 用户意图 | 必须 exec | 之后 Agent 回复 |
|------|----------|-----------|-----------------|
| 1. 列出 | 列出原生 cron / 迁移前预览 | list | 贴脚本输出;标出可迁 / 需补参 / 不支持 |
| 2. 迁移 | 确认迁哪些、补齐通知等之后 | migrate ... | 只汇报 Hub 创建结果;明确问:「确认无误后我将删除对应原生 cron,请回复确认」 |
| 3. 删除原生 | 用户明确确认删除 | delete-native --confirm yes ... | 贴删除结果 |
硬规则:
- ❌ 未先
list就migrate - ❌
migrate成功后立刻delete-native(必须等用户下一轮明确确认) - ❌ 用户未说「确认 / 同意删除 / 可以删」等同义确认就删原生
- ❌ 用本 Skill 做日常「新建定时任务」(那是
hub-job-task-manager) - ❌ 调用内置
cron.add/ 双写;本 Skill 只读原生列表,仅在步骤 3 删除已迁移项 - ❌ 编造 jobId / taskId;一切以脚本 stdout 为准
缺参(飞书人、是否回写会话、微调 cron/prompt)在会话里问清,或让用户去 定时任务管理端 改;脚本不会猜飞书收件人。
脚本路径
SKILL_SCRIPT=$(ls /home/node/.openclaw/skills/hub-cron-migrator*/scripts/cron-migrate.sh 2>/dev/null | head -1)
每轮涉及迁移的操作前,先:
bash "$SKILL_SCRIPT" context
命令
1) 列出原生 cron
bash "$SKILL_SCRIPT" list
输出每条:nativeJobId、名称、schedule、分类(compatible / needs_params / unsupported)、原因、建议 Hub cron / prompt 摘要。
2) 迁移到 Hub(不删原生)
# 迁指定原生任务(可多次 --job-id)
bash "$SKILL_SCRIPT" migrate --job-id <nativeJobId> [--job-id ...] \
[--notify-channel toc_chat|feishu|both|none] \
[--notify-user email] [--notify-group chatId]
# 仅迁 list 里标记为 compatible 的(仍建议先 list 给用户看过)
bash "$SKILL_SCRIPT" migrate --all-compatible [--notify-channel toc_chat]
默认 notify-channel=toc_chat(绑当前 ToC 会话)。要飞书时必须带 --notify-user 和/或 --notify-group。
成功后脚本会写入迁移状态文件;仍保留原生 cron。
3) 用户确认后再删原生
# 删除本轮/状态文件中已成功迁移的原生任务
bash "$SKILL_SCRIPT" delete-native --confirm yes
# 或只删指定 nativeJobId(仍须 --confirm yes)
bash "$SKILL_SCRIPT" delete-native --confirm yes --job-id <nativeJobId>
没有 --confirm yes 时脚本拒绝执行。
分类规则(脚本为准)
| 分类 | 条件 |
|------|------|
| compatible | schedule.kind=cron 且 payload 为 agentTurn/文本提示,可转 Quartz |
| needs_params | 可转,但 delivery 含 announce/飞书等需用户指定 Hub 通知 |
| unsupported | every / at / command 脚本类,或无法解析表达式 |
needs_params:会话补参后再 migrate(带 notify 参数),或先 migrate --notify-channel none|toc_chat 再在管理端改通知。
回复模板
list 后: 原样归纳脚本表格;请用户选择要迁的 nativeJobId,并确认通知方式。
migrate 后(必须含确认问句):
- 成功:
nativeJobId → Hub taskId、名称、cron - 失败:脚本错误原文
- 固定结尾:「原生 cron 尚未删除。请核对 Hub 定时任务管理端或本会话任务列表;确认无误后回复「确认删除原生 cron」,我再执行删除。」
delete-native 后: 贴删除成功/失败的 nativeJobId;提醒可在 Monitor「Cron 任务」核对是否已清空对应项。
与 hub-job-task-manager 的边界
| 能力 | 本 Skill | hub-job-task-manager | |------|----------|----------------------| | 列/迁/删原生 cron | ✅ | ❌(禁止碰原生) | | 日常创建/改/删 Hub 任务 | ❌ | ✅ |
微信扫一扫