1回の API 呼び出しで、推論・ツール使用・コード実行までを隔離された Linux 環境で済ませてくれる仕組み。I/O 2026 の発表で概要は知っていたものの、実際に触ってみると「手元のエージェント運用と役割が重なるのでは」という感触と、「いや、明確に別物として扱うべきです」という感触が交互にやってきました。
Antigravity 2.0 は、デスクトップアプリ・CLI・SDK・Managed Agents API・エンタープライズ経路の5つのサーフェスで構成されています。前の3つが「手元のマシンでエージェントを動かす」ための入口なのに対して、Managed Agents だけは性質が異なります。エージェントの実行環境そのものを Google 側のインフラに置く経路です。
呼び出しは1回。その向こうで Gemini 3.5 Flash が推論し、必要に応じてツールを使い、隔離された Linux サンドボックスでコードを実行して、成果物を返してくれます。
これを自前で組もうとすると、Docker コンテナの準備、実行ごとのクリーンアップ、権限分離、ネットワーク制限の設計が全部こちらの仕事になります。実際に私自身、記事公開パイプラインの隔離実行を自前のコンテナで運用していた時期がありますが、本体の処理よりも「環境を壊さない・漏らさない」ための周辺コードの方が大きくなりました。その周辺一式を API の向こう側へ置けるのが、この仕組みの本質と感じています。
一方で、手元のリポジトリを深く読みながら対話的に進める作業には向きません。そこは後半で整理します。
最小構成で起動する:エージェント実行は「リクエスト」ではなく「ジョブ」
最初に意識を切り替えるべき点がここでした。generateContent のような同期呼び出しではなく、Managed Agents の実行は非同期のジョブです。投げると run の ID が返り、状態が QUEUED → RUNNING → SUCCEEDED(または FAILED / TIMED_OUT)と遷移していきます。
result = client.agents.runs.get(run.id)if result.state == "SUCCEEDED": print(result.output_text) # エージェントの最終応答 for artifact in result.artifacts: data = client.agents.artifacts.download(artifact.id) with open(artifact.filename, "wb") as f: f.write(data) print(f"saved: {artifact.filename}")elif result.state == "FAILED": print(result.error.message)
ここで一つ注意点があります。サンドボックスは実行終了とともに破棄され、アーティファクトの保持にも期限があります。プレビューでの私の観測では、48時間を過ぎた run のアーティファクトは取得できなくなりました。「回収はあとで」と考えていると成果物ごと消えます。run の完了を検知したら、その場でダウンロードまで済ませる設計を推奨します。
私自身の振り分けでは、App Store と Google Play 向けのリリースノート整形、AdMob レポートの月次集計のような「入力も出力もファイルで閉じる定型ジョブ」を Managed Agents へ移しました。個人開発で複数のアプリとサイトを並行して見ていると、この種の定型ジョブが静かに溜まっていきます。逆に、コードベースの修正やレビューは引き続き手元の agy 側。境界線を引いてみると、どちらの道具も置き換えではなく分担なのだと腑に落ちました。