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 步长的间隔(如 7m 或 90m)会取整到最接近的可映射间隔,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

星期字段使用 0 或 7 表示星期日,6 表示星期六。不支持 L、W、? 等扩展语法以及 MON 或 JAN 等名称别名。

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

禁用计划任务​

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

限制​

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

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