定时任务
为会话注册 cron 定时的 prompt,到点自动入队执行(会话级、内存态)。
定时任务(Scheduled Tasks)让你为某个会话注册一个按 cron 周期触发的 prompt。到点时,North Coder 会把这个 prompt 当成一条普通用户消息入队执行——就像你自己手动发了一条消息一样。
它适合让 Agent 周期性地做重复性工作,而不用你每次手动发消息。
定时任务是会话级、内存态的:任务严格绑定到所在会话,保存在后端进程内存里,后端重启后清空,不会跨重启恢复。需要跨重启、全局持久的定时能力暂不在此范围内。
什么时候使用
适合使用定时任务:
- 周期性巡检:定时跑构建 / 测试并总结结果。
- 定时拉取并汇报:每隔一段时间拉最新代码、汇总改动。
- 按时提醒类工作:工作日早上汇总待办、整理当天计划。
不适合:
- 需要重启后仍然存在、或跨设备生效的长期任务(内存态会在重启后清空)。
- 一次性的、马上要做的事——直接发消息即可。
创建定时任务
定时任务总是绑定到当前会话。有两种创建方式。
让 Agent 创建
在会话里直接用自然语言描述周期和要做的事,Agent 会通过内建的 create_scheduled_task 能力创建任务:
每 30 分钟帮我拉一次最新代码并总结改动
工作日早上 9 点,汇总当前 TODO如果周期或时区不明确,Agent 会先向你确认。创建后它会告诉你任务 ID、cron、时区,并提醒任务在后端重启后会清空。
用 CLI 创建
ncoder schedule create CONVERSATION_ID \
--cron "*/30 * * * *" \
--prompt "拉取最新代码并总结改动" \
--timezone "Asia/Shanghai"完整命令与参数见 CLI 资源管理 · schedule。
cron 与时区
- 使用标准 5 字段 cron(分 时 日 月 周),不接受 6 字段秒级 cron。
- 时区是有效的 IANA 名称(如
Asia/Shanghai、UTC);下次运行时间按任务时区计算。 - 非法 cron 或时区会被拒绝。
常见示例:
| cron | 含义 |
|---|---|
*/5 * * * * | 每 5 分钟 |
0 * * * * | 每小时整点 |
0 9 * * * | 每天 9:00 |
0 9 * * 1-5 | 工作日 9:00 |
触发行为
到点时,定时任务不会另起一个独立运行,而是复用会话的消息队列:
- 会话空闲:prompt 立即作为用户消息开始运行。
- 会话正忙(Agent 正在运行):prompt 进入队列,等当前运行结束后再执行。
- 去重:如果队列里已经有同一个定时任务的待处理消息,则不会重复入队——避免一次长时间运行结束后,把期间多次到点的同一任务堆积成一串。
由定时任务触发或排队的用户消息,会在聊天里带一个 Scheduled 徽标,方便区分它来自定时任务而不是你手动发送。
管理任务
会话任务面板
会话视图底部有一个可折叠的定时任务面板,列出当前会话的任务,并显示:
- prompt 内容、cron 的可读描述、下次运行时间;
- 已触发 / 已入队的计数;
- 每个任务的启用开关和删除按钮。
启用 / 删除会通过 WebSocket 实时同步到所有打开该会话的客户端。
活动任务徽标
- 侧栏底部显示全局启用中的定时任务总数。
- 历史会话下拉里,带活动定时任务的会话会显示一个数量徽标。
离开提示
当还有启用中的定时任务时,关闭标签页或退出桌面应用会弹出提示,让你选择:
- 取消:留在当前界面。
- 保持运行:离开,任务在后台继续。
- 全部停止:禁用相关会话的全部定时任务后再离开。
限制与边界
- 会话级:任务绑定到具体会话,不能跨会话共享。
- 内存态:保存在后端进程内存,重启后清空,不写入数据库。
- 5 字段 cron:不支持秒级精度。
- 每个会话可创建的任务数量与 prompt 长度有上限(防止失控创建占用资源);正常使用不会触达。
常见问题
重启后任务还在吗?
不在。定时任务是内存态的,后端进程重启后会全部清空。需要重新创建。
到点时如果 Agent 正在运行会怎样?
prompt 会进入会话消息队列,等当前运行结束后再执行;同一任务在等待期间不会重复入队。
可以创建只跑一次的任务吗?
定时任务按 cron 周期重复触发。如果只需要跑一次,直接发消息即可;如需停止周期任务,在面板里删除或用 ncoder schedule delete 删除。
任务执行失败 / 错过了一次会补吗?
不会补跑。每次到点独立触发,错过的周期不会累积补偿;下一次按 cron 正常触发。