mcpField
A
agent-self-scheduling

agent-self-scheduling

github.com/davidondrejエージェントワークフロー4.2k224 回インストール今日更新
リポジトリ

agent-self-scheduling について

エージェントの定期実行や単発実行を設定するスキルです。外部タイマーで動かす単発エージェントとHermes内蔵スケジューラーを扱い、間隔の制約、無人実行時の注意、ハートビート、実行確認を説明します。

主な機能

  1. 01外部cron・タイマー・ループのパターン
  2. 02Hermes内蔵cronスケジューリング
  3. 03ハートビートとウォッチドッグのパターン
  4. 04権限と出力処理のガイダンス
  5. 05スケジュール実行の検証

活用シーン

  1. 01単発エージェントによる定期チェック
  2. 02Hermesの分離ジョブのスケジュール
  3. 03アイドル時に通知しないハートビートの構築

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/agent-self-schedulingを入力して読み込まれたか確認します。

詳細

エージェントのスケジュール設定

まず、エージェントに組み込みスケジューラーがあるか(Hermes → Camp B)、それとも自分で実行タイミングを管理するか(それ以外 → Camp A)を確認します。

共通の最低条件:cron の最小間隔は 1 分です(秒指定のない 5 フィールド式)。どのキャンプでも同じです。1 分未満の間隔では、必ず while ...; sleep N; done ループ、TS 拡張機能、またはイベントフックを使用してください。短い間隔で LLM を実行してはいけません。

Camp A — 単発エージェント。実行タイミングは自分で管理

これらは 1 回実行して終了します(再開しない限り、以前の状態を覚えていません)。外部からスケジュールを設定してください。

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 拡張機能を使用してください。

cmux — オーケストレーションのみ。スケジューラーなし

cmux にはタイマー/監視/cron がありません。ループの方法は 3 つあります。オーケストレーター側で、自分の実行タイミングに合わせて send → sleep → read-screen を実行する方法、単純な while-sleep ラッパーを使う方法、または推奨される、cmux notify と OSC ターミナルフックによるイベント駆動方式です。イベント駆動方式はポーリングより低コストで応答性に優れています。read-screen は割り込みを発生させないため、安全にポーリングできます。

ループで別のエージェントを確認する場合は、確認のたびにユーザーへ 1 行で状況を伝えてください。エージェントが何をしているのか、予定どおりかどうかを知らせます。(Claude Code が処理の完了後に、次にユーザーが送信するメッセージを予測して自動入力することがありますが、それはユーザーではなく Claude によるものです。)

Camp B — Hermes の組み込みスケジューラー

Hermes のゲートウェイは 60 秒ごとに動作し、実行時刻になったジョブを新しい分離セッションで実行します。まず状態を確認してください。

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 独自の機能:ゼロトークンモード(スクリプトを実行し、標準出力をそのまま配信します。ウォッチドッグに便利です)、ジョブの連鎖(context_from であるジョブの出力を次のジョブに渡します)、自動終了ループ、ループの安全性(スケジュールされたセッションから新しい cron ジョブを作成することはできません。スケジュールされたジョブ内から新たなジョブをスケジュールしないでください)。実行ごとに新しいセッションが始まるため、プロンプトにすべてのコンテキストを含める必要があります。

ハートビートのパターン

1 つの高速な定期ティックで、複数の低速なタスク別チェックを制御します。ティックはタスクリストとタスクごとの last_run タイムスタンプを読み込み、実行時刻になったタスクだけを処理します。Hermes では定期ジョブを使い(実行対象がない場合はゼロトークンモード)、Camp A では while-sleep ループを使います。アクティブ時間帯を設定し、実行対象がない場合は何も出力しないでください。不要なメッセージを出さないようにします。

ウォッチドッグのティックは、標準出力がそのまま配信されるコマンドにすぎません。低コストで、認証不要な呼び出し 1 回だけにしてください。

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

成功を報告する前に、動作を確認する

  1. Camp A:1 間隔後にログファイルが増えていることを確認するか、ラップしたコマンドを手動で 1 回実行し、クリーンな JSON が出力され、終了コードが 0 になることを確認します。
  2. Camp B:hermes cron list にジョブが表示され、next_run が妥当なことを確認します。実行をすぐにトリガーし、配信を確認してください。
  3. 権限/サンドボックスのフラグが設定されていることを確認します。気づかれにくい失敗の最大の原因は、権限確認プロンプトでの停止です。
  4. ハートビート:実行対象がないティックで何も出力されないことを確認します。

コメント