Human gates
A human gate is a node with shapehexagon that pauses the workflow and presents the user with a choice. The options are derived from the outgoing edge labels:
Keyboard accelerators
The prefixes[A], [R], [S] in edge labels serve as keyboard accelerators. Fabro supports three formats:
| Format | Example |
|---|---|
[K] Label | [A] Approve |
K) Label | A) Approve |
K - Label | A - Approve |
A matches [A] Approve.
Freeform input
In addition to fixed choices, a human gate can accept freeform text input. Add an edge withfreeform=true:
human.gate.text in the run context.
Default choice on timeout
If a human gate has a timeout configured, you can specify a default choice using thehuman.default_choice attribute:
Auto-approve
For testing or fully automated runs, pass--auto-approve to skip all human gates:
Yes for yes/no gates and the first option for multiple-choice gates.
Where to place human gates
Human gates are most valuable at high-leverage decision points:- Before implementation — Approve a plan before the agent writes code
- After review — Confirm that a code review’s findings are worth fixing
- At branch points — Choose a strategy when multiple approaches are viable
- Before external actions — Approve before deploying, merging, or sending notifications
Context set by human gates
When a user makes a selection, the human gate sets several context values for downstream use:| Context key | Value |
|---|---|
human.gate.selected | The accelerator key (e.g. "A") or "freeform" |
human.gate.label | The full label of the selected edge |
human.gate.text | The user’s freeform text (if applicable) |