Source Code
Let Me Know
Purpose
Ensure the user is informed before long-running tasks start, gets periodic updates on a configurable interval (default 5 minutes), and receives an immediate completion/failure notice. Heartbeat messages must reflect real-time progress, not a repeated template.
Trigger
Use this skill whenever a task will take noticeable time (>2–3 minutes) or involves long-running installs/builds/tests.
Workflow (required)
- Pre-flight message (before starting):
- Send a short message: what will run, estimated time, and explicitly state:
- “完成或失败都会立刻通知你;期间我每 X 分钟 发一次进度心跳,您也可以修改心跳时间间隔。”
- Start a heartbeat (configurable interval, with pre-check)
- Default interval = 5 minutes (
everyMs=300000). If the user specifies a different interval, use it. - Schedule repeating updates while the task runs.
- Before each heartbeat message, read the latest progress (state file/logs) and send current progress (no repeated template):
- Running → include latest step, progress metrics, and next step.
- Failed → send failure notice and stop the heartbeat.
- 优先推荐:同一条 agentTurn 内“原地心跳”(不创建额外 cron):
- 在长任务执行期间,用循环
sleep <interval>→ 读取进度 →message send发一次动态进度。 - 任务结束自然停止,不会遗留心跳任务。
- 在长任务执行期间,用循环
- 只有在必须脱离当前执行流时才用 cron 心跳,并且必须满足:
- 通过
cron add创建心跳 job 时,payload.deliver=false(避免“收到/启动”之类消息被转发给用户)。 - 心跳 job 内部用
message send主动推送进度。 - 创建后把返回的 heartbeatJobId 写入状态文件(例如
<task>-state.json),供清理使用。 - 创建前先
cron list,若已存在同名心跳 job,先 remove(去重)。
- 通过
- Content template (dynamic):
- Running:
进度:<最新步骤/阶段>(<关键指标>)。下一步:<next>。完成/失败会立刻通知你。 - Failed:
失败:<task> 发生错误(简述原因)。已停止心跳提醒。
- Running:
- Run the task
- Execute the long-running command(s).
- Completion message (immediately after finish)
- Send result summary (success/failure + key output).
- Stop heartbeat(必须做到)
- 如果你使用了“原地心跳”(推荐):任务结束即可,不会遗留任何 cron。
- 如果你使用了 cron 心跳:
- 在任务成功/失败的 finally 里调用
cron remove <heartbeatJobId>。 - 若 remove 失败(gateway timeout):至少重试 2 次(指数退避 2s/8s)。
- 仍失败:创建一个 2 分钟后的一次性 cleanup cron 再次 remove(避免永远刷屏)。
- 在任务成功/失败的 finally 里调用
Heartbeat interval (user-configurable)
- Default: 5 minutes.
- If the user specifies an interval (e.g., “每 2 分钟/10 分钟”), use that value.
- If the user changes the interval mid-task, update the cron schedule and acknowledge in the next heartbeat.
Message Delivery
Prefer outbound normal chat messages:
- Use
message sendwith the correct target format. - Example for Discord DM:
user:<id>.
Safety
- Do not start long tasks without the pre-flight message.
- If blocked/failed, notify immediately, set state=failed, and stop the heartbeat.
- If cron removal fails due to gateway timeout, retry removal; if still stuck, use gateway restart (requires
commands.restart: true) and retry.
Example (Discord DM)
Start message:
即将开始:安装依赖并运行测试(预计 5–10 分钟)。完成或失败都会立刻通知你;期间我每 5 分钟发一次进度心跳,你也可以修改心跳时间间隔。
Heartbeat (every 5 min, example):
进度:已完成安装依赖(1/2),测试运行中(已用时 4 分钟)。下一步:汇总测试结果。完成/失败会立刻通知你。
Completion:
完成:安装成功,测试通过。