Threads AI

Release notes

Changes that affect threads you already have, release by release.

Upcoming: Teams Phase 2

Not in this release: these change code you may already have, so they are listed ahead of time.

  • Thread.cancel across processes. When another process holds the thread's branch, Thread.cancel / thread.cancel will record a durable cancel request that the holder applies at its next step, and return CancelAccepted with that request's item_key (HTTP 202 on POST /v1/threads/{thread_id}/cancel) instead of failing with branch_busy (HTTP 409). In TypeScript the return type becomes Appended | CancelAccepted, so code that reads event_id from the result must check which one it got.
  • AskOutcome.failed. An ask of a host member whose turn failed will close failed, with the error. A switch / match over AskOutcome needs a new case, and assertNever / assert_never will point at it.

Unreleased (v0.1)

Threads started before this release can't be continued when their agent has extension tools or deferred tools. Start a new thread; the old one stays readable (timeline, export, fork points, saved cases).

  • Tool origin. A pinned tool now records the extension it came from (origin), so drift can tell an extension's tools apart. It isn't shown to the model, but it is part of the config hash. Continuing such a thread fails with invalid_config: "this thread was started with another config: tool origin was added in this release; start a new thread". Agents without extension tools keep their config hash and their threads continue as before.
  • Deferred tools. Tool search pins a deferred tool in a new form, which changes the config hash of agents with deferred tools in the same way.
  • Threads the host continues for you meet the same error: a channel conversation's next message, a schedule's next fire on its thread, and approving or denying a run that was awaiting approval. Settle pending approvals before upgrading.
  • In-flight team members of such agents fail to rebind with pin_mismatch. It surfaces as a turn error on the member, not as a continue error: finish or cancel the team's work before upgrading.

Evals. runEvals() / run_evals() and threads eval run saved cases: for free in CI, with drift against your current agents, and with a judge model under --live. saveCase now saves any completed turn with no sandbox snapshot, and portable means the case reruns offline from its directory alone.

The test model guard raises ModelBlockedError (an Error in TypeScript, a RuntimeError in Python), a subclass of the error it raised before, so existing catch / except blocks behave the same.

Edit on GitHub

On this page