Case · DiggingBeagle record

AG-UI client could leave an agent thread blocked by interrupts with no expiry

A reported client behavior treats an omitted interrupt expiry as never expiring, leaving subsequent agent runs on the same thread pending.

Scope

Reported against @ag-ui/client 0.0.58; later versions and field prevalence require separate testing.

Assessment profile

Assessment method
Setting
research demonstration
Exploitation
demonstrated
Evidence
Grade D
AI role
AGAINST AI
Basis and provenance

The pinned Claim and its primary disclosure support the described controlled result, but do not establish a population-wide rate or calibrated impact. The only available supporting evidence is the reporter's or advisory author's own account; independent reproduction has not been shown. Impact remains unbanded because no calibrated impact rubric for this particular evidence is established.

Assessed Nov 2, 2026 using diggingbeagle.assessment/1.

At a glance

Mechanism and trust boundary

  1. 01

    Receive agent interrupt outcome

    The server sends RUN_FINISHED with one or more interrupt IDs but no expiresAt.

    Boundary: Server response into client control state

  2. 02

    Treat missing expiry as indefinite

    The client retains pending interrupts without a default timeout.

    Boundary: Optional timestamp into lasting state

  3. 03

    Block following runs

    A subsequent run waits on unresolved interrupts and cannot advance.

    Boundary: Pending gate into session availability

Claims & evidence

CLM-2026-NOV02-AGUI-INTERRUPT-NO-EXPIRY-AThe AG-UI issue documents a valid RUN_FINISHED interrupt outcome without expiresAt under @ag-ui/client 0.0.58 and shows subsequent runAgent calls failing to settle until all pending interrupt IDs are explicitly resumed.supported

Basis: reported finding

Link to claim

Implications

Undefined expiry has to have explicit lifecycle semantics; silent infinite wait is a denial-of-service shape for long-running agents.

Controls and mitigations

  • Bound interrupt lifetime, cap pending items and record which interrupt IDs must be resumed or explicitly cancelled.
  • Treat a missing expiry as an explicit policy decision at admission and make a pending interrupt list inspectable and cancellable by the thread owner.

Unknowns and contradictions

  • Reported against @ag-ui/client 0.0.58; later versions and field prevalence require separate testing.
  • It remains unclear which later client versions adopt a bounded fallback and whether a server can authoritatively invalidate an unresolved interrupt after disconnect.

Sources and citation

Material revision history

  1. Nov 2, 2026 · Canonical change recorded · new in release · revision 214