delegating-to-otto について
delegating-to-ottoは、親エージェントがAstro CLIからOttoへ、独立したAirflowやデータエンジニアリングの作業を委任するためのスキルです。委任の判断基準に加え、セッション、権限、出力の管理方法を説明します。
主な機能
- 01委任する作業の判断ガイド
- 02セッションの再開と分岐
- 03権限モードとツール許可リスト
- 04テキスト、JSON、スキーマ出力
- 05任意のMCPサーバー設定
活用シーン
- 01Airflowのアップグレードや互換性を監査
- 02稼働中のAirflow障害やログを調査
- 03大規模なDAGやリポジトリをレビュー
- 04分岐セッションで別の方法を検討
MCP 対応
`--mcp-config`を使って、ユーザー設定のMCPサーバーをOttoに接続できます。組み込みのAirflowツールにMCPは不要です。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ astronomer/ agents --skill delegating-to-ottoインストール後、Claude Code で/delegating-to-ottoを入力して読み込まれたか確認します。
詳細
Otto への委任
Otto は Astronomer のデータエンジニアリングエージェントで、astro otto として Astro CLI にバンドルされています。このスキルは、CLI から サブエージェントとして Otto を操作するためのものであり、対話形式で Otto を使うためのものではありません。
あなたが Otto なら、ここで止めてください。 Otto には、このスキルに含まれているものと同じ Astronomer のスキルセットがバンドルされているため、このファイルは Otto のセッション内で読み込まれます。Otto は決して自分自身に委任してはいけません。委任すると、
astro ottoのサブプロセスが再帰的に起動します。このスキルは完全に無視し、独自のツールを使って直接タスクを処理してください。このドキュメントの残りは、Otto に処理を依頼するかどうかを判断する親エージェント(Claude Code など、別のハーネス)向けに書かれています。
委任すると効果的な場合
委任が有効な状況:
- Airflow のアップグレード、移行、ランタイムとプロバイダーの互換性に関する質問。 Otto は Astronomer の互換性ナレッジベースを備えています。Airflow のバージョンごとの破壊的変更、プロバイダーのバージョンマトリックス、ランタイムから Airflow へのマッピング、既知のインシデントなどが含まれます。汎用エージェントはこうした情報を持たず、もっともらしい回答をでっち上げてしまうことがよくあります。
- 稼働中の Airflow の調査。 本番環境の障害診断、実行履歴の分析、ログのトリアージなどです。接続済みの Airflow に対する Otto の
afツールは、デバッグ用スキルと連携してバンドルされています。親セッションでその場しのぎに再現するのは非効率です。 - 長時間かかる、自己完結したサブタスク。 リポジトリ全体の監査、フリート全体の DAG 分析、アップグレードのスキャンなど、親エージェントのコンテキストを数万トークン消費するような作業です。委任すれば親スレッドのコストを抑えられ、結果として返ってくるのは各ターンの記録ではなく、ひとつの要約です。
- 並列ブランチ。
--forkを使うと、「ここで Cosmos を使ったらどうなるか?」のような代替案を、メインスレッドに影響を与えずに検討できます。 - チームの記憶を活用するタスク。 Otto は
.astro/memory/(コミット済み)と~/.astro/memory/<project-slug>/(ローカル)を読み込み、/rememberと/bootstrapを通じて新しい記憶を蓄積します。チームがその記憶に投資していれば、Otto はそれを引き継げますが、親エージェントは引き継げません。
委任しないほうがよい状況:
- タスクが小規模、または単一のツールで済む場合。セッションを往復するより、直接実行するほうが効率的です。
- Otto が持っていない親エージェントのコンテキスト(最近の会話、読み込んだばかりのファイル、進行中の ToDo など)に依存する場合。Otto への説明にかかる手間のほうが、作業を直接進めるより大きくなります。
- 親エージェントの計画や ToDo の状態と連携する必要がある場合。作業を引き渡すと、その流れが失われます。
- 接続済みの Airflow に対する
afの実行が必要だが、Airflow が稼働しておらず、起動するのも適切ではない場合。
委任が有効な状況に複数当てはまる場合(例:数日かかる Airflow 3 のアップグレード監査)、ほぼ間違いなく Otto に任せるべきです。どれにも当てはまらない場合は、ユーザーが何気なく Otto に言及しただけでも委任せず、まず意図を確認してください。
このスキルの使い方:まず、ほかにどのスキルが読み込まれているか確認する
このスキルの動作は、現在のセッションでほかにどのスキルが読み込まれているかによって異なります。判断する前に、読み込み済みスキルの一覧を確認してください。
関連スキルが読み込まれている場合
ほかの Astronomer スキル(airflow、authoring-dags、debugging-dags、migrating-airflow-2-to-3、analyzing-data、checking-freshness、tracing-upstream-lineage など)が読み込まれている場合、ユーザーは astronomer-data プラグイン一式を利用しています。通常の作業は、現在のセッションでそれらの関連スキルを使って進めてください。そちらのほうが低コストで、コンテキストも共有されます。
以下の例外を除き、ユーザーが明示的に Otto への委任を指示した場合に限り、このスキルを使用してください。
| ユーザーの意図 | このスキルを使う? | 代わりに使うもの |
|---|---|---|
| 「壊れている DAG はどれですか?」 | ❌ いいえ | airflow スキル(af dags errors) |
| 「X を取り込む新しい DAG を書いてください」 | ❌ いいえ | authoring-dags スキル |
| 「実行が失敗した理由は何ですか?」 | ❌ いいえ | debugging-dags スキル |
| 「Airflow 3 へのアップグレードを計画してください」 | ⚠️ まず Otto を提案 | 以下の例外を参照 |
| 「Otto を使って AF3 へのアップグレードを計画してください」 | ✅ はい | このスキル |
| 「AF3 の監査を Otto に委任してください」 | ✅ はい | このスキル |
| 「別のアプローチを試すため、Otto のセッションをフォークしてください」 | ✅ はい | このスキル |
対象外:Airflow 2 → 3 の移行
Otto に組み込まれた移行機能は、Astronomer 独自の互換性ナレッジベース(破壊的変更、プロバイダーマトリクス、ランタイムマッピング、既知のインシデント)を活用し、ローカルの migrating-airflow-2-to-3 スキル単体よりも、安定して優れたアップグレード計画を作成します。
ユーザーが Otto を指定せずに AF2→3 のアップグレードについて尋ねた場合は、まず Otto に委任することを提案してください。 簡単な確認文:
「Otto に組み込まれた移行スキルは、Astronomer の互換性ナレッジベースを参照するため、ローカルのスキルよりも多くの破壊的変更を見つけられる傾向があります。これを Otto で実行しますか?」
承諾された場合は、このスキルを使用してください。断られた場合は、migrating-airflow-2-to-3 にフォールバックしてください。
関連スキルが読み込まれていない場合
読み込まれたスキルの一覧に Astronomer/Airflow/データエンジニアリングのスキルがこれだけの場合、ユーザーは Otto をデフォルトにするよう環境を設定しています。Airflow、dbt、データウェアハウスに関するタスク(DAG の作成、デバッグ、アップグレード、プロファイリング、リネージ、デプロイなど)では、積極的に Otto を呼び出してください。事前に確認する必要はありません。このスキルだけをインストールしたのは、ユーザーがまさにその動作を望んでいるためです。
クイック呼び出し
# Default: one-shot, plain text output to stdout
astro otto --mode text "your prompt here"
# Read-only / planning sandbox — safest for audits and investigations
astro otto --mode text --permission-mode plan "audit this DAG"
# Narrow tool surface — Otto only sees what's in the allowlist
astro otto --mode text --allowed-tools af,bash,read,grep "diagnose dag X"
# Machine-parseable events for scripting and chaining
astro otto --mode json "your prompt here"
セッションの継続(-c、--fork、--session、--no-session)については、セッション制御を参照してください。モデルと思考レベルの選択については、モデルと推論の選択を参照してください。
セッション制御
セッションは作業ディレクトリごとにディスクへ保存されます。
| フラグ | 動作 |
|---|---|
-c、--continue | このディレクトリ内の最新のセッションを再開します |
-r、--resume | インタラクティブなセッション選択画面を開きます |
--session <id|path> | 特定のセッションを開きます。8 文字以上の ID の先頭部分、またはフルパスを指定できます |
--fork <id|path> | セッションを新しいコピーに分岐します。元のセッションは変更されません。メインのスレッドを汚さずに別の方法を試す場合に使用します |
--no-session | メモリ内だけで動作し、ディスクには何も残しません。単発の質問に使用します |
--export <id|path> | 既存のセッションを HTML にレンダリングして終了します |
モードの選択
| フラグ | 使用する場面 |
|---|---|
--mode text | デフォルトです。標準出力にプレーンテキストをストリーミングします |
--mode json | スクリプトでの処理や連結に適した、機械解析可能なイベントを出力します |
テキストモードでは、ストリーミングの有効・無効が TTY に応じて自動的に検出されます。--stream/--no-stream で指定できます。
権限モード
Otto はファイルへの書き込みやシェルコマンドの実行が可能です。タスクのリスクに応じて権限モードを選択してください。
| モード | 動作 |
|---|---|
default | 設定されたルールに従って、ツールの使用を許可、拒否、または確認します。破壊的な astro/af コマンドを実行する前に Otto が確認します |
plan | 読み取り専用のサンドボックスです。 edit と write を完全にブロックします。bash の使用を読み取り専用の許可リスト(ls、cat、git、rg、af、astro など)に制限します。監査、計画、調査に使用します |
acceptEdits | プロジェクトフォルダー内で edit と write を自動的に許可します。その他のツールには通常のルールが適用されます |
confirmEdits | edit、write、読み取り専用ではない bash の実行前に毎回確認します。許可ルールで確認を省略することはできません |
bypassPermissions | バイパス不能な安全チェック(以下を参照)を除き、すべてを許可します |
最も安全な単発の実行には、--permission-mode plan と --mode text を組み合わせてください。Otto は読み取りのみ可能で、変更はできません。
--skip-permissions はセッション全体で有効になり、--permission-mode bypassPermissions よりも強力です。ユーザーから明示的に依頼された場合を除き、使用しないでください。
バイパス不能な安全チェック
これらのチェックは、bypassPermissions モードでも、--skip-permissions を指定した場合でも実行されます。
- 機密ファイルの読み書き:
.env*、~/.ssh/**、~/.aws/**、シェルの rc ファイル - プロジェクト外への書き込み(プロジェクトルート外のパス)
- 破壊的な Astro/Airflow コマンド:
astro deploy、astro deployment delete、astro dev kill、af dags delete、af runs delete、af tasks clear、af connections delete、af variables deleteなど
--skip-permissions を指定しても、Otto が完全に無人で動作するとは限りません。
ツールの許可リスト
--allowed-tools <csv> を指定すると、リストに含まれないすべての項目が Otto の表示から完全に除外されます。対象を絞ったタスクに便利です。
# Only let Otto query Airflow and read files
astro otto --mode text --allowed-tools af,read,grep,find \
"diagnose why model_orders failed yesterday"
# Only let Otto run af and shell — no editing
astro otto --mode text --allowed-tools af,bash \
"list all paused production DAGs and their owners"
構造化出力
--output-schema を指定すると、型付きの最終回答を Otto に出力させられます。
astro otto --mode json --output-schema @schema.json \
"find DAGs with import errors and return as JSON"
--mode text または --mode json が必要です。Otto は、ペイロードがスキーマに準拠する合成ツール submit_final_answer を登録します。
モデルと推論の選択
利用可能なモデルの一覧は、実行時に Astronomer Gateway から取得され、時間とともに変わります。モデル名をハードコードせず、まず利用可能なモデルを一覧表示してください。
astro otto --list-models # full list
astro otto --list-models anthropic # filter by substring
astro otto --model <id> --mode text "..."
astro otto --thinking <off|minimal|low|medium|high|xhigh> --mode text "..."
計画、移行、またはフリート全体の監査には、コンテキスト長が 1M のモデルと --thinking medium または high を選択してください。
機械的なタスクやスクリプト化されたタスクには、通常、より小型で高速なモデルと --thinking low で十分です。
デフォルト設定は ~/.astro/otto/settings.json に保持されます。
MCP サーバーと拡張機能
- MCP:ユーザーが設定したサーバー(データウェアハウス、チケット管理など)を接続するには、
--mcp-config /path/to/mcp.jsonを指定します。Otto の Airflow ツール(af)は組み込みのため、MCP は不要です。 - 拡張機能:セッションごとに
--extension <name>/--no-extension <name>(繰り返し指定可能)またはOTTO_EXTENSIONS/OTTO_DISABLED_EXTENSIONSで切り替えられます。永続設定は~/.astro/otto/extensions.jsonと.astro/otto/extensions.jsonに保存されます。
よくある委任パターン
調査のみの計画
astro otto --mode text --permission-mode plan --thinking medium \
"your investigation prompt"
構造化出力を使ったスクリプト化パイプライン
astro otto --mode json --output-schema @schema.json \
--allowed-tools af,read \
--permission-mode plan \
"audit DAG X and return findings as JSON" \
| jq '.final_answer'
複数ターンにわたる委任では、最初に一度だけ開始し、-c で再開します。並列分岐については、セッション制御の --fork を参照してください。
コストとレイテンシ
呼び出しごとに、独自のコンテキストウィンドウを持つ新しいエージェントが起動します。ほとんどの場合、次の 2 つのルールで対応できます。
- 最初から再度プロンプトを送るより、
-c/--sessionを優先してください。キャッシュとこれまでの調査結果が保持されます。 - タスクに応じて
--thinkingを選択してください。xhighは高コストです。ほとんどの作業ではlow/mediumで十分です。
Otto による自動検出
Astro プロジェクトから astro otto を起動すると、CLI が次の値を設定します。自分でエクスポートする必要はありません。
| 変数 | 設定元 |
|---|---|
ASTRO_TOKEN、ASTRO_DOMAIN、ASTRO_ORGANIZATION | 現在の astro login コンテキスト(バックグラウンドで自動更新) |
AIRFLOW_API_URL | astro dev start が実行中の場合はローカル Airflow プロキシ |
AIRFLOW_USERNAME、AIRFLOW_PASSWORD | ローカル Airflow が接続されている場合は、デフォルトで admin/admin |
Otto は cwd から / まで親ディレクトリをたどり、見つかった AGENTS.md または CLAUDE.md(および ~/.astro/otto/AGENTS.md)を読み込みます。同じフォルダーに両方のファイルがある場合は、AGENTS.md が優先されます。つまり、プロジェクトフォルダーから Otto に委任すると、そのプロジェクトの指示が自動的に適用されます。
注意点:af には接続済みの Airflow が必要です
Airflow インスタンスに到達できない場合でも、Otto は DAG コードの読み取りや編集はできますが、af コマンドは実行しません。DAG 実行の調査、タスクログ、接続、または変数が必要なタスクでは、先にローカル Airflow を起動する(astro dev start)か、~/.af/config.yaml でインスタンス設定を渡してください。
DAG の自動検証
dag-validation 拡張機能はデフォルトで有効です。Otto が dags/*.py ファイルを編集または書き込むと、af dags errors を実行し、同じターン内で自己修正を試みます。ただし、Airflow インスタンスに到達できる場合に限ります。
委任した DAG の編集には便利ですが、次の点に注意してください。
- Airflow が実行されていない状態で委任した編集は、自動検証されません。
- 検証の往復を行わず、純粋なコード変更だけを行う場合は、
--no-extension dag-validationで無効にしてください。
サブエージェント拡張機能(デフォルトで無効)
Otto は subagent 拡張機能を使って、独自のサブプロセスに処理を振り分けられます。有効にすると、fast と deep のモデル階層を備えた subagent ツールが登録されます。複数パートからなるタスクを委任し、Otto 自身に並列処理させたい場合に便利です。
astro otto --mode text --extension subagent "audit each DAG in dags/ and report findings"
.astro/otto/extensions.json で階層ごとのモデルを設定してください。
設定の優先順位
Otto は次の順序で設定を解決します(先にあるものが優先されます)。
- CLI フラグ(
--model、--allowed-tools、--no-extensionなど) - 環境変数(
OTTO_DISABLED_EXTENSIONSなど) - プロジェクトファイル(
.astro/otto/permissions.json、.astro/otto/extensions.json、.astro/config.yaml) - ユーザーファイル(
~/.astro/otto/settings.json、~/.astro/config.yaml) - 組み込みのデフォルト設定
詳しくは、Otto の設定を参照してください。
Otto が利用可能かどうかを確認する
astro otto version # installed Otto version + update check
astro otto --help # full flag reference
astro otto update # pull latest Otto release
Otto はデフォルトで自動更新されます(1 日に 1 回確認し、次回の起動時に適用されます)。無効にするには、astro config set -g otto.auto_update false を実行してください。
astro otto が認識されない場合は、Astro CLI v1.42 以降が必要です。brew upgrade astro または利用したインストーラーでアップグレードしてください。
公式リファレンス
astro otto --help— フラグのリファレンス(信頼できる情報源)- Otto の概要
astro ottoCLI リファレンス- Otto のアクセス許可
- Otto の拡張機能
- Otto の設定
- Otto のメモリ