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:
When matching the user’s selection to an edge, Fabro strips the accelerator prefix so typing
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.
When a gate has only a freeform edge and no fixed choices, the user goes directly to a text input prompt — skipping the multiple-choice menu entirely. This is useful for conversational loops like REPL workflows where the user provides open-ended instructions each iteration.
Question types
Human gates infer their interview type from their edges: fixed choices becomemultiple_choice, and a gate with only a freeform edge becomes freeform. To force another interviewer presentation, set question_type on the node:
yes_no, confirmation, multiple_choice, multi_select, and freeform.
Default choice on timeout
If a human gate has a timeout configured, you can specify a default choice using thehuman.default_choice attribute:
Unanswered gates fail closed
Fabro does not treat missing input as approval. A human gate advances only when one of these happens:- A person explicitly answers the question
- The gate times out and
human.default_choiceis set - The run uses
--auto-approve
condition="outcome=failed" or a retry_target.
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:
These can be read in edge conditions or referenced by downstream agents.