Add gates and waits
Stop a run for a person with a gate, or for a set time with a wait
Stop a run until a person lets it continue with a human gate, or for a set time with a wait. Use a gate where the process needs a person, and a wait where it needs time to pass.
approve [shape="hexagon", label="Approve the release"]pause [shape="insulator", duration="30m"]Both survive a restart.
| Human gate | Wait | |
|---|---|---|
| Shape | hexagon |
insulator with a duration |
| Ends when | A person lets it continue, or a watched pull request changes | The duration passes |
| Run slot | Given up | Kept |
| After a restart | Stays at the gate | Wakes at the time it first set |
Human gates
Section titled “Human gates”A human gate is a step with shape="hexagon". It does no work. When a run reaches one, its standing is Waiting. It shows a clock and “Waiting:” followed by the gate’s label, not the pause mark, so you can tell it apart from a run you paused. The runs list’s Status filter calls it At a gate. It holds no run slot, and it stays at the gate across a restart.
To let the run continue, open it and choose Continue or Skip on the gate, or Resume. The run then joins the back of the queue, continues when a slot is free, and follows the gate’s edge. A coding agent can do the same with the control_run MCP tool and the SkipWait or Resume action.
A gate needs an outgoing edge. A gate inside a parallel branch is refused.
The pull request gate
Section titled “The pull request gate”The shipped delivery workflows stop at a gate labelled “The pull request is waiting for review or merge”. The run page shows how long it has waited and when Orbital checks next.

When the run’s probes have seen a pull request, Orbital looks at it once a minute. The run continues by itself once the pr probe’s rolled-up pr.state is no longer WAITING: the pull request merged, closed, conflicts, failed CI or needs changes. It then joins the queue and follows the gate’s edge, as when you let it continue. An approved pull request that is not merged yet goes back to the gate. Worktrees and delivery explains the whole loop.
A wait is a step with shape="insulator" and a duration, such as duration="30m". The run sleeps for that time, then continues. A wait keeps its run slot, but waiting costs no agent visits.
The run page shows a countdown. Choose Skip to end the wait now.

Orbital records the skip, so it still applies if Orbital restarts at that moment. A wait that was running during a restart wakes at the time it first set.
The epic workflows, for example, wait thirty minutes when every remaining ticket is blocked, then look again. Add a loop explains why a poll loop needs a wait.
Questions from the agent
Section titled “Questions from the agent”An agent can also stop a run by asking you something. The run stands as Question until you answer in the composer. That is not a gate, because the workflow did not plan it. See Message a run.

Related
Section titled “Related”- Human gate and wait: the syntax for both steps.
- Add a loop: use a wait inside a poll loop.
- Worktrees and delivery: the delivery loop around the pull request gate.
- Pause, stop or resolve a run: resume a run by hand.