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

OpenAI Agents API vs Claude Managed Agents: ホスト型エージェントループの比較

上級
What you'll learn
  • 2 つのスタックを同じ 4 つのプリミティブ — エージェント、環境、セッション、イベント — に対応付け、各ベンダーがどこにつまみを置いたかを知る
  • 両側で最小の create-session 呼び出しを書き、どのフィールドがエージェントに属し、どれがセッションに属するかを知る
  • 実務で異なる点を比較する: 権限モード、シークレットの置き場所、ハード予算、ネットワークポリシー、データレジデンシー、サンドボックスの請求
  • 「自動コンパクション」と「ツール検索」がコンテキストとキャッシュに実際に何をするのか、そして両側の SSE ストリームに再接続戦略が必要な理由を理解する
  • ワークロードごとにランタイムを選ぶ: Agents API、Managed Agents、Responses/Messages API 上の自前ループ、または Agents SDK / Claude Agent SDK

2 年間、「エージェントループ」— モデルを呼び、ツールを実行し、結果を追加し、繰り返し、満杯になったらコンパクションする — は、どのチームも作り直すものでした。Anthropic は 2026 年 4 月 8 日に Managed Agents でそれをサーバー側に移しました。2026 年 9 月 10 日、OpenAI は Agents API パブリックベータで同じことを行いました。自らの言葉で言えば、1 つの API 呼び出しの背後にある Codex ハーネスです。7 月の Responses マルチエージェントベータを使ったことがあれば、これはその一段上の層です。「モデルが 1 つのリクエスト内でサブエージェントを展開する」ではなく、「OpenAI がファイルシステム付きでエージェント全体を何時間も生かしておく」のです。

2 つの製品は今、驚くほど似て見えます。このページは実際のリクエストの形とともに両者を並べ、紙幅の大半を異なる点に費やします。なぜなら、そこがあなたのエージェントに本番の認証情報を任せられるかどうかを決める場所だからです。

同じ 4 つのプリミティブ、2 つの語彙​

概念OpenAI Agents APIClaude Managed Agents
定義agent(model、instructions、tools、MCP サーバー、multi_agent)— 各セッションにインラインAgent オブジェクト。POST /v1/agents で永続化・バージョン管理され、セッションは id で参照する
ツールの実行場所environment — openai_hosted または self_hostedEnvironment オブジェクト — cloud または self_hosted
動いているものsession — 永続的、再開可能、数時間から数日Session — 永続的、イベントをストリームし、エージェントのバージョンに固定される
ワイヤevents + items。ストリームまたは webhookevents。/v1/sessions/{id}/events/stream の SSE ストリーム
ベータゲートヘッダー OpenAI-Beta: agents=v1ヘッダー managed-agents-2026-04-01
セルフホストワーカーcodex exec-server が制限付き executor キーで WebSocket 経由にダイヤルアウトEnvironmentWorker.run() または environment キー付きの ant beta:worker poll

★ 他のすべてを形作る唯一の構造的な違い: OpenAI はエージェント定義をセッションにインラインで置き、Anthropic はそれをファーストクラスのバージョン管理されたオブジェクトにしている。 Anthropic 側で sessions.create() に model、system、tools を渡している自分に気づいたら、それは逆です。それらは agents.create() に属し、実行中のセッションは開始時のバージョンに固定されたままです。OpenAI 側には整理すべきエージェントレジストリはありませんが、400 個の実行中セッションのどれが先週の instructions で動いているかを教えてくれるものもありません。

各側での最小の呼び出し​

OpenAI、Python、ホスト型サンドボックス、ストリーミング:

from openai import OpenAI

with OpenAI() as client:
with client.beta.agents.sessions.create(
agent={
"model": "gpt-6-astra",
"instructions": "Write clean code, run it, and report the actual output.",
"tools": [{"type": "web_search"}],
"multi_agent": {"enabled": True, "max_concurrent_subagents": 3},
},
environment={
"type": "openai_hosted",
"packages": {"python": ["pandas==2.2.3"]},
"network_policy": {"access": "restricted", "allowed_domains": ["pypi.org", "files.pythonhosted.org"]},
},
input="Create tree.py that prints a readable tree of /workspace, run it, paste the output.",
stream=True,
) as events:
for event in events:
print(event.to_json(indent=None), flush=True)

Anthropic は、エージェントが独立したオブジェクトなので 2 回の呼び出し:

import anthropic

client = anthropic.Anthropic()

agent = client.beta.agents.create(
model="claude-fable-5-1",
system="Write clean code, run it, and report the actual output.",
tools=[{
"type": "agent_toolset_20260401",
"configs": [{"name": "web_fetch", "allowed_domains": ["pypi.org"]}],
}],
permission_policy={"mode": "auto"},
)

session = client.beta.sessions.create(
agent=agent.id,
environment_id="env_...",
budget={"type": "limit", "max_list_cost": {"amount": "500", "currency": "USD"}},
)
# then stream GET /v1/sessions/{id}/events/stream and send user events

どちらも、ループ、コンパクション、リトライロジック、サンドボックスのプロビジョニングを省いてくれます。どちらもトークンに加えてサンドボックスにかかる費用を請求します。ここからが違いです。

異なる点​

1. 権限: OpenAI は API 層に(まだ)ない。Anthropic には 3 つのモードがある​

Managed Agents はエージェントごと、MCP ツールセットごとに permission policy を備え、3 つのモードがあります。always_allow(エージェント自身のツールのデフォルト)、always_ask(MCP ツールセットのデフォルト — クライアントが user.tool_confirmation を送るまで、セッションは呼び出しのたびに一時停止する)、そして 2026 年 9 月 10 日以降の auto です。auto では、サーバーが個々の呼び出しごとに — ツール、その呼び出しの入力、それまでのセッション — を run、deny、pending_approval に分類します。同じツールへの 2 回の呼び出しが異なる判定を受けることもあり、すべてのイベントに evaluated_permission フィールドが付き、クライアントは拒否を覆せません(拒否された呼び出しへの確認は 400 を返します)。

Agents API にはまだ同等のものがありません。手元のレバーは、ツールリスト、ネットワークポリシー、MCP サーバー認証です。ある呼び出しを人間がゲートしなければならないなら、自前のイベントループに組み込むか、代わりに Agents SDK を使います。OpenAI のドキュメントが「approvals」について指し示すのはそちらです。

2. シークレット: vault 対環境変数​

「エージェントはどうやって認証付き MCP サーバーを呼ぶのか」に対する Anthropic の答えは vault です。エージェントの mcp_servers エントリは {type, name, url} だけを宣言し、認証情報(自動リフレッシュ付きの mcp_oauth、static_bearer、または environment_variable)はセッション作成時にアタッチされる vault に置かれ、egress 時に置換されるため、モデルは一度もそれを目にしません。

OpenAI のホスト型サンドボックスは文字列変数の env マップを受け取り、いくつかの予約名(PATH、CODEX_*、OPENAI_API_KEY)を拒否します。そこに置いた他のものはすべて、エージェントが実行するコードから読めます。毎時ローテーションするビルドトークンならそれで構いませんが、顧客の OAuth リフレッシュトークンを置く場所としては間違っています。セルフホスト環境については、executor の制限付きキーは environment の接続だけができ、漏洩しても API の他の部分は呼べません。これは正しい設計であり、真似する価値があります。

3. ハード予算 対 自前のメーター​

Managed Agents はセッションにドル建ての予算を受け付けます。到達するとセッションは budget_reached で一時停止し、上限を引き上げるか撤廃するまで settle イベントしか受け付けません。Deployment(スケジュールされたセッション)も予算を取ります。セッション予算を参照してください。

Agents API には、ローンチ時のドキュメントにセッションごとの支出上限がありません。usage 付きのストリーミングイベントとコンテナ時間が得られ、天井は自分で設定します。暴走ループでは、「5 ドルで一時停止」と「請求書で気づく」の違いになります。

4. ネットワークポリシー: 両方にあるが、層が異なる​

OpenAI のホスト型サンドボックスには 3 つの状態を持つ network_policy があります。enabled(テンプレートを継承しない限りデフォルト)、disabled、そして 1〜100 個の完全一致ホスト名の allowed_domains リストを持つ restricted です。ワイルドカードなし、ポートなし、パスなしで、リダイレクト先とサブドメインはそれぞれ独自のエントリが必要です。ドキュメントからの 2 つの落とし穴: stdio MCP サーバーは現在 enabled を必要とし、保存済みの environment_template_id はデフォルトをネットワークなしに反転させます。

Anthropic は代わりにツール層で制限します。web_search と web_fetch のツール設定にある allowed_domains / blocked_domains / max_content_tokens で、環境にではありません。Bash ツールの egress は環境のネットワーク設定に従います。完全なマトリクスはドメイン制限を参照してください。GemStuffer の教訓が「egress はプロンプトではなくネットワークで強制せよ」なら、OpenAI の restricted ポリシーはより文字通りの実装で、Anthropic のものはツールごとに考えやすい実装です。

5. データレジデンシーと保持​

Agents API ベータはデータレジデンシーが US のみで、Zero Data Retention をサポートしません。さらに明示的に、セルフホストサンドボックスを使ってもセッションは ZDR 対象になりません。Managed Agents では、エージェントまたはセッションごとの model.inference_geo で推論の実行場所を固定できます。規制対象のワークロードでは、これは今日において決定的な要素であり、些細な違いではありません。

6. サンドボックスのコスト​

OpenAI のホスト型サンドボックスはトークンとは別に、標準コンテナレートで課金されます。分単位で 5 分の最低課金があり、ローンチ日の報道によれば、1 GB コンテナで 20 分あたり約 0.03 ドルから 64 GB で 1.92 ドル(1 時間あたり約 0.09 ドルから 5.76 ドル)です。アイドル状態のサンドボックスはアクティビティやキープアライブなしで 1 時間後に削除され、このタイムアウトは設定変更できません。 /workspace/outputs 配下のファイルはターン完了時に不変のアーティファクトとして公開され、サンドボックスより長く残ります。Anthropic のクラウド環境はセッションごとに 1 コンテナで、トークンに加えてコンピュートとして課金されます。この段落ではなく現在の料金ページを確認してください。

OpenAI のアナウンススレッドの下で開発者が最初に書いたのは、ループでサンドボックスを立ち上げる前にコンテナコストを計算せよという警告でした。文字通りに受け取ってください。16 GB イメージで 6 つのサブエージェントを展開すれば、コンテナは 6 つです。

誰もが尋ねる 2 つの機能​

自動コンパクション。 両方のランタイムは、セッションが上限に近づくと以前のコンテキストを要約するので、要約器を書かなくてもセッションを何時間も動かせます。どちらもしてくれないのは、正しいものを残すことです。コンパクションをまたいで重要な事実があるなら、要約を信頼するのではなく、ワークスペースのファイル(OpenAI)やメモリストア(Anthropic)に書いてください。長時間実行エージェントのハーネスのハーネスパターンはそのまま適用できます。

ツール検索とプログラマティックツール呼び出し(OpenAI)。ツール検索は、すべてのスキーマをプロンプトに詰め込む代わりに、ツール定義をオンデマンドで読み込みます。数十の MCP ツールがあるときにキャッシュされたプレフィックスを安定に保てます。{"type": "programmatic_tool_calling"} で有効にするプログラマティックツール呼び出しは、モデルが複数のツールを呼び、ループし、結果をフィルタリングするコードを書いてから、何かをコンテキストに戻すことを可能にします。Anthropic の同等物は Bash とファイルのツールセットで、モデルはただスクリプトを書きます。同じ効果、より少ない儀式、より少ない構造です。

サブエージェント。 OpenAI: multi_agent.enabled と、コーディネーターを除いてデフォルト 6 の max_concurrent_subagents。サブエージェントは独自のコンテキストを持ち、MCP ツール、認証情報、ファイルを継承しますが、function tool は使えず、調整イベントはメッセージ内容を省略することがあります。ストリームでサブエージェントの完全なトランスクリプトは見られません。Anthropic: Managed Agents は対称的なつまみを公開していません。セッションを組み合わせるか、クライアント側で Claude Agent SDK のサブエージェントを使います。ネイティブマルチエージェントのページには、今も当てはまるコスト計算があります。

ドキュメントからの 6 つの落とし穴、両側​

Guided walkthrough1 of 6
  1. OpenAI: ストリームが切断されたら、リトライの前にセッションと保存された items を取得する。ターンの完了はすべてのツールが成功したことを意味しない。agent.session.turn.completed を探す。Anthropic: SSE ストリームにリプレイはない。切断時は GET /v1/sessions/{id}/events を呼び、イベント id で重複排除してから再接続する。

どの仕事にどのランタイムか​

OpenAI 自身のドキュメントは今、選択を 3 つに分けています。OpenAI にエージェントを管理させ進捗を保存させるなら Agents API、アプリ内でデプロイ、ストレージ、承認を制御する必要があるなら Agents SDK、モデルと直接やり取りするなら Responses API。Anthropic の分け方は Managed Agents 対 Claude Agent SDK 対 素の Messages API です。ワークロードに対応付けると:

ワークロード選択理由
使い捨てサンドボックスでの長いコーディング/データタスク、数分から数時間、顧客のシークレットなしどちらのホスト型ランタイムでも両方がまさにこのために作られた。モデルと、MCP サーバーが既にどのエコシステムにあるかで選ぶ
エージェントが顧客の認証付き MCP サーバーに触れるManaged Agentsvault が認証情報をサンドボックスの外に保つ。auto 権限がすべてを一時停止せずに危険な呼び出しをゲートする
自社の VPC 内で自社のコンピュートで動かす必要があるどちらのセルフホストモードでも同じ形: 制限付きキーを持つアウトバウンドワーカー。OpenAI には 9 つのパートナーサンドボックスが接続済み(Blaxel、Cloudflare、Daytona、DigitalOcean、E2B、Modal、Oracle、Runloop、Vercel)
規制対象データ、EU レジデンシーまたは ZDR が必要Managed Agents、または自前のループAgents API ベータは US のみで ZDR 対象外
幅広い調査の展開、多数の独立した読み取りmulti_agent 付きの Agents API同時実行上限付きのネイティブサブエージェント。クライアント側オーケストレーションより書くのが安い
特定のアクションに人間の承認Managed Agents の auto / always_ask、または Agents SDKAgents API には今日、API 層に承認プリミティブがない
エージェントがしたことをすべて見てリプレイする必要があるResponses / Messages 上の自前ループ両方のホスト型ランタイムはトランスクリプトの一部を要約または省略する

理解度チェック​

Check yourself

0/6
  1. エージェント定義が、セッションが id で参照する永続化・バージョン管理されたオブジェクトであるのはどちら側か?
  2. Managed Agents の「auto」権限モードは何をするか?
  3. OpenAI ホスト型サンドボックスで network_policy.access を「restricted」にし、allowed_domains: ['github.com'] とした。エージェントが api.github.com を取得するとどうなるか?
  4. ローンチ時点の Agents API ベータについて正しいものはどれか?
  5. Agents API の max_concurrent_subagents のデフォルトは何で、サブエージェントができないことは何か?
  6. モデルが決して目にしないよう、顧客の OAuth リフレッシュトークンはどこに置くべきか?

出典と参考資料​

次のステップ​