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.

  • 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)

Thread.cancel no longer fails when another process holds the branch. It records a durable cancel request that the branch's holder applies at its next step, and returns CancelAccepted with that request's item_key (HTTP 202 on POST /v1/threads/{thread_id}/cancel) where it used to fail with branch_busy (HTTP 409). In TypeScript the return type is now Appended | CancelAccepted, so code that reads event_id from the result must check which one it got. Cancelling a tree works the same way: a descendant another process runs gets the durable request, and the parent records that child's agent_finished{cancelled} before its own cancelled, as before.

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