executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
choose-loop-wakeup-interval通过 `ScheduleWakeup` 工具或 `/loop` 斜杠命令调度循环唤醒时,选择 `delaySeconds` 值。涵盖三档缓存感知决策(缓存温热小于 5 分钟、 缓存未命中 5 分钟到 1 小时、空闲默认 20 到 30 分钟)、300 秒反模式、 [60, 3600] 运行时夹紧、分钟边界舍入特性,以及编写有遥测价值的 `reason` 字段。在设计自主循环、规划心跳节奏、调优轮询节奏,或事后审查循环成本 发现间隔尺寸不当时使用。
Independent GitHub snapshot · Automated classification · Original documentation governs
ScheduleWakeup 工具或 /loop 斜杠命令调度循环唤醒时,选择
delaySeconds 值。涵盖三档缓存感知决策(缓存温热小于 5 分钟、
缓存未命中 5 分钟到 1 小时、空闲默认 20 到 30 分钟)、300 秒反模式、
[60, 3600] 运行时夹紧、分钟边界舍入特性,以及编写有遥测价值的 reason
字段。在设计自主循环、规划心跳节奏、调优轮询节奏,或事后审查循环成本
发现间隔尺寸不当时使用。
license: MIT
allowed-tools: ""
metadata:
author: Philipp Thoss
version: "1.0"
domain: general
complexity: intermediate
language: multi
tags: loop, wakeup, cache, scheduling, delay, general
locale: zh-CN
source_locale: en
source_commit: 9c546edf
fence_basis_commit: 9c546edf
translator: "Claude + human review"
translation_date: "2026-05-03"为 ScheduleWakeup 选择一个 delaySeconds 值,以尊重提示缓存的 5 分钟 TTL、调度器的整分钟粒度以及 [60, 3600] 运行时夹紧。该决策在结构上并不简单:常见直觉"等约 5 分钟"恰好落入两面皆差的区间 —— 既支付缓存未命中的代价,又未能摊销等待。
推理随 ScheduleWakeup 工具描述在工具调用时出现,但那时循环已经在被调度。本技能将该推理提前到规划时刻,那才是它该在的地方。
/loop 或 ScheduleWakeup 驱动的延续,并选择每次 tick 的延迟delaySeconds 的指南、运行手册或工作示例决定等待属于哪个层级:
预期结果: 清晰的分类:active-watch、cache-miss 或 idle。
失败处理: 若等待无法分类 —— 若对"我在等什么?"没有诚实答案 —— 该循环可能不应存在。跳到第 5 步并考虑根本不调度唤醒。
基于分类选择 delaySeconds:
| 档位 | 范围 | 缓存行为 | 何时使用 |
|---|---|---|---|
| 缓存温热 | 60 – 270 s | 缓存保持温热(低于 5 分钟 TTL) | 主动监视 —— 下个 tick 需要快速、便宜的重入 |
| 缓存未命中 | 1200 – 3600 s | 缓存变冷;一次未命中买来漫长等待 | 真正空闲,或所等待事件不可能更早发生 |
| 空闲默认 | 1200 – 1800 s(20–30 分钟) | 缓存变冷 | 无特定信号;用户可中断的定期检查 |
不要选 300 s。 它是两面皆差的间隔:缓存未命中,但等待太短无法摊销未命中。如果你发现自己想"约 5 分钟",降到 270 s(保持温热)或承诺 1200 s+(摊销未命中)。
预期结果: 从三档之一选择特定的 delaySeconds 值,而非习惯性挑选的整分钟数。
失败处理: 若选择不断落到 300 s,潜在问题通常是"该循环是否应以此节奏存在?" —— 重新审视第 1 步。
调度器在整分钟边界触发。delaySeconds 为 N 会产生 N 到 N + 60 秒的实际延迟,取决于你在哪一秒调用工具。
工作示例:
在
HH:MM:40调用ScheduleWakeup({delaySeconds: 90})产生目标HH:(MM+2):00—— 即实际等待 140 秒,而非 90 秒。
后果:亚分钟意图毫无意义。将传入的值视为底线,而非精确调度。如果一分钟的偏差很重要,你的循环节奏对此机制而言太紧。
预期结果: 你已接受实际等待将比请求的 delaySeconds 多最多 60 秒。对缓存温热 tick 这很重要 —— 270 s 在实际中可能变为约 330 s,倾入缓存未命中区域。
失败处理: 若接近上限的值(如目标缓存温热时的 265 s)很常见,向下填充 —— 使用 240 s 而非 270 s,以在最坏分钟边界偏差下仍保留缓存温热保证。
运行时将 delaySeconds 夹紧到 [60, 3600] —— 范围外的值被静默调整。遥测区分模型请求的内容(chosen_delay_seconds)与实际调度的内容(clamped_delay_seconds),并在任何不匹配时设置 was_clamped: true。
针对夹紧后的值进行规划,而非请求的值:
预期结果: 你选择的值落在 [60, 3600] 内,或你已刻意接受夹紧行为。
失败处理: 若需求确实是多小时(如"4 小时后叫醒我"),链接唤醒 —— 调度一个 3600 s tick 自身重新调度 —— 或改用基于 cron 的循环(CronCreate with kind: "loop")。
reasonreason 字段是遥测、用户可见状态和提示缓存温热推理三合一。被截断到 200 个字符。要具体。
checking long bun build、polling for EC2 instance running-state、idle heartbeat — watching the feedwaiting、loop、next tick、continuing此字段的读者是试图理解循环在做什么的用户,他们不必预先预测你的节奏。为他们而写。
预期结果: 一个具体的、单短语的 reason,让一眼看状态的用户看得懂。
失败处理: 若给不出具体 reason,重新审视该循环是否应存在(第 1 步和第 6 步)。
并非每个"稍后再来"的冲动都值得调度唤醒。不要调度 tick 的情况:
预期结果: 在调度唤醒和根本不循环之间做出有意识的选择。"因为我能"不是循环的理由。
失败处理: 若你不断调度被用户在触发前打断的唤醒,模式错了 —— 而不是间隔。
delaySeconds 落在三档范围之一(60–270、1200–3600,或 idle 的 1200–1800)[60, 3600] 内或显式接受夹紧行为reason 具体且少于 200 字符reason 字段:"waiting" 没告诉用户什么,使遥测不太有用。把 reason 写得像用户会在状态行上读它。bun build 已启动;代理希望快速登记,以便结果到达时缓存仍温热。
checking long bun build自主代理每小时监视一次低流量信息源,寻找值得行动的事项。
idle heartbeat — watching the feed代理希望"等 5 分钟"等远程 API 重试。请求是 300 s。
manage-token-budget —— 长寿代理循环的成本上限;缓存感知尺寸是一个杠杆du-dum —— observe/act 分离模式;当循环无 cron 时,此技能调整观察时钟间隔read-continue-here —— 跨会话交接;此技能涵盖会话内唤醒write-continue-here —— read-continue-here 的对偶