OpenAI Agents SDK
Changelog
OpenAI Agent SDK, showing Python releases
This page shows at most the 60 most recent releases from official sources. It does not claim to be a complete version history.
Latest Releases (62)
v0.23.1
October 2, 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.
- •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.
v0.23.0
October 2, 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)
- •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)
v0.22.3
September 18, 2026
## What's Changed * fix(core): align conditional approvals with validated tool arguments by @seratch in https://github.com/openai/openai-agents-python/pull/5066 * fix(core): deliver tool-not-found output on server-managed resume by @hyeonsang010716 in https://github.com/openai/openai-agents-python/pull/4947 * fix(sandbox): keep command paths POSIX on a Windows host by @hyeonsang010716 in https://github.com/openai/openai-agents-python/pull/4958 * fix(sessions): handle concurrent async SQLite startup by @00200200 in https://github.com/openai/openai-agents-python/pull/4987 * fix(sessions): do not forward session limit as Conversations page size by @tiagovilasboas in https://github.com/openai/openai-agents-python/pull/4961 * fix(tracing): do not cache a missing OPENAI_API_KEY by @hyeonsang010716 in https://github.com/openai/openai-agents-python/pull/5017 * fix(extensions): include shell and apply_patch calls in AdvancedSQLiteSession's tool usage by @rioyu123 in https://github.com/openai/openai-agents-python/pull/4982 * fix(extensions): reap subprocesses on early stream close by @Hughhhhcoder in https://github.com/openai/openai-agents-python/pull/4804 * fix(extensions): preserve exact IDs in AdvancedSQLiteSession.delete_branch by @JiangLLM in https://github.com/openai/openai-agents-python/pull/4980 ### Documentation & Other Changes * docs: align repository security and contributor guidance by @jbeckwith-oai in https://github.com/openai/openai-agents-python/pull/4962 * docs: clarify Unix-local execution boundaries by @seratch in https://github.com/openai/openai-agents-python/pull/5064 * docs: update translated pages by @seratch in https://github.com/openai/openai-agents-python/pull/5065 * docs(examples): drop the duplicated word in the Temporal trace name by @simpleqt in https://github.com/openai/openai-agents-python/pull/5079 * chore: enable Python Dependabot coverage with release-age cooldowns by @jbeckwith-oai in https://github.com/openai/openai-agents-python/pull/4964 * chore: add code ownership and required release review guidance by @jbeckwith-oai in https://github.com/openai/openai-agents-python/pull/4965 * fix(deps): update vulnerable dependencies without changing SDK APIs by @jbeckwith-oai in https://github.com/openai/openai-agents-python/pull/4963 * chore(deps): update fastapi requirement from >=0.120.0 to >=0.141.1 in /examples/realtime/twilio_sip by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4966 * chore(deps): update uvicorn requirement from >=0.38.0 to >=0.52.4 in /examples/realtime/twilio_sip by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4968 * chore(deps): update openai requirement from <4,>=3.0.0 to >=3.8.0,<4 in /examples/realtime/twilio_sip by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4969 * chore(deps): bump typing-extensions from 4.14.1 to 4.16.0 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4970 * chore(deps-dev): bump grpcio from 1.76.0 to 1.83.1 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4971 * chore(deps): bump sqlalchemy from 2.0.43 to 2.0.52 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4973 * chore(deps-dev): bump cryptography from 45.0.7 to 50.0.0 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4975 * ci: add Python and Actions CodeQL security scanning by @jbeckwith-oai in https://github.com/openai/openai-agents-python/pull/4974 * fix(ci): deploy docs after dependency and workflow updates by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4976 * fix(deps): update python-multipart requirement from >=0.0.31 to >=0.0.32 in /examples/realtime/twilio by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/5030 * fix(deps): update python-dotenv requirement from >=1.2.2 to >=1.2.3 in /examples/realtime/twilio by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/5031 * fix(deps): update starlette requirement from >=1.3.1 to >=1.6.0 in /examples/realtime/twilio_sip by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/5033 * fix(deps): update python-dotenv requirement from >=1.2.2 to >=1.2.3 in /examples/realtime/twilio_sip by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/5034 * fix(deps-dev): bump pymdown-extensions from 11.0.1 to 11.0.2 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/5036 * fix(deps): bump runloop-api-client from 1.16.0 to 1.31.0 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/5037 * fix(deps): bump starlette from 1.3.1 to 1.6.0 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/5038 * fix(deps): update starlette requirement from >=1.3.1 to >=1.6.0 in /examples/realtime/twilio by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/5032 * Add SDKs team as repository code owner by @jbeckwith-oai in https://github.com/openai/openai-agents-python/pull/5058 * release: 0.22.3 by @seratch in https://github.com/openai/openai-agents-python/pull/5077 ## New Contributors * @hyeonsang010716 made their first contribution in https://github.com/openai/openai-agents-python/pull/4947 * @jbeckwith-oai made their first contribution in https://github.com/openai/openai-agents-python/pull/4962 * @00200200 made their first contribution in https://github.com/openai/openai-agents-python/pull/4987 * @JiangLLM made their first contribution in https://github.com/openai/openai-agents-python/pull/4980 * @tiagovilasboas made their first contribution in https://github.com/openai/openai-agents-python/pull/4961 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.22.2...v0.22.3
OpenAI Agents SDK 0.22.2
September 9, 2026
## What's Changed * feat: support current image generation tool options by @seratch in https://github.com/openai/openai-agents-python/pull/4932 * fix(sandbox): prevent UnixLocal file API symlink races by @seratch in https://github.com/openai/openai-agents-python/pull/4931 * fix(sessions): reset compaction response chain after pop by @rksharma-owg in https://github.com/openai/openai-agents-python/pull/4934 ### Documentation & Other Changes * docs: document v0.22.1 behavior updates by @seratch in https://github.com/openai/openai-agents-python/pull/4577 * release: 0.22.2 by @seratch in https://github.com/openai/openai-agents-python/pull/4935 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.22.1...v0.22.2
v0.22.1
September 8, 2026
## What's Changed * feat(core): support image results in web search tools by @seratch in https://github.com/openai/openai-agents-python/pull/4898 * feat(core): customize output guardrail blocked messages by @seratch in https://github.com/openai/openai-agents-python/pull/4594 * feat(mcp): add server-wide guardrails to MCP tools by @seratch in https://github.com/openai/openai-agents-python/pull/4632 * feat(sandbox): add configurable Unix-local environment isolation by @seratch in https://github.com/openai/openai-agents-python/pull/4640 * feat(sandbox): allow labels on Docker sandbox containers by @seanxuu in https://github.com/openai/openai-agents-python/pull/4564 * feat(voice): expose streamed transcription options by @seratch in https://github.com/openai/openai-agents-python/pull/4645 * fix(core): detach aggregated request usage entries by @green3sf in https://github.com/openai/openai-agents-python/pull/4519 * fix(core): fail closed on empty tool arguments by @hsusul in https://github.com/openai/openai-agents-python/pull/4545 * fix(core): strip created_by when replaying RunItems as input by @hsusul in https://github.com/openai/openai-agents-python/pull/4568 * fix(core): strict_schema error message, REPL whitespace input, debug docstrings by @simpleqt in https://github.com/openai/openai-agents-python/pull/4600 * fix(core): max_turns no longer clobbers a tripped input guardrail exception in streaming by @shoemoney in https://github.com/openai/openai-agents-python/pull/4606 * fix(core): preserve serialized approval resume ownership by @seratch in https://github.com/openai/openai-agents-python/pull/4613 * fix(core): read tool args without Pydantic property shadowing by @hsusul in https://github.com/openai/openai-agents-python/pull/4627 * fix(core): accept JSON Schema type arrays of object for tool outputs by @hsusul in https://github.com/openai/openai-agents-python/pull/4647 * fix(core): honor End of File hunks when the file ends in a newline by @lllakshit in https://github.com/openai/openai-agents-python/pull/4661 * fix(core): preserve tuple annotations for variadic tool arguments by @Excelius-Wang in https://github.com/openai/openai-agents-python/pull/4655 * fix(core): fix streamed response span losing response/input when consumer stops at completed event by @XuQuanxin04 in https://github.com/openai/openai-agents-python/pull/4692 * fix(core): apply **kwargs value annotation to each keyword value by @abhay-codes07 in https://github.com/openai/openai-agents-python/pull/4714 * fix(core): reject **kwargs keys that collide with named tool parameters by @rajarshidattapy in https://github.com/openai/openai-agents-python/pull/4674 * fix(core): reject fixed-length tuple annotations for variadic tool arguments by @subhashpolisetti in https://github.com/openai/openai-agents-python/pull/4735 * fix(core): preserve Field constraints on variadic tool parameters by @rioyu123 in https://github.com/openai/openai-agents-python/pull/4739 * fix(core): close model providers created by Runner by @Excelius-Wang in https://github.com/openai/openai-agents-python/pull/4785 * fix(core/voice): honor OpenAI provider options over default clients by @green3sf in https://github.com/openai/openai-agents-python/pull/4530 * fix(chat-completions): merge a streamed turn's message into its pending tool-call message by @mmjerge in https://github.com/openai/openai-agents-python/pull/4728 * fix(chat-completions): raise ModelBehaviorError on truncated empty completions by @weike-zhang in https://github.com/openai/openai-agents-python/pull/4513 * fix(chat-completions) reject unpaired function outputs in Chat Completions by @apcha-oai in https://github.com/openai/openai-agents-python/pull/4699 * fix(extensions): skip AdvancedSQLiteSession usage store when the branch has no turn by @rioyu123 in https://github.com/openai/openai-agents-python/pull/4822 * fix(extensions): nest extra_body on the any-llm chat path by @hsusul in https://github.com/openai/openai-agents-python/pull/4544 * fix(mcp): deep-copy cached tools before returning them by @hsusul in https://github.com/openai/openai-agents-python/pull/4525 * fix(mcp): clear active MCP servers after cleanup by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4586 * fix(mcp): deduplicate managed servers by @hsusul in https://github.com/openai/openai-agents-python/pull/4591 * fix(realtime): advance crossed guardrail thresholds by @hsusul in https://github.com/openai/openai-agents-python/pull/4590 * fix(realtime): preserve item status on retrieved conversation items by @shoutoutuoadi325 in https://github.com/openai/openai-agents-python/pull/4598 * fix(sandbox): finish dependency cleanup on cancellation by @hsusul in https://github.com/openai/openai-agents-python/pull/4607 * fix(sandbox): keep unbounded UnixLocal workspace I/O off the event loop by @ayaangazali in https://github.com/openai/openai-agents-python/pull/4700 * fix(sandbox): preserve UTF-8 boundaries in Cloudflare SSE by @Hughhhhcoder in https://github.com/openai/openai-agents-python/pull/4707 * fix(sandbox): clean up PTY startup cancellation by @Hughhhhcoder in https://github.com/openai/openai-agents-python/pull/4750 * fix(sandbox): settle PTY output before cleanup by @seratch in https://github.com/openai/openai-agents-python/pull/4738 * fix(sandbox): preserve workdir for shell command lists by @hsusul in https://github.com/openai/openai-agents-python/pull/4915 * fix(sessions): recover failed resumed Session writes before model calls by @seratch in https://github.com/openai/openai-agents-python/pull/4630 * fix(sessions): recover failed resumed Session writes on a renewed interruption by @ayaangazali in https://github.com/openai/openai-agents-python/pull/4650 * fix(sessions): persist resumed tool guardrail results by @FU-max-boop in https://github.com/openai/openai-agents-python/pull/4654 * fix(sessions): recover resumed handoffs after session append failures by @seratch in https://github.com/openai/openai-agents-python/pull/4725 * fix(sessions): settle conversation deletion before propagating cancellation by @Excelius-Wang in https://github.com/openai/openai-agents-python/pull/4790 * fix(sessions): preserve concurrent writes during compaction by @seratch in https://github.com/openai/openai-agents-python/pull/4736 * fix(sessions): reject resuming a run whose accepted terminal output was not persisted by @Ayushraj06-bit in https://github.com/openai/openai-agents-python/pull/4698 * fix(sessions): preserve Session transformations during generation tracking by @seratch in https://github.com/openai/openai-agents-python/pull/4917 * fix(tracing): flush buffered data after tracing is disabled by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4528 * fix(tracing): preserve response IDs in redacted traces by @seratch in https://github.com/openai/openai-agents-python/pull/4641 * fix(tracing): record the tool output on approval-gated function spans by @dfedoryshchev in https://github.com/openai/openai-agents-python/pull/4866 * fix(voice): support custom OpenAI TTS voice IDs by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4541 * fix(voice): forward streamed STT language and prompt by @seratch in https://github.com/openai/openai-agents-python/pull/4574 * fix(voice): honor client config for streamed STT by @seratch in https://github.com/openai/openai-agents-python/pull/4575 * fix(voice) reject ignored explicit-client options by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4527 * fix(voice): include current OpenAI TTS voices by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4535 * fix(voice): use monotonic STT event deadlines by @seratch in https://github.com/openai/openai-agents-python/pull/4593 * fix(voice): support context in single-agent workflow by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4636 * fix(voice): enforce public Voice class state coverage by @seratch in https://github.com/openai/openai-agents-python/pull/4644 * fix(voice): redact STT prompts from traces by @hsusul in https://github.com/openai/openai-agents-python/pull/4663 * fix(voice): redact TTS instructions from speech spans by @ayaangazali in https://github.com/openai/openai-agents-python/pull/4676 * fix(voice): accept every NumPy spelling of a supported TTS dtype by @Nikhils-G in https://github.com/openai/openai-agents-python/pull/4778 * fix(voice): wake stream when producer is cancelled by @Hughhhhcoder in https://github.com/openai/openai-agents-python/pull/4825 * fix(visualization): preserve nodes with duplicate names by @tandede in https://github.com/openai/openai-agents-python/pull/4512 * refactor: extract RunState agent graph identity by @seratch in https://github.com/openai/openai-agents-python/pull/4876 * refactor: share provider generation-span population by @seratch in https://github.com/openai/openai-agents-python/pull/4877 ### Documentation & Other Changes * docs: document v0.22.0 behavior changes by @seratch in https://github.com/openai/openai-agents-python/pull/4522 * docs: fix wording in handoff example prompts by @Chair403 in https://github.com/openai/openai-agents-python/pull/4520 * docs: preserve English heading anchors in translated pages by @saime428 in https://github.com/openai/openai-agents-python/pull/4580 * docs: refresh tracing integration links by @seratch in https://github.com/openai/openai-agents-python/pull/4634 * docs: clarify capability visibility and authorization by @seratch in https://github.com/openai/openai-agents-python/pull/4642 * docs: clarify database driver installation for SQLAlchemy sessions by @rioyu123 in https://github.com/openai/openai-agents-python/pull/4743 * docs: skip reference pages on Windows by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4761 * docs: clarify requested state consistency guarantees by @rksharma-owg in https://github.com/openai/openai-agents-python/pull/4903 * docs: make the encrypted session quick start self-contained by @rioyu123 in https://github.com/openai/openai-agents-python/pull/4909 * fix: freeze the public voice API contract by @seratch in https://github.com/openai/openai-agents-python/pull/4578 * fix: enforce public type alias contract coverage by @seratch in https://github.com/openai/openai-agents-python/pull/4595 * fix: route verification changes and require confirmed docs-only pushes by @seratch in https://github.com/openai/openai-agents-python/pull/4880 * fix: propagate the serial test runner's exit code on Windows by @MohammedAlkindi in https://github.com/openai/openai-agents-python/pull/4771 * fix: harden PyPI publishing and require manual release tags by @seratch in https://github.com/openai/openai-agents-python/pull/4726 * fix: require complete policy for new public TypedDicts by @seratch in https://github.com/openai/openai-agents-python/pull/4900 * fix: simplify verification and stabilize sandbox tests by @seratch in https://github.com/openai/openai-agents-python/pull/4916 * fix: consolidate Docker-backed integration tests by @seratch in https://github.com/openai/openai-agents-python/pull/4667 * chore(deps): bump actions/download-artifact from 4.3.0 to 8.0.1 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4802 * chore(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4803 * chore: run repository skill tests in dedicated CI by @seratch in https://github.com/openai/openai-agents-python/pull/4881 * refactor: separate release contract verification responsibilities by @seratch in https://github.com/openai/openai-agents-python/pull/4878 * perf: reduce async stability command startup overhead by @seratch in https://github.com/openai/openai-agents-python/pull/4874 * test: make async progress and trace-worker tests deterministic by @seratch in https://github.com/openai/openai-agents-python/pull/4875 * test: organize Realtime session tests by responsibility by @seratch in https://github.com/openai/openai-agents-python/pull/4879 * test(sandbox): skip unavailable Windows symlinks by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4853 * release: 0.22.1 by @seratch in https://github.com/openai/openai-agents-python/pull/4576 ## New Contributors * @Chair403 made their first contribution in https://github.com/openai/openai-agents-python/pull/4520 * @green3sf made their first contribution in https://github.com/openai/openai-agents-python/pull/4519 * @tandede made their first contribution in https://github.com/openai/openai-agents-python/pull/4512 * @seanxuu made their first contribution in https://github.com/openai/openai-agents-python/pull/4564 * @simpleqt made their first contribution in https://github.com/openai/openai-agents-python/pull/4600 * @shoemoney made their first contribution in https://github.com/openai/openai-agents-python/pull/4606 * @shoutoutuoadi325 made their first contribution in https://github.com/openai/openai-agents-python/pull/4598 * @ayaangazali made their first contribution in https://github.com/openai/openai-agents-python/pull/4650 * @lllakshit made their first contribution in https://github.com/openai/openai-agents-python/pull/4661 * @Excelius-Wang made their first contribution in https://github.com/openai/openai-agents-python/pull/4655 * @XuQuanxin04 made their first contribution in https://github.com/openai/openai-agents-python/pull/4692 * @Hughhhhcoder made their first contribution in https://github.com/openai/openai-agents-python/pull/4707 * @rajarshidattapy made their first contribution in https://github.com/openai/openai-agents-python/pull/4674 * @mmjerge made their first contribution in https://github.com/openai/openai-agents-python/pull/4728 * @subhashpolisetti made their first contribution in https://github.com/openai/openai-agents-python/pull/4735 * @rioyu123 made their first contribution in https://github.com/openai/openai-agents-python/pull/4822 * @Nikhils-G made their first contribution in https://github.com/openai/openai-agents-python/pull/4778 * @MohammedAlkindi made their first contribution in https://github.com/openai/openai-agents-python/pull/4771 * @Ayushraj06-bit made their first contribution in https://github.com/openai/openai-agents-python/pull/4698 * @rksharma-owg made their first contribution in https://github.com/openai/openai-agents-python/pull/4903 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.22.0...v0.22.1
v0.22.0
August 19, 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 ModelBehaviorError for non-streaming Responses with terminal status failed or incomplete.
- Rejects conflicting provider options when OpenAIProvider receives an explicit client.
- Isolates usage accounting between independent RunState checkpoints while preserving nested-agent aggregation.
- Expands agents registered through handoff(agent) in generated graphs.
- Clarifies the existing shallow-copy behavior of Agent.clone() and RealtimeAgent.clone().
## What's Changed
* fix(core): redact blocked tool outputs from replay state by @seratch in https://github.com/openai/openai-agents-python/pull/4507
* fix(core): reject ignored explicit-client options for OpenAIProvider by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4497
* fix(core): preserve Griffe logger inheritance by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4494
fix(core): reject terminal failed/incomplete responses in non-streaming get_response by @weike-zhang in https://github. * fix(core): isolate usage between RunState checkpoints by @chiruu12 in https://github.com/openai/openai-agents-python/pull/4479
fix(sandbox): require apply_patch update hunks by @li2631026381-alt in https://github.com/openai/openai-agents-python/pull/4470
* fix(sandbox): enforce Windows mypy compatibility by @seratch in https://github.com/openai/openai-agents-python/pull/4499
* fix(tracing): respect model-data logging redaction for record_model_error_on_span by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4496
* fix(tracing): clean up processors after tracing is disabled by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4502
* fix(visualization): expand handoff() targets in agent graphs by @hsusul in https://github.com/openai/openai-agents-python/pull/4517
### Documentation & Other Changes
* docs: document v0.21.1 runtime behavior by @seratch in https://github.com/openai/openai-agents-python/pull/4460
* docs: correct Agent.clone list attribute semantics by @thegoodengineer in https://github.com/openai/openai-agents-python/pull/4474
* docs: add testing resources to llms indexes by @teachershuang in https://github.com/openai/openai-agents-python/pull/4509
* ci: align Python version coverage by @seratch in https://github.com/openai/openai-agents-python/pull/4475
* test: use sys.executable instead of tee for the stdio placeholder command by @ErenAta16 in https://github.com/openai/openai-agents-python/pull/4478
* fix: keep Codex verification for development sandboxed by @seratch in https://github.com/openai/openai-agents-python/pull/4508
com/openai/openai-agents-python/pull/4516
* release: 0.22.0 by @seratch in https://github.com/openai/openai-agents-python/pull/4523
## New Contributors
* @li2631026381-alt made their first contribution in https://github.com/openai/openai-agents-python/pull/4470
* @thegoodengineer made their first contribution in https://github.com/openai/openai-agents-python/pull/4474
* @teachershuang made their first contribution in https://github.com/openai/openai-agents-python/pull/4509
* @weike-zhang made their first contribution in https://github.com/openai/openai-agents-python/pull/4516
* @chiruu12 made their first contribution in https://github.com/openai/openai-agents-python/pull/4479
Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.21.1...v0.22.0
v0.21.1
August 17, 2026
## What's Changed * feat(core): add model call timeouts by @seratch in https://github.com/openai/openai-agents-python/pull/4428 * feat(sandbox): add run-scoped sandbox working directories by @seratch in https://github.com/openai/openai-agents-python/pull/4427 * feat(sandbox): allow Docker sandboxes to disable networking by @koadegno in https://github.com/openai/openai-agents-python/pull/4452 * feat(sandbox): add Modal sandbox resource options by @Filimoa in https://github.com/openai/openai-agents-python/pull/4455 * fix(core): honor exact call approval decisions by @seratch in https://github.com/openai/openai-agents-python/pull/4447 * fix(core): count Responses requests without usage by @seratch in https://github.com/openai/openai-agents-python/pull/4453 * fix(core): close all MultiProvider children after failures by @fszcd in https://github.com/openai/openai-agents-python/pull/4438 * fix(core): reject partially matched stacked anchors by @Coiggahou2002 in https://github.com/openai/openai-agents-python/pull/4431 * fix(chat-completions): Chat Completions reasoning replay by @seratch in https://github.com/openai/openai-agents-python/pull/4432 * fix(realtime): truncate audio at zero elapsed time by @Chirag6722 in https://github.com/openai/openai-agents-python/pull/4457 * fix(realtime): end iteration after clean server close by @seratch in https://github.com/openai/openai-agents-python/pull/4461 * fix(sessions): prevent advanced SQLite structure table conflicts by @seratch in https://github.com/openai/openai-agents-python/pull/4454 * fix(sessions): include compaction usage in run totals by @seratch in https://github.com/openai/openai-agents-python/pull/4446 * fix(sandbox): validate view_image raster content by @seratch in https://github.com/openai/openai-agents-python/pull/4462 * fix(sandbox): keep model paths POSIX-normalized by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4416 * fix(sandbox): normalize apply_patch paths as POSIX by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4437 ### Documentation & Other Changes * docs: updates for v0.21.0 release by @seratch in https://github.com/openai/openai-agents-python/pull/4381 * docs: list Tuning Engines tracing integration by @cerebrixos in https://github.com/openai/openai-agents-python/pull/4440 * fix: update cffi lock for Python 3.14 by @seratch in https://github.com/openai/openai-agents-python/pull/4448 * release: 0.21.1 by @seratch in https://github.com/openai/openai-agents-python/pull/4467 ## New Contributors * @Coiggahou2002 made their first contribution in https://github.com/openai/openai-agents-python/pull/4431 * @fszcd made their first contribution in https://github.com/openai/openai-agents-python/pull/4438 * @cerebrixos made their first contribution in https://github.com/openai/openai-agents-python/pull/4440 * @Filimoa made their first contribution in https://github.com/openai/openai-agents-python/pull/4455 * @koadegno made their first contribution in https://github.com/openai/openai-agents-python/pull/4452 * @Chirag6722 made their first contribution in https://github.com/openai/openai-agents-python/pull/4457 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.21.0...v0.21.1
v0.21.0
August 15, 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, and agents.voice.testing utilities 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.
- 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 by @seratch in https://github.com/openai/openai-agents-python/pull/4380
* feat: add scripted model test utilities by @seratch in https://github.com/openai/openai-agents-python/pull/4362
* fix: freeze public testing module contracts by @seratch in https://github.com/openai/openai-agents-python/pull/4386
* fix: freeze public testing API state contracts by @seratch in https://github.com/openai/openai-agents-python/pull/4404
* fix(core): preserve scripted annotation streaming across Python SDK releases by @apcha-oai in https://github.com/openai/openai-agents-python/pull/4422
* fix(core): isolate interruption results by @hsusul in https://github.com/openai/openai-agents-python/pull/4384
* fix(core): close the model stream when a streamed turn ends in a terminal failure by @Luccacvb in https://github.com/openai/openai-agents-python/pull/4366
* fix(core): redact tool output value from output-type validation errors by @hsusul in https://github.com/openai/openai-agents-python/pull/4396
* fix(core): align Responses parallel tool calls with converted tools by @seratch in https://github.com/openai/openai-agents-python/pull/4405
* fix(core): max-turn handler session semantics by @seratch in https://github.com/openai/openai-agents-python/pull/4412
* fix(core): detach RunState interruption snapshots by @seratch in https://github.com/openai/openai-agents-python/pull/4409
* fix(core): isolate RunState checkpoint tool decisions by @seratch in https://github.com/openai/openai-agents-python/pull/4413
* fix(core): resume recursive agent tool approvals by @seratch in https://github.com/openai/openai-agents-python/pull/4414
* fix(mcp): stop handing the tools cache to callers by @chinmayv095 in https://github.com/openai/openai-agents-python/pull/4424
* fix(mcp): protect manager lifecycle state snapshots by @seratch in https://github.com/openai/openai-agents-python/pull/4407
* fix(mcp): isolate manager lifecycle results by @hsusul in https://github.com/openai/openai-agents-python/pull/4368
* fix(mcp): add configurable retry backoff ceiling by @seratch in https://github.com/openai/openai-agents-python/pull/4379
* fix(realtime): handle non-finite audio rates by @hsusul in https://github.com/openai/openai-agents-python/pull/4419
* fix(sandbox): expose the scripted sandbox session type by @seratch in https://github.com/openai/openai-agents-python/pull/4406
* fix(sandbox): apply stacked anchors sequentially by @seratch in https://github.com/openai/openai-agents-python/pull/4369
* fix(sandbox): snapshot HTTP proxy headers by @hsusul in https://github.com/openai/openai-agents-python/pull/4397
* fix(sandbox): snapshot per-op audit policies by @hsusul in https://github.com/openai/openai-agents-python/pull/4398
* fix(sandbox): honor view_image extra path grants by @sylvesterkaczmarek in https://github.com/openai/openai-agents-python/pull/4417
* fix(sessions): handle zero conversation history limits by @hsusul in https://github.com/openai/openai-agents-python/pull/4365
* fix(voice): honor WAV sample width by @FU-max-boop in https://github.com/openai/openai-agents-python/pull/4361
* fix(voice): reject incomplete multichannel audio frames by @seratch in https://github.com/openai/openai-agents-python/pull/4370
* fix(voice): reject non-positive audio channels by @hansu650 in https://github.com/openai/openai-agents-python/pull/4372
* fix(voice): reject non-positive audio frame rates by @hsusul in https://github.com/openai/openai-agents-python/pull/4382
* fix(voice): stop buffering audio when audio tracing is disabled by @rxits in https://github.com/openai/openai-agents-python/pull/4411
* fix(extensions): gate AnyLLM parallel tool calls on converted tools by @weivwang in https://github.com/openai/openai-agents-python/pull/4363
* fix(extensions): preserve resume argument ordering by @viyatb-oai in https://github.com/openai/openai-agents-python/pull/4400
* fix(extensions): let managed_secrets reference existing Runloop secrets by @xumaple in https://github.com/openai/openai-agents-python/pull/4378
### Documentation & Other Changes
* docs: synchronize v0.20.0 features by @seratch in https://github.com/openai/openai-agents-python/pull/4280
* docs: clarify PGP key location by @jaideeppyne in https://github.com/openai/openai-agents-python/pull/4371
* test: order test spans by start sequence, not by started_at alone by @ErenAta16 in https://github.com/openai/openai-agents-python/pull/4392
* release: 0.21.0 by @seratch in https://github.com/openai/openai-agents-python/pull/4387
## New Contributors
* @FU-max-boop made their first contribution in https://github.com/openai/openai-agents-python/pull/4361
* @weivwang made their first contribution in https://github.com/openai/openai-agents-python/pull/4363
* @jaideeppyne made their first contribution in https://github.com/openai/openai-agents-python/pull/4371
* @hansu650 made their first contribution in https://github.com/openai/openai-agents-python/pull/4372
* @xumaple made their first contribution in https://github.com/openai/openai-agents-python/pull/4378
* @viyatb-oai made their first contribution in https://github.com/openai/openai-agents-python/pull/4400
* @ErenAta16 made their first contribution in https://github.com/openai/openai-agents-python/pull/4392
* @apcha-oai made their first contribution in https://github.com/openai/openai-agents-python/pull/4422
* @sylvesterkaczmarek made their first contribution in https://github.com/openai/openai-agents-python/pull/4417
Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.20.0...v0.21.0
v0.20.0
August 11, 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, and OPENAI_DEFAULT_MODEL continue to take precedence.
- Local MCP connections support MCP Python SDK v1 and v2 across stdio, SSE, and Streamable HTTP transports.
- 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, and gpt-realtime-whisper.
## What's Changed
* feat: use GPT-5.6 Luna as the default model by @seratch in https://github.com/openai/openai-agents-python/pull/4282
* feat: add durable pending input to RunState by @seratch in https://github.com/openai/openai-agents-python/pull/4325
* feat(mcp): support MCP Python SDK v1 and v2 by @seratch in https://github.com/openai/openai-agents-python/pull/4106
* feat(sessions): pass run context to custom sessions by @seratch in https://github.com/openai/openai-agents-python/pull/4209
* feat(realtime): support GA transcription options by @seratch in https://github.com/openai/openai-agents-python/pull/4351
* feat: preserve raw usage payloads by @seratch in https://github.com/openai/openai-agents-python/pull/4279
* feat: allow applications to approve unsafe replays by @seratch in https://github.com/openai/openai-agents-python/pull/4319
* fix: falsy optional reference handling by @seratch in https://github.com/openai/openai-agents-python/pull/4305
* fix: prevent queue consumer deadlocks by @seratch in https://github.com/openai/openai-agents-python/pull/4201
* fix: publish completed streamed guardrail results on failure paths by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4223
* fix: annotate the bare tool guardrail decorator overloads by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4238
* fix: tool approval is not honored on resume when Runner.run is given a context by @ojassharma7 in https://github.com/openai/openai-agents-python/pull/4245
* fix: redact JSON validation errors by @seratch in https://github.com/openai/openai-agents-python/pull/4211
* fix: copy raw_responses when building a RunState by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4237
* fix: keep empty turns in the nested conversation history by @abhay-codes07 in https://github.com/openai/openai-agents-python/pull/4230
* fix: keep tool guardrail results when a resumed run interrupts again by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4239
* fix: work on copies of the lists a resumed run adopts from RunState by @hsusul in https://github.com/openai/openai-agents-python/pull/4251
* fix: strip placeholder item IDs without provider_data on the Responses path by @LeSingh1 in https://github.com/openai/openai-agents-python/pull/4266
* fix: bind tool approvals to concrete invocations by @seratch in https://github.com/openai/openai-agents-python/pull/4257
* fix: normalize optional fields in tool invocation identity by @seratch in https://github.com/openai/openai-agents-python/pull/4289
* fix: count requests when providers omit usage by @seratch in https://github.com/openai/openai-agents-python/pull/4290
* fix: suppress pydantic serializer warnings by @seratch in https://github.com/openai/openai-agents-python/pull/4291
* fix: keep FunctionTool subclasses copyable by @seratch in https://github.com/openai/openai-agents-python/pull/4311
* fix: preserve streamed guardrail session state by @seratch in https://github.com/openai/openai-agents-python/pull/4312
* fix: keep acknowledged safety checks serializable after restore by @ribhavjain in https://github.com/openai/openai-agents-python/pull/4316
* fix: preserve default-valued fields in serialized tool output by @hsusul in https://github.com/openai/openai-agents-python/pull/4307
* fix: strip output-only created_by when replaying model output as input by @hsusul in https://github.com/openai/openai-agents-python/pull/4308
* fix: preserve local shell outputs across RunState resume by @seratch in https://github.com/openai/openai-agents-python/pull/4320
* fix: serialize containers of models and dataclasses as structured data by @ribhavjain in https://github.com/openai/openai-agents-python/pull/4339
* fix: reject schemas that exceed safe recursion depth by @seratch in https://github.com/openai/openai-agents-python/pull/4358
* fix: reject unsafe strict-schema ref siblings by @seratch in https://github.com/openai/openai-agents-python/pull/4356
* fix(sandbox): reject unsafe mount credential configurations by @seratch in https://github.com/openai/openai-agents-python/pull/4255
* fix(extensions): settle snapshot directory mount transitions for Modal by @seratch in https://github.com/openai/openai-agents-python/pull/4315
* fix(sandbox): preserve sandbox error contracts during mount redaction by @seratch in https://github.com/openai/openai-agents-python/pull/4344
* feat(sandbox): add explicit mount credential exposure acknowledgements by @seratch in https://github.com/openai/openai-agents-python/pull/4321
* fix(sandbox): cancel sibling env resolvers when one fails by @PranavMishra28 in https://github.com/openai/openai-agents-python/pull/4195
* fix(sandbox): encode Blaxel terminal WebSocket URL query values by @abhay-codes07 in https://github.com/openai/openai-agents-python/pull/4217
* fix(sandbox): stop splitting Cloudflare SSE events at chunk boundaries by @abhay-codes07 in https://github.com/openai/openai-agents-python/pull/4215
* fix(sandbox): keep move_to when coercing apply_patch operation mappings by @hsusul in https://github.com/openai/openai-agents-python/pull/4242
* fix(sandbox): retain program items in memory rollouts by @seratch in https://github.com/openai/openai-agents-python/pull/4276
* fix(sandbox): restore archived file modes when extracting a workspace tar by @hsusul in https://github.com/openai/openai-agents-python/pull/4287
* fix(sandbox): keep source entry metadata when lazily loading a skill by @hsusul in https://github.com/openai/openai-agents-python/pull/4294
* fix(mcp): hosted MCP approval identity by @seratch in https://github.com/openai/openai-agents-python/pull/4256
* fix(mcp): keep MCP error content when structured output is enabled by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4224
* fix(mcp): build the active server list without re-consuming the iterable by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4235
* fix(mcp): preserve free-form MCP object schemas by @seratch in https://github.com/openai/openai-agents-python/pull/4310
* fix(mcp): serialize non-text content blocks as JSON instead of Python repr by @ribhavjain in https://github.com/openai/openai-agents-python/pull/4338
* fix(mcp): serialize manager lifecycle operations by @seratch in https://github.com/openai/openai-agents-python/pull/4340
* fix(mcp): bound lifecycle and CI waits by @seratch in https://github.com/openai/openai-agents-python/pull/4342
* fix(chat-completions): keep url citations when converting chat completions output by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4222
* fix(chat-completions): assemble chat completions content parts in content index order by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4236
* fix(chat-completions): propagate the OpenAI request ID on the Chat Completions path by @hsusul in https://github.com/openai/openai-agents-python/pull/4243
* fix(chat-completions): keep url citations on the streamed chat completions path by @Luccacvb in https://github.com/openai/openai-agents-python/pull/4252
* fix(chat-completions): announce the chat completions assistant message once by @hsusul in https://github.com/openai/openai-agents-python/pull/4275
* fix(chat-completions): convert input_file items that reference a file_id on the Chat Completions path by @hsusul in https://github.com/openai/openai-agents-python/pull/4295
* fix(chat-completions): raise on audio output in the streamed chat completions path by @Luccacvb in https://github.com/openai/openai-agents-python/pull/4309
* fix(chat-completions): omit parallel_tool_calls without tools on the Chat Completions path by @Luccacvb in https://github.com/openai/openai-agents-python/pull/4359
* fix(sessions): release SQLite engine config entries when engines are collected by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4210
* fix(sessions): enforce closed state on SQLite session empty add_items by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4231
* fix(sessions): make session mutations atomic by @seratch in https://github.com/openai/openai-agents-python/pull/4212
* fix(sessions): preserve required program item ids for OpenAI conversations by @hsusul in https://github.com/openai/openai-agents-python/pull/4253
* fix(sessions): apply the reasoning item id policy to stored session history by @LeSingh1 in https://github.com/openai/openai-agents-python/pull/4278
* fix(sessions): preserve DaprSession created_at across writes by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4213
* fix(sessions): strip placeholder item IDs before Conversations persistence by @hsusul in https://github.com/openai/openai-agents-python/pull/4288
* fix(sessions): preserve falsey compaction decision hooks by @hsusul in https://github.com/openai/openai-agents-python/pull/4299
* fix(sessions): restore session history when compaction replacement is cancelled by @nothariharan in https://github.com/openai/openai-agents-python/pull/4298
* fix(sessions): prune orphaned tool outputs from limited sessions by @seratch in https://github.com/openai/openai-agents-python/pull/4324
* fix(realtime): apply tool call item updates to session history by @hsusul in https://github.com/openai/openai-agents-python/pull/4284
* fix(realtime): preserve falsey custom models by @hsusul in https://github.com/openai/openai-agents-python/pull/4286
* fix(realtime): compute G.711 audio length for typed and mapping format spellings by @abhay-codes07 in https://github.com/openai/openai-agents-python/pull/4292
* fix(voice): forward TTSModelSettings.speed to the OpenAI speech API by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4220
* fix(voice): keep the word separator when flushing streamed sentences by @abhay-codes07 in https://github.com/openai/openai-agents-python/pull/4227
* fix(voice): start the dispatcher when a session ends with no turns by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4259
* fix(voice): report transcription session close failures to the consumer by @Luccacvb in https://github.com/openai/openai-agents-python/pull/4343
* fix(tracing): release the trace scope when a generator is closed by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4221
* fix(tracing): release the span scope when a generator is closed by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4233
* fix(tracing): catch only the context reset on generator close by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4232
* fix(extensions): harden tool output trimming contracts by @seratch in https://github.com/openai/openai-agents-python/pull/4204
* fix(extensions): forward prompt_cache_retention on the any-llm Responses path by @hsusul in https://github.com/openai/openai-agents-python/pull/4248
* fix(extensions): resolve the any-llm default model at call time by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4219
* fix(extensions): surface content filter refusals on the any_llm chat path by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/4234
* fix(extensions): omit litellm's parallel_tool_calls without tools by @seratch in https://github.com/openai/openai-agents-python/pull/4330
### Documentation & Other Changes
* docs: correct nonexistent guardrail type names by @dfedoryshchev in https://github.com/openai/openai-agents-python/pull/4218
* docs(tracing): fix custom span output example by @XSAM in https://github.com/openai/openai-agents-python/pull/4196
* docs: voice quickstart also needs sounddevice by @ColebyPearson in https://github.com/openai/openai-agents-python/pull/4250
* docs: improve translation source clarity by @seratch in https://github.com/openai/openai-agents-python/pull/4306
* perf: run serial tests alongside xdist by @seratch in https://github.com/openai/openai-agents-python/pull/4197
* perf: add source-only typecheck target by @seratch in https://github.com/openai/openai-agents-python/pull/4200
* perf: accelerate developer checks by @seratch in https://github.com/openai/openai-agents-python/pull/4258
* test: harden release compatibility contracts by @seratch in https://github.com/openai/openai-agents-python/pull/4297
* ci: check prospective release contracts before merge by @seratch in https://github.com/openai/openai-agents-python/pull/4347
* fix: make release API contract promotion policy-driven by @seratch in https://github.com/openai/openai-agents-python/pull/4349
* fix: freeze Runloop platform properties by @seratch in https://github.com/openai/openai-agents-python/pull/4355
* test: isolate released API source validation by @seratch in https://github.com/openai/openai-agents-python/pull/4350
* release: 0.20.0 by @seratch in https://github.com/openai/openai-agents-python/pull/4348
## New Contributors
* @XSAM made their first contribution in https://github.com/openai/openai-agents-python/pull/4196
* @abhay-codes07 made their first contribution in https://github.com/openai/openai-agents-python/pull/4217
* @ColebyPearson made their first contribution in https://github.com/openai/openai-agents-python/pull/4250
* @Luccacvb made their first contribution in https://github.com/openai/openai-agents-python/pull/4252
* @ojassharma7 made their first contribution in https://github.com/openai/openai-agents-python/pull/4245
* @nothariharan made their first contribution in https://github.com/openai/openai-agents-python/pull/4298
* @ribhavjain made their first contribution in https://github.com/openai/openai-agents-python/pull/4316
Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.19.4...v0.20.0
v0.19.4
August 5, 2026
## What's Changed * fix: preserve completed tool guardrail results by @seratch in https://github.com/openai/openai-agents-python/pull/4180 * fix: redact invalid tool argument errors by @seratch in https://github.com/openai/openai-agents-python/pull/4182 * fix: defer non-stream session saves until output guardrails by @seratch in https://github.com/openai/openai-agents-python/pull/4184 * fix: honor resolved status before policy checks by @seratch in https://github.com/openai/openai-agents-python/pull/4183 * fix: cancel sibling work after concurrent failures by @seratch in https://github.com/openai/openai-agents-python/pull/4185 * fix: surface non-streaming content-filter refusals by @seratch in https://github.com/openai/openai-agents-python/pull/4188 * fix(mcp): derive streamable HTTP retry backoff from backoffs taken by @rxits in https://github.com/openai/openai-agents-python/pull/4174 * fix(realtime): clean up failed connection attempts by @seratch in https://github.com/openai/openai-agents-python/pull/4189 * fix(tracing): mark non-streaming agent span failures by @seratch in https://github.com/openai/openai-agents-python/pull/4191 * fix(sandbox): enforce token output budgets by @cosin2077 in https://github.com/openai/openai-agents-python/pull/3934 * fix(sandbox): single-flight cached dependency factories by @seratch in https://github.com/openai/openai-agents-python/pull/4178 * fix(sessions): enforce closed state in MongoDBSession by @seratch in https://github.com/openai/openai-agents-python/pull/4176 * fix(sessions): preserve repeated history provenance by @seratch in https://github.com/openai/openai-agents-python/pull/4181 * fix(sessions): skip conversation creation on empty add_items by @seratch in https://github.com/openai/openai-agents-python/pull/4190 * fix(sessions): reject reused branch IDs when creating a branch by @seratch in https://github.com/openai/openai-agents-python/pull/4186 * fix(extensions): preserve streamed provider thinking blocks by @seratch in https://github.com/openai/openai-agents-python/pull/4177 ### Documentation & Other Changes * perf: speed up the test suite by @seratch in https://github.com/openai/openai-agents-python/pull/4171 * test: make parallel guardrail overlap deterministic by @seratch in https://github.com/openai/openai-agents-python/pull/4187 * test: make async tool and guardrail tests deterministic by @seratch in https://github.com/openai/openai-agents-python/pull/4192 * test: make parent cancellation tests deterministic by @seratch in https://github.com/openai/openai-agents-python/pull/4193 * Release 0.19.4 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/4194 ## New Contributors * @rxits made their first contribution in https://github.com/openai/openai-agents-python/pull/4174 * @cosin2077 made their first contribution in https://github.com/openai/openai-agents-python/pull/3934 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.19.3...v0.19.4
v0.19.3
August 4, 2026
## What's Changed * fix: resolve agent tool name collisions consistently by @seratch in https://github.com/openai/openai-agents-python/pull/4137 * fix: reconcile resumed tool name collisions by @seratch in https://github.com/openai/openai-agents-python/pull/4145 * fix: persist the max-turns handler output to the session by @LeSingh1 in https://github.com/openai/openai-agents-python/pull/4160 * fix: report output guardrail results when a tripwire aborts the run by @Kaif10 in https://github.com/openai/openai-agents-python/pull/4090 * fix: replace closed default loop in run_sync by @hsusul in https://github.com/openai/openai-agents-python/pull/4102 * fix: honor falsey custom output extractors for agents as tools by @n33levo in https://github.com/openai/openai-agents-python/pull/4088 * fix: report tool guardrail results for streamed runs by @hsusul in https://github.com/openai/openai-agents-python/pull/4097 * fix: preserve approved tool output on streamed resume by @seratch in https://github.com/openai/openai-agents-python/pull/4126 * fix: normalize typeless strict object schemas by @seratch in https://github.com/openai/openai-agents-python/pull/4139 * fix: synchronize after-turn cancellation with event consumption by @seratch in https://github.com/openai/openai-agents-python/pull/4130 * fix: keep input item order when collapsing duplicates by @hsusul in https://github.com/openai/openai-agents-python/pull/4140 * fix: stop emitting handoff calls as streamed tool_called events by @hsusul in https://github.com/openai/openai-agents-python/pull/4146 * fix: preserve tool call and output order when deduplicating inputs by @seratch in https://github.com/openai/openai-agents-python/pull/4147 * fix: honor falsey handoff input filters by @omidsaffari in https://github.com/openai/openai-agents-python/pull/4153 * fix: define explicit zero-value contracts by @seratch in https://github.com/openai/openai-agents-python/pull/4101 * fix: keep committed tool session records when a streamed output guardrail trips by @LHMQ878 in https://github.com/openai/openai-agents-python/pull/4148 * fix(mcp): auto-paginate tool and prompt listings by @seratch in https://github.com/openai/openai-agents-python/pull/4094 * fix(chatcmpl): clear pending thinking blocks when flushing an assistant message by @Kaif10 in https://github.com/openai/openai-agents-python/pull/4089 * fix(sandbox): remove apply_patch move source as the bound user by @hsusul in https://github.com/openai/openai-agents-python/pull/4100 * fix(sandbox): harden default snapshot path resolution by @seratch in https://github.com/openai/openai-agents-python/pull/4141 * fix(sessions): enforce closed state in AsyncSQLiteSession by @chinmayv095 in https://github.com/openai/openai-agents-python/pull/4109 * fix(sessions): avoid creating remote conversation on uninitialized clear_session by @hsusul in https://github.com/openai/openai-agents-python/pull/4111 * fix(sessions): roll back a failed SQLiteSession insert by @LeSingh1 in https://github.com/openai/openai-agents-python/pull/4163 * fix(realtime): apply output guardrails to text deltas by @seratch in https://github.com/openai/openai-agents-python/pull/4124 * fix(realtime): clamp interrupt truncation to received audio by @hsusul in https://github.com/openai/openai-agents-python/pull/4122 * fix(realtime): scope delayed audio guardrail interruption by @seratch in https://github.com/openai/openai-agents-python/pull/4135 * fix(voice): clean up tasks when streams close early by @seratch in https://github.com/openai/openai-agents-python/pull/4131 * fix(voice): finish STT event handling after listener errors by @seratch in https://github.com/openai/openai-agents-python/pull/4170 * fix(tracing): name streamed task spans after the run's own workflow by @LeSingh1 in https://github.com/openai/openai-agents-python/pull/4167 * fix(extensions): keep trimmer's definition names and instance data in trimmed schemas by @LHMQ878 in https://github.com/openai/openai-agents-python/pull/4110 * fix(extensions): release AnyLLM provider streams and preserve completed runs by @hsusul in https://github.com/openai/openai-agents-python/pull/4133 * fix(extensions): send AnyLLM Responses reasoning as a mapping by @hsusul in https://github.com/openai/openai-agents-python/pull/4138 * fix(extensions): record model-call failures on the provider's own span by @PranavMishra28 in https://github.com/openai/openai-agents-python/pull/4143 * fix(extensions): let an in-flight provider stream close finish after cancellation by @LHMQ878 in https://github.com/openai/openai-agents-python/pull/4156 * fix(extensions): preserve thinking blocks for replay by @seratch in https://github.com/openai/openai-agents-python/pull/4157 ### Documentation & Other Changes * docs: fix spelling in GPT-5 example by @wesleyzhangwq in https://github.com/openai/openai-agents-python/pull/4168 * chore(deps): bump actions/checkout from 7.0.0 to 7.0.1 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4080 * chore(deps): bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.2 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4081 * chore(deps): bump actions/setup-python from 6.3.0 to 7.0.0 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4083 * chore(deps): bump actions/stale from 10.3.0 to 11.0.0 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/4084 * chore(ci): preserve cache pruning with setup-uv v9 by @seratch in https://github.com/openai/openai-agents-python/pull/4103 * test: stabilize tracing atexit timeout coverage by @seratch in https://github.com/openai/openai-agents-python/pull/4104 * Release 0.19.3 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/4169 ## New Contributors * @n33levo made their first contribution in https://github.com/openai/openai-agents-python/pull/4088 * @omidsaffari made their first contribution in https://github.com/openai/openai-agents-python/pull/4153 * @PranavMishra28 made their first contribution in https://github.com/openai/openai-agents-python/pull/4143 * @wesleyzhangwq made their first contribution in https://github.com/openai/openai-agents-python/pull/4168 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.19.2...v0.19.3
v0.19.2
August 1, 2026
## What's Changed * feat: expose original callable through wrapped by @seratch in https://github.com/openai/openai-agents-python/pull/4038 * fix: report input guardrail results when a tripwire aborts the run by @hsusul in https://github.com/openai/openai-agents-python/pull/4071 * fix: consolidate same-exception re-raises into bare raise across all modules by @AAliKKhan in https://github.com/openai/openai-agents-python/pull/4023 * fix(sandbox): preserve tagged EnvValue subclasses by @seratch in https://github.com/openai/openai-agents-python/pull/4039 * fix(modal): reject ephemeral paths during tar hydration by @LHMQ878 in https://github.com/openai/openai-agents-python/pull/4045 * fix(mcp): redact MCP prompt and resource transport errors by @seratch in https://github.com/openai/openai-agents-python/pull/4067 * fix(mcp): redact URL credentials from SDK errors by @seratch in https://github.com/openai/openai-agents-python/pull/4015 * fix(mcp): redact URL credentials from tracing and tool metadata by @seratch in https://github.com/openai/openai-agents-python/pull/4020 * fix(mcp): redact direct MCP cleanup transport errors by @seratch in https://github.com/openai/openai-agents-python/pull/4078 * fix(mcp): clean failed servers before reconnecting by @jstar0 in https://github.com/openai/openai-agents-python/pull/3939 * fix(mcp): nested MCP cleanup error redaction by @seratch in https://github.com/openai/openai-agents-python/pull/4049 * fix(realtime): preserve raw server event payloads by @GautamSharma99 in https://github.com/openai/openai-agents-python/pull/4062 * fix(memory): count valid SQLAlchemy and MongoDB session items for positive limits by @chinmayv095 in https://github.com/openai/openai-agents-python/pull/4032 * fix(memory): count valid AdvancedSQLiteSession items for positive limits by @chinmayv095 in https://github.com/openai/openai-agents-python/pull/4031 * fix(memory): count valid Redis and Dapr session items for positive limits by @chinmayv095 in https://github.com/openai/openai-agents-python/pull/4033 * fix(memory): enforce closed state in Redis and Dapr sessions by @SawhneySatvik in https://github.com/openai/openai-agents-python/pull/4035 * fix(extensions): keep tool parameters named like schema keywords by @Kaif10 in https://github.com/openai/openai-agents-python/pull/4036 * fix(extensions): close the LiteLLM provider stream on exit by @SawhneySatvik in https://github.com/openai/openai-agents-python/pull/4066 * fix(extensions): preserve completed LiteLLM streams on cleanup failure by @seratch in https://github.com/openai/openai-agents-python/pull/4077 * fix(voice): propagate iterator cancellation by @hsusul in https://github.com/openai/openai-agents-python/pull/4040 * fix(voice): break out of audio dispatch loop when a stream task signals session_ended by @AAliKKhan in https://github.com/openai/openai-agents-python/pull/4044 * fix(voice): block audio dispatcher while idle by @GautamSharma99 in https://github.com/openai/openai-agents-python/pull/4061 * fix(tracing): use monotonic export deadlines by @GautamSharma99 in https://github.com/openai/openai-agents-python/pull/4063 ### Documentation & Other Changes * docs: correct the documented Chat Completions store default by @dfedoryshchev in https://github.com/openai/openai-agents-python/pull/4074 * Release 0.19.2 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/4046 ## New Contributors * @chinmayv095 made their first contribution in https://github.com/openai/openai-agents-python/pull/4032 * @jstar0 made their first contribution in https://github.com/openai/openai-agents-python/pull/3939 * @Kaif10 made their first contribution in https://github.com/openai/openai-agents-python/pull/4036 * @SawhneySatvik made their first contribution in https://github.com/openai/openai-agents-python/pull/4035 * @GautamSharma99 made their first contribution in https://github.com/openai/openai-agents-python/pull/4061 * @LHMQ878 made their first contribution in https://github.com/openai/openai-agents-python/pull/4045 * @dfedoryshchev made their first contribution in https://github.com/openai/openai-agents-python/pull/4074 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.19.1...v0.19.2
v0.19.1
July 29, 2026
## What's Changed * feat(sandbox): support native host paths in path grants by @seratch in https://github.com/openai/openai-agents-python/pull/4009 * fix: redact Realtime audio format diagnostics by @seratch in https://github.com/openai/openai-agents-python/pull/3992 * fix: redact Blaxel unmount paths in logging by @seratch in https://github.com/openai/openai-agents-python/pull/3993 * fix: retry pre-response WebSocket server errors by @dk3yyyy in https://github.com/openai/openai-agents-python/pull/3991 * fix(run): cancel the parallel input-guardrail task when the model turn fails by @gunjanjaswal in https://github.com/openai/openai-agents-python/pull/3982 * fix(run): allow empty streamed model input by @hsusul in https://github.com/openai/openai-agents-python/pull/3995 * fix(models): route falsey mapped providers by @hsusul in https://github.com/openai/openai-agents-python/pull/3996 * fix(memory): count valid SQLite session items for positive limits by @hsusul in https://github.com/openai/openai-agents-python/pull/4001 * fix(run): count streamed retries when terminal usage is missing by @hsusul in https://github.com/openai/openai-agents-python/pull/4002 * fix(run): cancel streamed models when input guardrails fail by @hsusul in https://github.com/openai/openai-agents-python/pull/4004 * fix: preserve zero Blobfuse attribute cache timeout by @hsusul in https://github.com/openai/openai-agents-python/pull/4006 * fix(tracing): enforce max_batch_size during force_flush and shutdown in BatchTraceProcessor by @hsusul in https://github.com/openai/openai-agents-python/pull/3985 * fix(agent-tools): honor falsey input builders by @hsusul in https://github.com/openai/openai-agents-python/pull/4007 * fix: cancel sibling enablement checks on failure by @hsusul in https://github.com/openai/openai-agents-python/pull/4005 ### Documentation & Other Changes * docs: updates for 0.19.0 by @seratch in https://github.com/openai/openai-agents-python/pull/3872 * docs: fix a URL in sandbox example code by @ShawnSiao in https://github.com/openai/openai-agents-python/pull/3987 * docs: repair tracing integration links by @ShawnSiao in https://github.com/openai/openai-agents-python/pull/3986 * docs: use decorators module throughout examples by @seratch in https://github.com/openai/openai-agents-python/pull/3946 * Release 0.19.1 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/4010 ## New Contributors * @dk3yyyy made their first contribution in https://github.com/openai/openai-agents-python/pull/3991 * @ShawnSiao made their first contribution in https://github.com/openai/openai-agents-python/pull/3987 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.19.0...v0.19.1
v0.19.0
July 27, 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-tool allowed_callers, structured function-tool outputs, and integration with Runner streaming, guardrails, approvals, sessions, and RunState. See Programmatic Tool Calling for setup and constraints.
- Added the public agents.decorators module and the shorter @tool alias 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 by @seratch in https://github.com/openai/openai-agents-python/pull/3833
* fix: remove programmatic transcripts from handoff tool filtering by @seratch in https://github.com/openai/openai-agents-python/pull/3879
* fix: encode structured programmatic tool errors as JSON by @seratch in https://github.com/openai/openai-agents-python/pull/3932
* feat: consistently accept typed objects and dictionaries for SDK configuration by @seratch in https://github.com/openai/openai-agents-python/pull/3917
* feat: add tool decorator alias by @seratch in https://github.com/openai/openai-agents-python/pull/3920
* feat(sandbox): add Vercel cloud mount strategy by @seratch in https://github.com/openai/openai-agents-python/pull/3899
* fix: retry pre-response WebSocket overload errors by @seratch in https://github.com/openai/openai-agents-python/pull/3978
* fix: harden sensitive runtime logging by @seratch in https://github.com/openai/openai-agents-python/pull/3938
* fix: redact Realtime and RunState diagnostics by @seratch in https://github.com/openai/openai-agents-python/pull/3948
* fix: stop leaking raw exceptions in model + tool error logs by @dimaosipa in https://github.com/openai/openai-agents-python/pull/3910
* fix: preserve callable function tool compatibility by @seratch in https://github.com/openai/openai-agents-python/pull/3959
* fix: support async callable objects as function tools by @seratch in https://github.com/openai/openai-agents-python/pull/3949
* fix: partition nested handoffs history ownership by @seratch in https://github.com/openai/openai-agents-python/pull/3823
* fix: summarize programmatic transcripts during nested handoffs by @seratch in https://github.com/openai/openai-agents-python/pull/3878
* fix: improve AnyLLM and LiteLLM provider compatibility by @seratch in https://github.com/openai/openai-agents-python/pull/3930
* fix: improve provider compatibility and preserve session history on retries by @seratch in https://github.com/openai/openai-agents-python/pull/3931
* fix: fail closed on invalid callable approval arguments by @seratch in https://github.com/openai/openai-agents-python/pull/3867
* fix: classify lazy skill read probes correctly by @seratch in https://github.com/openai/openai-agents-python/pull/3893
* fix: reuse the verbose stdout logging handler by @seratch in https://github.com/openai/openai-agents-python/pull/3957
* fix: recognize typed easy input messages in Chat Completions by @seratch in https://github.com/openai/openai-agents-python/pull/3877
* fix: include device nodes when parsing ls output by @TheSaiEaranti in https://github.com/openai/openai-agents-python/pull/3951
fix: preserve args/**kwargs docstring descriptions in tool schemas by @TheSaiEaranti in https://github.com/openai/openai-agents-python/pull/3956
* fix: compare inspect sentinels by identity in function_schema by @TheSaiEaranti in https://github.com/openai/openai-agents-python/pull/3961
* fix: parse ls output with SELinux security-context marker by @SHAI-Cheravgoyal in https://github.com/openai/openai-agents-python/pull/3904
* fix: preserve dot-prefixed skip paths in Modal tar workspace excludes by @SHAI-Cheravgoyal in https://github.com/openai/openai-agents-python/pull/3905
* fix: cleanup cancelled servers during MCP connect failure by @hsusul in https://github.com/openai/openai-agents-python/pull/3919
* fix: await async callable-object dynamic instructions by @hsusul in https://github.com/openai/openai-agents-python/pull/3942
* fix: await async callable-object callbacks by @seratch in https://github.com/openai/openai-agents-python/pull/3944
* fix: Blaxel's shell-quote interpolated FUSE mount options by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3873
* fix: escape multiline DOT names in visualization by @hsusul in https://github.com/openai/openai-agents-python/pull/3898
* fix: redact raw message payload from realtime agents' conversion-failure log by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3907
* fix: encode streamed float32 audio as PCM16 in voice handling by @FayezBast in https://github.com/openai/openai-agents-python/pull/3916
* fix: redact MCP tool-call and formatter errors from logs by @dimaosipa in https://github.com/openai/openai-agents-python/pull/3918
* fix: parse Google docstrings whose Args: follows a section body by @oldrobotdev in https://github.com/openai/openai-agents-python/pull/3862
* fix: pin and verify rclone sandbox installs by @seratch in https://github.com/openai/openai-agents-python/pull/3911
* fix: reject empty additionalProperties mappings in strict_schema by @hsusul in https://github.com/openai/openai-agents-python/pull/3927
* fix: send logprobs=True when top_logprobs is set when using LiteLLM by @dimaosipa in https://github.com/openai/openai-agents-python/pull/3929
* fix: surface content-filter refusals when buffering streamed tool calls in chat completions by @gunjanjaswal in https://github.com/openai/openai-agents-python/pull/3897
* fix: reject unsupported streamed STT audio dtypes by @seratch in https://github.com/openai/openai-agents-python/pull/3950
* fix: use last_agent property in pretty_print_run_result_streaming to avoid None crash by @AAliKKhan in https://github.com/openai/openai-agents-python/pull/3965
* fix: use last_agent property in RunResultStreaming._create_error_details by @AAliKKhan in https://github.com/openai/openai-agents-python/pull/3967
### Documentation & Other Changes
* docs: document compact tracing hierarchy by @william-xue in https://github.com/openai/openai-agents-python/pull/3839
* docs: clarify sandbox support on Windows by @seratch in https://github.com/openai/openai-agents-python/pull/3866
* docs: remove unnecessary RunContextWrapper wrapping in tool enabling example by @AAliKKhan in https://github.com/openai/openai-agents-python/pull/3869
* docs: remove unused Runner import in tracing docs by @AAliKKhan in https://github.com/openai/openai-agents-python/pull/3881
* docs: fix runnable Python examples by @seratch in https://github.com/openai/openai-agents-python/pull/3885
* docs: fix missing imports in dynamic instructions example by @Syed-Umer-Ali in https://github.com/openai/openai-agents-python/pull/3895
* docs: fix conversation example imports by @william-xue in https://github.com/openai/openai-agents-python/pull/3903
* docs: fix API cross-reference targets by @william-xue in https://github.com/openai/openai-agents-python/pull/3913
* docs: improve sandbox example runtime validation by @seratch in https://github.com/openai/openai-agents-python/pull/3880
* docs: fix streamed audio API rendering by @william-xue in https://github.com/openai/openai-agents-python/pull/3940
* chore: add packaged live integration and provider regression coverage by @seratch in https://github.com/openai/openai-agents-python/pull/3936
* chore: update e2b versions by @matthewlouisbrockman in https://github.com/openai/openai-agents-python/pull/3871
* chore: update FastAPI test dependency by @seratch in https://github.com/openai/openai-agents-python/pull/3974
* chore: isolate unit tests from ambient proxy settings by @seratch in https://github.com/openai/openai-agents-python/pull/3945
* Release 0.19.0 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3874
## New Contributors
* @oldrobotdev made their first contribution in https://github.com/openai/openai-agents-python/pull/3862
* @AAliKKhan made their first contribution in https://github.com/openai/openai-agents-python/pull/3869
* @matthewlouisbrockman made their first contribution in https://github.com/openai/openai-agents-python/pull/3871
* @Syed-Umer-Ali made their first contribution in https://github.com/openai/openai-agents-python/pull/3895
* @hsusul made their first contribution in https://github.com/openai/openai-agents-python/pull/3898
* @SHAI-Cheravgoyal made their first contribution in https://github.com/openai/openai-agents-python/pull/3904
* @dimaosipa made their first contribution in https://github.com/openai/openai-agents-python/pull/3910
* @FayezBast made their first contribution in https://github.com/openai/openai-agents-python/pull/3916
* @gunjanjaswal made their first contribution in https://github.com/openai/openai-agents-python/pull/3897
* @TheSaiEaranti made their first contribution in https://github.com/openai/openai-agents-python/pull/3951
Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.18.3...v0.19.0
v0.18.3
July 17, 2026
## What's Changed * feat: make task and turn tracing spans configurable by @seratch in https://github.com/openai/openai-agents-python/pull/3834 * feat(realtime): track response usage in session context by @seratch in https://github.com/openai/openai-agents-python/pull/3812 * fix(memory): serialize OpenAI conversation session initialization by @russeell in https://github.com/openai/openai-agents-python/pull/3821 * fix(models): raise UserError for conflicting provider args instead of assert by @Dhruva-Das in https://github.com/openai/openai-agents-python/pull/3809 * fix(handoffs): preserve user messages containing history wrappers by @russeell in https://github.com/openai/openai-agents-python/pull/3815 * fix(computer): isolate provider instances across concurrent runs by @russeell in https://github.com/openai/openai-agents-python/pull/3843 * fix(sandbox): avoid redundant E2B workspace root creation by @seratch in https://github.com/openai/openai-agents-python/pull/3845 * fix: preserve streamed session input across model retries by @seratch in https://github.com/openai/openai-agents-python/pull/3857 * fix: prevent stale prepared-item identity reuse by @seratch in https://github.com/openai/openai-agents-python/pull/3858 * fix: AdvancedSQLiteSession clear_session and pop_item metadata leaks by @okaditya84 in https://github.com/openai/openai-agents-python/pull/3755 * fix: parse Google docstrings missing the blank line before a section by @sohumt123 in https://github.com/openai/openai-agents-python/pull/3832 * fix: bound $ref expansion in strict JSON schema conversion by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3838 * fix: redact non-tool trace error details by @seratch in https://github.com/openai/openai-agents-python/pull/3848 ### Documentation & Other Changes * docs: updates for hosted multi-agent support by @seratch in https://github.com/openai/openai-agents-python/pull/3789 * docs: make UserContext example runnable in Agents documentation by @MuhammadHamidRaza in https://github.com/openai/openai-agents-python/pull/3851 * chore: enable flake8-async for runtime source by @seratch in https://github.com/openai/openai-agents-python/pull/3813 * Release 0.18.3 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3859 ## New Contributors * @Dhruva-Das made their first contribution in https://github.com/openai/openai-agents-python/pull/3809 * @russeell made their first contribution in https://github.com/openai/openai-agents-python/pull/3815 * @okaditya84 made their first contribution in https://github.com/openai/openai-agents-python/pull/3755 * @sohumt123 made their first contribution in https://github.com/openai/openai-agents-python/pull/3832 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.18.2...v0.18.3
v0.18.2
July 11, 2026
## What's Changed * feat: support GPT-5.6 request controls by @seratch in https://github.com/openai/openai-agents-python/pull/3794 * feat: add hosted multi-agent beta support by @seratch in https://github.com/openai/openai-agents-python/pull/3788 * fix(sandbox): own Daytona PTY worker tasks by @seratch in https://github.com/openai/openai-agents-python/pull/3778 * fix(realtime): enqueue callback errors synchronously by @seratch in https://github.com/openai/openai-agents-python/pull/3777 * fix(realtime): use monotonic playback timing by @seratch in https://github.com/openai/openai-agents-python/pull/3776 * fix(sandbox): own Docker deferred cleanup tasks by @seratch in https://github.com/openai/openai-agents-python/pull/3779 * fix(sandbox): own Unix PTY fd close tasks by @seratch in https://github.com/openai/openai-agents-python/pull/3780 * fix(litellm): surface content-filter refusals instead of an empty turn by @seanturner83 in https://github.com/openai/openai-agents-python/pull/3769 * refactor(sandbox): share core PTY output collection by @seratch in https://github.com/openai/openai-agents-python/pull/3796 * refactor(sandbox): share extension PTY output collection by @seratch in https://github.com/openai/openai-agents-python/pull/3797 * refactor(sandbox): share E2B rclone setup by @seratch in https://github.com/openai/openai-agents-python/pull/3798 * refactor(sandbox): share Runloop rclone setup by @seratch in https://github.com/openai/openai-agents-python/pull/3799 * refactor: share retry error metadata extraction by @seratch in https://github.com/openai/openai-agents-python/pull/3800 * refactor: share retry-after parsing by @seratch in https://github.com/openai/openai-agents-python/pull/3801 ### Documentation & Other Changes * fix: serialize model-backed rollout interruptions as dicts by @Otis0408 in https://github.com/openai/openai-agents-python/pull/3790 * chore: enable G004 logging lint rule by @seratch in https://github.com/openai/openai-agents-python/pull/3802 * chore: enable RUF012 for runtime source by @seratch in https://github.com/openai/openai-agents-python/pull/3803 * chore: remove unused noqa directives by @seratch in https://github.com/openai/openai-agents-python/pull/3804 * chore: exempt OpenAI package from dependency cooldown by @seratch in https://github.com/openai/openai-agents-python/pull/3792 * Release 0.18.2 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3805 ## New Contributors * @Otis0408 made their first contribution in https://github.com/openai/openai-agents-python/pull/3790 * @seanturner83 made their first contribution in https://github.com/openai/openai-agents-python/pull/3769 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.18.1...v0.18.2
v0.18.1
July 10, 2026
## What's Changed * feat: add GPT-5.6 model defaults and migrate examples by @seratch in https://github.com/openai/openai-agents-python/pull/3774 * fix: support cache-write usage across OpenAI Python versions by @seratch in https://github.com/openai/openai-agents-python/pull/3773 * fix(realtime): make session cleanup deterministic by @seratch in https://github.com/openai/openai-agents-python/pull/3767 * fix: preserve nested tool state during restoration by @seratch in https://github.com/openai/openai-agents-python/pull/3753 * fix: close Chat Completions streams on early exit by @fallintoplace in https://github.com/openai/openai-agents-python/pull/3689 * fix(sessions): handle list content in AdvancedSQLiteSession browsing helpers by @anxkhn in https://github.com/openai/openai-agents-python/pull/3761 * fix(models): accumulate streamed logprobs in place to avoid O(n^2) copies by @anxkhn in https://github.com/openai/openai-agents-python/pull/3762 * fix: send logprobs=True when top_logprobs is set on Chat Completions by @winklemad in https://github.com/openai/openai-agents-python/pull/3763 ### Documentation & Other Changes * docs: updates for v0.18.0 by @seratch in https://github.com/openai/openai-agents-python/pull/3741 * docs(realtime): fix RealtimeRunner context docstring by @anxkhn in https://github.com/openai/openai-agents-python/pull/3748 * docs: clarify agent tool state options by @william-xue in https://github.com/openai/openai-agents-python/pull/3754 * test(items): document refusal None invariant by @seratch in https://github.com/openai/openai-agents-python/pull/3751 * Release 0.18.1 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3775 ## New Contributors * @william-xue made their first contribution in https://github.com/openai/openai-agents-python/pull/3754 * @winklemad made their first contribution in https://github.com/openai/openai-agents-python/pull/3763 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.18.0...v0.18.1
v0.18.0
July 7, 2026
## Key Changes ### RealtimeAgent's default is now gpt-realtime-2.1 Since this version, the default model for RealtimeAgents is gpt-realtime-2.1: https://developers.openai.com/api/docs/models/gpt-realtime-2.1 ## What's Changed * feat: update default realtime model to gpt-realtime-2.1 by @seratch in https://github.com/openai/openai-agents-python/pull/3740 * feat: add Unicode storage option to SQLAlchemySession by @seratch in https://github.com/openai/openai-agents-python/pull/3746 * fix(visualization): keep fillcolor on handoff nodes by merging style attributes by @comp in https://github.com/openai/openai-agents-python/pull/3744 ### Documentation & Other Changes * docs: updates for v0.17.8 release by @seratch in https://github.com/openai/openai-agents-python/pull/3737 * Release 0.18.0 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3742 ## New Contributors * @comp made their first contribution in https://github.com/openai/openai-agents-python/pull/3744 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.17.8...v0.18.0
v0.17.8
July 7, 2026
## What's Changed * feat: add invalid final output recovery handler by @seratch in https://github.com/openai/openai-agents-python/pull/3736 * fix: propagate realtime session iterator cancellation by @fallintoplace in https://github.com/openai/openai-agents-python/pull/3686 * fix: redact realtime validation failure logs by @fallintoplace in https://github.com/openai/openai-agents-python/pull/3687 * fix: preserve non-dict Mapping values in _to_dump_compatible by @anxkhn in https://github.com/openai/openai-agents-python/pull/3700 * fix: escape quotes and backslashes in DOT names for visualization by @anxkhn in https://github.com/openai/openai-agents-python/pull/3712 * fix: enforce strict Pydantic validation when strict_json_schema=True + handoffs by @Om-Borse26 in https://github.com/openai/openai-agents-python/pull/3724 * fix: fix an issue with length-frame exec-stdin writes within a sandbox by @imran31415 in https://github.com/openai/openai-agents-python/pull/3719 ### Documentation & Other Changes * docs: add DProvenanceKit to external tracing processors list by @Therealdk8890 in https://github.com/openai/openai-agents-python/pull/3726 * docs: add sandbox examples to examples index by @saime428 in https://github.com/openai/openai-agents-python/pull/3731 * test: improve coverage for stream and sandbox edge cases by @seratch in https://github.com/openai/openai-agents-python/pull/3730 * chore(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/3714 * chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/3715 * chore(deps): bump actions/stale from 10.2.0 to 10.3.0 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/3716 * chore(deps): bump actions/checkout from 6.0.2 to 7.0.0 by @dependabot[bot] in https://github.com/openai/openai-agents-python/pull/3717 * Release 0.17.8 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3739 ## New Contributors * @fallintoplace made their first contribution in https://github.com/openai/openai-agents-python/pull/3686 * @anxkhn made their first contribution in https://github.com/openai/openai-agents-python/pull/3700 * @Om-Borse26 made their first contribution in https://github.com/openai/openai-agents-python/pull/3724 * @imran31415 made their first contribution in https://github.com/openai/openai-agents-python/pull/3719 * @Therealdk8890 made their first contribution in https://github.com/openai/openai-agents-python/pull/3726 * @saime428 made their first contribution in https://github.com/openai/openai-agents-python/pull/3731 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.17.7...v0.17.8
v0.17.7
June 24, 2026
## What's Changed * feat: expose configurable websocket max_size limit by @anneheartrecord in https://github.com/openai/openai-agents-python/pull/3645 * feat: add buffered Chat Completions tool-call streaming by @incoffeemonster in https://github.com/openai/openai-agents-python/pull/3506 * fix: reduce sandbox sink buffering and spool timeouts by @2830500285 in https://github.com/openai/openai-agents-python/pull/3642 * fix: #3346 clean up branch-only messages when deleting branches by @Aphroq in https://github.com/openai/openai-agents-python/pull/3347 * fix: #3348 make AdvancedSQLiteSession add_items atomic by @Aphroq in https://github.com/openai/openai-agents-python/pull/3349 * fix: cancel sibling guardrail tasks when one raises by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3239 * fix: skip needs_approval_checker when status resolved in _collect_runs_by_approval by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3259 * fix: validate ls special permission bits by position by @a1vazovsky in https://github.com/openai/openai-agents-python/pull/3420 * fix: gate remote-mount edit guidance by mode by @a1vazovsky in https://github.com/openai/openai-agents-python/pull/3423 * fix: remove dependency on types-requests by @rouge8 in https://github.com/openai/openai-agents-python/pull/3509 * fix: empty list/tuple tool output dropped via all([]) == True by @vidigoat in https://github.com/openai/openai-agents-python/pull/3554 * fix: wake PTY output collection on process exit (E2B) by @rohitrastogi in https://github.com/openai/openai-agents-python/pull/3610 * fix: avoid stale object-id dedupe in server conversation tracker by @chutch in https://github.com/openai/openai-agents-python/pull/3621 * fix: report effective Blaxel timeouts by @he-yufeng in https://github.com/openai/openai-agents-python/pull/3643 * fix: prevent ambiguous Realtime multi-agent tool dispatch by @mavrickdeveloper in https://github.com/openai/openai-agents-python/pull/3441 * fix: add hint to duplicated MCP server tool name error message by @wustwyh in https://github.com/openai/openai-agents-python/pull/3678 * fix: recursively extract HTTP errors from nested ExceptionGroups by @mshsheikh in https://github.com/openai/openai-agents-python/pull/3556 ### Documentation & Other Changes * docs: #3461 changes for tool_not_found_behavior option by @seratch in https://github.com/openai/openai-agents-python/pull/3462 * docs: changes for #3487 feature addition by @seratch in https://github.com/openai/openai-agents-python/pull/3488 * docs: fix OpenAI capitalization in auto-generated ref titles by @atimothee in https://github.com/openai/openai-agents-python/pull/3646 * docs: add SDK maintainer references and review guidance by @seratch in https://github.com/openai/openai-agents-python/pull/3676 * Release 0.17.7 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3682 ## New Contributors * @rouge8 made their first contribution in https://github.com/openai/openai-agents-python/pull/3509 * @vidigoat made their first contribution in https://github.com/openai/openai-agents-python/pull/3554 * @rohitrastogi made their first contribution in https://github.com/openai/openai-agents-python/pull/3610 * @chutch made their first contribution in https://github.com/openai/openai-agents-python/pull/3621 * @he-yufeng made their first contribution in https://github.com/openai/openai-agents-python/pull/3643 * @anneheartrecord made their first contribution in https://github.com/openai/openai-agents-python/pull/3645 * @2830500285 made their first contribution in https://github.com/openai/openai-agents-python/pull/3642 * @atimothee made their first contribution in https://github.com/openai/openai-agents-python/pull/3646 * @incoffeemonster made their first contribution in https://github.com/openai/openai-agents-python/pull/3506 * @wustwyh made their first contribution in https://github.com/openai/openai-agents-python/pull/3678 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.17.6...v0.17.7
v0.17.6
June 19, 2026
## What's Changed * feat: add pre-approval tool input guardrails by @seratch in https://github.com/openai/openai-agents-python/pull/3487 * feat: add SDK-only custom data for tool outputs by @seratch in https://github.com/openai/openai-agents-python/pull/3486 * fix: enforce the documented strict JSON-compatible contract for #3486 by @siddiksawani in https://github.com/openai/openai-agents-python/pull/3657 * fix: suppress handoff whitespace tool-name warnings by @seratch in https://github.com/openai/openai-agents-python/pull/3652 ### Documentation & Other Changes * docs: fix typo in sandbox guide by @mshsheikh in https://github.com/openai/openai-agents-python/pull/3628 * Release 0.17.6 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3659 ## New Contributors * @siddiksawani made their first contribution in https://github.com/openai/openai-agents-python/pull/3657 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.17.5...v0.17.6
v0.17.5
June 11, 2026
## What's Changed
* fix: expose sandbox error retryability by @qiyaoq-oai in https://github.com/openai/openai-agents-python/pull/3581
* fix: #3512 type tool-end hook results as object by @seratch in https://github.com/openai/openai-agents-python/pull/3518
* fix: use tuple form for SpeechGroupSpanData __slots__ by @jluocsa in https://github.com/openai/openai-agents-python/pull/3534
* chore: bump Modal sandbox extra to 1.4.3 by @jdoughty04 in https://github.com/openai/openai-agents-python/pull/3538
### Documentation & Other Changes
* docs: add MongoDB session example under examples/memory by @alexbevi in https://github.com/openai/openai-agents-python/pull/3036
* docs: add missing space in MCP params docstrings by @jluocsa in https://github.com/openai/openai-agents-python/pull/3535
* docs: fix docstring typo in stdio params env description by @mshsheikh in https://github.com/openai/openai-agents-python/pull/3557
* docs: fix two docstring grammar errors in tool.py by @jluocsa in https://github.com/openai/openai-agents-python/pull/3543
* docs: add Latitude to external tracing processors list by @guillemwilly in https://github.com/openai/openai-agents-python/pull/3577
* docs: tweak in usage doc by @mshsheikh in https://github.com/openai/openai-agents-python/pull/3597
* docs: fix string concatenation typo in agent instructions by @mshsheikh in https://github.com/openai/openai-agents-python/pull/3599
* docs: capitalization fix in tracing docs by @mshsheikh in https://github.com/openai/openai-agents-python/pull/3602
* docs: fix subject-verb agreement in agent loop description by @mshsheikh in https://github.com/openai/openai-agents-python/pull/3605
* test: add unit tests for run_demo_loop streaming, EOF, and empty-input paths by @jluocsa in https://github.com/openai/openai-agents-python/pull/3542
* test: add unit tests for _openai_retry helpers (77% -> 95% coverage) by @jluocsa in https://github.com/openai/openai-agents-python/pull/3544
* Release 0.17.5 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3619
## New Contributors
* @jluocsa made their first contribution in https://github.com/openai/openai-agents-python/pull/3534
* @jdoughty04 made their first contribution in https://github.com/openai/openai-agents-python/pull/3538
* @guillemwilly made their first contribution in https://github.com/openai/openai-agents-python/pull/3577
Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.17.4...v0.17.5
v0.17.4
May 26, 2026
## What's Changed * feat: support Realtime custom voice objects by @lionel-oai in https://github.com/openai/openai-agents-python/pull/3473 * fix: #3459 add opt-in recovery for missing function tools by @seratch in https://github.com/openai/openai-agents-python/pull/3461 * fix: apply hardened http client default to MCP SSE transport by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3466 * fix: use non-None value for output in FunctionSpanData by @rmotgi1227 in https://github.com/openai/openai-agents-python/pull/3475 * fix: add missing entries to span __slots__ by @rmotgi1227 in https://github.com/openai/openai-agents-python/pull/3483 * fix: redact invalid JSON payload in ModelBehaviorError data by @LeSingh1 in https://github.com/openai/openai-agents-python/pull/3485 * fix: export more tracing related functions & types from agents by @rmotgi1227 in https://github.com/openai/openai-agents-python/pull/3489 * fix: export MCPListToolsItem, ToolSearchCallItem, and ToolSearchOutputItem from agents by @rmotgi1227 in https://github.com/openai/openai-agents-python/pull/3490 ### Documentation & Other Changes * Release 0.17.4 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3505 ## New Contributors * @rmotgi1227 made their first contribution in https://github.com/openai/openai-agents-python/pull/3475 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.17.3...v0.17.4
v0.17.3
May 19, 2026
## What's Changed * fix: keep mountpoint credentials out of sandbox commands by @seratch in https://github.com/openai/openai-agents-python/pull/3429 * fix: unify memory optional dependency import errors by @seratch in https://github.com/openai/openai-agents-python/pull/3389 * fix: guard None text in text_message_output and add output guardrail count to RunErrorDetails by @zhoufengen in https://github.com/openai/openai-agents-python/pull/3375 * fix: avoid mutating FunctionTool params_json_schema by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3382 * fix: avoid mutating codex output schema input by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3385 * fix: #3357 output schema names for Literal types by @Aphroq in https://github.com/openai/openai-agents-python/pull/3358 * fix: skip wait_for_status when Vercel sandbox is in a terminal state by @cty-ut in https://github.com/openai/openai-agents-python/pull/3410 * fix: filter hosted_tool_call types in remove_all_tools handoff filter by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3386 * fix: guard None text in ItemHelpers.extract_last_content by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3394 * fix: log exception when output guardrail raises instead of silently ignoring by @cty-ut in https://github.com/openai/openai-agents-python/pull/3411 * fix: reject relative sandbox workspace roots by @matthewflint in https://github.com/openai/openai-agents-python/pull/3422 * fix: normalize leading question marks in exposed port queries by @matthewflint in https://github.com/openai/openai-agents-python/pull/3424 * fix: #3363 honor short custom voice splitter chunks by @Aphroq in https://github.com/openai/openai-agents-python/pull/3364 * fix: runtime handling updates by @adrianbravo-oai @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3451 ### Documentation & Other Changes * docs: add SDK review guidance by @seratch in https://github.com/openai/openai-agents-python/pull/3376 * docs: mark Agent.instructions as optional by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3384 * docs: translate all pages using new settings by @seratch in https://github.com/openai/openai-agents-python/pull/3392 * docs: document auto_previous_response_id by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3383 * docs: fix LiteLLM API reference redirect by @ynachiket in https://github.com/openai/openai-agents-python/pull/3444 * docs: fix duplicated word in usaspending glossary example by @LeSingh1 in https://github.com/openai/openai-agents-python/pull/3445 * chore: clean up CI jobs and update uv pin by @seratch in https://github.com/openai/openai-agents-python/pull/3400 * ci: harden release tag workflow by @hintz-openai in https://github.com/openai/openai-agents-python/pull/3399 * Release 0.17.3 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3417 ## New Contributors * @zhoufengen made their first contribution in https://github.com/openai/openai-agents-python/pull/3375 * @hintz-openai made their first contribution in https://github.com/openai/openai-agents-python/pull/3399 * @cty-ut made their first contribution in https://github.com/openai/openai-agents-python/pull/3410 * @ynachiket made their first contribution in https://github.com/openai/openai-agents-python/pull/3444 * @LeSingh1 made their first contribution in https://github.com/openai/openai-agents-python/pull/3445 * @adrianbravo-oai made their first contribution in https://github.com/openai/openai-agents-python/pull/3451 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.17.2...v0.17.3
v0.17.2
May 12, 2026
## What's Changed * fix: #3268 fix OpenAI Conversations reasoning persistence by @seratch in https://github.com/openai/openai-agents-python/pull/3352 * fix: avoid auto response for unknown realtime tools (ref: #3287) by @seratch in https://github.com/openai/openai-agents-python/pull/3366 * fix: #3354 interrupt tracing retry backoff on shutdown by @Aphroq in https://github.com/openai/openai-agents-python/pull/3355 * fix: #3359 preserve local approval rejection reasons by @Aphroq in https://github.com/openai/openai-agents-python/pull/3360 * fix: #3361 honor session settings in AsyncSQLiteSession by @Aphroq in https://github.com/openai/openai-agents-python/pull/3362 * fix: #3310 avoid empty chat tool outputs by @Aphroq in https://github.com/openai/openai-agents-python/pull/3312 ### Documentation & Other Changes * docs: clarify max_delay for retries works by @seratch in https://github.com/openai/openai-agents-python/pull/3350 * docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3351 * docs: normalize memory docstring cross-references by @seratch in https://github.com/openai/openai-agents-python/pull/3370 * docs: document sandbox archive limits after #3278 release by @Aphroq in https://github.com/openai/openai-agents-python/pull/3311 * docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3371 * Release 0.17.2 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3368 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.17.1...v0.17.2
v0.17.1
May 11, 2026
## What's Changed
### Sandboxes
* fix: include sandbox provider error details by @seratch in https://github.com/openai/openai-agents-python/pull/3326
* fix: #3274 limit sandbox archive extraction by @Aphroq in https://github.com/openai/openai-agents-python/pull/3278
* fix: #3273 validate git repo subpaths by @Aphroq in https://github.com/openai/openai-agents-python/pull/3276
* fix: allow empty GitRepo subpaths as repository root by @seratch in https://github.com/openai/openai-agents-python/pull/3299
* fix: preserve GitRepo root subpath aliases by @seratch in https://github.com/openai/openai-agents-python/pull/3303
### Tracing
* fix: make tracing shutdown best-effort on process exit by @seratch in https://github.com/openai/openai-agents-python/pull/3343
* fix: keep BatchTraceProcessor worker alive on exporter errors by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3216
* fix: guard no-op tracing span IDs by @seratch in https://github.com/openai/openai-agents-python/pull/3296
### Sessions
* fix: #3267 preserve required hosted tool IDs in OpenAI conversation sessions by @seratch in https://github.com/openai/openai-agents-python/pull/3341
* fix: #3304 skip corrupt items during pop (sessions) by @Aphroq in https://github.com/openai/openai-agents-python/pull/3305
* fix: #3306 track MongoDB metadata timestamps by @Aphroq in https://github.com/openai/openai-agents-python/pull/3307
* fix: preserve created_at across writes (redis-session) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3202
* fix: skip corrupt docs in MongoDBSession.pop_item by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3247
### Realtime Agents
* fix: #3333 scope Realtime tool approvals by qualified key by @seratch in https://github.com/openai/openai-agents-python/pull/3340
* fix: #3286 send realtime output for unknown tool calls by @Aphroq in https://github.com/openai/openai-agents-python/pull/3287
* fix: #3284 wake realtime event iterators on close by @Aphroq in https://github.com/openai/openai-agents-python/pull/3285
* fix: preserve existing transcript over stale delta accumulator by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3214
* fix: expose max_output_tokens on RealtimeSessionModelSettings by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3223
* fix: validate RealtimeAgent fields in __post_init__ by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3234
* fix: skip invalid input_text parts in user input conversion (realtime) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3243
* fix: raise UserError for input_type without on_handoff (realtime) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3248
* fix: preserve output_audio content parts in output_item events (realtime) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3230
* fix: treat None audio.input/audio.output as unset (realtime) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3254
* fix: stop AudioInput.to_base64() from mutating caller's buffer (voice agents) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3201
### Other core modules
* fix: make chat completions response-feature validation opt-in by @seratch in https://github.com/openai/openai-agents-python/pull/3298
* fix: #3275 reject chat completions server state by @Aphroq in https://github.com/openai/openai-agents-python/pull/3279
* fix: #3282 reject unsupported Chat Completions reusable prompts by @Aphroq in https://github.com/openai/openai-agents-python/pull/3283
* fix: #3313 align multi-choice chat streams with strict validation by @Aphroq in https://github.com/openai/openai-agents-python/pull/3314
* fix: #3308 reject chat custom tool calls explicitly by @Aphroq in https://github.com/openai/openai-agents-python/pull/3309
* fix: #3270 validate model retry backoff settings by @Aphroq in https://github.com/openai/openai-agents-python/pull/3272
* fix: #3319 preserve nested handoff history content by @Aphroq in https://github.com/openai/openai-agents-python/pull/3320
* fix: #3280 streaming guardrail exception cleanup by @Aphroq in https://github.com/openai/openai-agents-python/pull/3281
* fix: #3288 normalize RunState guardrail payloads by @Aphroq in https://github.com/openai/openai-agents-python/pull/3289
* fix: #3315 align generic dict output schemas by @Aphroq in https://github.com/openai/openai-agents-python/pull/3316
* fix: #3317 return fresh empty strict schemas by @Aphroq in https://github.com/openai/openai-agents-python/pull/3318
* fix: #781 replace assertion in handoff() with UserError by @0xSudoSSH in https://github.com/openai/openai-agents-python/pull/3339
* fix: preserve failed status across apply_patch operations by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3217
* fix: preserve existing request_usage_entries on Usage.add by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3213
* fix: await cancelled output guardrail tasks on tripwire by @Quratulain-bilal in https://github.com/openai/openai-agents-python/pull/3187
* fix: persist output_tokens_details when input details are None by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3227
* fix: drop reasoning items orphaned by dropped tool calls by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3207
* fix: skip CompactionItem silently in stream queue helper by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3224
* fix: await on_handoff callables with async __call__ by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3211
* fix: preserve tool guardrail results across handoffs in SingleStepResult by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3237
* fix: preserve last known response_id on conversation resume by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3245
* fix: isolate MCP strict schema conversion from non-strict fallback by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3199
* fix: exclude Computer instances from provider duck-typing by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3249
* fix: skip needs_approval_checker when status already resolved by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3229
* fix: export MCPToolCancellationError from top-level package by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3210
* fix: preserve chained $ref during sibling-key expansion by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3205
### Extensions
* fix: avoid duplicating content and signed thinking blocks across parallel tool-call splits (any-llm) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3261
* fix: avoid duplicating content and signed thinking blocks across parallel tool-call splits (litellm) by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3215
* fix: #3330 handle string tool trimmer allowlists by @Aphroq in https://github.com/openai/openai-agents-python/pull/3331
* fix: preserve HandoffInputData.input_items in remove_all_tools by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3253
### Documentation & Other Changes
* docs: updates for v0.17.0 by @seratch in https://github.com/openai/openai-agents-python/pull/3188
* docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3193
* docs: add dapr to durable orchestration integrations by @yaron2 in https://github.com/openai/openai-agents-python/pull/3292
* docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3293
* docs: update MCP examples by @seratch in https://github.com/openai/openai-agents-python/pull/3342
* test: guard Responses transport extra kwargs with official client by @seratch in https://github.com/openai/openai-agents-python/pull/3295
* chore: improve examples auto-run coverage and artifact handling by @seratch in https://github.com/openai/openai-agents-python/pull/3328
* chore: improve automated example coverage and local service handling by @seratch in https://github.com/openai/openai-agents-python/pull/3297
* Release 0.17.1 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3290
## New Contributors
* @yaron2 made their first contribution in https://github.com/openai/openai-agents-python/pull/3292
* @0xSudoSSH made their first contribution in https://github.com/openai/openai-agents-python/pull/3339
Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.17.0...v0.17.1
v0.17.0
May 8, 2026
## Key Changes
### RealtimeAgent's default is now gpt-realtime-2
Since this version, the default model for RealtimeAgents is gpt-realtime-2: https://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. 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:
```python
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 by @seratch in https://github.com/openai/openai-agents-python/pull/3190
* fix: #3169 constrain local sandbox artifact sources to base dir by @seratch in https://github.com/openai/openai-agents-python/pull/3177
* fix: Responses context-management extra_args collision by @alfozan in https://github.com/openai/openai-agents-python/pull/3185
### Documentation & Other Changes
* Release 0.17.0 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3191
Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.16.1...v0.17.0
v0.16.1
May 7, 2026
## What's Changed * fix: #3109 stabilize chat completions stream output indexes by @seratch in https://github.com/openai/openai-agents-python/pull/3176 * fix: #3168 validate MCP require_approval policies by @seratch in https://github.com/openai/openai-agents-python/pull/3179 * fix: #3116 restore session history after compaction replacement failures by @Aphroq in https://github.com/openai/openai-agents-python/pull/3117 * fix: #3171 reject corrupt Dapr session state updates by @Aphroq in https://github.com/openai/openai-agents-python/pull/3173 * fix: #3170 clean up git repo temp clones on failure by @Aphroq in https://github.com/openai/openai-agents-python/pull/3172 * fix: #3174 count valid encrypted session items for limits by @Aphroq in https://github.com/openai/openai-agents-python/pull/3175 * fix: reject non-object function tool input JSON by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3166 ### Documentation & Other Changes * docs: updates for #3147 by @seratch in https://github.com/openai/openai-agents-python/pull/3148 * docs: add 0.16.0 changelog by @seratch in https://github.com/openai/openai-agents-python/pull/3153 * docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3163 * docs: document tool execution concurrency by @seratch in https://github.com/openai/openai-agents-python/pull/3164 * docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3165 * Release 0.16.1 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3167 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.16.0...v0.16.1
v0.16.0
May 7, 2026
## Key Changes
### 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".
The new default model should work better for most use cases (see the report at https://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.
```python
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) by @seratch in https://github.com/openai/openai-agents-python/pull/3147
* feat: allow disabling max_turns with None by @seratch in https://github.com/openai/openai-agents-python/pull/3132
* feat: #1167 add opt-in server-prefixed MCP tool names by @mavrickdeveloper in https://github.com/openai/openai-agents-python/pull/3019
* feat: #1859 add runtime function tool concurrency config by @seratch in https://github.com/openai/openai-agents-python/pull/3152
* fix: #3104 stabilize chat completions tool call output indexes by @seratch in https://github.com/openai/openai-agents-python/pull/3161
* fix: reject external symlink targets during hydrate by @Aphroq in https://github.com/openai/openai-agents-python/pull/3094
* fix: make Permissions hashable to match User and Group by @ioleksiuk in https://github.com/openai/openai-agents-python/pull/3154
### Documentation & Other Changes
* docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3151
* docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3160
* docs: realtime guardrail fallback behavior by @mindbomber in https://github.com/openai/openai-agents-python/pull/3157
* docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3162
* Release 0.16.0 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3150
## New Contributors
* @mavrickdeveloper made their first contribution in https://github.com/openai/openai-agents-python/pull/3019
* @mindbomber made their first contribution in https://github.com/openai/openai-agents-python/pull/3157
Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.15.3...v0.16.0
v0.15.3
May 6, 2026
## What's Changed * fix(mcp): avoid mutating tool input schemas by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3134 * fix(mcp): reject non-object tool input JSON by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3135 * fix(mcp): make duplicate tool errors deterministic by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3136 * fix: tolerate audio deltas before audio format negotiation in ModelAu… by @Quratulain-bilal in https://github.com/openai/openai-agents-python/pull/3141 ### Documentation & Other Changes * docs: updates for #3128 by @seratch in https://github.com/openai/openai-agents-python/pull/3129 * docs: update translated document pages by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3131 * test: cover overlapping tool response creates by @adityasingh2400 in https://github.com/openai/openai-agents-python/pull/3140 * Release 0.15.3 by @github-actions[bot] in https://github.com/openai/openai-agents-python/pull/3149 Full Changelog: https://github.com/openai/openai-agents-python/compare/v0.15.2...v0.15.3