Skip to main content
Deprecated — naive tasks and /v1/tasks. It drives the legacy orchestration runtime, which is FROZEN — it accepts no new capabilities. The durable runtime enforces policy at the tool boundary, not only at the gateway, and it is the only runtime new work is built on.Use instead: naive teams submit <team> "<goal>" --tenant <tu>These routes keep answering. Nothing is removed and no response shape changes: the deprecation is announced in headers only, which are purely additive. Every response from this router carries Deprecation (RFC 9745 — the value is a Structured Field Date, @ plus epoch seconds, not the boolean true some pre-RFC clients look for), Link rel="deprecation", Warning: 299 and X-Naive-Deprecation-Id: dep.primitive.tasks. There is no Sunset header, because this is frozen with no sunset date — a Sunset on a frozen row would be a date the platform has not promised.Announced 2026-07-29. Level frozen. The freeze ends when company_containers with provider='hermes' and status='running' reaches zero — not on a date.Replacement surface: the durable runtime API.
Completion is a claim, not a state change. An agent reporting “done” is not evidence that the work happened, so the API adjudicates the claim against independent ledgers — a hosting deployment id, an email message id — that the agent has no ability to write. The task closes only if the claim survives. This means a call can return 409, 202 or 503 as well as 200. Handle all four.

Verification outcomes

verification_status accompanies every outcome:

Status codes

200 OK — Accepted (verified, or honestly unverified). The task is done and the board card is closed. 202 Accepted — Inconclusive. Deliberately neither a rejection nor a success: the task is left exactly as it was, with no state change and no attempts increment, so retrying once the ledger resolves is safe.
202
403 Forbidden — The caller is not the task’s assignee. Only the agent the task is assigned to may complete it. 409 Conflict — The claim was contradicted. The task is requeued and attempts is incremented; the agent is expected to try again, not to treat the work as done.
A rejected completion is requeued, not failed. The card goes back to status: "in_progress" with verification_status: "rejected", its lease is released, attempts is incremented, and the reason is posted as a comment on the card so the worker can self-correct. task in the 409 body is the requeued row — todo is not a status this API produces.
409
503 Service Unavailable — Verification passed, but the agent runtime was unreachable so the board was not closed. The API returns 503 rather than reporting a success it cannot back. The completion is durably queued and the board closes automatically once the runtime returns.
503

Path Parameters

Request Body