Changelog
OpenAI Agents SDK
Zuletzt aus offizieller Quelle geprüft:
Offizielle Changelog-Quelle öffnenDie Erfassung aus offiziellen Quellen ist begrenzt. Ältere Releases können fehlen. Diese Seite beansprucht keine vollständige Versionshistorie.
Versionshinweise ohne deutsche Übersetzung stehen im englischen Original.
Neueste Releases (63)
15. Oktober 2026
- •expose MCP annotations on converted tools (#5356) (75813f8)
- •support run-wide tool exception formatting (#5326) (8fd9a7c)
- •batch OpenAI conversation session writes within the API limit (#5334) (26345c1)
- •defer automatic compaction for pending approvals (#5363) (5eb47a5)
- •deps-dev: bump fastapi from 0.139.2 to 0.141.1 (#5312) (cdf23bd)
- •deps-dev: bump grpcio from 1.83.1 to 1.84.0 (#5310) (a85487e)
- •deps-dev: bump pymdown-extensions from 11.0.2 to 12.1 (#5314) (d9758b0)
- •deps-dev: bump pymongo from 4.18.1 to 4.18.2 (#5313) (858856f)
Mehr anzeigen (7)Weniger anzeigen
- •deps: bump boto3 from 1.42.75 to 1.43.109 (#5378) (7da6a92)
- •deps: bump filelock from 3.20.3 to 4.0.12 (#5375) (14f4553)
- •deps: bump fsspec from 2025.7.0 to 2026.6.0 (#5317) (66504e9)
- •deps: bump redis from 7.0.1 to 8.1.0 (#5379) (24ebf1c)
- •deps: bump temporalio from 1.33.0 to 1.34.0 (#5377) (c148280)
- •deps: bump vercel-sandbox from 0.7.0 to 0.8.0 (#5374) (2938d87)
- •deps: update fastapi requirement from >=0.141.1 to >=0.142.2 in /examples/realtime/twilio_sip (#5372) (f47d2c3)
2. Oktober 2026
- •restore release tests and refresh required readiness check (#5278) (730deb4)
- •Review mode: final candidate
- •Intended release: patch, 0.23.1
- •Minimum required release type: patch
- •Versioning verdict: compatible
- •28 files changed (+622/-42): release automation, test fixtures, integration/example tooling, and release metadata.
- •The clean candidate contains current main
a575a6e637feb9aea1b591237b007dd4991ddfbaplus only six release-owned metadata files. Package, lockfile, manifest, source version and API baseline agree on 0.23.1. Snapshot sourceb31b9f8d13d49142a64f8873f2cc2ee40441a795is an ancestor of the candidate. - •Relative to v0.23.0, SDK runtime source changes only its version string. API snapshot content, dependencies, Python support and persisted schemas are unchanged.
Mehr anzeigen (7)Weniger anzeigen
- •First PyPI publication of the 0.23 series includes earlier migration requirements
- •Risk: 🟢 LOW with the previously reviewed migration paths. Users upgrading from 0.22.3 receive the 0.23.0 behavior changes as well as this patch.
- •Evidence: PyPI has neither 0.23.0 nor 0.23.1. The 0.23.0 release assessment in #5226 covers strict tools, approval restoration, encrypted history, resource limits, voice defaults and provider changes; this candidate does not alter those runtime paths.
- •Files:
CHANGELOG.md,src/agents/version.py; unchanged 0.23.0 runtime contracts assessed in #5226. - •Action: Carry forward the 0.23.0 migration guidance in the 0.23.1 announcement, particularly explicit strict-tool parameters, fresh legacy approvals, trusted encrypted-history import, resource-limit overrides and the explicit prior voice-model override.
- •Release checks recover without changing package behavior
- •Risk: 🟢 LOW. Test-loop initialization and required-check ownership are corrected while publication authorization remains intact.
2. Oktober 2026
- •mcp: add configurable MCP listing page limits (#5133) (9a21ab1)
- •sandbox: add opt-in Docker removal protection (#5116) (ae5803f)
- •sandbox: allow configuring memory consolidation turns (#5135) (daa1bcb)
- •sessions: add an opt-in encrypted history scan budget (#5118) (a2fdb94)
- •avoid awaiting cleanup during coroutine closure (#5163) (719c4e7)
- •ci: update and group CodeQL actions together (#5262) (f76153c)
- •ci: validate release source before building distributions (#5220) (2747c1c)
- •core/extensions: respect sensitive trace capture for model metadata (#5129) (88b722d)
Mehr anzeigen (7)Weniger anzeigen
- •core: bound agent tool streaming callback backlogs (#5106) (f23da76)
- •core: isolate nested agent tool state across fresh runs (#5123) (46cc8d8)
- •core: preserve closed parent constraints in singleton allOf (#5131) (f010d18)
- •core: preserve guarded final outputs in agent tools (#5115) (f3a15f6)
- •core: preserve structured guardrail diagnostics and agent output during persistence (#5016) (51bcea7)
- •core: preserve tool identity during asynchronous enablement (#5136) (f2ae64c)
- •core: redact default tool failure details (#5112) (40956e0)
18. September 2026
What's Changed
- fix(core): align conditional approvals with validated tool arguments (#5066)
- fix(core): deliver tool-not-found output on server-managed resume (#4947)
- fix(sandbox): keep command paths POSIX on a Windows host (#4958)
- fix(sessions): handle concurrent async SQLite startup (#4987)
Mehr anzeigenWeniger anzeigen
- fix(sessions): do not forward session limit as Conversations page size (#4961)
- fix(tracing): do not cache a missing OPENAI_API_KEY (#5017)
- fix(extensions): include shell and apply_patch calls in AdvancedSQLiteSession's tool usage (#4982)
- fix(extensions): reap subprocesses on early stream close (#4804)
- fix(extensions): preserve exact IDs in AdvancedSQLiteSession.delete_branch (#4980)
Documentation & Other Changes
- docs: align repository security and contributor guidance (#4962)
- docs: clarify Unix-local execution boundaries (#5064)
- docs: update translated pages (#5065)
- docs(examples): drop the duplicated word in the Temporal trace name (#5079)
- chore: add code ownership and required release review guidance (#4965)
- fix(deps): update vulnerable dependencies without changing SDK APIs (#4963)
- ci: add Python and Actions CodeQL security scanning (#4974)
- Add SDKs team as repository code owner (#5058)
- release: 0.22.3 (#5077)
New Contributors
- @hyeonsang010716 made their first contribution (#4947)
- @jbeckwith-oai made their first contribution (#4962)
- @00200200 made their first contribution (#4987)
- @JiangLLM made their first contribution (#4980)
- @tiagovilasboas made their first contribution (#4961)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.22.2...v0.22.3
9. September 2026
What's Changed
- feat: support current image generation tool options (#4932)
- fix(sandbox): prevent UnixLocal file API symlink races (#4931)
- fix(sessions): reset compaction response chain after pop (#4934)
Documentation & Other Changes
Full Changelog: github.com/openai/openai-agents-python/compare/v0.22.1...v0.22.2
8. September 2026
What's Changed
- feat(core): support image results in web search tools (#4898)
- feat(core): customize output guardrail blocked messages (#4594)
- feat(mcp): add server-wide guardrails to MCP tools (#4632)
- feat(sandbox): add configurable Unix-local environment isolation (#4640)
Mehr anzeigenWeniger anzeigen
- feat(sandbox): allow labels on Docker sandbox containers (#4564)
- feat(voice): expose streamed transcription options (#4645)
- fix(core): detach aggregated request usage entries (#4519)
- fix(core): fail closed on empty tool arguments (#4545)
- fix(core): strip created_by when replaying RunItems as input (#4568)
- fix(core): strict_schema error message, REPL whitespace input, debug docstrings (#4600)
- fix(core): max_turns no longer clobbers a tripped input guardrail exception in streaming (#4606)
- fix(core): preserve serialized approval resume ownership (#4613)
- fix(core): read tool args without Pydantic property shadowing (#4627)
- fix(core): accept JSON Schema type arrays of object for tool outputs (#4647)
- fix(core): honor End of File hunks when the file ends in a newline (#4661)
- fix(core): preserve tuple annotations for variadic tool arguments (#4655)
- fix(core): fix streamed response span losing response/input when consumer stops at completed event (#4692)
- fix(core): apply **kwargs value annotation to each keyword value (#4714)
- fix(core): reject **kwargs keys that collide with named tool parameters (#4674)
- fix(core): reject fixed-length tuple annotations for variadic tool arguments (#4735)
- fix(core): preserve Field constraints on variadic tool parameters (#4739)
- fix(core): close model providers created by Runner (#4785)
- fix(core/voice): honor OpenAI provider options over default clients (#4530)
- fix(chat-completions): merge a streamed turn's message into its pending tool-call message (#4728)
- fix(chat-completions): raise ModelBehaviorError on truncated empty completions (#4513)
- fix(chat-completions) reject unpaired function outputs in Chat Completions (#4699)
- fix(extensions): skip AdvancedSQLiteSession usage store when the branch has no turn (#4822)
- fix(extensions): nest extra_body on the any-llm chat path (#4544)
- fix(mcp): deep-copy cached tools before returning them (#4525)
- fix(mcp): clear active MCP servers after cleanup (#4586)
- fix(mcp): deduplicate managed servers (#4591)
- fix(realtime): advance crossed guardrail thresholds (#4590)
- fix(realtime): preserve item status on retrieved conversation items (#4598)
- fix(sandbox): finish dependency cleanup on cancellation (#4607)
- fix(sandbox): keep unbounded UnixLocal workspace I/O off the event loop (#4700)
- fix(sandbox): preserve UTF-8 boundaries in Cloudflare SSE (#4707)
- fix(sandbox): clean up PTY startup cancellation (#4750)
- fix(sandbox): settle PTY output before cleanup (#4738)
- fix(sandbox): preserve workdir for shell command lists (#4915)
- fix(sessions): recover failed resumed Session writes before model calls (#4630)
- fix(sessions): recover failed resumed Session writes on a renewed interruption (#4650)
- fix(sessions): persist resumed tool guardrail results (#4654)
- fix(sessions): recover resumed handoffs after session append failures (#4725)
- fix(sessions): settle conversation deletion before propagating cancellation (#4790)
- fix(sessions): preserve concurrent writes during compaction (#4736)
- fix(sessions): reject resuming a run whose accepted terminal output was not persisted (#4698)
- fix(sessions): preserve Session transformations during generation tracking (#4917)
- fix(tracing): flush buffered data after tracing is disabled (#4528)
- fix(tracing): preserve response IDs in redacted traces (#4641)
- fix(tracing): record the tool output on approval-gated function spans (#4866)
- fix(voice): support custom OpenAI TTS voice IDs (#4541)
- fix(voice): forward streamed STT language and prompt (#4574)
- fix(voice): honor client config for streamed STT (#4575)
- fix(voice) reject ignored explicit-client options (#4527)
- fix(voice): include current OpenAI TTS voices (#4535)
- fix(voice): use monotonic STT event deadlines (#4593)
- fix(voice): support context in single-agent workflow (#4636)
- fix(voice): enforce public Voice class state coverage (#4644)
- fix(voice): redact STT prompts from traces (#4663)
- fix(voice): redact TTS instructions from speech spans (#4676)
- fix(voice): accept every NumPy spelling of a supported TTS dtype (#4778)
- fix(voice): wake stream when producer is cancelled (#4825)
- fix(visualization): preserve nodes with duplicate names (#4512)
- refactor: extract RunState agent graph identity (#4876)
- refactor: share provider generation-span population (#4877)
Documentation & Other Changes
- docs: document v0.22.0 behavior changes (#4522)
- docs: fix wording in handoff example prompts (#4520)
- docs: preserve English heading anchors in translated pages (#4580)
- docs: refresh tracing integration links (#4634)
- docs: clarify capability visibility and authorization (#4642)
- docs: clarify database driver installation for SQLAlchemy sessions (#4743)
- docs: skip reference pages on Windows (#4761)
- docs: clarify requested state consistency guarantees (#4903)
- docs: make the encrypted session quick start self-contained (#4909)
- fix: freeze the public voice API contract (#4578)
- fix: enforce public type alias contract coverage (#4595)
- fix: route verification changes and require confirmed docs-only pushes (#4880)
- fix: propagate the serial test runner's exit code on Windows (#4771)
- fix: harden PyPI publishing and require manual release tags (#4726)
- fix: require complete policy for new public TypedDicts (#4900)
- fix: simplify verification and stabilize sandbox tests (#4916)
- fix: consolidate Docker-backed integration tests (#4667)
- chore: run repository skill tests in dedicated CI (#4881)
- refactor: separate release contract verification responsibilities (#4878)
- perf: reduce async stability command startup overhead (#4874)
- test: make async progress and trace-worker tests deterministic (#4875)
- test: organize Realtime session tests by responsibility (#4879)
- test(sandbox): skip unavailable Windows symlinks (#4853)
- release: 0.22.1 (#4576)
New Contributors
- @Chair403 made their first contribution (#4520)
- @green3sf made their first contribution (#4519)
- @tandede made their first contribution (#4512)
- @seanxuu made their first contribution (#4564)
- @simpleqt made their first contribution (#4600)
- @shoemoney made their first contribution (#4606)
- @shoutoutuoadi325 made their first contribution (#4598)
- @ayaangazali made their first contribution (#4650)
- @lllakshit made their first contribution (#4661)
- @Excelius-Wang made their first contribution (#4655)
- @XuQuanxin04 made their first contribution (#4692)
- @Hughhhhcoder made their first contribution (#4707)
- @rajarshidattapy made their first contribution (#4674)
- @mmjerge made their first contribution (#4728)
- @subhashpolisetti made their first contribution (#4735)
- @rioyu123 made their first contribution (#4822)
- @Nikhils-G made their first contribution (#4778)
- @MohammedAlkindi made their first contribution (#4771)
- @Ayushraj06-bit made their first contribution (#4698)
- @rksharma-owg made their first contribution (#4903)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.22.0...v0.22.1
19. August 2026
Key Changes
Version 0.22.0 is a minor release because it adds substantial runtime hardening and tightens an existing provider configuration contract. Applications that combine an explicit openai_client with organization or project must move those values to the AsyncOpenAI client.
Highlights:
- Redacts terminal function-tool output rejected by agent output guardrails from replayable and persisted SDK state.
- Raises
ModelBehaviorErrorfor non-streaming Responses with terminal statusfailedorincomplete.
Mehr anzeigenWeniger anzeigen
- Rejects conflicting provider options when
OpenAIProviderreceives an explicit client. - Isolates usage accounting between independent
RunStatecheckpoints while preserving nested-agent aggregation. - Expands agents registered through
handoff(agent)in generated graphs. - Clarifies the existing shallow-copy behavior of
Agent.clone()andRealtimeAgent.clone().
What's Changed
- fix(core): redact blocked tool outputs from replay state (#4507)
- fix(core): reject ignored explicit-client options for OpenAIProvider (#4497)
- fix(core): preserve Griffe logger inheritance (#4494)
- fix(core): reject terminal failed/incomplete responses in non-streaming get_response by @weike-zhang in github.* * fix(core): isolate usage between RunState checkpoints by @chiruu12 in github.com/openai/openai-agents-python/pull/4479 fix(sandbox): require apply_patch update hunks (#4470)
- fix(sandbox): enforce Windows mypy compatibility (#4499)
- fix(tracing): respect model-data logging redaction for record_model_error_on_span (#4496)
- fix(tracing): clean up processors after tracing is disabled (#4502)
- fix(visualization): expand handoff() targets in agent graphs (#4517)
Documentation & Other Changes
- docs: document v0.21.1 runtime behavior (#4460)
- docs: correct Agent.clone list attribute semantics (#4474)
- docs: add testing resources to llms indexes (#4509)
- ci: align Python version coverage (#4475)
- test: use sys.executable instead of tee for the stdio placeholder command (#4478)
- fix: keep Codex verification for development sandboxed by @seratch in github.com/openai/openai-agents-python/pull/4508 com/openai/openai-agents-python/pull/4516
- release: 0.22.0 (#4523)
New Contributors
- @li2631026381-alt made their first contribution (#4470)
- @thegoodengineer made their first contribution (#4474)
- @teachershuang made their first contribution (#4509)
- @weike-zhang made their first contribution (#4516)
- @chiruu12 made their first contribution (#4479)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.21.1...v0.22.0
17. August 2026
What's Changed
- feat(core): add model call timeouts (#4428)
- feat(sandbox): add run-scoped sandbox working directories (#4427)
- feat(sandbox): allow Docker sandboxes to disable networking (#4452)
- feat(sandbox): add Modal sandbox resource options (#4455)
- fix(core): honor exact call approval decisions (#4447)
Mehr anzeigenWeniger anzeigen
- fix(core): count Responses requests without usage (#4453)
- fix(core): close all MultiProvider children after failures (#4438)
- fix(core): reject partially matched stacked anchors (#4431)
- fix(chat-completions): Chat Completions reasoning replay (#4432)
- fix(realtime): truncate audio at zero elapsed time (#4457)
- fix(realtime): end iteration after clean server close (#4461)
- fix(sessions): prevent advanced SQLite structure table conflicts (#4454)
- fix(sessions): include compaction usage in run totals (#4446)
- fix(sandbox): validate view_image raster content (#4462)
- fix(sandbox): keep model paths POSIX-normalized (#4416)
- fix(sandbox): normalize apply_patch paths as POSIX (#4437)
Documentation & Other Changes
- docs: updates for v0.21.0 release (#4381)
- docs: list Tuning Engines tracing integration (#4440)
- fix: update cffi lock for Python 3.14 (#4448)
- release: 0.21.1 (#4467)
New Contributors
- @Coiggahou2002 made their first contribution (#4431)
- @fszcd made their first contribution (#4438)
- @cerebrixos made their first contribution (#4440)
- @Filimoa made their first contribution (#4455)
- @koadegno made their first contribution (#4452)
- @Chirag6722 made their first contribution (#4457)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.21.0...v0.21.1
15. August 2026
Key Changes
This minor release does not introduce a known breaking SDK behavior change. The minor version bump is for the new provider-neutral testing APIs and the OpenAI Python v3 compatibility update.
Highlights:
- Added
agents.testing,agents.realtime.testing, andagents.voice.testingutilities for deterministic Agent, Sandbox, Realtime, and Voice workflow tests without provider requests. - Updated OpenAI provider compatibility to
openai>=3.0.0,<4, including HTTPX2-aware request, response, transport, and exception handling.
Mehr anzeigenWeniger anzeigen
- Hardened RunState interruption snapshots, recursive agent-tool approvals, max-turn finalization, streaming cleanup, and sensitive-error redaction.
- Improved MCP lifecycle snapshot isolation and added configurable retry backoff ceilings.
- Added Sandbox Runloop existing-secret support and tightened view-image path grants.
- Added stricter Voice validation for invalid channels, frame rates, incomplete multichannel frames, and non-finite audio rates.
What's Changed
- feat: support OpenAI Python 3 and HTTPX2 (#4380)
- feat: add scripted model test utilities (#4362)
- fix: freeze public testing module contracts (#4386)
- fix: freeze public testing API state contracts (#4404)
- fix(core): preserve scripted annotation streaming across Python SDK releases (#4422)
- fix(core): isolate interruption results (#4384)
- fix(core): close the model stream when a streamed turn ends in a terminal failure (#4366)
- fix(core): redact tool output value from output-type validation errors (#4396)
- fix(core): align Responses parallel tool calls with converted tools (#4405)
- fix(core): max-turn handler session semantics (#4412)
- fix(core): detach RunState interruption snapshots (#4409)
- fix(core): isolate RunState checkpoint tool decisions (#4413)
- fix(core): resume recursive agent tool approvals (#4414)
- fix(mcp): stop handing the tools cache to callers (#4424)
- fix(mcp): protect manager lifecycle state snapshots (#4407)
- fix(mcp): isolate manager lifecycle results (#4368)
- fix(mcp): add configurable retry backoff ceiling (#4379)
- fix(realtime): handle non-finite audio rates (#4419)
- fix(sandbox): expose the scripted sandbox session type (#4406)
- fix(sandbox): apply stacked anchors sequentially (#4369)
- fix(sandbox): snapshot HTTP proxy headers (#4397)
- fix(sandbox): snapshot per-op audit policies (#4398)
- fix(sandbox): honor view_image extra path grants (#4417)
- fix(sessions): handle zero conversation history limits (#4365)
- fix(voice): honor WAV sample width (#4361)
- fix(voice): reject incomplete multichannel audio frames (#4370)
- fix(voice): reject non-positive audio channels (#4372)
- fix(voice): reject non-positive audio frame rates (#4382)
- fix(voice): stop buffering audio when audio tracing is disabled (#4411)
- fix(extensions): gate AnyLLM parallel tool calls on converted tools (#4363)
- fix(extensions): preserve resume argument ordering (#4400)
- fix(extensions): let managed_secrets reference existing Runloop secrets (#4378)
Documentation & Other Changes
- docs: synchronize v0.20.0 features (#4280)
- docs: clarify PGP key location (#4371)
- test: order test spans by start sequence, not by started_at alone (#4392)
- release: 0.21.0 (#4387)
New Contributors
- @FU-max-boop made their first contribution (#4361)
- @weivwang made their first contribution (#4363)
- @jaideeppyne made their first contribution (#4371)
- @hansu650 made their first contribution (#4372)
- @xumaple made their first contribution (#4378)
- @viyatb-oai made their first contribution (#4400)
- @ErenAta16 made their first contribution (#4392)
- @apcha-oai made their first contribution (#4422)
- @sylvesterkaczmarek made their first contribution (#4417)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.20.0...v0.21.0
11. August 2026
Key Changes
Version 0.20.0 is a minor release because it changes the implicit default model and includes a potentially breaking MCP dependency migration for applications with customized local HTTP transports. MCP v1 remains supported, and affected applications can migrate to httpx2 or pin mcp<2.
Highlights:
- The default model is now
gpt-5.6-luna; explicit models, run-level overrides, andOPENAI_DEFAULT_MODELcontinue to take precedence. - Local MCP connections support MCP Python SDK v1 and v2 across stdio, SSE, and Streamable HTTP transports.
Mehr anzeigenWeniger anzeigen
- Applications using custom MCP HTTP authentication or client factories must use the HTTP types owned by the installed MCP major version, or pin
mcp<2. RunState.add_input()can stage durable user input before a resumed model call, with guardrail, persistence, and serialization support.- Sandbox mount validation adds explicit credential-exposure acknowledgements and preserves redacted error contracts without serializing credential authority.
- Realtime input transcription supports the GA transcription settings for
gpt-live-transcribe,gpt-transcribe, andgpt-realtime-whisper.
What's Changed
- feat: use GPT-5.6 Luna as the default model (#4282)
- feat: add durable pending input to RunState (#4325)
- feat(mcp): support MCP Python SDK v1 and v2 (#4106)
- feat(sessions): pass run context to custom sessions (#4209)
- feat(realtime): support GA transcription options (#4351)
- feat: preserve raw usage payloads (#4279)
- feat: allow applications to approve unsafe replays (#4319)
- fix: falsy optional reference handling (#4305)
- fix: prevent queue consumer deadlocks (#4201)
- fix: publish completed streamed guardrail results on failure paths (#4223)
- fix: annotate the bare tool guardrail decorator overloads (#4238)
- fix: tool approval is not honored on resume when
Runner.runis given a context (#4245) - fix: redact JSON validation errors (#4211)
- fix: copy raw_responses when building a RunState (#4237)
- fix: keep empty turns in the nested conversation history (#4230)
- fix: keep tool guardrail results when a resumed run interrupts again (#4239)
- fix: work on copies of the lists a resumed run adopts from RunState (#4251)
- fix: strip placeholder item IDs without provider_data on the Responses path (#4266)
- fix: bind tool approvals to concrete invocations (#4257)
- fix: normalize optional fields in tool invocation identity (#4289)
- fix: count requests when providers omit usage (#4290)
- fix: suppress pydantic serializer warnings (#4291)
- fix: keep FunctionTool subclasses copyable (#4311)
- fix: preserve streamed guardrail session state (#4312)
- fix: keep acknowledged safety checks serializable after restore (#4316)
- fix: preserve default-valued fields in serialized tool output (#4307)
- fix: strip output-only created_by when replaying model output as input (#4308)
- fix: preserve local shell outputs across RunState resume (#4320)
- fix: serialize containers of models and dataclasses as structured data (#4339)
- fix: reject schemas that exceed safe recursion depth (#4358)
- fix: reject unsafe strict-schema ref siblings (#4356)
- fix(sandbox): reject unsafe mount credential configurations (#4255)
- fix(extensions): settle snapshot directory mount transitions for Modal (#4315)
- fix(sandbox): preserve sandbox error contracts during mount redaction (#4344)
- feat(sandbox): add explicit mount credential exposure acknowledgements (#4321)
- fix(sandbox): cancel sibling env resolvers when one fails (#4195)
- fix(sandbox): encode Blaxel terminal WebSocket URL query values (#4217)
- fix(sandbox): stop splitting Cloudflare SSE events at chunk boundaries (#4215)
- fix(sandbox): keep move_to when coercing apply_patch operation mappings (#4242)
- fix(sandbox): retain program items in memory rollouts (#4276)
- fix(sandbox): restore archived file modes when extracting a workspace tar (#4287)
- fix(sandbox): keep source entry metadata when lazily loading a skill (#4294)
- fix(mcp): hosted MCP approval identity (#4256)
- fix(mcp): keep MCP error content when structured output is enabled (#4224)
- fix(mcp): build the active server list without re-consuming the iterable (#4235)
- fix(mcp): preserve free-form MCP object schemas (#4310)
- fix(mcp): serialize non-text content blocks as JSON instead of Python repr (#4338)
- fix(mcp): serialize manager lifecycle operations (#4340)
- fix(mcp): bound lifecycle and CI waits (#4342)
- fix(chat-completions): keep url citations when converting chat completions output (#4222)
- fix(chat-completions): assemble chat completions content parts in content index order (#4236)
- fix(chat-completions): propagate the OpenAI request ID on the Chat Completions path (#4243)
- fix(chat-completions): keep url citations on the streamed chat completions path (#4252)
- fix(chat-completions): announce the chat completions assistant message once (#4275)
- fix(chat-completions): convert input_file items that reference a file_id on the Chat Completions path (#4295)
- fix(chat-completions): raise on audio output in the streamed chat completions path (#4309)
- fix(chat-completions): omit parallel_tool_calls without tools on the Chat Completions path (#4359)
- fix(sessions): release SQLite engine config entries when engines are collected (#4210)
- fix(sessions): enforce closed state on SQLite session empty add_items (#4231)
- fix(sessions): make session mutations atomic (#4212)
- fix(sessions): preserve required program item ids for OpenAI conversations (#4253)
- fix(sessions): apply the reasoning item id policy to stored session history (#4278)
- fix(sessions): preserve DaprSession created_at across writes (#4213)
- fix(sessions): strip placeholder item IDs before Conversations persistence (#4288)
- fix(sessions): preserve falsey compaction decision hooks (#4299)
- fix(sessions): restore session history when compaction replacement is cancelled (#4298)
- fix(sessions): prune orphaned tool outputs from limited sessions (#4324)
- fix(realtime): apply tool call item updates to session history (#4284)
- fix(realtime): preserve falsey custom models (#4286)
- fix(realtime): compute G.711 audio length for typed and mapping format spellings (#4292)
- fix(voice): forward TTSModelSettings.speed to the OpenAI speech API (#4220)
- fix(voice): keep the word separator when flushing streamed sentences (#4227)
- fix(voice): start the dispatcher when a session ends with no turns (#4259)
- fix(voice): report transcription session close failures to the consumer (#4343)
- fix(tracing): release the trace scope when a generator is closed (#4221)
- fix(tracing): release the span scope when a generator is closed (#4233)
- fix(tracing): catch only the context reset on generator close (#4232)
- fix(extensions): harden tool output trimming contracts (#4204)
- fix(extensions): forward prompt_cache_retention on the any-llm Responses path (#4248)
- fix(extensions): resolve the any-llm default model at call time (#4219)
- fix(extensions): surface content filter refusals on the any_llm chat path (#4234)
- fix(extensions): omit litellm's parallel_tool_calls without tools (#4330)
Documentation & Other Changes
- docs: correct nonexistent guardrail type names (#4218)
- docs(tracing): fix custom span output example (#4196)
- docs: voice quickstart also needs sounddevice (#4250)
- docs: improve translation source clarity (#4306)
- perf: run serial tests alongside xdist (#4197)
- perf: add source-only typecheck target (#4200)
- perf: accelerate developer checks (#4258)
- test: harden release compatibility contracts (#4297)
- ci: check prospective release contracts before merge (#4347)
- fix: make release API contract promotion policy-driven (#4349)
- fix: freeze Runloop platform properties (#4355)
- test: isolate released API source validation (#4350)
- release: 0.20.0 (#4348)
New Contributors
- @XSAM made their first contribution (#4196)
- @abhay-codes07 made their first contribution (#4217)
- @ColebyPearson made their first contribution (#4250)
- @Luccacvb made their first contribution (#4252)
- @ojassharma7 made their first contribution (#4245)
- @nothariharan made their first contribution (#4298)
- @ribhavjain made their first contribution (#4316)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.19.4...v0.20.0
5. August 2026
What's Changed
- fix: preserve completed tool guardrail results (#4180)
- fix: redact invalid tool argument errors (#4182)
- fix: defer non-stream session saves until output guardrails (#4184)
- fix: honor resolved status before policy checks (#4183)
- fix: cancel sibling work after concurrent failures (#4185)
Mehr anzeigenWeniger anzeigen
- fix: surface non-streaming content-filter refusals (#4188)
- fix(mcp): derive streamable HTTP retry backoff from backoffs taken (#4174)
- fix(realtime): clean up failed connection attempts (#4189)
- fix(tracing): mark non-streaming agent span failures (#4191)
- fix(sandbox): enforce token output budgets (#3934)
- fix(sandbox): single-flight cached dependency factories (#4178)
- fix(sessions): enforce closed state in MongoDBSession (#4176)
- fix(sessions): preserve repeated history provenance (#4181)
- fix(sessions): skip conversation creation on empty add_items (#4190)
- fix(sessions): reject reused branch IDs when creating a branch (#4186)
- fix(extensions): preserve streamed provider thinking blocks (#4177)
Documentation & Other Changes
- perf: speed up the test suite (#4171)
- test: make parallel guardrail overlap deterministic (#4187)
- test: make async tool and guardrail tests deterministic (#4192)
- test: make parent cancellation tests deterministic (#4193)
New Contributors
Full Changelog: github.com/openai/openai-agents-python/compare/v0.19.3...v0.19.4
4. August 2026
What's Changed
- fix: resolve agent tool name collisions consistently (#4137)
- fix: reconcile resumed tool name collisions (#4145)
- fix: persist the max-turns handler output to the session (#4160)
- fix: report output guardrail results when a tripwire aborts the run (#4090)
Mehr anzeigenWeniger anzeigen
- fix: replace closed default loop in run_sync (#4102)
- fix: honor falsey custom output extractors for agents as tools (#4088)
- fix: report tool guardrail results for streamed runs (#4097)
- fix: preserve approved tool output on streamed resume (#4126)
- fix: normalize typeless strict object schemas (#4139)
- fix: synchronize after-turn cancellation with event consumption (#4130)
- fix: keep input item order when collapsing duplicates (#4140)
- fix: stop emitting handoff calls as streamed tool_called events (#4146)
- fix: preserve tool call and output order when deduplicating inputs (#4147)
- fix: honor falsey handoff input filters (#4153)
- fix: define explicit zero-value contracts (#4101)
- fix: keep committed tool session records when a streamed output guardrail trips (#4148)
- fix(mcp): auto-paginate tool and prompt listings (#4094)
- fix(chatcmpl): clear pending thinking blocks when flushing an assistant message (#4089)
- fix(sandbox): remove apply_patch move source as the bound user (#4100)
- fix(sandbox): harden default snapshot path resolution (#4141)
- fix(sessions): enforce closed state in AsyncSQLiteSession (#4109)
- fix(sessions): avoid creating remote conversation on uninitialized clear_session (#4111)
- fix(sessions): roll back a failed SQLiteSession insert (#4163)
- fix(realtime): apply output guardrails to text deltas (#4124)
- fix(realtime): clamp interrupt truncation to received audio (#4122)
- fix(realtime): scope delayed audio guardrail interruption (#4135)
- fix(voice): clean up tasks when streams close early (#4131)
- fix(voice): finish STT event handling after listener errors (#4170)
- fix(tracing): name streamed task spans after the run's own workflow (#4167)
- fix(extensions): keep trimmer's definition names and instance data in trimmed schemas (#4110)
- fix(extensions): release AnyLLM provider streams and preserve completed runs (#4133)
- fix(extensions): send AnyLLM Responses reasoning as a mapping (#4138)
- fix(extensions): record model-call failures on the provider's own span (#4143)
- fix(extensions): let an in-flight provider stream close finish after cancellation (#4156)
- fix(extensions): preserve thinking blocks for replay (#4157)
Documentation & Other Changes
- docs: fix spelling in GPT-5 example (#4168)
- chore(ci): preserve cache pruning with setup-uv v9 (#4103)
- test: stabilize tracing atexit timeout coverage (#4104)
New Contributors
- @n33levo made their first contribution (#4088)
- @omidsaffari made their first contribution (#4153)
- @PranavMishra28 made their first contribution (#4143)
- @wesleyzhangwq made their first contribution (#4168)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.19.2...v0.19.3
1. August 2026
What's Changed
- feat: expose original callable through wrapped (#4038)
- fix: report input guardrail results when a tripwire aborts the run (#4071)
- fix: consolidate same-exception re-raises into bare raise across all modules (#4023)
- fix(sandbox): preserve tagged EnvValue subclasses (#4039)
Mehr anzeigenWeniger anzeigen
- fix(modal): reject ephemeral paths during tar hydration (#4045)
- fix(mcp): redact MCP prompt and resource transport errors (#4067)
- fix(mcp): redact URL credentials from SDK errors (#4015)
- fix(mcp): redact URL credentials from tracing and tool metadata (#4020)
- fix(mcp): redact direct MCP cleanup transport errors (#4078)
- fix(mcp): clean failed servers before reconnecting (#3939)
- fix(mcp): nested MCP cleanup error redaction (#4049)
- fix(realtime): preserve raw server event payloads (#4062)
- fix(memory): count valid SQLAlchemy and MongoDB session items for positive limits (#4032)
- fix(memory): count valid AdvancedSQLiteSession items for positive limits (#4031)
- fix(memory): count valid Redis and Dapr session items for positive limits (#4033)
- fix(memory): enforce closed state in Redis and Dapr sessions (#4035)
- fix(extensions): keep tool parameters named like schema keywords (#4036)
- fix(extensions): close the LiteLLM provider stream on exit (#4066)
- fix(extensions): preserve completed LiteLLM streams on cleanup failure (#4077)
- fix(voice): propagate iterator cancellation (#4040)
- fix(voice): break out of audio dispatch loop when a stream task signals session_ended (#4044)
- fix(voice): block audio dispatcher while idle (#4061)
- fix(tracing): use monotonic export deadlines (#4063)
Documentation & Other Changes
- docs: correct the documented Chat Completions store default (#4074)
New Contributors
- @chinmayv095 made their first contribution (#4032)
- @jstar0 made their first contribution (#3939)
- @Kaif10 made their first contribution (#4036)
- @SawhneySatvik made their first contribution (#4035)
- @GautamSharma99 made their first contribution (#4061)
- @LHMQ878 made their first contribution (#4045)
- @dfedoryshchev made their first contribution (#4074)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.19.1...v0.19.2
29. Juli 2026
What's Changed
- feat(sandbox): support native host paths in path grants (#4009)
- fix: redact Realtime audio format diagnostics (#3992)
- fix: redact Blaxel unmount paths in logging (#3993)
- fix: retry pre-response WebSocket server errors (#3991)
Mehr anzeigenWeniger anzeigen
- fix(run): cancel the parallel input-guardrail task when the model turn fails (#3982)
- fix(run): allow empty streamed model input (#3995)
- fix(models): route falsey mapped providers (#3996)
- fix(memory): count valid SQLite session items for positive limits (#4001)
- fix(run): count streamed retries when terminal usage is missing (#4002)
- fix(run): cancel streamed models when input guardrails fail (#4004)
- fix: preserve zero Blobfuse attribute cache timeout (#4006)
- fix(tracing): enforce max_batch_size during force_flush and shutdown in BatchTraceProcessor (#3985)
- fix(agent-tools): honor falsey input builders (#4007)
- fix: cancel sibling enablement checks on failure (#4005)
Documentation & Other Changes
- docs: updates for 0.19.0 (#3872)
- docs: fix a URL in sandbox example code (#3987)
- docs: repair tracing integration links (#3986)
- docs: use decorators module throughout examples (#3946)
New Contributors
Full Changelog: github.com/openai/openai-agents-python/compare/v0.19.0...v0.19.1
27. Juli 2026
Key Changes
This minor release does not introduce a breaking change. The minor version bump reflects a significant new OpenAI Responses feature area: Programmatic Tool Calling.
Highlights:
- Added
agents.tool.ProgrammaticToolCallingTool, which lets supported OpenAI Responses models generate JavaScript to coordinate eligible tools. It supports per-toolallowed_callers, structured function-tool outputs, and integration with Runner streaming, guardrails, approvals, sessions, andRunState. See Programmatic Tool Calling for setup and constraints.
Mehr anzeigenWeniger anzeigen
- Added the public
agents.decoratorsmodule and the shorter@toolalias alongside the existing function and guardrail decorators. Function tools now also support async callable objects. - SDK configuration now consistently accepts either typed settings objects or dictionaries across agents, runs, models, sessions, sandboxes, and voice pipelines, with validation for unknown settings.
- Hardened error and diagnostic logging across models, tools, MCP, Realtime, sessions, sandboxes, and tracing to avoid exposing raw sensitive payloads while preserving useful debugging context.
- Improved AnyLLM, LiteLLM, and Chat Completions compatibility, preserved session history across model retries, and added retries for WebSocket overloads that occur before a response starts.
- Added
VercelCloudBucketMountStrategy. Mounted sessions exclude bucket contents from workspace persistence and intentionally do not support dynamic mount changes or session resume.
What's Changed
- feat: add Programmatic Tool Calling support (#3833)
- fix: remove programmatic transcripts from handoff tool filtering (#3879)
- fix: encode structured programmatic tool errors as JSON (#3932)
- feat: consistently accept typed objects and dictionaries for SDK configuration (#3917)
- feat: add tool decorator alias (#3920)
- feat(sandbox): add Vercel cloud mount strategy (#3899)
- fix: retry pre-response WebSocket overload errors (#3978)
- fix: harden sensitive runtime logging (#3938)
- fix: redact Realtime and RunState diagnostics (#3948)
- fix: stop leaking raw exceptions in model + tool error logs (#3910)
- fix: preserve callable function tool compatibility (#3959)
- fix: support async callable objects as function tools (#3949)
- fix: partition nested handoffs history ownership (#3823)
- fix: summarize programmatic transcripts during nested handoffs (#3878)
- fix: improve AnyLLM and LiteLLM provider compatibility (#3930)
- fix: improve provider compatibility and preserve session history on retries (#3931)
- fix: fail closed on invalid callable approval arguments (#3867)
- fix: classify lazy skill read probes correctly (#3893)
- fix: reuse the verbose stdout logging handler (#3957)
- fix: recognize typed easy input messages in Chat Completions (#3877)
- fix: include device nodes when parsing ls output (#3951)
- fix: preserve *args/**kwargs docstring descriptions in tool schemas (#3956)
- fix: compare inspect sentinels by identity in function_schema (#3961)
- fix: parse ls output with SELinux security-context marker (#3904)
- fix: preserve dot-prefixed skip paths in Modal tar workspace excludes (#3905)
- fix: cleanup cancelled servers during MCP connect failure (#3919)
- fix: await async callable-object dynamic instructions (#3942)
- fix: await async callable-object callbacks (#3944)
- fix: Blaxel's shell-quote interpolated FUSE mount options (#3873)
- fix: escape multiline DOT names in visualization (#3898)
- fix: redact raw message payload from realtime agents' conversion-failure log (#3907)
- fix: encode streamed float32 audio as PCM16 in voice handling (#3916)
- fix: redact MCP tool-call and formatter errors from logs (#3918)
- fix: parse Google docstrings whose Args: follows a section body (#3862)
- fix: pin and verify rclone sandbox installs (#3911)
- fix: reject empty additionalProperties mappings in strict_schema (#3927)
- fix: send logprobs=True when top_logprobs is set when using LiteLLM (#3929)
- fix: surface content-filter refusals when buffering streamed tool calls in chat completions (#3897)
- fix: reject unsupported streamed STT audio dtypes (#3950)
- fix: use last_agent property in pretty_print_run_result_streaming to avoid None crash (#3965)
- fix: use last_agent property in RunResultStreaming._create_error_details (#3967)
Documentation & Other Changes
- docs: document compact tracing hierarchy (#3839)
- docs: clarify sandbox support on Windows (#3866)
- docs: remove unnecessary RunContextWrapper wrapping in tool enabling example (#3869)
- docs: remove unused Runner import in tracing docs (#3881)
- docs: fix runnable Python examples (#3885)
- docs: fix missing imports in dynamic instructions example (#3895)
- docs: fix conversation example imports (#3903)
- docs: fix API cross-reference targets (#3913)
- docs: improve sandbox example runtime validation (#3880)
- docs: fix streamed audio API rendering (#3940)
- chore: add packaged live integration and provider regression coverage (#3936)
- chore: update e2b versions (#3871)
- chore: update FastAPI test dependency (#3974)
- chore: isolate unit tests from ambient proxy settings (#3945)
New Contributors
- @oldrobotdev made their first contribution (#3862)
- @AAliKKhan made their first contribution (#3869)
- @matthewlouisbrockman made their first contribution (#3871)
- @Syed-Umer-Ali made their first contribution (#3895)
- @hsusul made their first contribution (#3898)
- @SHAI-Cheravgoyal made their first contribution (#3904)
- @dimaosipa made their first contribution (#3910)
- @FayezBast made their first contribution (#3916)
- @gunjanjaswal made their first contribution (#3897)
- @TheSaiEaranti made their first contribution (#3951)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.18.3...v0.19.0
17. Juli 2026
What's Changed
- feat: make task and turn tracing spans configurable (#3834)
- feat(realtime): track response usage in session context (#3812)
- fix(memory): serialize OpenAI conversation session initialization (#3821)
- fix(models): raise UserError for conflicting provider args instead of assert (#3809)
Mehr anzeigenWeniger anzeigen
- fix(handoffs): preserve user messages containing history wrappers (#3815)
- fix(computer): isolate provider instances across concurrent runs (#3843)
- fix(sandbox): avoid redundant E2B workspace root creation (#3845)
- fix: preserve streamed session input across model retries (#3857)
- fix: prevent stale prepared-item identity reuse (#3858)
- fix: AdvancedSQLiteSession clear_session and pop_item metadata leaks (#3755)
- fix: parse Google docstrings missing the blank line before a section (#3832)
- fix: bound $ref expansion in strict JSON schema conversion (#3838)
- fix: redact non-tool trace error details (#3848)
Documentation & Other Changes
- docs: updates for hosted multi-agent support (#3789)
- docs: make UserContext example runnable in Agents documentation (#3851)
- chore: enable flake8-async for runtime source (#3813)
New Contributors
- @Dhruva-Das made their first contribution (#3809)
- @russeell made their first contribution (#3815)
- @okaditya84 made their first contribution (#3755)
- @sohumt123 made their first contribution (#3832)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.18.2...v0.18.3
11. Juli 2026
What's Changed
- feat: support GPT-5.6 request controls (#3794)
- feat: add hosted multi-agent beta support (#3788)
- fix(sandbox): own Daytona PTY worker tasks (#3778)
- fix(realtime): enqueue callback errors synchronously (#3777)
- fix(realtime): use monotonic playback timing (#3776)
Mehr anzeigenWeniger anzeigen
- fix(sandbox): own Docker deferred cleanup tasks (#3779)
- fix(sandbox): own Unix PTY fd close tasks (#3780)
- fix(litellm): surface content-filter refusals instead of an empty turn (#3769)
- refactor(sandbox): share core PTY output collection (#3796)
- refactor(sandbox): share extension PTY output collection (#3797)
- refactor(sandbox): share E2B rclone setup (#3798)
- refactor(sandbox): share Runloop rclone setup (#3799)
- refactor: share retry error metadata extraction (#3800)
- refactor: share retry-after parsing (#3801)
Documentation & Other Changes
- fix: serialize model-backed rollout interruptions as dicts (#3790)
- chore: enable G004 logging lint rule (#3802)
- chore: enable RUF012 for runtime source (#3803)
- chore: remove unused noqa directives (#3804)
- chore: exempt OpenAI package from dependency cooldown (#3792)
New Contributors
Full Changelog: github.com/openai/openai-agents-python/compare/v0.18.1...v0.18.2
10. Juli 2026
What's Changed
- feat: add GPT-5.6 model defaults and migrate examples (#3774)
- fix: support cache-write usage across OpenAI Python versions (#3773)
- fix(realtime): make session cleanup deterministic (#3767)
- fix: preserve nested tool state during restoration (#3753)
Mehr anzeigenWeniger anzeigen
- fix: close Chat Completions streams on early exit (#3689)
- fix(sessions): handle list content in AdvancedSQLiteSession browsing helpers (#3761)
- fix(models): accumulate streamed logprobs in place to avoid O(n^2) copies (#3762)
- fix: send logprobs=True when top_logprobs is set on Chat Completions (#3763)
Documentation & Other Changes
- docs: updates for v0.18.0 (#3741)
- docs(realtime): fix RealtimeRunner context docstring (#3748)
- docs: clarify agent tool state options (#3754)
- test(items): document refusal None invariant (#3751)
New Contributors
Full Changelog: github.com/openai/openai-agents-python/compare/v0.18.0...v0.18.1
7. Juli 2026
RealtimeAgent's default is now gpt-realtime-2.1
Since this version, the default model for RealtimeAgents is gpt-realtime-2.1: developers.openai.com/api/docs/models/gpt-realtime-2.1
What's Changed
- feat: update default realtime model to gpt-realtime-2.1 (#3740)
- feat: add Unicode storage option to SQLAlchemySession (#3746)
- fix(visualization): keep fillcolor on handoff nodes by merging style attributes (#3744)
Mehr anzeigenWeniger anzeigen
Documentation & Other Changes
- docs: updates for v0.17.8 release (#3737)
New Contributors
- @comp made their first contribution (#3744)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.17.8...v0.18.0
7. Juli 2026
What's Changed
- feat: add invalid final output recovery handler (#3736)
- fix: propagate realtime session iterator cancellation (#3686)
- fix: redact realtime validation failure logs (#3687)
- fix: preserve non-dict Mapping values in _to_dump_compatible (#3700)
Mehr anzeigenWeniger anzeigen
- fix: escape quotes and backslashes in DOT names for visualization (#3712)
- fix: enforce strict Pydantic validation when strict_json_schema=True + handoffs (#3724)
- fix: fix an issue with length-frame exec-stdin writes within a sandbox (#3719)
Documentation & Other Changes
- docs: add DProvenanceKit to external tracing processors list (#3726)
- docs: add sandbox examples to examples index (#3731)
- test: improve coverage for stream and sandbox edge cases (#3730)
New Contributors
- @fallintoplace made their first contribution (#3686)
- @anxkhn made their first contribution (#3700)
- @Om-Borse26 made their first contribution (#3724)
- @imran31415 made their first contribution (#3719)
- @Therealdk8890 made their first contribution (#3726)
- @saime428 made their first contribution (#3731)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.17.7...v0.17.8
24. Juni 2026
What's Changed
- feat: expose configurable websocket max_size limit (#3645)
- feat: add buffered Chat Completions tool-call streaming (#3506)
- fix: reduce sandbox sink buffering and spool timeouts (#3642)
- fix: #3346 clean up branch-only messages when deleting branches (#3347)
Mehr anzeigenWeniger anzeigen
- fix: #3348 make AdvancedSQLiteSession add_items atomic (#3349)
- fix: cancel sibling guardrail tasks when one raises (#3239)
- fix: skip needs_approval_checker when status resolved in _collect_runs_by_approval (#3259)
- fix: validate ls special permission bits by position (#3420)
- fix: gate remote-mount edit guidance by mode (#3423)
- fix: remove dependency on types-requests (#3509)
- fix: empty list/tuple tool output dropped via all([]) == True (#3554)
- fix: wake PTY output collection on process exit (E2B) (#3610)
- fix: avoid stale object-id dedupe in server conversation tracker (#3621)
- fix: report effective Blaxel timeouts (#3643)
- fix: prevent ambiguous Realtime multi-agent tool dispatch (#3441)
- fix: add hint to duplicated MCP server tool name error message (#3678)
- fix: recursively extract HTTP errors from nested ExceptionGroups (#3556)
Documentation & Other Changes
- docs: #3461 changes for tool_not_found_behavior option (#3462)
- docs: changes for #3487 feature addition (#3488)
- docs: fix OpenAI capitalization in auto-generated ref titles (#3646)
- docs: add SDK maintainer references and review guidance (#3676)
New Contributors
- @rouge8 made their first contribution (#3509)
- @vidigoat made their first contribution (#3554)
- @rohitrastogi made their first contribution (#3610)
- @chutch made their first contribution (#3621)
- @he-yufeng made their first contribution (#3643)
- @anneheartrecord made their first contribution (#3645)
- @2830500285 made their first contribution (#3642)
- @atimothee made their first contribution (#3646)
- @incoffeemonster made their first contribution (#3506)
- @wustwyh made their first contribution (#3678)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.17.6...v0.17.7
19. Juni 2026
What's Changed
- feat: add pre-approval tool input guardrails (#3487)
- feat: add SDK-only custom data for tool outputs (#3486)
- fix: enforce the documented strict JSON-compatible contract for #3486 (#3657)
- fix: suppress handoff whitespace tool-name warnings (#3652)
Documentation & Other Changes
- docs: fix typo in sandbox guide (#3628)
Mehr anzeigenWeniger anzeigen
New Contributors
- @siddiksawani made their first contribution (#3657)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.17.5...v0.17.6
11. Juni 2026
What's Changed
- fix: expose sandbox error retryability (#3581)
- fix: #3512 type tool-end hook results as object (#3518)
- fix: use tuple form for SpeechGroupSpanData
__slots__(#3534) - chore: bump Modal sandbox extra to 1.4.3 (#3538)
Documentation & Other Changes
- docs: add MongoDB session example under examples/memory (#3036)
Mehr anzeigenWeniger anzeigen
- docs: add missing space in MCP params docstrings (#3535)
- docs: fix docstring typo in stdio params env description (#3557)
- docs: fix two docstring grammar errors in tool.py (#3543)
- docs: add Latitude to external tracing processors list (#3577)
- docs: tweak in usage doc (#3597)
- docs: fix string concatenation typo in agent instructions (#3599)
- docs: capitalization fix in tracing docs (#3602)
- docs: fix subject-verb agreement in agent loop description (#3605)
- test: add unit tests for run_demo_loop streaming, EOF, and empty-input paths (#3542)
- test: add unit tests for _openai_retry helpers (77% -> 95% coverage) (#3544)
New Contributors
- @jluocsa made their first contribution (#3534)
- @jdoughty04 made their first contribution (#3538)
- @guillemwilly made their first contribution (#3577)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.17.4...v0.17.5
26. Mai 2026
What's Changed
- feat: support Realtime custom voice objects (#3473)
- fix: #3459 add opt-in recovery for missing function tools (#3461)
- fix: apply hardened http client default to MCP SSE transport (#3466)
- fix: use non-None value for output in FunctionSpanData (#3475)
Mehr anzeigenWeniger anzeigen
- fix: add missing entries to span __slots__ (#3483)
- fix: redact invalid JSON payload in ModelBehaviorError data (#3485)
- fix: export more tracing related functions & types from agents (#3489)
- fix: export MCPListToolsItem, ToolSearchCallItem, and ToolSearchOutputItem from agents (#3490)
New Contributors
- @rmotgi1227 made their first contribution (#3475)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.17.3...v0.17.4
19. Mai 2026
What's Changed
- fix: keep mountpoint credentials out of sandbox commands (#3429)
- fix: unify memory optional dependency import errors (#3389)
- fix: guard None text in text_message_output and add output guardrail count to RunErrorDetails (#3375)
- fix: avoid mutating FunctionTool params_json_schema (#3382)
Mehr anzeigenWeniger anzeigen
- fix: avoid mutating codex output schema input (#3385)
- fix: #3357 output schema names for Literal types (#3358)
- fix: skip wait_for_status when Vercel sandbox is in a terminal state (#3410)
- fix: filter hosted_tool_call types in remove_all_tools handoff filter (#3386)
- fix: guard None text in ItemHelpers.extract_last_content (#3394)
- fix: log exception when output guardrail raises instead of silently ignoring (#3411)
- fix: reject relative sandbox workspace roots (#3422)
- fix: normalize leading question marks in exposed port queries (#3424)
- fix: #3363 honor short custom voice splitter chunks (#3364)
- fix: runtime handling updates by @adrianbravo-oai @ioleksiuk (#3451)
Documentation & Other Changes
- docs: add SDK review guidance (#3376)
- docs: mark Agent.instructions as optional (#3384)
- docs: translate all pages using new settings (#3392)
- docs: document auto_previous_response_id (#3383)
- docs: fix LiteLLM API reference redirect (#3444)
- docs: fix duplicated word in usaspending glossary example (#3445)
- chore: clean up CI jobs and update uv pin (#3400)
- ci: harden release tag workflow (#3399)
New Contributors
- @zhoufengen made their first contribution (#3375)
- @hintz-openai made their first contribution (#3399)
- @cty-ut made their first contribution (#3410)
- @ynachiket made their first contribution (#3444)
- @LeSingh1 made their first contribution (#3445)
- @adrianbravo-oai made their first contribution (#3451)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.17.2...v0.17.3
12. Mai 2026
What's Changed
- fix: #3268 fix OpenAI Conversations reasoning persistence (#3352)
- fix: avoid auto response for unknown realtime tools (ref: #3287) (#3366)
- fix: #3354 interrupt tracing retry backoff on shutdown (#3355)
- fix: #3359 preserve local approval rejection reasons (#3360)
Mehr anzeigenWeniger anzeigen
- fix: #3361 honor session settings in AsyncSQLiteSession (#3362)
- fix: #3310 avoid empty chat tool outputs (#3312)
Documentation & Other Changes
- docs: clarify max_delay for retries works (#3350)
- docs: normalize memory docstring cross-references (#3370)
- docs: document sandbox archive limits after #3278 release (#3311)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.17.1...v0.17.2
11. Mai 2026
Sandboxes
- fix: include sandbox provider error details (#3326)
- fix: #3274 limit sandbox archive extraction (#3278)
- fix: #3273 validate git repo subpaths (#3276)
- fix: allow empty GitRepo subpaths as repository root (#3299)
- fix: preserve GitRepo root subpath aliases (#3303)
Tracing
- fix: make tracing shutdown best-effort on process exit (#3343)
Mehr anzeigenWeniger anzeigen
- fix: keep BatchTraceProcessor worker alive on exporter errors (#3216)
- fix: guard no-op tracing span IDs (#3296)
Sessions
- fix: #3267 preserve required hosted tool IDs in OpenAI conversation sessions (#3341)
- fix: #3304 skip corrupt items during pop (sessions) (#3305)
- fix: #3306 track MongoDB metadata timestamps (#3307)
- fix: preserve created_at across writes (redis-session) (#3202)
- fix: skip corrupt docs in MongoDBSession.pop_item (#3247)
Realtime Agents
- fix: #3333 scope Realtime tool approvals by qualified key (#3340)
- fix: #3286 send realtime output for unknown tool calls (#3287)
- fix: #3284 wake realtime event iterators on close (#3285)
- fix: preserve existing transcript over stale delta accumulator (#3214)
- fix: expose max_output_tokens on RealtimeSessionModelSettings (#3223)
- fix: validate RealtimeAgent fields in
__post_init__(#3234) - fix: skip invalid input_text parts in user input conversion (realtime) (#3243)
- fix: raise UserError for input_type without on_handoff (realtime) (#3248)
- fix: preserve output_audio content parts in output_item events (realtime) (#3230)
- fix: treat None audio.input/audio.output as unset (realtime) (#3254)
- fix: stop AudioInput.to_base64() from mutating caller's buffer (voice agents) (#3201)
Other core modules
- fix: make chat completions response-feature validation opt-in (#3298)
- fix: #3275 reject chat completions server state (#3279)
- fix: #3282 reject unsupported Chat Completions reusable prompts (#3283)
- fix: #3313 align multi-choice chat streams with strict validation (#3314)
- fix: #3308 reject chat custom tool calls explicitly (#3309)
- fix: #3270 validate model retry backoff settings (#3272)
- fix: #3319 preserve nested handoff history content (#3320)
- fix: #3280 streaming guardrail exception cleanup (#3281)
- fix: #3288 normalize RunState guardrail payloads (#3289)
- fix: #3315 align generic dict output schemas (#3316)
- fix: #3317 return fresh empty strict schemas (#3318)
- fix: #781 replace assertion in handoff() with UserError (#3339)
- fix: preserve failed status across apply_patch operations (#3217)
- fix: preserve existing request_usage_entries on Usage.add (#3213)
- fix: await cancelled output guardrail tasks on tripwire (#3187)
- fix: persist output_tokens_details when input details are None (#3227)
- fix: drop reasoning items orphaned by dropped tool calls (#3207)
- fix: skip CompactionItem silently in stream queue helper (#3224)
- fix: await on_handoff callables with async
__call__(#3211) - fix: preserve tool guardrail results across handoffs in SingleStepResult (#3237)
- fix: preserve last known response_id on conversation resume (#3245)
- fix: isolate MCP strict schema conversion from non-strict fallback (#3199)
- fix: exclude Computer instances from provider duck-typing (#3249)
- fix: skip needs_approval_checker when status already resolved (#3229)
- fix: export MCPToolCancellationError from top-level package (#3210)
- fix: preserve chained $ref during sibling-key expansion (#3205)
Extensions
- fix: avoid duplicating content and signed thinking blocks across parallel tool-call splits (any-llm) (#3261)
- fix: avoid duplicating content and signed thinking blocks across parallel tool-call splits (litellm) (#3215)
- fix: #3330 handle string tool trimmer allowlists (#3331)
- fix: preserve HandoffInputData.input_items in remove_all_tools (#3253)
Documentation & Other Changes
- docs: updates for v0.17.0 (#3188)
- docs: add dapr to durable orchestration integrations (#3292)
- docs: update MCP examples (#3342)
- test: guard Responses transport extra kwargs with official client (#3295)
- chore: improve examples auto-run coverage and artifact handling (#3328)
- chore: improve automated example coverage and local service handling (#3297)
New Contributors
Full Changelog: github.com/openai/openai-agents-python/compare/v0.17.0...v0.17.1
8. Mai 2026
RealtimeAgent's default is now gpt-realtime-2
Since this version, the default model for RealtimeAgents is gpt-realtime-2: developers.openai.com/api/docs/models/gpt-realtime-2
Sandbox local source materialization change
In this version, sandbox local source materialization keeps LocalFile.src and LocalDir.src within the materialization base_dir unless the source path is covered by Manifest.extra_path_grants.
Mehr anzeigenWeniger anzeigen
The base_dir is the SDK process current working directory when the manifest is applied; relative local sources are resolved from that directory, while absolute local sources must already be inside it or under an explicit grant. This closes a local artifact boundary issue, but it can affect applications that intentionally copy trusted host files or directories from outside that base directory into a sandbox workspace.Expand commentComment on line R24Resolved
To migrate, grant trusted host roots at the manifest level with SandboxPathGrant, preferably as read-only when the sandbox only needs to read those files:
from pathlib import Path
from agents.sandbox import Manifest, SandboxPathGrant
from agents.sandbox.entries import Dir, LocalDir
# This is an absolute host path outside the SDK process base_dir.
TRUSTED_DOCS_ROOT = Path("/opt/my-app/docs")
manifest = Manifest(
extra_path_grants=(
# This host root is outside the SDK process base_dir, so the manifest must grant it.
SandboxPathGrant(path=str(TRUSTED_DOCS_ROOT), read_only=True),
),
entries={
# No grant is needed for local sources that stay under the SDK process base_dir.
"fixtures": LocalDir(src=Path("fixtures"), description="Local test fixtures."),
# This entry reads from the granted host root and copies it into the sandbox workspace.
"docs": LocalDir(src=TRUSTED_DOCS_ROOT, description="Trusted local documents."),
# Dir creates a sandbox workspace directory; it does not read from the host filesystem.
"output": Dir(description="Generated artifacts."),
},
)Treat extra_path_grants as trusted application configuration. Do not populate grants from model output or other untrusted manifest input unless your application has already approved those host paths.
What's Changed
- feat: default realtime sessions to gpt-realtime-2 (#3190)
- fix: #3169 constrain local sandbox artifact sources to base dir (#3177)
- fix: Responses context-management extra_args collision (#3185)
Documentation & Other Changes
Full Changelog: github.com/openai/openai-agents-python/compare/v0.16.1...v0.17.0
7. Mai 2026
What's Changed
- fix: #3109 stabilize chat completions stream output indexes (#3176)
- fix: #3168 validate MCP require_approval policies (#3179)
- fix: #3116 restore session history after compaction replacement failures (#3117)
- fix: #3171 reject corrupt Dapr session state updates (#3173)
Mehr anzeigenWeniger anzeigen
- fix: #3170 clean up git repo temp clones on failure (#3172)
- fix: #3174 count valid encrypted session items for limits (#3175)
- fix: reject non-object function tool input JSON (#3166)
Documentation & Other Changes
- docs: updates for #3147 (#3148)
- docs: add 0.16.0 changelog (#3153)
- docs: document tool execution concurrency (#3164)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.16.0...v0.16.1
7. Mai 2026
Default model change
In this version, the SDK default model is now gpt-5.4-mini instead of gpt-4.1. This could affect agents and runs that do not explicitly set a model. Because the new default is a GPT-5 model, implicit default model settings now include GPT-5 defaults such as reasoning.effort="none" and verbosity="low".
Mehr anzeigenWeniger anzeigen
The new default model should work better for most use cases (see the report at github.com/openai/openai-agents-python/pull/3147), but if you need to keep the previous default model behavior for some reasons, set a model explicitly on the agent or run config like Agent(name="Assistant", model="gpt-4.1"), or set the OPENAI_DEFAULT_MODEL environment variable.
Disable max_turns detection
This version adds a new option max_turns=None to disable the Agents SDK run turn limit while preserving the existing default of DEFAULT_MAX_TURNS (10) when max_turns is omitted.
Tool execution concurrency
This version adds a new SDK-side runtime configuration for local function tool execution concurrency: ToolExecutionConfig(max_function_tool_concurrency=...) on RunConfig, preserves default behavior when unset. The change keeps provider-side ModelSettings.parallel_tool_calls separate from SDK-side local execution scheduling.
Server-prefixed MCP tool naming
This version adds a new option include_server_in_tool_names to MCPConfig. When it is set to True, the SDK includes the MCP server name in the tool name to prevent tool name conflicts with other MCP servers.
agent = Agent(
name="Assistant",
mcp_servers=[my_mcp_server],
mcp_config={"include_server_in_tool_names": True},
)What's Changed
- feat: switch the default model to a newer mini model (affecting only when a model is unset) (#3147)
- feat: allow disabling max_turns with None (#3132)
- feat: #1167 add opt-in server-prefixed MCP tool names (#3019)
- feat: #1859 add runtime function tool concurrency config (#3152)
- fix: #3104 stabilize chat completions tool call output indexes (#3161)
- fix: reject external symlink targets during hydrate (#3094)
- fix: make Permissions hashable to match User and Group (#3154)
Documentation & Other Changes
- docs: realtime guardrail fallback behavior (#3157)
New Contributors
- @mavrickdeveloper made their first contribution (#3019)
- @mindbomber made their first contribution (#3157)
Full Changelog: github.com/openai/openai-agents-python/compare/v0.15.3...v0.16.0