ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

agent-self-scheduling - SKILL

agent-self-scheduling - SKILL

name: agent-self-scheduling
description: “Schedule AI agent runs with cron, loops, or external clocks while avoiding unsafe tight autonomous timers.”
category: agent-orchestration
risk: critical
source: community
source_repo: davidondrej/skills
source_type: community
date_added: “2026-07-07”
author: davidondrej
tags: [agents, scheduling, automation, cron]
tools: [claude, codex]
license: “MIT”
license_source: “https://github.com/davidondrej/skills/blob/main/LICENSE”

代理自助安排

何时使用

  • 当用户请求重复、定期、心跳或循环的代理工作时使用。
  • 在需要在 cron、外部调度器、钩子或内置代理调度之间进行选择时使用。

第一个问题:代理是否内置了调度器(Hermes → B营地),还是你拥有时钟(其他一切 → A营地)?

通用频率:cron 最低为 1 分钟(5 字段表达式,无秒)——适用于每个场景。对于不足一分钟的情况,你必须使用while ...; sleep N; done循环、TS 扩展或事件钩子。绝不要将大型语言模型放在严格的定时器上。

A营——一次性特工,你掌控时间

这些只运行一次然后退出(除非恢复,否则会丢失状态)。请在外部安排它们的执行。

claude-p"PROMPT"--output-format json--allowedTools"Read,Edit,Bash"# Claude Codecodexexec--json"PROMPT"# Codexpi run"PROMPT"# Pi

包裹在时钟中:

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

注意事项(如果忽略,每一项都会破坏无人值守运行):

  • 权限永远挂起。传递--allowedTools(Claude)或沙箱/自动批准标志(Codex),否则运行会在提示上阻塞。
  • 使用 JSON 输出(--output-format json/--json) 以便包装器以确定性方式解析结果。
  • 运行是健忘的。使用 Resume (codex exec resume --last) 或将状态保存到文件,以便下次运行读取。

Pi 根据设计没有内置的调度器/循环/心跳——仅使用外部时钟(或用于代理端定时器的 TS 扩展)。

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

cmux 没有计时器/观察器/定时任务。有三种方法可以循环它:由编排器驱动(send→sleep→read-screen按你自己的时钟)、一个简单的 while-sleep 包装器,或者——首选——通过cmux notify的事件驱动 OSC 终端钩子,这比轮询更便宜且响应更快。read-screen是非中断的,轮询是安全的。

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

B营 — Hermes 内置调度器

Hermes 的网关每 60 秒触发一次,并在新的隔离会话中运行到期任务。先检查状态:

hermes gatewayinstall# user-level ( --system to survive reboot)hermescroncreate"every 1h""summarize new emails and report"--skillhimalaya hermescroncreate"0 9 * * *""post daily standup"# cron exprhermescroncreate"30m""one-shot reminder in 30 min"# one-shot delay

Hermes-独特:零令牌模式(运行脚本,原样输出 stdout — 用于看门狗),链式(context_from将一个作业的输出传入下一个作业),自终止循环,以及循环安全(计划的会话不能创建更多的 cron 作业 — 不要从计划的作业内部进行计划)。每次运行都是一个新的会话:提示必须包含所有上下文。

心跳模式

一个快速重复的时钟控制许多较慢的每任务检查:该时钟读取任务列表中每个任务的last_run时间戳,并且只对到期的任务执行操作。在 Hermes 中使用重复作业(当没有任务到期时使用零令牌模式);在 Camp A 中使用 while-sleep 循环。定义活跃时间,当没有任务到期时保持静默——不要产生空的噪音。

在报告成功之前先验证它是否触发

  1. A营:日志文件在一个间隔后增长,或手动运行一次封装的命令 → 清理JSON,退出0。
  2. B营:hermes cron list显示作业 sanenext_run;触发立即运行以确认交付。
  3. 确认权限/沙箱标志是否存在——最常见的无声失败是权限提示卡住。
  4. 心跳:确认一个无应支付的滴答保持沉默。

限制

  • 改编自davidondrej/skills;在操作前请验证本地路径、工具、凭证和代理功能。
  • 对于命令、远程访问、调度、浏览器自动化或文件更改工作流,请先获得明确的用户批准并确认目标环境。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进