mcpField
A
agent-self-scheduling

agent-self-scheduling

github.com/davidondrejAgent 工作流4.2k224 次安装今天更新
代码仓库

关于 agent-self-scheduling

用于安排 Agent 定时任务的技能,涵盖由外部时钟调度的一次性 Agent,以及 Hermes 内置调度器。内容包括时间间隔限制、无人值守运行注意事项、心跳模式和执行验证。

主要功能

  1. 01外部 cron、定时器与循环模式
  2. 02Hermes 内置 cron 调度
  3. 03心跳与看门狗模式
  4. 04权限和输出处理指引
  5. 05调度执行验证

适用场景

  1. 01使用一次性 Agent 定期执行检查
  2. 02安排 Hermes 隔离任务
  3. 03构建空闲时保持静默的心跳

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davidondrej/skills --skill agent-self-scheduling

安装后在 Claude Code 中输入/agent-self-scheduling确认已加载。

详细介绍

Agent 自行调度

首先要问:Agent 是否内置调度器(Hermes → B 阵营),还是由你负责计时(其他所有情况 → A 阵营)?

最低要求:cron 的最小间隔为 1 分钟(5 字段表达式,不含秒)——适用于所有阵营。要实现亚分钟级间隔,必须使用 while ...; sleep N; done 循环、TS 扩展或事件钩子。切勿让大模型使用紧密计时器。

A 阵营 — 单次运行的 Agent,由你负责计时

这些 Agent 运行一次后便退出(除非恢复运行,否则不保留记忆)。请通过外部方式调度。

claude -p "PROMPT" --output-format json --allowedTools "Read,Edit,Bash"  # Claude Code
codex exec --json "PROMPT"                                                # Codex
pi run "PROMPT"                                                           # Pi

用计时器包装:

# 1. cron (>= 1 min floor)
*/10 * * * * cd /path/to/project && pi run "check X and report" >> ~/agent.log 2>&1
# 2. systemd timer (Linux, survives reboot, better logging) — OnUnitActiveSec=10min
# 3. dumb loop (sub-minute, or no cron available)
while true; do pi run "check X"; sleep 30; done

注意事项(忽略任何一项都会导致无人值守运行失败):

  • 权限请求会无限期挂起。 传入 --allowedTools(Claude)或沙箱/自动批准标志(Codex),否则运行会卡在提示词处。
  • 使用 JSON 输出(--output-format json / --json),以便包装器能确定性地解析结果。
  • 运行不保留记忆。 恢复运行(codex exec resume --last),或将状态持久化到文件中,供下次运行读取。

Pi 按设计没有内置调度器/循环/心跳——只能使用外部计时器(或使用 TS 扩展实现 Agent 端计时器)。

cmux — 仅用于编排,不含调度器

cmux 没有计时器/监视/cron。循环使用它有三种方式:由编排器驱动(在你自己的计时器中执行 send → sleep → read-screen)、使用简单的 while-sleep 包装器,或——首选——通过 cmux notify + OSC 终端钩子实现事件驱动;这种方式比轮询成本更低、响应更快。read-screen 不会中断运行,可以安全地轮询。

如果循环会检查另一个 Agent,每次检查时都向用户发送一行状态:说明该 Agent 正在做什么,以及是否按计划进行。(Claude Code 完成后可能会预填一条预测的下一条用户消息——那是 Claude,不是用户。)

B 阵营 — Hermes 内置调度器

Hermes 的网关每 60s 运行一次,并在到期时于全新隔离会话中执行任务。先检查状态:

hermes gateway install            # user-level ( --system to survive reboot)
hermes cron create "every 1h" "summarize new emails and report" --skill himalaya
hermes cron create "0 9 * * *" "post daily standup"      # cron expr
hermes cron create "30m" "one-shot reminder in 30 min"   # one-shot delay

Hermes 独有功能:零 token 模式(运行脚本并原样传递 stdout——适用于看门狗)、任务串联(context_from 将一个任务的输出传递给下一个任务)、自行终止的循环,以及循环安全机制(计划任务会话无法创建更多 cron 任务——不要在计划任务内部进行调度)。每次运行都会启动全新会话:提示词必须包含所有上下文。

心跳模式

一个快速的循环时钟控制多个较慢的单任务检查:该时钟读取任务列表和各任务的 last_run 时间戳,只执行已到期的任务。在 Hermes 中使用循环计划任务(无任务到期时使用零 token 模式);在 A 阵营中使用 while-sleep 循环。定义活跃时段;没有任务到期时保持静默,不要产生无意义的噪声。

看门狗时钟只是一个原样传递 stdout 的命令——仅保留一个开销低且无需身份验证的调用:

curl -s --max-time 10 https://deepapi.co/v1/health   # alert only on non-ok

验证其是否触发(再报告成功)

  1. A 阵营:一个间隔后日志文件大小有所增长,或手动运行一次包装后的命令 → JSON 格式正确,退出码为 0。
  2. B 阵营:hermes cron list 显示该任务,且 next_run 值合理;触发一次立即运行以确认送达。
  3. 确认已设置权限/沙箱标志——最常见的隐性故障是权限提示挂起。
  4. 心跳:确认没有任务到期时,时钟会保持静默。

评论

支持 Markdown