Updated 21 Aug 2026: Codex 0.149.0 now ships the full async user-messaging PR series in a stable release, resolving the dossier's previous stable-client availability uncertainty. Model-advertised support still controls whether the tool is exposed.

Key details

  1. Codex 0.149.0, released August 20, includes the async user-messaging implementation series that was previously only merged on main.
  2. `send_user_message_async` is a root-agent tool that sends a user-visible message and returns immediately so the active turn can continue.
  3. Async agent messages carry `delivery: "async"` through Codex event, app-server, history and replay paths.
  4. The outbound async message is intentionally not added back into the model's input context as a synthetic assistant message.
  5. OpenAI removed the local `send_async_message` feature gate; exposure still depends on the selected model advertising support.

What builders should take away

  1. Pin production experiments to Codex 0.149.0 or later if they depend on the stable client containing the async-message implementation; do not rely on older stable clients described in the original dossier.
  2. Separate human questions into true blockers and late-answer-safe questions. Continue asynchronously only when progress cannot make the eventual reply stale or dangerous.
  3. If you consume Codex app-server or event streams, handle `delivery: "async"` as non-terminal; user-visible agent text does not by itself mean the active turn has finished.
  4. Design reconciliation for late replies that conflict with work already performed, and use a blocking interaction for consequential choices.
  5. Gate workflows on observable model/tool capability as well as client version because stable 0.149.0 inclusion does not prove every model exposes the tool.

What changed

OpenAI released Codex 0.149.0 on August 20 with the three repository changes behind asynchronous user messaging: PR #39319 adds `send_user_message_async`, PR #39312 adds machine-readable async delivery metadata, and PR #39452 removes the local feature gate. That changes the release status materially from BTN's August 20 dossier: the implementation is no longer only merged on main while stable 0.148.0 predates it. A stable Codex client now contains the non-terminal messaging path. The tool can send a concise user-visible acknowledgment, update or question, return an accepted result immediately, and allow the same model turn to continue. Tool registration still depends on whether the selected model advertises support.

Why it matters

The stable release removes one rollout uncertainty for coding-agent workflows that want humans and agents to work in parallel. A Codex integration can now target a released client that understands non-terminal user messaging instead of depending on an unreleased main-branch implementation. The harder workflow problem is unchanged: a developer's answer can arrive after the agent has already advanced, so builders still need to distinguish late-answer-safe questions from decisions that must stop execution. Stable client support also does not establish universal availability because the selected model must advertise the capability before the tool is registered.

The stable client now contains the async-message path

Codex 0.149.0's changelog contains the implementation series BTN previously tracked only on main. PR #39319 adds `send_user_message_async`; PR #39312 adds `delivery: "async"` metadata through the event and app-server paths; and PR #39452 removes the local feature gate. That means builders no longer need to equate this capability with unreleased repository state: the relevant client code is in a stable Codex release.

A message still does not have to end the turn

The root-agent tool sends a user-visible acknowledgment, update or question and returns an accepted result immediately, allowing the same model turn to continue. OpenAI's integration test verifies that the agent can emit the async message and later continue to a subsequent response in the same turn. This creates a distinct interaction primitive from a blocking request for input.

Codex keeps the outbound message out of model input context

The implementation deliberately does not inject the user-visible async update back into the model's input as a synthetic assistant message. Codex records and surfaces the event for the user while the model continues from its existing turn context. A developer reply, if one arrives, enters later as a new user message.

The protocol distinguishes non-terminal delivery

Companion protocol changes preserve optional async delivery metadata through Codex history, replay, schemas and app-server items. Integrations therefore have a machine-readable signal that a user-visible agent message is non-terminal instead of having to infer turn completion from the appearance of text.

Stable shipping does not remove the late-reply problem

The productivity upside is clearest when the agent can continue independent work while a developer answers a side question. A reply to an architectural, destructive or otherwise consequential question may instead arrive after the agent has already acted on an assumption. Teams therefore need an explicit policy for which questions may be asynchronous and which decisions must create a blocking boundary.

Model capability remains the final exposure gate

Removing the local feature flag simplified the client-side rollout path, but Codex still registers `send_user_message_async` only when the selected model advertises support. BTN has confirmed the client implementation is now stable, but has not found an official statement establishing that every currently served Codex model or surface exposes the capability. Stable client support should therefore be treated separately from universal model availability.

What to watch next

  • Which Codex models and product surfaces begin advertising `send_user_message_async` support, and whether OpenAI documents that matrix publicly.
  • How Codex clients present async questions and late replies when the agent has already acted on an assumption.
  • Whether OpenAI adds stronger primitives for cancellation, branching, reconciliation or explicit blocking versus non-blocking human input.
  • Whether third-party Codex integrations begin relying on the async delivery marker as a stable protocol contract.

Still unclear

  • Codex 0.149.0 confirms stable client inclusion, but BTN did not find an official announcement establishing broad user availability across current Codex models and clients.
  • Tool registration remains conditional on model-advertised support, so client version alone is insufficient to determine exposure.
  • The practical UX for conflicting late replies may vary by Codex surface and remains less documented than the underlying protocol behavior.

Sources

Direct reading behind this dossier.

5 sources
Add the async user message tool (#39319)
OpenAI / GitHub primary

Primary implementation: adds `send_user_message_async`, immediate accepted return, async delivery event and tests showing the turn continues.

Codex 0.149.0 release
OpenAI / GitHub primary

Stable release whose changelog includes the async-message PR series, resolving the prior stable-client uncertainty.