メインコンテンツまでスキップ

AX(Agent Executor):ビルダー向けに解説する Google のオープンなエージェントランタイム(2026年)

上級
What you'll learn
  • Google のスタックの中で AX を正しく位置づける:Kubernetes、Agent Sandbox、Agent Substrate、AX、そしてあなたのハーネス
  • AX の4つのリソース(Task、Workspace、Gateway、Model)を読み解き、それぞれが何をもたらすかを理解する
  • AX の suspend/resume で実際に何が残り、何が失われ、ランナーイメージがそれに対して何をすべきかを説明する
  • ax apply、ax watch、ax ssh で最初の Task をエンドツーエンドで実行し、3つのデバッグの罠を知る
  • AX のようなセルフホスト型ランタイムが Claude Managed Agents や OpenAI Agents API に勝つのはいつで、勝たないのはいつかを判断する

2026年9月20日の夜、AX:Google のオープンなエージェント型オーケストレーター は 507 ポイントと 222 コメントで Hacker News のトップに上がりました。コメントの大半は「これは何のためのものか」という質問でした。それはもっともな疑問です。このプロジェクトは 2026年5月20日(v0.1.0)から公開されており、それ以降に2度形を変えているため、見つかるブログ記事のほとんどは、もう存在しない CLI を説明しているからです。

要点は次のとおりです。AX はモデルでも、エージェントフレームワークでも、ホスト型サービスでもありません。 これは Kubernetes 風のコントロールプレーンで、kubectl 風の CLI を持ち、宣言されたエージェントの Task を受け取ってサンドボックスを与え、リポジトリをクローンし、MCP サーバーとスキルを接続し、ネットワークを囲い、スナップショットに凍結して後で任意の空きワーカー上で解凍できます。これは、Claude Code、Google の ADK、LangChain、あるいは自分で書いた Python ループなど、すでに使っているハーネスの下に位置します。

スタック:下から上へ​

Google の発表では、混同しやすい4つの名前が使われています。それらは4つのレイヤーであり、AX は最上位のものです。

レイヤー何であるかステータス(2026年9月)Google が公開している数字
Kubernetes / GKEクラスター——
Agent Sandbox(kubernetes-sigs/agent-sandbox)Sandbox CRD:gVisor で分離された Pod(Kata も差し替え可能)、ウォームプール、Pod スナップショット2026年5月21日から GKE で GAクラスターあたり毎秒 300 サンドボックス割り当て;1秒未満の起動、90% が 200 ms 以内
Agent Substrate(agent-substrate/substrate)RAM + ファイルをオブジェクトストレージにスナップショットすることで、多数のアイドル状態のアクターを少数のウォームなワーカーに多重化する最小限のコントロールプレーンオープンソース、初期段階、「公式にサポートされた Google 製品ではない」;GKE 上のマネージド版は評価中8 Pod 上に約 250 のステートフルなアクター;プレーンなコンテナに比べ「10 倍の密度」;1秒未満のアクティベーション
AX(google/ax)Substrate の上に載る宣言的な Task/Workspace/Gateway/Model + CLIv0.3.0、ax.io/v1alpha1、Apache-2.0、4.3k スター「クラスターあたり数十億の Task」(マーケティング上の主張であり、ベンチマークではない)
あなたのハーネスClaude Code、ADK、LangChain、A2A エージェント、自作のループ——

この表が隠している点が2つあります。第一に、興味深いエンジニアリング(スナップショットとテレポートの仕組み)があるのは Substrate で、AX は使い勝手のためのレイヤーです。第二に、Substrate は google/ 配下ではなく独自の GitHub org にあり、複数の HN コメンターがこれを「どこまで公式なのか」を示すシグナルとして指摘しました。全体を、SLA 付きの製品ではなく、Google のあるチームによる真剣ではあるが 1.0 未満のオープンソースプロジェクトとして扱ってください。

4つのプリミティブ​

AX のすべては atespace(Substrate のテナンシー単位;指定しなければ default)内の YAML リソースです。kubectl とまったく同じように ax apply -f で適用します。

Task:分離実行の単位​

apiVersion: ax.io/v1alpha1
kind: Task
metadata:
name: fix-flaky-test
spec:
image: "ghcr.io/my-org/my-agent-image"
command: ["my-agent", "--goal", "fix the flaky test"]
env:
- name: ENVIRONMENT
value: "staging"
resources:
requests: { cpu: "500m", memory: "1Gi" }
limits: { cpu: "2", memory: "4Gi" }
workspaces:
- name: golang
path: "/workspace"
goal: "Ensure the Go toolchain is available and built from source"
gateway:
name: default-gateway
debug: true

Task は意図的に小さく作られています。concepts ドキュメントは、エージェントが1つの長いプロセスの中に住み続けるのではなく、生涯にわたって多数の Task を作成すると説明しています。見た目以上に重要なフィールドが3つあります:

  • workspaces[].goal は Task が必要とする環境を平易な英語で記述したものです。AX の「生成的」セットアップは、その一文から Workspace を完成させようとします(ツールチェーンのインストール、依存関係の取得)。あなたのエージェントが開始する前にモデルがループに入る唯一の場所です。
  • debug: true は ax ssh でサンドボックスに入る唯一の方法です。これがないとゲストサービスが公開されず、CLI は接続を拒否します。
  • gateway はスキーマ上は省略可能ですが、省略すると substrate のデフォルトの egress ポリシーが何であれ、それに依存することになります。必ず宣言してください。

Workspace:git + MCP + スキル、エージェント開始前にマテリアライズされる​

apiVersion: ax.io/v1alpha1
kind: Workspace
metadata:
name: golang
spec:
git:
- name: origin
repo: "https://github.com/golang/go.git"
branch: "my-fix"
mcp:
registries:
- provider: google
query: "mcp.tags:build"
servers:
- name: git-tools
endpoint: "http://git-mcp.default.svc.cluster.local:8080"
skills:
registries:
- provider: google
query: "skills.tags:nodejs"
path: "/.agents/skills"

これが、AX を「サンドボックス付きの Kubernetes Job」以上のものにしているリソースです。Workspace はリポジトリを事前にクローンし、MCP サーバーを(明示的なエンドポイントまたはレジストリクエリで)解決し、スキルパッケージをパスに配置します。デフォルトのスキルパスに注目してください:/.agents/skills は、クロスエージェントの SKILL.md 標準が Codex、Cursor、Gemini CLI 向けに使うのと同じディレクトリ規約なので、Workspace は Task 内で動くどのハーネスにも同じスキルを渡せます。

Gateway:リスナーは内向き、許可リストは外向き​

apiVersion: ax.io/v1alpha1
kind: Gateway
metadata:
name: default-gateway
spec:
listeners:
- name: http
port: 8080
protocol: HTTP
egress:
allowlist:
hosts:
- host: "api.anthropic.com"
port: 443

リファレンスマニフェストは 443 番ポートに host: "*" を設定した状態で出荷されており、これはすべてを許可するポリシーです。変更してください。egress 許可リストは、プロンプトインジェクションとエージェントが何をアップロードするかのページで扱った流出パターンに対する、単一で最も効果的な制御であり、AX はそれを置くための宣言的な場所を提供します。リスナーは Task がポートを公開する方法(A2A エンドポイント、開発サーバー、デバッグ UI 用)で、ax tunnel がそれらをあなたのラップトップに転送します。

Model:プロバイダー + モデル ID + Kubernetes シークレット​

apiVersion: ax.io/v1alpha1
kind: Model
metadata:
name: claude-model
spec:
provider: anthropic
model: claude-opus-5
secretKey:
name: anthropic-api-secret
key: ANTHROPIC_API_KEY
parameters:
maxTokens: 16000
temperature: 0.9

リファレンスドキュメントには google と anthropic のプロバイダーが示されています。認証情報は Kubernetes Secret への参照なので、マニフェストにキーが含まれることはなく、キーはすでにシークレットをローテーションしている場所でローテーションされます。AX は Gemini 専用ではありません。ただしランナーのドキュメントには、atespace が Gemini の認証情報を持つ場合に GEMINI_API_KEY が自動的に注入されると書かれており、これが Google 自身のモデルが近道を得ている唯一の箇所です。

Task の内部で実際に何が起きるか​

これはどのローンチ記事も扱っていない部分であり、飛ばすと午後を丸ごと失うことになる部分です。docs/runner.md より:

  1. エントリーポイントは固定です。 どんな spec.image を指定しても、コントローラーは /usr/local/bin/ax-task-runner を PID 1 としてコンテナを起動します。あなたのイメージはそのパスに実行ファイルを含んでいなければなりません(シンボリックリンクでも構いません)。公開されているベースイメージは gcr.io/ax-substrate/ate-images/ax-task-runner で、これを拡張するのが通常の方法です。
  2. コマンドは argv ではなく環境変数経由で届きます。 ランナーは AX_TASK_YAML(status を含む Task 全体)と AX_WORKSPACES_YAML(バインドされたすべての Workspace を複数ドキュメントの YAML にしたもの)を受け取り、Task から spec.command を取り出し、最初の Workspace を作業ディレクトリとして子プロセスで起動します。また、小さなローカル HTTP メタデータサーバーである AX_METADATA_URL も公開します。
  3. ブートストラップには 10 分の時計があります。 Workspace のマテリアライズ(クローン、MCP の解決、スキルのインストール、生成的な goal ステップ)は AX_BOOTSTRAP_TIMEOUT(デフォルト 10 分)以内に終わらなければなりません。コールドなワーカー上の大きなモノレポは、これを超えてしまうことがあります。
  4. コントロールプレーンはあなたの終了コードを読みません。 ランナーはコマンドの終了ステータスをログに記録しますが、あなたのエージェントが動いていようがいまいが PID 1 として立ち上がったままです。つまり、Running フェーズの Task は、あなたのエージェントが生きていることを意味しません。独自の完了シグナル(Workspace 内のファイル、自分のキューへのメッセージ、内部からの Task 削除)を書き、それを監視してください。
  5. シャットダウンは SIGTERM、10 秒、SIGKILL です。 ランナーは SIGTERM をコマンドのプロセスグループに転送し、限られた猶予期間だけ待ちます。状態は早めにフラッシュしてください。

Suspend と resume:何が残るか​

Suspend/resume は、このスタック全体を正当化する機能です。エージェントは実時間の大半を、モデル、ツール、あるいは人間を待つことに費やしており、Substrate の賭けは、アイドル状態のエージェントはウォームな Pod ではなくストレージのコストで済むべきだ、というものです。

ax suspend task fix-flaky-test # Ready=False, snapshot taken
ax resume task fix-flaky-test # restored on any free worker

ドキュメントが残ると述べているもの、残らないもの:

suspend/resume で残るもの残らないもの
/workspace ボリューム(ファイル、クローン、ビルド成果物)プロセスツリー:エージェントはエントリーポイントから再起動する
Substrate レベルのアクターメモリスナップショット(Substrate 層での RAM + ファイル)開いているネットワーク接続(GKE ドキュメント:エージェントは再接続を処理しなければならない)
Task の spec と statusWorkspace ボリュームの外に書かれたもの

ランナーのドキュメントはその帰結について明確です:resume 後、ランナーは同じファイルを見ますが、プロセスツリーは新しいものなので、Workspace のセットアップがすでに実行済みかを追跡しなければ(マーカーファイルが推奨されている仕組みです)、すべてのリポジトリを再クローンしてしまいます。エージェントが計画や会話をプロセスメモリだけに保持しているなら、resume でそれは失われます。トランスクリプトは Workspace 内のディスクに置いてください。これは長時間実行エージェントのハーネスページと同じ教訓を、インフラが強制しているのです。

Guided walkthrough1 of 6
  1. go install github.com/google/ax/cmd/ax@latest を実行します。AX はアクティブな kubeconfig コンテキストに従い(kubectx が使えます)、デフォルトは namespace ax-system、atespace default です。ラップトップの場合、Agent Substrate リポジトリの hack/ スクリプトが substrate をインストールした kind クラスターを立ち上げます。その後、AX のコントロールプレーンは make deploy AX_IMAGE_REPO=<your registry> でデプロイしますが、これには ko と push 可能なレジストリが必要です。

すでに運用しているエージェント向けのマニフェストを Claude に下書きさせる

I run an agent as a container image ghcr.io/acme/triage-agent:1.4. Its entrypoint is "triage --repo REPO_PATH --model MODEL_ID". It needs: the repo github.com/acme/backend on branch main, an MCP server for Linear reachable at http://linear-mcp.tools.svc.cluster.local:8080, outbound access only to api.anthropic.com:443 and github.com:443, and the Anthropic key from the Kubernetes Secret "anthropic-api-secret" (key ANTHROPIC_API_KEY).

Write the four google/ax v1alpha1 manifests (Model, Gateway, Workspace, Task) for this, following docs/manifests.md in the repo. Then write a Dockerfile that extends the published ax-task-runner base image and installs my agent WITHOUT changing the entrypoint. Finally, list what I must change in the agent so that (a) it treats the first workspace as its working directory, (b) it survives a suspend/resume by keeping its plan and transcript on disk under /workspace and using a marker file to skip re-setup, and (c) it signals completion in a way the AX control plane can't (it ignores exit codes).

ホスト型エージェントループと比べた AX の位置​

HN スレッドで最も賛成票を集めた質問は「OpenAI Agents API に対する利点は何か」でした。正直な答えは、これらは異なるレイヤーだということです。

AX + Agent SubstrateClaude Managed AgentsOpenAI Agents APICloudflare の isolate ランタイム
ループを動かすのは誰かあなた(コンテナ内の任意のハーネス)Anthropic(ハーネスは彼らのもの)OpenAI(Codex ハーネス)あなた、Workers/Durable Objects 上で
実行場所あなたの Kubernetes クラスター、任意のクラウドまたはオンプレミスAnthropic のインフラOpenAI のインフラ、またはセルフホストのサンドボックスCloudflare のエッジ
分離Task ごとの gVisor / Cloud Hypervisor サンドボックスAnthropic が管理する環境ホスト型またはセルフホストのサンドボックスV8 isolate、オンデマンドのコンテナ
モデルの選択Model リソースに置いた任意のプロバイダーClaudeOpenAI のモデル任意(API 経由)
アイドル時のコストモデルストレージにスナップショット、オンデマンドで resumeセッションベースの課金セッションベースの課金isolate がハイバネートする
あなたが所有するものクラスター、アップグレード、シークレット、egress ポリシーAPI キーAPI キーWorkers アカウント

データ主権が必要な場合、1つのポリシーの背後で複数ベンダーのモデルを動かしたい場合、すでに Kubernetes を運用している場合、あるいはコンピュートに支払うことなく何日も眠れるエージェントが欲しい場合は AX を選んでください。今日動くハーネスが欲しく、クラスターを所有したくない場合はホスト型ループを選んでください。多くのチームは両方を使うでしょう:対話セッションにはホスト型ループ、バックグラウンド Task の大群には AX 風のインフラです。

落とし穴と、耳を傾ける価値のある反論​

  • 6月時点のドキュメントは別のツールを説明しています。 5月のプレビューは会話中心の CLI(ax exec --conversation … --resume、トラジェクトリ分岐用の ax fork、ADK と A2A のブリッジを持つ AgentService プロトコル)を公開していました。9月の README のコマンドリファレンスはリソース中心です:apply、get、describe、watch、suspend、resume、delete、ssh、tunnel、ctx。チュートリアルに ax fork が出てきたら、それは再設計前のものです。5月のブログにあった5つの主要機能(耐久性のある実行、分離、単一ライターのセッション整合性、接続回復、トラジェクトリ分岐)は依然として掲げられた目標ですが、分岐の話がリソースモデルの中でどこまで残っているかは、本稿執筆時点では文書化されていません。
  • v1alpha1 は本気です。 README は安定版リリース前に大きな破壊的変更があると警告しています。CLI のバージョンとランナーイメージのダイジェストを固定し、アップグレードのたびに docs/manifests.md を読み直してください。
  • Kubernetes は省略できません。 スレッドで最も繰り返された不満です。Substrate のクイックスタートは kind 上で動くのでラップトップで試せますが、本番は実際のクラスターを意味します。すでに Kubernetes を運用していないなら、AX はそれを始める理由にはなりません。
  • マネージドの GKE Agent Substrate には厳しい要件があります。 GKE 1.37 以上(1.36 はベータフラグ付き)、Workload Identity、クラスター作成時に有効化されたベータ API、ActorTemplate ごとに統一されたマシンタイプ(E2 は不可)、スナップショット用の Cloud Storage バケット、gVisor または Cloud Hypervisor による分離、そして GPU パススルーなし。本番利用は許可リスト制のプライベート GA プログラムの背後にあります。
  • 例の egress デフォルトは寛容です。 443 番ポートの host: "*" は、エージェントが任意の HTTPS エンドポイントに到達することを許します。信頼できないリポジトリを読む Task にとって、これは望むものの正反対です。ローカルおよびハイブリッドエージェントのセキュリティ確保と同じルールに従ってください。
  • 2つのプロジェクト、2つの org、1つの免責事項。 AX は google/ 配下、Substrate は agent-substrate/ 配下にあり、後者は公式にサポートされた Google 製品ではないと明記しています。どちらも Google の OSS 脆弱性報奨プログラムの対象ではありません。何かが壊れたときにソースを読む時間を予算に入れてください。
AX の語彙
Enter キーまたはスペースキーでカードを裏返します。左右の矢印キーでカードを移動できます。用語を表示しました。
1 / 8

理解度チェック

0/6
  1. 独自の ENTRYPOINT を持つ spec.image を指定しました。AX は PID 1 として何を実行しますか?
  2. エージェントがステータス 1 で終了しました。ax get task は何を表示しますか?
  3. ax resume の後、エージェントがすべてのリポジトリを再クローンします。なぜですか?
  4. ax ssh が Task への接続を拒否します。最も可能性の高い原因は?
  5. アイドル状態のエージェントをストレージにスナップショットし、ウォームなワーカー上で復元することを実際に実装しているのはどのレイヤーですか?
  6. 2026年6月のチュートリアルが、トラジェクトリを分岐するために ax fork を実行するよう指示しています。何を予期すべきですか?

出典と参考資料​

次に読む​