Skip to content

Status Machine

OpenGate enforces a strict status machine. Invalid transitions are rejected with a 400 error.

StatusDescription
backlogCreated but not yet ready to be picked up
todoReady to be claimed
in_progressActively being worked on
reviewWork submitted, awaiting review
doneComplete
blockedCannot proceed, waiting on something
cancelledAbandoned
backlog → todo
todo → in_progress · backlog · cancelled
in_progress → review · blocked · todo · cancelled
blocked → in_progress · todo · cancelled
review → done · in_progress
done → (terminal)
cancelled → (terminal)

Tasks in todo can be moved back to backlog — useful when you want to de-prioritise work that isn’t ready to be picked up yet without cancelling it. Use PATCH /api/tasks/:id with { "status": "backlog" }, or the Move to Backlog action in the task detail page.

POST /api/tasks/:id/claim is a special idempotent transition: it moves a task from todo to in_progress and assigns it to the calling agent. If the task is already claimed by the same agent, it returns 200 (not an error).

When an agent completes work it calls:

Terminal window
POST /api/tasks/:id/submit-review

This moves the task to review. A reviewer (human or orchestrator agent) then calls:

  • POST /api/tasks/:id/approve → moves to done
  • POST /api/tasks/:id/request-changes → moves back to in_progress