Gemini API で antigravity-preview-05-2026 という Managed Agent が公開プレビューになりました。サンドボックス内で計画・推論・コード実行・ファイル操作・ウェブ閲覧まで自律でこなせます。最初に試したとき、個人開発でこの種のツールを長く使ってきた私はこれを「常駐させて何でも任せる相棒」として使おうとして、すぐに方針を変えました。常駐させると、コストも権限も状態も、すべてが少しずつ積み上がって管理不能になっていくと気づいたからです。
そこで切り替えたのが、1 回のリクエストで生まれて、結果を返したら捨てるという使い方です。永続的なアシスタントではなく、使い捨てのワーカーとして扱う。この発想にしてから、Managed Agent はむしろ扱いやすくなりました。なぜ使い捨てが向いているのか、どう実装するのかを整理します。
なぜ「使い捨て」が外部入力に向くのか
Managed Agent の魅力は、自分の環境から隔離されたサンドボックスで動く点です。ということは、信頼できない外部入力を処理させるのに最適だということです。
たとえば、ユーザーから送られてきた URL の内容を要約する、外部 API から取った素性の知れない JSON を整形する——こうした処理を自分の本番環境で直接動かすのは怖いものです。サンドボックスで動く使い捨てワーカーに任せれば、何が起きてもその場限りで、本番に痕跡が残りません。
逆に、使い捨てにせず常駐させると、前のリクエストの状態が次に漏れる懸念が出てきます。外部入力を扱うほど、状態を持たないことが安全装置になります。私はこの「状態を持たせない」ことを、機能の制約ではなく設計上の利点として捉えるようにしています。
1 リクエストに上限を閉じ込める
使い捨てワーカーの肝は、1 回の起動にコストと時間の上限を必ず付けることです。常駐エージェントだと上限を後から足すのが難しいのですが、使い捨てなら起動のたびに明示できます。
from google import genai
client = genai.Client()
def run_ephemeral(task_prompt: str, untrusted_input: str) -> dict:
# 1 リクエスト = 1 ワーカー。終わったら参照を捨てる
resp = client.agents.run(
model="antigravity-preview-05-2026",
instructions=task_prompt,
input=untrusted_input,
config={
"max_cost_usd": 0.20, # このワーカーが使ってよい上限
"timeout_s": 120, # 暴走を時間で止める
"tools": ["web_fetch"], # 必要な道具だけ渡す(最小権限)
"sandbox": "isolated", # 本番ファイルへのアクセスを断つ
},
)
return {"ok": resp.status == "completed", "output": resp.output}ここで効くのは max_cost_usd と timeout_s の二段構えです。コスト上限はトークンの暴走を、タイムアウトは無限ループや待ち続ける状態を止めます。私の運用では、この二つを付けていなかった頃は月に数回、想定の数倍のコストが出るリクエストがありましたが、上限を入れてからはゼロになりました。
tools を必要なものだけに絞るのも重要です。Web 取得しかしないワーカーにファイル書き込みを渡す理由はありません。渡さなければ、たとえ指示が乗っ取られても被害が広がりません。