# Agent platforms — OpenAI Agents API · Claude Managed Agents · xAI Responses loop + Grok Build · Gemini Interactions agents **Status:** endpoint inventory and statuses from `generated/endpoints.json` (OpenAI `agents-platform/agents` 34 + `vaults` 9 + `chatkit` 6 + `workspace-agents` 2; Anthropic `managed-agents` 96; xAI `responses` 5 + `skills` 5 (ACCOUNT_RESTRICTED); Gemini `interactions` 9 + `agents` 4 + `environments` 7 + `triggers` 7 + `credentials` 5 + `webhooks` 7), events from `generated/streaming-events.json` and `generated/webhook-events.json`, parameters from `generated/parameters.json` (OpenAI agents 396 rows, Anthropic managed-agents 1,122, xAI `POST /v1/responses` 281, Gemini `POST /v1beta/interactions` 147, environments 14). Live: OpenAI 23/47 operations `LIVE_VERIFIED` (`gpt-5.6-luna`); Anthropic 20/96 (`claude-haiku-4-5-20251001`); xAI Responses agentic loop with web search / code interpreter / MCP `LIVE_VERIFIED` (`grok-4.3`); Gemini Interactions create/get/cancel/delete + Deep Research background run + environments CRUD `LIVE_VERIFIED`, custom agents / triggers / credentials / webhooks not tested. OpenAI and Anthropic are **BETA**; Gemini agents are **PREVIEW**; xAI's loop is GA with a **BETA** multi-agent model. **Sources:** https://developers.openai.com/api/docs/guides/agents-api/overview · https://platform.claude.com/docs/en/managed-agents/overview · https://docs.x.ai/developers/tools/overview · https://docs.x.ai/build (Grok Build) · https://ai.google.dev/gemini-api/docs/interactions · https://ai.google.dev/gemini-api/docs/deep-research · https://ai.google.dev/gemini-api/docs/antigravity · docs/openai/agents-api.md · docs/anthropic/managed-agents.md · docs/xai/responses.md · docs/xai/grok-build.md · docs/gemini/interactions-api.md **Last verified:** 2026-09-18 ## 1. Positioning | | OpenAI Agents API | Claude Managed Agents | xAI Responses agentic loop (+ Grok Build) | Gemini Interactions agents | |---|---|---|---|---| | What runs where | OpenAI hosts the **Codex harness** (model + tool loop + compaction + recovery); you supply tools, input and optionally your own execution environment | Anthropic hosts a **pre-built agent harness** (model loop, built-in tools in a Linux sandbox, compaction, persisted history); you handle only `custom` tools | **No agent resource.** One `POST /v1/responses` runs the model and its server-side tools (web/x search, code interpreter, collections, MCP, image generation) in a loop bounded by `max_turns`; the stored response is the session. **Grok Build** (`grok` CLI, BETA) is a client-side coding harness with MCP, hooks, skills, subagents and a local sandbox | Google hosts **agents as models**: `POST /v1beta/interactions {agent: …}` runs Deep Research (research loop with search/URL/code tools, background) or Antigravity (coding agent in a Linux sandbox) or a **custom managed agent** you define with `POST /v1beta/agents`; environments, credentials, triggers, webhooks are separate resources | | Gate | `OpenAI-Beta: agents=v1`; restricted keys need `api.agents.*` scopes | `anthropic-beta: managed-agents-2026-04-01` (+ `agent-memory-2026-07-22`, `dreaming-2026-04-21`, `mcp-tunnels-2026-06-22`) | none (no beta headers); `grok-4.20-multi-agent-0309` BETA; Skills API 404 (ACCOUNT_RESTRICTED); `tool_search` alpha (403) | `/v1beta` path; agents `PREVIEW`; `GET /v1beta/interactions` (list) 404; `/v1/interactions` GA but UNVERIFIED | | Models | Responses-capable current models; live `gpt-5.4-nano` rejected, `gpt-5.6-luna` accepted | Claude 4.5+ (Fable 5.1/5, Sonnet 5, Opus 5/4.8/4.7/4.6/4.5, Sonnet 4.6, Haiku 4.5) | any Grok text model (`grok-4.6`, `grok-4.5`, `grok-4.3`, 4.20 ids, `grok-build-0.1`); multi-agent model for fan-out | Deep Research agents (`deep-research-preview-04-2026`, `-max-`, `-pro-preview-12-2025`), Antigravity (`antigravity-preview-09-2026`, model `gemini-3.8-flash` default / 3.7 / 3.6 / 3.5 Flash / 3.5 Flash-Lite), custom agents built on `base_agent: antigravity-preview-09-2026` | | Billing | model tokens at Responses rates + hosted-tool rates + container rates; harness base instructions ≈ 6k input tokens per turn observed | model tokens at list price + **$0.08 per session-hour** + $10 / 1k web searches | model tokens (incl. intermediate steps and reasoning) + per-call tool fees ($5/1k web/x/code, $2.50/1k collections, $10/1k attachments); `usage.cost_in_usd_ticks` per call; $0.05 fee per pre-generation policy violation | model inference at list rates incl. intermediate/reasoning tokens + tool fees; **sandbox compute unbilled during preview**; Deep Research est. $1–3 / $3–7 per task; Antigravity est. $0.25–3.25 per interaction | | Data retention | server-side sessions/items; hosted sandbox ~1 h idle | stateful by design → **not ZDR / HIPAA eligible**; sandbox state 30 days | stored responses 30 days (`store: true`; ZDR teams cannot store) | interactions 55 days paid / 1 day free (`store: false` = stateless, no id); environments idle 15 min, deleted 7 days | | Also on | api.openai.com only | Claude API and Claude Platform on AWS | api.x.ai (+ Vertex Model Garden / Foundry for the model, not the loop) | Gemini Developer API only (not Vertex AI) | ## 2. Resource model side by side | Concept | OpenAI | Anthropic | xAI | Gemini | Notes | |---|---|---|---|---|---| | Agent definition | `POST /v1/agents` (`model`, `name`, `instructions`, `reasoning`, `text`, `service_tier`, `tools[]` ≤2000, `multi_agent`, `metadata`); not versioned | `POST /v1/agents` (`name`*, `model`*, `system` ≤100k, `tools[]` ≤128, `mcp_servers[]` ≤20, `skills[]`, `multiagent`); **versioned**; archive | none — the request body (`model`, `instructions`, `tools[]`, `max_turns`) is the definition; Grok Build stores agent config in `~/.grok/config.toml` | `POST /v1beta/agents {id, base_agent, agent_config, system_instruction, tools[], base_environment}` (≤1,000/project, no versioning, reserved id prefixes); built-in agents need no definition | | | Execution environment | per session `environment: none \| openai_hosted{…} \| self_hosted{…}`; **templates** `/v1/agents/environments/templates` | `POST /v1/environments` (`cloud` sandbox Ubuntu 24.04, 8 GB RAM, 10 GB disk \| `self_hosted` work queue); reusable | none (Python code interpreter has no container object); `shell {environment: local}` runs on your machine | `POST /v1beta/environments {sources[] (repository ≤500 MB \| gcs ≤2 GB \| inline), network (unrestricted \| disabled \| allowlist + credentials), from_environment}`; Antigravity sandbox 4 vCPU / 16 GB (Python 3.12, Node 22); referenced by `interaction.environment {environment_id}` | | | Session | `POST /v1/agents/sessions {agent\|agent_id, environment*, input, stream, vault_ids}` → 201 `agent.session`; statuses `idle → in_progress → requires_action → …` | `POST /v1/sessions {agent*, environment_id*, initial_events, resources[], vault_ids[], budget, title}` → 200 `session`; `idle`/`running`/`rescheduling`/`terminated` | `POST /v1/responses {…, store: true}` → `response` (`completed \| in_progress \| incomplete`); continue with `previous_response_id` | `POST /v1beta/interactions {agent\|model, input, background, store, environment, tools, webhook_config}` → `interaction` (`queued`, `in_progress`, `requires_action`, `completed`, `incomplete`, `failed`, `cancelled`); chain with `previous_interaction_id` | | | Unit of work | **turn** (`GET …/turns[/{id}]`) | model requests (spans) | one `POST /v1/responses` (up to `max_turns` server-side iterations) | one interaction (Deep Research runs ≤60 min in background) | | | History | **items** (`GET …/items`) | **events** (`GET …/events`) | `GET /v1/responses/{id}/input_items` + `output[]` | `GET /v1beta/interactions/{id}` → `steps[]` (`user_input`, `thought`, `model_output`, `function_call/result`, `*_call/*_result`) | | | Live stream | SSE on `POST /sessions {stream:true}` or `GET …/events?stream=true`; 31 events | `GET /v1/sessions/{id}/events/stream`; 37 events | the Responses SSE stream (24 events) or `wss://api.x.ai/v1/responses` | `stream: true` → 15 event types; resume `GET …?stream=true&last_event_id=` | | | Client → server events | `agent.session.input.message \| tool_result \| cancel` | `user.message`, `user.interrupt`, `user.tool_confirmation`, `user.custom_tool_result`, `user.tool_result`, `user.define_outcome`, `system.message` | a new `POST /v1/responses` (`function_call_output`, `shell_call_output`, user message) | a new `POST /v1beta/interactions` with `previous_interaction_id` (`function_result` steps, text); `POST …/cancel` | | | Tool execution | function tools → `required_actions[]`; MCP; `web_search`; `tool_search`; `programmatic_tool_calling`; sandbox shell | built-in `agent_toolset_20260401` in the sandbox; `custom` tools; MCP via `mcp_servers` + vaults; `permission_policy` | server tools run inside the loop; `function`/`shell` calls end the request; MCP without approvals | Deep Research default tools `google_search`, `url_context`, `code_execution` (+ `mcp_server`, `file_search`); Antigravity built-ins (`code_execution` bash/python/node, `view_file`, `write_to_file`, `replace_file_content`, `list_dir`, `find_by_name`, `grep_search`) + custom `function` tools; hooks `.agents/hooks.json` | | | Skills | `environment.skills[]` ≤200 | `agent.skills[]` ≤500 | `shell.environment.skills[]` (Skills API 404); Grok Build loads skills locally | custom agents mount `.agents/skills//SKILL.md` from environment sources | | | Files in / out | `files[]`, `POST /v1/agents/environments/{id}/files`; **artifacts** | `resources[] {type: file, mount_path}`; outputs → Files API `scope_id` | `input_file` (attachment search $10/1k); outputs via `include` / Files API | environment `sources[]`, `PUT /upload/v1beta/environments/{env}/files/{path}` (≤2 GiB); outputs `GET …/files/{path}?alt=media`; Deep Research reports as `model_output` steps | | | Secrets | **Vaults** + `mcp.credential_id` | **Vaults** (`mcp_oauth`, `environment_variable`) | inline `authorization`/`headers` on the `mcp` tool | **Credentials** (`bearer_token`, `oauth2`, `environment_variable`; `injection_location`, `trusted_domains`) referenced by environment network allowlists | | | Multi-agent | `multi_agent.enabled`; subagents `/sessions/{id}/subagents…` | `multiagent {coordinator, agents[]}`; threads ≤25 | `grok-4.20-multi-agent-0309`: 4 or 16 agents inside one call (`reasoning.effort`) | none for custom agents (docs); Deep Research orchestrates internally | | | Budgets | none (`session_budget_exceeded` error exists) | `budget {max_list_cost}`; `session.budget_reached` | `max_turns` (turns) | Antigravity `agent_config.max_total_tokens` → `incomplete` | | | Quality loop | — | `user.define_outcome` → grader iterations | — | — | | | Memory | — | memory stores `/v1/memory_stores`, dreams | — | — | | | Scheduling | — | `/v1/deployments` (cron) → `/v1/deployment_runs` | — | `/v1beta/triggers {schedule, time_zone, interaction}`; `PATCH {status: paused\|active}`; `POST …/executions` | | | Private MCP | Secure MCP Tunnel (`tunnel_id`) | `/v1/tunnels` | — | — (credentials + allowlists) | | | Webhooks | `agent.session.*` via `/v1/webhook_endpoints` | 44 Managed Agents events (Console-registered) | SIP `realtime.call.incoming` only | `/v1/webhooks` (create/list/get/update/delete/rotate_secret) + per-request `webhook_config {uris[], user_metadata}`; events `interaction.completed\|failed\|cancelled\|requires_action`, `batch.succeeded\|failed`; JWKS-signed | | | Observability | items, turns, traces (404 live) | events, `session.usage`, Console viewer, `ant beta:sessions connect` | `usage.cost_in_usd_ticks`, `server_side_tool_usage_details`, `num_server_side_tools_used` | `usage {total_*_tokens, *_by_modality, grounding_tool_count[]}`, `steps[]` timeline | | | UI kit | ChatKit (Agent Builder shutdown 2026-11-30) | — | — | AI Studio (builder, free) | | ## 3. Endpoint inventory (counts from `generated/endpoints.json`) | Family | OpenAI (34 + 9 + 6 + 2) | Anthropic (96) | xAI (5 + 5) | Gemini (9 + 4 + 7 + 7 + 5 + 7) | |---|---|---|---|---| | agents | `/v1/agents[/{id}]` (5) | `/v1/agents[/{id}]`, `/archive`, `/versions` (6) | — | `/v1beta/agents[/{id}]` (4; POST/GET/GET/DELETE) | | sessions / runs | `/v1/agents/sessions…` (20) | `/v1/sessions…`, `/threads…` (19) | `POST /v1/responses`, `GET/DELETE /v1/responses/{id}`, `GET …/input_items`, `POST /v1/responses/compact` (5) | `POST /v1beta/interactions`, `GET/DELETE /v1beta/interactions/{id}`, `POST …/cancel`, `/v1/interactions…` (GA, UNVERIFIED) (9) | | environments | `/v1/agents/environments/{id}[/files]`, `/templates[/{id}]` (7) | `/v1/environments…`, `/work…` (14) | — | `/v1beta/environments[/{id}]`, `…/files/{path}`, `PUT /upload/v1beta/environments/{env}/files/{path}`, legacy `GET /v1beta/files/environment-{env}:download` (7) | | secrets | `/v1/vaults…` (9) | `/v1/vaults…` (13) | — | `/v1beta/credentials[/{id}]` (5) | | memory / dreams | — | 14 + 5 | — | — | | scheduling | — | `/v1/deployments…` (7), `/v1/deployment_runs…` (2) | — | `/v1beta/triggers[/{id}]`, `…/executions` (7) | | tunnels / profiles | — | 10 + 5 | — | — | | skills | `/v1/skills…` (11) | `/v1/skills…` (9) | `/v1/skills…` (5, all 404 → ACCOUNT_RESTRICTED) | — | | webhooks | `/v1/webhook_endpoints…` (8) | Console only | `POST /v2/phone-numbers` (SIP webhook) | `/v1/webhooks…` (7) | | UI / workspace | `/v1/chatkit/…` (6), `api.chatgpt.com/v1/workspace_agents/…` (2) | — | — | — | ## 4. The same task on all four providers — run one agentic turn and stream it ```bash # OpenAI (LIVE_VERIFIED shapes; header OpenAI-Beta: agents=v1) curl https://api.openai.com/v1/agents -H "Authorization: Bearer $OPENAI_API_KEY" -H "OpenAI-Beta: agents=v1" -H "Content-Type: application/json" \ -d '{"model":"gpt-5.6-luna","name":"atlas-demo","instructions":"Reply with OK.","reasoning":{"effort":"low"}}' curl -N https://api.openai.com/v1/agents/sessions -H "Authorization: Bearer $OPENAI_API_KEY" -H "OpenAI-Beta: agents=v1" -H "Content-Type: application/json" \ -d '{"agent_id":"agent_…","environment":{"type":"none"},"input":"Reply with OK.","stream":true}' # SSE: agent.session.created → agent.session.turn.created → …output_text.delta → agent.session.turn.completed → agent.session.idle ``` ```bash # Anthropic (LIVE_VERIFIED shapes; header anthropic-beta: managed-agents-2026-04-01) H=(-H "x-api-key: $ANTHROPIC_API_KEY" -H "anthropic-version: 2023-06-01" -H "anthropic-beta: managed-agents-2026-04-01" -H "content-type: application/json") curl https://api.anthropic.com/v1/agents "${H[@]}" -d '{"name":"atlas-demo","model":"claude-haiku-4-5-20251001","system":"Reply with OK."}' curl https://api.anthropic.com/v1/environments "${H[@]}" -d '{"name":"atlas-env","config":{"type":"cloud"}}' curl https://api.anthropic.com/v1/sessions "${H[@]}" -d '{"agent":"agent_…","environment_id":"env_…","initial_events":[{"type":"user.message","content":[{"type":"text","text":"Reply with OK."}]}]}' curl -N "https://api.anthropic.com/v1/sessions/sesn_…/events/stream" "${H[@]}" # SSE: session.status_running → span.model_request_start → agent.message → span.model_request_end → session.usage → session.status_idle ``` ```bash # xAI (LIVE_VERIFIED shapes; no agent resource — the Responses call is the agentic loop) curl -N https://api.x.ai/v1/responses -H "Authorization: Bearer $XAI_API_KEY" -H "Content-Type: application/json" \ -d '{"model":"grok-4.3","input":"What is the latest xAI release note? Reply in one line.", "tools":[{"type":"web_search"},{"type":"code_interpreter"}],"max_turns":3,"store":true,"stream":true}' # SSE: response.created → response.output_item.added(reasoning) → … → response.output_item.added(web_search_call) → response.output_item.done # → response.output_item.added(message) → response.output_text.delta… → response.completed (usage.server_side_tool_usage_details, cost_in_usd_ticks) # follow-up: POST /v1/responses {"model":"grok-4.3","previous_response_id":"resp_…","input":"Summarise in 5 words."} ``` ```bash # Gemini (LIVE_VERIFIED shapes; snake_case body; header x-goog-api-key) curl -N https://generativelanguage.googleapis.com/v1beta/interactions -H "x-goog-api-key: $GEMINI_API_KEY" -H "Content-Type: application/json" \ -d '{"model":"gemini-3.5-flash-lite","input":"Reply with OK.","tools":[{"type":"code_execution"}],"stream":true}' # SSE: interaction.created → interaction.status_update → step.start(thought) → step.delta{thought_signature} → step.stop → step.start(model_output) → step.delta{text} → step.stop → interaction.completed → done # agent run (background, LIVE_VERIFIED create → in_progress → cancel): curl https://generativelanguage.googleapis.com/v1beta/interactions -H "x-goog-api-key: $GEMINI_API_KEY" -H "Content-Type: application/json" \ -d '{"agent":"deep-research-preview-04-2026","input":"Summarise the four providers'"'"' agent APIs.","background":true,"agent_config":{"type":"deep-research","thinking_summaries":"auto"}}' # poll GET /v1beta/interactions/{id} · stop POST /v1beta/interactions/{id}/cancel ``` Follow-up input: OpenAI `POST /v1/agents/sessions/{id}/events {"events":[{"type":"agent.session.input.message","content":"…"}]}`; Anthropic `POST /v1/sessions/{id}/events {"events":[{"type":"user.message","content":[{"type":"text","text":"…"}]}]}`; xAI `POST /v1/responses {"previous_response_id":"resp_…","input":"…"}`; Gemini `POST /v1beta/interactions {"model":"…","previous_interaction_id":"v1_…","input":"…"}`. ## 5. Function-tool round trip inside a session | Step | OpenAI | Anthropic | xAI | Gemini | |---|---|---|---|---| | declare | `agent.tools: [{type: function, name, description, parameters}]` | `agent.tools: [{type: custom, name, description, input_schema}]` | `tools: [{type: function, name, description, parameters}]` on the Responses call | `tools: [{type: function, name, description, parameters}]` (Interactions) / `functionDeclarations` (generateContent); custom agents: `tools[]` in the agent definition | | call surfaces | stream `agent.session.requires_action`; `session.required_actions[{type: function_call, turn_id, call_id, name, arguments}]`; webhook `agent.session.action_required` | stream `agent.custom_tool_use {id, name, input}` then `session.status_idle {stop_reason: {type: requires_action}}`; webhook `session.requires_action` | `output[] {type: function_call, call_id, name, arguments}`; the server loop ends and the response completes | `status: requires_action`; `steps[] {type: function_call, id, name, arguments}`; stream `interaction.requires_action` (`DOCUMENTATION_INCOMPLETE`); webhook `interaction.requires_action` | | answer | `POST …/events {type: agent.session.input.tool_result, turn_id, call_id, success, output}` | `POST …/events {type: user.custom_tool_result, custom_tool_use_id, content}` | `POST /v1/responses {previous_response_id, input: [{type: function_call_output, call_id, output}]}` (fresh `max_turns`) | `POST /v1beta/interactions {previous_interaction_id, input: [{type: function_result, call_id, name, result}]}` | | approvals | MCP `require_approval` | `permission_policy: always_ask` → `user.tool_confirmation` | none | computer use `safety_decision` → `safety_acknowledgement` | | self-hosted commands | `codex exec-server` runs shell; `command_execution` items | worker claims work items, posts `user.tool_result` | `shell {environment: local}` → `shell_call` → `shell_call_output`; Grok Build runs locally | — | ## 6. Sandboxes and self-hosting | | OpenAI hosted | Anthropic cloud | Gemini environment (Antigravity / custom agents) | OpenAI self-hosted | Anthropic self-hosted | xAI | |---|---|---|---|---|---|---| | Base | `/workspace`; packages, ≤16 setup commands, network `enabled\|disabled\|restricted`, env vars | Ubuntu 24.04, 8 GB RAM, 10 GB disk, `/workspace`, `/mnt/session/{uploads,outputs}`, `/mnt/memory` | Linux, 4 vCPU / 16 GB, Python 3.12, Node 22; `sources[]` repository/GCS/inline; `network` unrestricted / disabled / allowlist (+ credentials); hooks `.agents/hooks.json` | `codex exec-server --remote …`, outbound-only, `CODEX_API_KEY` | work queue poll/ack/heartbeat/stop; `ant beta:worker`; `sk-ant-oat01-…` | no hosted sandbox for agents (code interpreter runs Python without a container object; `shell` local; Grok Build Landlock/Seatbelt sandbox on your machine) | | Lifetime | ~1 h idle | checkpointed; 30 days | idle after 15 min, deleted after 7 days; `from_environment` clones | your compute | your compute | your compute | | Outputs | artifacts from `/workspace/outputs` (≤200 MiB) | files from `/mnt/session/outputs` (Files API) | `GET /v1beta/environments/{env}/files/{path}?alt=media` (bytes or tar) | never published as artifacts | posted as tool results | `code_interpreter_call.outputs` via `include`; Files API | | Templates / reuse | `/v1/agents/environments/templates` | environments are reusable resources | `base_environment` on custom agents; `from_environment` | — | — | — | | Compute price | container rates | $0.08 / session-hour | **not billed during preview** | — | — | $5 / 1k code-interpreter calls | ## 7. Limits (documented) | Limit | OpenAI | Anthropic | xAI | Gemini | |---|---|---|---|---| | tools per agent / request | 2,000 | 128 (across toolsets); 20 MCP servers | ≤350 (Chat); MCP servers: multiple allowed, no cap documented | 512 function declarations (SDK); custom agents ≤1,000 per project | | skills | 200 per environment | 500 per session | Skills API inaccessible (404) | via environment sources (≤500 MB repo / 2 GB GCS / 1 MB inline files) | | files | 50 per create; inline 5 MiB; artifact 200 MiB | 500 per session; body 32 MB | Files 50 MB (spec) / 512 MB (guide); attachments $10/1k | environment upload ≤2 GiB per file; Files API 2 GB / 20 GB project | | concurrency | `max_concurrent_subagents` 6 | 25 threads; roster 20 | multi-agent model 4 or 16 agents; RPS 9→56 for that model | Deep Research ≤60 min per run; environments per project quota (`storage.tier: free`, 1 GiB observed) | | rate limits | none documented for Agents endpoints | create 300 / read 1,200 req/min/org | Responses share the model's RPS/TPM tiers; Batch bypasses | per-project RPM/TPM/RPD; agents not on the free tier (Deep Research `LIVE_VERIFIED` here on create/cancel) | | retention | sessions server-side; sandbox ~1 h | sandbox 30 days | stored responses 30 days | interactions 55 d paid / 1 d free; environments 7 days | | webhook delivery | Standard Webhooks retries | ≤3 attempts, 5-min freshness | HMAC-SHA256 Standard Webhooks (SIP only) | JWKS-signed; `webhook_config.uris[]` per request or `/v1/webhooks` resources | ## 8. Where the other building blocks sit | Need | OpenAI | Anthropic | xAI | Gemini | |---|---|---|---|---| | Client-side agent loop library | Agents SDK (`openai-agents`, `@openai/agents`) | Claude Agent SDK; `ant` CLI; SDK `tool_runner` | **Grok Build CLI** (`grok`, `grok -p … --output-format json`, `grok agent stdio` ACP; `api_backend = chat_completions\|responses\|messages`); xai-sdk Python; OpenAI SDK with `baseURL` | google-genai automatic function calling, `mcpToTool()`; Genkit, Firebase AI Logic, Vercel AI SDK, LangGraph/CrewAI/LlamaIndex | | Durable chat state without a harness | Conversations API + Responses | Messages (stateless) — none | stored Responses + `previous_response_id` | Interactions with `model` + `previous_interaction_id` | | Visual builder / embedded UI | Agent Builder (shutdown 2026-11-30) + ChatKit; Workspace Agents in ChatGPT | Console visual builder, session viewer | Grok Apps / Grok Bot (consumer products) | AI Studio (free), Antigravity IDE product | | Research agent product | deep-research models retired; Responses `web_search` + `background` | web search + web fetch on Messages; Managed Agents | Responses with `web_search` + `x_search` + `code_interpreter`, `max_turns` 10+ | **Deep Research agents** (`background: true`, `collaborative_planning`, `visualization`) | | Retired predecessor | Assistants API (RETIRED 2026-08-26) | — | Live Search on Chat (410); `/v1/messages` compat (deprecated) | Interactions legacy schema (`outputs`, `content.*` events) removed 2026-06-08; `antigravity-preview-05-2026` → 2026-10-05 | Related: [features](features.md) · [state-management](state-management.md) · [tool-execution](tool-execution.md) · [streaming](streaming.md) · docs/openai/agents-api.md · docs/anthropic/managed-agents.md · docs/xai/responses.md · docs/xai/grok-build.md · docs/gemini/interactions-api.md.