Skip to main content

按计划运行提示

使用 /loop 和 cron 调度工具在 CSC 会话中重复运行提示、轮询状态或设置一次性提醒。

计划任务让 CSC 可以按间隔自动重新运行提示。使用它们来轮询部署、照看 PR、检查长时间运行的构建,或提醒自己稍后在会话中做某事。要实时响应事件而非轮询。

任务是会话作用域的:它们存在于当前 CSC 进程中,退出时即消失。

调度选项对比

CSC 提供两种调度重复工作的方式:

Cloud/loop
运行位置CoStrict 云端你的机器
需要机器开机
需要打开会话
重启后持久化否(会话作用域)
访问本地文件否(全新克隆)
MCP 服务器每个任务配置的连接器继承自会话
权限提示否(自主运行)继承自会话
可自定义计划通过 CLI 中的 /schedule
最小间隔1 小时1 分钟

使用 /loop 重复运行提示

/loop 内置Skills是在会话保持打开时重复运行提示的最快方式。间隔和提示都是可选的,你提供的内容决定了循环的行为方式。

你提供的内容示例发生的内容
间隔和提示/loop 5m check the deploy你的提示按固定计划运行
仅提示/loop check the deploy你的提示在每次迭代时按CSC 选择的间隔运行
仅间隔,或不提供/loop运行内置维护提示,或你的 loop.md(如果存在)

你还可以将另一个命令作为提示传递,例如 /loop 20m /review-pr 1234,以在每次迭代时重新运行一个打包的工作流。

按固定间隔运行

当你提供间隔时,CSC 将其转换为 cron 表达式,调度作业,并确认频率和作业 ID。

/loop 5m check if the deployment finished and tell me what happened

间隔可以作为裸标记(如 30m)放在提示前面,也可以作为子句(如 every 2 hours)放在后面。支持的单位有 s(秒)、m(分钟)、h(小时)和 d(天)。

秒数向上取整到最接近的分钟,因为 cron 的最小粒度为一分钟。无法映射到干净 cron 步长的间隔(如 7m90m)会取整到最接近的可映射间隔,CSC 会告诉你它选择了什么。

让 CSC 选择间隔

当你省略间隔时,CSC 会动态选择间隔,而不是按固定的 cron 计划运行。每次迭代后,它会根据观察到的情况在一分钟到一小时之间选择一个延迟:构建即将完成或 PR 活跃时等待较短,没有待处理事项时等待较长。选择的延迟及其原因会在每次迭代结束时打印。

下面的示例检查 CI 和审查评论,当 PR 变得安静时,CSC 在迭代之间等待更长时间:

/loop check whether CI passed and address any review comments

当你请求动态 /loop 计划时,CSC 可能会直接使用 Monitor 工具。Monitor 运行一个后台脚本并将每个输出行流式传回,这完全避免了轮询,并且通常比按间隔重新运行提示更节省 token 且响应更快。

动态调度的循环会像其他任务一样出现在你的计划任务列表中,因此你可以用相同的方式列出或取消它。抖动规则不适用于它,但七天过期适用:循环在你启动它七天后自动结束。

注意: 在 Bedrock、Vertex AI 和 Microsoft Foundry 上,没有间隔的提示会按固定的 10 分钟计划运行。

运行内置维护提示

当你省略提示时,CSC 使用内置维护提示代替你提供的提示。在每次迭代中,它会按以下顺序执行:

  • 继续对话中未完成的工作
  • 照看当前分支的 Pull Request:审查评论、失败的 CI 运行、合并冲突
  • 当没有其他待处理事项时,运行清理检查,如错误查找或简化

CSC 不会在该范围之外启动新举措,不可逆操作(如推送或删除)只有在继续对话中已授权的操作时才会执行。

/loop

/loop动态选择的间隔运行此提示。添加间隔(例如 /loop 15m)可改为按固定计划运行。要用你自己的默认提示替换内置提示,请参阅使用 loop.md 自定义默认提示。

注意: 在 Bedrock、Vertex AI 和 Microsoft Foundry 上,不带提示的 /loop 会打印用法消息,而不是启动维护循环。

使用 loop.md 自定义默认提示

loop.md 文件用你自己的指令替换内置维护提示。它为裸 /loop 定义一个默认提示,而不是单独的计划任务列表,并且当你在命令行提供提示时会被忽略。要调度额外的提示,请使用 /loop <prompt> 或直接让 CSC 管理。

CSC 在两个位置查找该文件,并使用它找到的第一个。

路径作用域
.costrict/loop.md项目级别。当两个文件都存在时优先使用。
~/.costrict/loop.md用户级别。在没有定义自己 loop.md 的任何项目中生效。

该文件是纯 Markdown,没有必需的结构。像直接输入 /loop 提示一样编写它。以下示例保持发布分支的健康:

.costrict/loop.md
Check the `release/next` PR. If CI is red, pull the failing job log,
diagnose, and push a minimal fix. If new review comments have arrived,
address each one and resolve the thread. If everything is green and
quiet, say so in one line.

loop.md 的编辑在下一次迭代时生效,因此你可以在循环运行时优化指令。当两个位置都不存在 loop.md 时,循环回退到内置维护提示。保持文件简洁:超过 25,000 字节的内容会被截断。

设置一次性提醒

对于一次性提醒,用自然语言描述你想要的内容,而不是使用 /loop。CSC 会调度一个单次触发的任务,运行后自动删除。

remind me at 3pm to push the release branch
in 45 minutes, check whether the integration tests passed

CSC 使用 cron 表达式将触发时间固定到特定的分钟和小时,并确认触发时间。

管理计划任务

用自然语言让 CSC 列出或取消任务,或直接引用底层工具。

what scheduled tasks do I have?
cancel the deploy check job

底层上,CSC 使用以下工具:

工具用途
CronCreate调度新任务。接受 5 字段 cron 表达式、要运行的提示以及是否重复或单次触发。
CronList列出所有计划任务及其 ID、计划和提示。
CronDelete通过 ID 取消任务。

每个计划任务都有一个 8 字符的 ID,你可以将其传递给 CronDelete。一个会话最多可以同时持有 50 个计划任务。

计划任务的运行方式

调度器每秒检查是否有到期任务,并以低优先级将它们入队。计划提示在你的回合之间触发,而不是在 CSC 正在响应时。如果任务到期时 CSC 正忙,提示会等到当前回合结束后再运行。

所有时间都按你当地的时区解释。像 0 9 * * * 这样的 cron 表达式表示你运行 CSC 的地方的上午 9 点,而不是 UTC。

抖动

为避免每个会话在同一整点时刻同时请求 API,调度器会在触发时间上添加一个小的确定性偏移:

  • 重复任务最多延迟其周期的 10% 触发,上限为 15 分钟。每小时运行的作业可能在 :00:06 之间的任何时间触发。
  • 在整点或半点调度的一次性任务最多提前 90 秒触发。

偏移量派生自任务 ID,因此同一任务始终获得相同的偏移量。如果精确时间很重要,请选择一个不是 :00:30 的分钟,例如 3 9 * * * 而不是 0 9 * * *,这样一次性任务的抖动就不会生效。

七天过期

重复任务在创建 7 天后自动过期。任务最后一次触发,然后自行删除。这限制了一个被遗忘的循环可以运行多长时间。如果你需要重复任务持续更长时间,请在过期前取消并重新创建它,或者使用 Cloud 计划任务或 Desktop 计划任务进行持久调度。

Cron 表达式参考

CronCreate 接受标准的 5 字段 cron 表达式:分钟 小时 日期 月份 星期。所有字段都支持通配符(*)、单个值(5)、步长(*/15)、范围(1-5)和逗号分隔的列表(1,15,30)。

示例含义
*/5 * * * *每 5 分钟
0 * * * *每小时整点
7 * * * *每小时过 7 分钟
0 9 * * *每天当地时间上午 9 点
0 9 * * 1-5工作日当地时间上午 9 点
30 14 15 3 *3 月 15 日当地时间下午 2:30

星期字段使用 07 表示星期日,6 表示星期六。不支持 LW? 等扩展语法以及 MONJAN 等名称别名。

当日期和星期字段同时被约束时,只要任一字段匹配,日期就匹配。这遵循标准的 vixie-cron 语义。

禁用计划任务

在你的环境中设置 CLAUDE_CODE_DISABLE_CRON=1 可完全禁用调度器。cron 工具和 /loop 将不可用,任何已调度的任务也会停止触发。有关完整的禁用标志列表,请参阅环境变量。

限制

会话作用域的调度具有固有的约束:

  • 任务仅在 CSC 运行且空闲时触发。关闭终端或让会话退出会取消所有任务。
  • 错过的触发不会补跑。如果任务的计划时间在 CSC 正忙于长时间运行的请求时过去了,它会在 CSC 空闲时触发一次,而不是按错过的间隔各触发一次。
  • 重启后不持久化。重启 CSC 会清除所有会话作用域的任务。