SuperAPI AI 工具集

loopify

智能体与模型

查看项目

更新于 10-15 14:42

技能介绍

用途

Loopify 用于把一个「应该周期性运行」的任务,搭建为一个可自主运行的智能体循环。它是一层判断逻辑,建立在 Claude Code 的调度能力之上,帮助用户在固定调度、动态节奏和一次性循环之间做出选择,并补齐幂等性、退出条件和验证步骤。

主要能力

向导按步骤推进:

  • 第 0 步:确认循环内容。明确每次迭代要做什么任务,并收集关键信息——多久运行一次、何时停止、循环体在做什么、输出到哪里、如果运行两次会怎样失败。
  • 第 1 步:选择模式。根据「多久运行一次」路由到三种模式之一。
    • 模式 A — Cron(固定调度):适用于可预测间隔的任务,如每天 8 点、每周五、每小时整点。使用 CronCreate 以 cron 表达式注册循环任务,示例: CronCreate({ schedule: "0 8 * * *", prompt: "<loop body prompt>", timezone: "America/Los_Angeles" }) 常见表达式包括 0 8 * * *(每天 8 点)、0 9 * * 1(周一 9 点)、0 9 * * 5(周五 9 点)、0 */2 * * (每 2 小时)、/15 * * * *(每 15 分钟)。优点是可预测、人类可读、易推理,适合依赖一天中特定时间的任务;缺点是即使上一次运行未完成也会按时触发,需要幂等循环体,且无法自适应节奏。
    • 模式 B — 动态节奏(自调度):适用于任务应响应状态而非时钟的场景,如监控直到条件满足、等待外部事件。使用 ScheduleWakeup,由当前运行自行安排下一次唤醒。示例: ScheduleWakeup({ delaySeconds: 270, reason: "checking build status; sleeping under 5min to stay cache-warm", prompt: "<same task, re-entered>" }) 延迟规则:60s–270s 用于活跃工作(轮询构建、等待即将变化的状态),可留在 5 分钟提示缓存内,快速且便宜;不要使用 300s,这是最差选择,既付缓存未命中又未摊薄;300s–3600s 用于等待数分钟才变化的事物,付缓存未命中但合理;1200s–1800s(20–30 分钟)用于无特定信号的空闲 tick,是自主循环的默认值。永远不要字面选择 300s,要么降到 270 保持缓存温暖,要么承诺 1200+ 换取更长等待。优点是自适应、调优后缓存最优;缺点是循环体需知道何时安排下一次,逻辑更多,且更难推理何时运行。
    • 模式 C — 一次性循环(直到条件):适用于运行到条件满足即停止、之后不再重复的任务。使用内置 /loop 并在提示中写入退出条件,例如检查部署是否健康,健康则停止,否则等 5 分钟再查,最多 10 次迭代,仍失败则告警并停止。优点是检查直到条件满足最简单、有界且最终会终止;缺点是不适用于无限重复,那属于模式 A 或 B。
  • 第 2 步:为幂等性设计循环体。幂等意味着运行两次与运行一次结果相同,对 cron 和动态模式不可协商,因为它们会在上一次迭代仍在运行或部分完成时触发。幂等模式包括:使用「已完成」标记(如提交状态文件 <vault>/.loopify/<name>-last-run.txt 记录上次成功运行时间戳,循环体先检查时间戳);使用去重键(按内容哈希或时间戳作为键,使重跑成为空操作);使用事务(数据库写入原子化,要么全部提交要么全部回滚);先查询再变更(应用变更前检查当前状态,已应用则跳过)。向导会展示循环体草稿并高亮幂等检查,若不存在则添加。
  • 第 3 步:退出条件。每个循环都需要一个。选项包括:最大迭代次数(如 100 次后停止,用于 cron 循环防止失控)、基于状态(如指标 X 低于 Y 时停止,用于监控循环)、基于时间(如 24 小时后停止,用于有界监控)、基于错误(如连续 3 次失败后停止,适用于所有循环以捕捉退化)。如果循环确实无限(如无终止的每周 cron),仍应通过 CronDelete 添加手动退出,并在 SKILL/loop 笔记中记录,让用户知道如何停止。
  • 第 4 步:设置调度。根据模式:Cron 模式调用 CronCreate 并报告返回的 cron_id 以便日后 CronDelete;动态模式将循环体提示包装为以 ScheduleWakeup 调用结尾;一次性模式直接运行 /loop 加带退出条件的提示。
  • 第 5 步:验证首次运行。等待第一次迭代(或用相同提示手动触发 /loop 做干跑),确认输出落在预期位置、幂等检查有效(运行两次,第二次应为空操作)、退出条件在触发时能正确生效、日志/通知按配置出现。
  • 第 6 步:报告与后续。报告所选模式及原因、注册的 cron ID 或唤醒模式、设置的退出条件、幂等机制、如何停止循环(CronDelete <cron_id>,动态模式则「不再调用唤醒」)。并提供后续选项,如通过 skillify from-chat 保存循环配置为技能、注册每周回顾或每日启动循环、循环运行时是否写入 second-brain 输出。

使用方式

在 Claude Code 中,通过 /loopify 调用该向导。向导会先询问循环任务,再逐步确认频率、停止条件、循环体行为、输出位置和重复运行失败模式,然后选择模式并完成调度注册。

适用场景

常见循环配方模板包括:references/daily-brief.md(晨间例程循环:日历 + 优先级 + 隔夜事项)、references/weekly-review.md(周五组合脉搏)、references/upstream-check.md(定期检查改编技能上游变更)、references/vault-compile.md(定期 raw/ → wiki/ 编译)、references/metric-monitor.md(轮询指标直到越过阈值后告警)。

该技能与 skillify(用于编写新 SKILL.md,而 loopify 用于调度任务)、toolify(用于添加集成,而 loopify 用于在已集成工具之上按调度运行)、second-brain(许多循环写入 vault 的 raw/ 或 outputs/,适用 vault 自动提交模式)、pm(daily-brief 和 weekly-review 循环常先读取 pm 再生成输出)等技能组合使用。

限制

CronCreate、ScheduleWakeup 和 /loop 是 Claude Code 的功能。在其他宿主上,调度器位于智能体之外,调用非交互式智能体运行:优先使用宿主自带的计划任务(需查阅宿主文档);机器常开且循环需要本地文件时可用系统 cron / launchd / systemd timer;循环作用于仓库(vault 编译、上游检查)且需在笔记本关闭后仍存活时可用 GitHub Actions schedule。作业运行无头智能体命令,以循环体作为提示,例如 claude -p "<body>"、codex exec "<body>" 或 cursor-agent -p "<body>",使用所用智能体 CLI 的非交互模式。动态节奏(模式 B)没有直接等价物,应改用固定调度,循环体在无事可做时提前退出。一次性循环(模式 C)变为围绕无头命令的 shell while 循环,退出检查放在循环条件中。无头运行无法请求批准,因此应给作业最窄的可用权限,并让其将输出写入文件或通知,而不是等待提示。

质量注意事项:永远不要为 delaySeconds 选择 300s;每个循环都需要退出条件,即使无限循环也需要有文档记录的手动停止;cron 和动态模式的幂等性不可协商,应假设循环会在上一次迭代运行时再次触发;优先动态节奏而非过于频繁的 cron,每 15 分钟的 cron 若工作未就绪会浪费 token,动态节奏在空闲时会降速;记录 cron_id,否则循环会成为孤儿且难以停止;每次迭代简要记录日志,哪怕一行也能让调试漂移变得简单;触及外部 API 的循环需尊重速率限制,若供应商限制每天 100 次,就不要安排每天 500 次;不确定时优先有界而非无界,若不确定运行一周还是一个月,先运行一周,看到效果后再延长。