Skip to content

定时任务 ​

CodeBuddy Code 支持在会话中创建和管理定时任务,可以按照设定的时间表重复执行指令,或者在未来某个时间点触发一次性操作。常见用途包括:定期检查构建状态、轮询任务完成情况、在特定时间点提醒自己等。

注意:通过对话创建的定时任务默认是会话级别的,CodeBuddy Code 退出后自动清除。在 Web UI 创建或编辑任务时,可以启用持久化,使任务在重启后继续生效。


使用 /loop 创建循环任务 ​

/loop 是创建循环任务最便捷的方式。你只需指定时间间隔和要执行的指令,系统会自动转换为 cron 表达式并创建任务。

语法 ​

/loop [时间间隔] <指令>
参数说明
时间间隔可选。支持 s(秒)、m(分钟)、h(小时)、d(天)。省略时默认 10 分钟
指令必填。每次任务触发时要执行的内容,可以是自然语言或斜杠命令

常用示例 ​

检查 CI/CD 流水线状态:

/loop 3m 检查一下流水线是否跑完,把结果告诉我

定时运行单元测试:

/loop 30m 帮我运行一次单元测试,如果有失败的用例告诉我

每小时汇总代码审查待办:

/loop 1h 看一下有没有新的 PR 需要我审查

配合自定义命令使用:

/loop 10m /check-build

使用自然语言描述频率(结尾加 every):

帮我监控接口响应时间 every 8m
每隔 25m 检查一下部署状态

间隔不指定时的默认行为 ​

如果只写指令而不写时间间隔,默认每 10 分钟触发一次:

/loop 检查一下后端服务是否正常响应

每轮自主调整下一轮间隔 ​

/loop 任务每次触发执行完毕后,AI 会根据本轮结果自主判断下一轮应该:提前触发、延后触发、维持原定间隔,或者直接结束循环。例如"检查一下流水线是否跑完"这类任务,如果流水线还在跑,AI 可能会决定缩短下一轮间隔以更快得到结果;如果流水线已经跑完,AI 可能会决定结束循环。

这个调整是自动进行的,不需要你手动干预;循环最长仍然只会持续 3 天,随时可以按取消任务一节手动结束。


创建一次性提醒 ​

如果只需要在未来某个时间点提醒一次,可以直接用自然语言描述:

下午四点半提醒我同步一下今天的进展
一个小时后看看刚才那个构建任务有没有产出
明天早上 9 点帮我生成一份昨天的工作日报

这类任务会在指定时间触发一次,执行完毕后自动删除。


管理已有任务 ​

查看当前所有任务 ​

我现在有哪些定时任务?

列表中包含任务 ID、执行频率、任务类型(循环 / 一次性)以及对应的指令。

在 Web UI 的任务页面中,还可以直接编辑任务配置、暂停或恢复任务,并展开查看最近的执行状态、开始时间、耗时、失败原因以及执行进程、会话和 run ID。定时任务触发时,对话时间线会显示对应的触发记录。

取消任务 ​

取消部署检查的定时任务

或者通过任务 ID 取消:

帮我删掉 ID 为 xxx 的定时任务

底层分别对应 CronList 和 CronDelete 工具,可以通过对话直接操作,无需记住具体命令。


任务执行机制 ​

执行时机 ​

任务到点后会进入队列,并在会话空闲时开始执行。同一个任务同一时刻最多保留一个排队中或执行中的实例;如果下一次调度到达时上一实例仍未结束,本次触发会跳过,不会重复排队。持久化任务使用跨进程原子占位隔离执行;daemon 就绪后普通实例会停止 durable 调度并释放领导锁,由 daemon 接管,已经占位的执行不会被接管方重复启动。

执行落在哪条会话 ​

  • 持久化任务(durable):每个任务拥有一条专属的任务会话,不再注入你正在使用的对话。会话 ID 由任务 ID 确定性派生,因此 CLI、TUI、Web UI 和 daemon 对同一任务都指向同一条会话:会话数量等于持久化任务数量,不随执行次数或进程重启增长。任务会话就是一条普通会话,可以点进去查看、续聊或删除。
  • 仅当前会话的任务(/loop、未开 durable 的 CronCreate):保持注入创建它的那条会话,语义不变。

时间偏移(Jitter) ​

系统会对任务的触发时间添加少量随机偏移,以避免大量任务同时执行带来的拥堵:

  • 循环任务:最多延迟周期时长的 10%(上限 15 分钟)
  • 一次性任务:对于整点和半点任务,最多提前 90 秒执行

例如,设置 每小时 执行的任务,实际触发时间可能在整点后的 0-6 分钟内随机分布。

自动过期 ​

循环任务在创建 3 天后自动过期删除,过期前会最后触发一次。
如果需要任务持续更长时间,可以在过期后重新创建,或者改用外部调度方案(如 GitHub Actions 等)。


Cron 表达式参考 ​

需要「每周一早上 10 点」「每月 1 号」这类精确时间,直接告诉 AI 你的需求,它会自动转成 cron 表达式并创建任务:

每周一早上 10 点帮我生成本周的工作计划
每月 1 号早上统计上个月的代码提交量,按人汇总
每周五下午 5:30 提醒我同步进度、更新任务状态
每天中午 12 点检查一下有没有待我审查的 PR
工作日早上 9:15 把昨天未合并的 PR 列出来

AI 回复时会告诉你实际使用的 cron 表达式和执行频率,方便确认是否符合预期。

格式:

分钟  小时  日期  月份  周几

常用表达式:

表达式含义
*/5 * * * *每 5 分钟
*/15 * * * *每 15 分钟
0 * * * *每小时整点
0 9 * * *每天上午 9 点
0 9 * * 1-5工作日上午 9 点
0 0 1 * *每月 1 日午夜
30 18 * * 5每周五下午 6:30

字段说明:

字段取值范围特殊符号
分钟0–59*(任意)、*/N(每 N 分钟)、N,M(列举)、N-M(范围)
小时0–23同上
日期1–31同上
月份1–12同上
周几0–60 或 7 = 周日,1 = 周一,依此类推

注意事项 ​

事项说明
会话绑定默认任务随会话存在;启用持久化的任务会写入项目目录,并在 CodeBuddy Code 重启后恢复;同项目存在已就绪 daemon 时优先由 daemon 承载
循环任务上限每个会话最多同时存在 50 个定时任务
最小间隔1 分钟(秒级设置会被自动向上取整)
任务过期循环任务 3 天后自动清除
不补跑会话中断期间错过的任务不会补发执行

禁用定时任务 ​

如果需要完全关闭定时任务功能,可以设置环境变量:

bash
CODEBUDDY_DISABLE_CRON=1 codebuddy

启用后,/loop 技能不再可用,CronCreate、CronList、CronDelete 工具也会被禁用。


相关文档 ​