OpenAI Agents SDK Review: Agents, Handoffs and Approvals [WTF Radar]

Scorecard for the OpenAI Agents SDK on a dark navy background

The OpenAI Agents SDK is a lightweight runner for agents, tools, handoffs and guardrails in Python and TypeScript. How its loop and approvals work, tracing, model support, and the alternatives.

The OpenAI Agents SDK keeps the agent loop small: a runner, agents, tools, handoffs and guardrails. Its strongest feature for production is an approval pause that turns into a serialisable state you can resume hours later.

Key Takeaways

  • A small set of primitives. — Agents, tools, handoffs, guardrails and sessions, in Python (openai-agents) and TypeScript (@openai/agents). The runner loops until an agent produces a final output.
  • Approvals that survive a pause. — Tools marked needs_approval interrupt the run; the run state can be serialised, stored, approved or rejected later, and resumed.
  • OpenAI-first. — Tracing exports to OpenAI by default. Other model providers work through LiteLLM and any-llm adapters that the docs call best-effort and beta.

What the OpenAI Agents SDK does

The runner calls the model for the current agent. If the output is final, the run ends; if the model requests a handoff, the runner switches agent; if it requests tools, the runner executes them and loops (running agents). max_turns bounds the loop and raises MaxTurnsExceeded. Input and output guardrails raise tripwire exceptions when they fire. Conversation state can live in an SDK session, in OpenAI's Conversations API, or in your own code.

Approvals are per tool. Tools with needs_approval pause the run and return interruptions; you approve or reject each, and resume from a RunState that can be serialised to JSON (human-in-the-loop docs). The docs warn that snapshots are not authenticated and that approval "does not guarantee exactly-once execution". Hosted tools include web search, file search, a code interpreter and hosted MCP (tools).

Scorecard: 15/20

CriterionScoreWhy
Loop control4/5max_turns with MaxTurnsExceeded and error handlers, input and output guardrails; no spend cap.
Human-in-the-loop and durability4/5needs_approval per tool, serialisable RunState, sessions; durable step execution is up to you.
Observability4/5Tracing on by default with workflow, trace and group IDs; custom processors for other backends.
Portability3/5Non-OpenAI models via beta adapters; hosted tools need OpenAI's Responses API.

Pricing, licensing and model support

The SDK is free and MIT-licensed (openai-agents 0.24.0 on PyPI on November 3, 2026); you pay for model and hosted-tool usage. The Responses API is the recommended path. Other providers work through a custom ModelProvider, an OpenAI-compatible endpoint, or the LiteLLM and any-llm adapters, which the models docs call best-effort and beta. Traces upload to OpenAI by default; without an OpenAI key you disable tracing or add your own trace processor.

Who it fits, and who should look elsewhere

  • Fits: teams on OpenAI models building multi-agent systems where a triage agent hands work to specialists, with approval gates on sensitive tools and tracing from day one.
  • Look elsewhere: if you need a dollar cap on runs and built-in file and shell tools (Claude Agent SDK), or per-step crash-safe checkpoints and first-class support for any model (LangGraph).

OpenAI Agents SDK alternatives

  • Claude Agent SDK: Claude Code's harness with built-in tools, layered permissions and spend caps.
  • LangGraph: model-agnostic state graphs with per-step checkpoints and interrupts.
  • CrewAI, AutoGen and others: see the full ranking.

Sources

What is the OpenAI Agents SDK?

The OpenAI Agents SDK is OpenAI's open-source framework for building agents from a few primitives: agents with instructions and tools, handoffs between agents, guardrails on inputs and outputs, and sessions for conversation history. It is available for Python and TypeScript and is MIT-licensed.

Does the OpenAI Agents SDK support human-in-the-loop?

Yes. Set needs_approval on a tool, and the run pauses with interruptions you approve or reject. You can convert the result to a RunState, serialise it, and resume later. OpenAI notes that approval does not guarantee exactly-once execution, so tools with side effects need idempotency keys.

Can the OpenAI Agents SDK use Claude or other models?

Yes, through a custom model provider, an OpenAI-compatible endpoint, or the LiteLLM and any-llm adapters, which the docs describe as best-effort and beta. Hosted tools such as web search and file search need OpenAI's Responses API.

How do you limit how long an OpenAI agent runs?

Pass max_turns to the runner. When the run exceeds it, the SDK raises MaxTurnsExceeded, or you can register an error handler for max_turns that returns a fallback. There is no built-in spend cap, so track usage in your own code.

Explore More

Ready to Find the Right AI Tools?

Browse our data-driven rankings to find the best AI tools for your team.