Human gates
A run stops and waits for a person in three cases:
| Trigger | Where it is declared | How to resume |
|---|---|---|
requires_approval: true |
on a step: the run pauses before it | wfx approve <run-id> or wfx reject <run-id> -m "why" |
A gate with action: needs_input |
on a step’s gates or decide.gates |
wfx answer <run-id> -m "text" |
The agent calls ask_human |
tools: [ask_human] on a step |
wfx answer <run-id> -m "text" |
wfx approve <run-id> --as priya # approve the step waiting on a humanwfx reject <run-id> -m "not this week"wfx answer <run-id> -m "the failing call is parse(\"\")"The HTTP API behind these is POST /api/runs/{id}/approve, /reject and /answer. The UI’s run
page shows the same buttons. internal/notify delivers a pause to wherever the person is.
Templates put the gate before anything leaves
Section titled “Templates put the gate before anything leaves”Every heavy template stops before it writes or pushes. For example,
code-remover waits for approval before remove and again before publish, and test-gap-finder
waits before writing tests and before publishing. Each template page lists its gates, generated
from its YAML.
From an agent
Section titled “From an agent”The approval-desk skill lets Claude or Codex answer “what is waiting on me?”. It lists the paused runs and resolves them with the same three commands.