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.
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.
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.
Path Parameters
Request Body