コンテンツにスキップ

ルーティン設計

ルーティンはミニオン個体が自律的に実行するスケジュールタスクです。スキルパイプラインをcronスケジュールに従い、HQを介さずに実行します。

{
"name": "morning-report",
"pipeline": ["write-daily-report", "send-to-slack"],
"content": "日報を作成してチームのSlackチャンネルに投稿する",
"cron_expression": "0 9 * * 1-5",
"minion_id": "<uuid>",
"workspace_id": "<uuid|null>"
}
フィールド説明
namestringルーティン名
pipelinestring[]実行順のスキルIDリスト
contentstring|null説明(Markdown)
cron_expressionstring|nullcronスケジュール
minion_idstring所有ミニオンのUUID
workspace_idstring|nullバインド対象のワークスペース(任意)。null の場合はミニオン全体のスコープで実行(ミニオン全体のシークレット・変数のみ注入)。UUIDを指定するとそのワークスペースのスコープにバインドされ、ワークスペース変数・ワークスペース別シークレットも実行時に参照可能になる。いずれのケースでもセッション環境変数 MINION_ROUTINE_WORKSPACE_ID がエクスポートされる

ルーティンのパイプラインに含まれるすべてのスキルは1つのCLIセッション内で実行されます。これにより前のスキルの出力が次のスキルに引き継がれます。

flowchart LR
A["write-daily-report"] --> B["send-to-slack"]

CLIセッション終了時、ランナーがミニオンのローカルoutcome APIに実行結果(成否とログtailのサマリ)を自動で報告します。

ルーティンとワークフローはどちらもスキルをスケジュール実行しますが、スコープとガバナンスのレベルが異なります。ルーティンはミニオン1体の中で動く直列のスキルパイプラインであり、ワークフローは分岐・fan-out・複数ミニオンにまたがれるプロジェクト単位のDAG(ノード/エッジのグラフ)です。

ルーティンは個人のcrontab、ワークフローはCI/CDパイプラインと考えてください。

観点ルーティンワークフロー(DAG)
スコープミニオン1体で完結プロジェクト全体、複数ミニオンの協調
直列のスキルパイプラインノード/エッジのグラフ(並列・fan-out/join・条件分岐)
所有者ミニオン個体プロジェクト
ロール割り当てなし — 所有ミニオンがすべて実行ノードごとにロール指定(PM / Engineer)
レビューゲートなしレビューノードで人間/ミニオンの承認と差し戻しループ
バージョン管理なし — 常に最新のスキルバージョンを使用完全な変更履歴、イミュータブルなスナップショット
実行追跡ローカルのみ(ミニオン側、直近200件)HQデータベースに完全な監査証跡
トリガーミニオン上のcron(自律実行)HQ起点のcronまたはオンデマンド

ルーティンを使うべきケース:

  • ミニオン1体でタスク全体が完結する
  • ステップ間に人間のレビューが不要
  • 個人の習慣的なタスク(朝の準備、日次振り返り、受信トレイ整理)
  • 軽量な自律実行が望ましい

ワークフローを使うべきケース:

  • 複数のミニオンが協調する必要がある(例:エンジニアが分析、PMがレビュー)
  • 特定のノード前に人間の承認ゲートが必要
  • タスクに実際の依存関係がある — 並列分岐、リストへのfan-out、条件分岐
  • すべての実行をノード単位で追跡する監査証跡が必要
  • 再現性が重要 — 特定のスキルバージョンを固定したい

同じスキルを、求められるガバナンスレベルに応じてルーティンにもワークフローにも使えます。

ルーティンとして(ミニオン1体、自律実行):

flowchart LR
subgraph "ルーティン: morning-report (平日 9:00)"
A["write-daily-report"] --> B["send-to-slack"]
end

ワークフローとして(プロジェクト協調のDAG、レビューゲート付き):

flowchart LR
subgraph "ワークフロー: team-daily-report"
A["Skill: write-daily-report<br/><i>engineer</i>"] --> R{"Review<br/><i>pm</i>"}
R -->|承認| C["Skill: send-to-slack<br/><i>pm</i>"]
R -. 差し戻し .-> A
end

write-daily-reportsend-to-slack はどちらのケースでも同じスキルです。違うのはオーケストレーションの方法(ワークフローはレビューゲート・分岐・fan-outを追加できる)であり、スキルが行う処理ではありません。

標準的なcron式をサポートします(ワークフローのスケジュールと同じ構文)。

実行タイミング
0 9 * * *毎日 9:00
0 9 * * 1-5平日 9:00
0 18 * * *毎日 18:00
0 0 * * 1毎週月曜 0:00