ブログ · ガイド · 2026年10月28日
AEGIS でエージェントをスケジュール実行する: スケジュール、実行、失敗したときに見えるもの
開示: AEGIS は 100monkeys.ai が開発しているため、このガイドは作り手による説明として読んでください。AEGIS の公開ドキュメント、主に Schedules ページと Schedule Tools リファレンスをもとに当社の AI エージェントが下書きし、当社がレビューしました。この日本語版は英語の原文ガイドの翻訳です。以下のフィールド、ルート、メッセージはすべてそれらのページからの引用で、英語のまま示し訳を添えています。このガイドのためにこれらの呼び出しを実行してはいません。ドキュメントが手順を明示していない箇所は、そう書いています。
AEGIS by 100monkeys.ai, in beta は、自律エージェントを隔離されポリシーが適用されたランタイムで動かすセルフホスト型のオーケストレーターです。このガイドでは、エージェントの1つをタイマーに載せ、各起動が何をしたかを読み、起動が取りうる4つの結果を示します。起きなかった実行も、起きた実行と同じように見えるようにするためです。
スケジュールとは
ドキュメントは1文で定義しています。"A schedule starts one of your agents or workflows as you, either once at a time you choose or again and again on a recurrence."(スケジュールは、あなたのエージェントやワークフローの1つを、あなたとして起動する。選んだ時刻に一度だけ、または繰り返し規則に従って何度も。)ここから3つのことが言え、それぞれが以下の手順の形を決めています。
- スケジュールはあなた自身のオブジェクトで、"never a field of the agent or workflow it runs"(実行するエージェントやワークフローのフィールドでは決してない)。
- 人として実行されます。"A schedule always runs as a person. A service account, or an operator acting for no person, cannot make, change, pause, resume, run or delete one."(スケジュールは常に人として実行される。サービスアカウントや、誰の代理でもないオペレーターは、作成・変更・一時停止・再開・実行・削除のいずれもできない。)
- 各起動は通常の実行です。"At each fire the orchestrator starts the run exactly as
aegis.task.executeoraegis.workflow.runwould for you, with the schedule's intent, input and connections."(起動のたびに、オーケストレーターはaegis.task.executeやaegis.workflow.runがあなたのために行うのとまったく同じように、スケジュールの意図・入力・接続で実行を開始する。)
ステップ 1. エージェントとタイミングを決める
すでに aegis task execute <AGENT> で一度手動実行したエージェントを使ってください。良い実行がどう見えるかが分かっているからです。
次に2種類のタイミングから1つを選びます。指定するのはどちらか一方だけです。
- 一度だけ:
at。RFC 3339 の時刻で、"at least one minute from now and at most a year ahead"(今から少なくとも1分後、最大1年先まで)。 - 繰り返し:
recurrenceにcron、timezone、jitter_secondsを指定します。cron は5フィールド(分、時、日、月、曜日)で、"no seconds field and no@daily-style shorthand"(秒フィールドはなく、@dailyのような短縮形もない)。タイムゾーンは IANA 名で、既定値はUTCです。ジッターは各実行をその秒数までのランダムな時間だけ遅らせ、最大は 3600 です。
計画に入れておくべき制限が2つあります。"A schedule runs at most once every 5 minutes"(スケジュールは最短でも5分に1回まで)、そして削除されていないスケジュールは最大25個までです。
ステップ 2. 実行が届く範囲を決める
スケジュール実行が届くのは、その profile または contexts が指定する接続だけで、"a schedule with neither reaches none of your connections"(どちらもないスケジュールはどの接続にも届かない)。スケジュールはどちらか一方を持ち、両方は持ちません。エージェントがメールやリポジトリを読むなら、ここでプロファイルを指定してください。そうしないと起動は接続不足で拒否され、拒否の理由にそう書かれます。
ステップ 3. スケジュールを作成する
CLI Reference に aegis schedule というシェルコマンドはありません。スケジュールは REST ルート POST /v1/schedules(スコープ schedule:write)、MCP ツール aegis.schedule.create、または Zaru の Schedules ページから作成します。ツールが受け取る引数は、リファレンスの記載どおり次のとおりです。
aegis.schedule.create {
"name": "Morning inbox triage",
"target_kind": "workflow",
"target": "email-inbox-triage",
"intent": "Sort the new mail",
"input": { "mailbox": "ann@example.com" },
"recurrence": { "cron": "*/30 * * * *", "timezone": "UTC", "jitter_seconds": 300 }
}
この例はドキュメント自身のスケジュールです。target_kind を agent に、target をあなたのエージェント名に変えてください。応答は {"schedule": {...}} で、state、next_run_at、last_run を含みます。その場を離れる前に next_run_at を読み返してください。
ステップ 4. 今すぐ一度起動する
動くかどうかを知るために、最初の予定時刻を待つ必要はありません。所有者は POST /v1/schedules/{id}/run または aegis.schedule.run_now で即座に1回実行できます。この実行は "exactly as a fire starts it: as the owner, with the schedule's target, input, connections or profile, and attachments"(起動が開始するのとまったく同じく、所有者として、スケジュールの対象・入力・接続またはプロファイル・添付で)行われ、"nothing else changes"(それ以外は何も変わらない)。スケジュールの状態とタイミングはそのままです。
ステップ 5. 実行履歴を読む
aegis.schedule.runs { "schedule_id": "<id>", "limit": 20 }
ルートは GET /v1/schedules/{id}/runs?limit= です。実行は新しい順に並び、それぞれ scheduled_time(今すぐ開始した実行では null)、fired_at、outcome、detail、execution(その id、kind、status)を持ちます。実行そのものを読むには、実行 ID を CLI に渡します: aegis task logs <EXECUTION_ID>。失敗だけを見たいときは --errors-only を付けます。
ステップ 6. 4つの結果を知る
各起動は予定時刻ごとに一度だけ記録されるため、Temporal が繰り返した起動は "answers the first fire's record instead of starting a second run"(2回目の実行を始めず、最初の起動の記録を返す)。各記録の結果は次のいずれかです。
started: 実行が開始され、起動にはその実行 ID が記録されます。skipped_overlap: "The run the previous fire started is still running, so this fire starts nothing."(前回の起動が始めた実行がまだ動いているため、この起動は何も開始しない。)Zaru では "Skipped: the last run was still running" と表示されます。skipped_paused: スケジュールが一時停止中です。refused: "The run could not start. The fire records the refusal's sentence, for example a required connection that was not chosen."(実行を開始できなかった。起動には拒否の文言が記録される。たとえば必要な接続が選ばれていなかった、など。)
started は実行が始まったことを示すだけで、成功したことは示しません。実行自体の状態は execution.status に、失敗の理由はそのログにあります。
ステップ 7. 起動が失敗し続けたときに起きること
"When the last three fires of a recurring schedule were all refused, the schedule pauses itself, with the reason 'Paused after three runs could not start: <the last refusal>.'"(繰り返しスケジュールの直近3回の起動がすべて拒否されると、スケジュールはこの理由とともに自ら一時停止する。)スケジュールの paused_reason を読み、原因を直してから aegis.schedule.resume で再開してください。オーケストレーターの再起動中に逃した起動は "is still made up to 10 minutes late; later than that, the time is skipped"(10分遅れまでは補われる。それより遅ければその時刻はスキップされる)。
ステップ 8. 承認はそのまま効く
スケジュール実行はあなたとして動くので、"so every tool call that waits for your approval in a conversation waits for it in a scheduled run too"(会話中にあなたの承認を待つツール呼び出しは、スケジュール実行でも同じく承認を待つ)。Zaru では、その依頼が Approvals ページに "From your schedule <name>" として表示されます。
ドキュメントが明示していないこと
- シェルコマンド。CLI Reference にスケジュールのサブコマンドはないため、セルフホストでは REST ルートか MCP クライアントを使います。
- ローカルスタックでの「あなた」が誰か。スケジュールは人として実行され
schedule:writeを必要としますが、aegis initのスタックは IAM なしで動きます。そこでスケジュールの所有者がどうなるかはドキュメントに書かれておらず、私たちも試していません。
次に読む
スケジュールされたエージェントと、それが送るものの間に人を置くには、オーケストレーターに承認ステップを持たせる方法を読んでください。実行が何をしたかを読むには、AEGIS の実行ログを読むをどうぞ。