用途
该技能用于延迟智能体的工作,直到用户指定的时间点,然后继续执行被推迟的任务。当用户要求“稍后运行”“X 分钟后/小时后执行”“在某个具体时间执行”等场景时使用。延迟通过一个后台计时脚本来实现。
脚本位置
~/.claude/skills/deferred-task-execution/scripts/wait-until.sh
支持的输入格式
脚本接受一个参数,格式为以下两种之一:
时长 —— 相对当前时间的延迟:
30s、5m、1h、90m、2h30m、1h15m30s
时刻 —— 一天中的具体时间:
14:30、9:00、3pm、3:30pm- 如果该时间今天已经过去,则等到明天的该时间
工作流程
第 1 步:确认用户意图
确认要执行什么任务以及何时执行。将用户的自然语言解析为 wait-until 参数:
| 用户表述 | 参数 |
|---|---|
| “30 分钟后” | 30m |
| “一小时后” | 1h |
| “两个半小时后” | 2h30m |
| “下午 3 点” | 3pm |
| “14:30” | 14:30 |
| “9 点半” | 9:30am |
告知用户将发生什么以及计时器将在何时触发。开始前请用户确认。
第 2 步:在后台启动计时器
使用 Bash 并设置 run_in_background: true 运行 wait 脚本:
~/.claude/skills/deferred-task-execution/scripts/wait-until.sh <argument>
记下响应中的任务 ID —— 下一步需要用到它。
第 3 步:等待计时器
使用 TaskOutput 工具阻塞等待,直到计时器完成:
- 设置
block: true - 设置
timeout: 600000(最大值为 10 分钟 / 600000 毫秒) - 使用第 2 步得到的任务 ID
如果等待超过 10 分钟:由于最大超时为 600000 毫秒,TaskOutput 会在计时器完成前返回。检查输出——如果不包含 “Timer complete”,则用同一个任务 ID 再次调用 TaskOutput 并设置 block: true。重复此过程直到计时器结束。
第 4 步:执行被推迟的任务
当 TaskOutput 返回的输出包含 “Timer complete. Proceed with deferred task.” 时,执行用户请求的工作。
重要说明
- 计时器工作期间,智能体会话必须保持打开。如果用户关闭会话,被推迟的任务将不会执行。请就此向用户发出警告。
- 对于非常长的等待(数小时),提醒用户会话需要保持活跃。
- 如果用户要求取消,使用 TaskStop 并传入后台任务 ID。
- 始终告知用户计算出的唤醒时间,让他们知道何时可以预期该操作发生。