Context
Fabro has first-class human gate nodes (shape=hexagon) that pause execution and present choices via CLI or web UI. This enables plan-approve-implement patterns where humans review plans before code changes proceed. Rejected plans loop back to planning.
Wave currently has no human-in-the-loop mechanism. Pipelines run unattended. For Wave's use as a development tool (not just CI), human gates enable supervised workflows where the developer stays in control at critical decision points.
Design Goals — Best of Both Worlds
Combine Fabro's human gates with Wave's TUI/WebUI and persona system.
Gate Step Type
steps:
- name: plan
persona: navigator
- name: approve-plan
type: gate
depends_on: [plan]
prompt: "Review the implementation plan"
choices:
- label: "Approve"
key: "a"
target: implement
- label: "Revise"
key: "r"
target: plan
- label: "Abort"
key: "q"
target: _fail # special: fail the pipeline
timeout: 3600s # 1 hour before auto-timeout
default: approve # on timeout, use this choice
- name: implement
persona: craftsman
depends_on: [approve-plan]
Interaction Channels
- CLI — prompt in terminal with keyboard shortcuts (like Fabro's
[A] Approve / [R] Revise)
- TUI — Bubble Tea modal with choice buttons
- Web UI — browser notification + button panel
- API — REST endpoint for programmatic approval (enables Slack/webhook integration)
Freeform Input
Gates can accept freeform text (revision notes, additional instructions):
- name: approve-plan
type: gate
freeform: true # allow text input alongside choices
The freeform text becomes available as an artifact for downstream steps.
Auto-Approve Mode
For CI/automated runs: wave run --auto-approve impl-issue -- "..." skips all gates, using default choices.
Context Population
After a gate decision, the following are set in run context:
gate.<step_name>.choice — selected choice label
gate.<step_name>.text — freeform text (if any)
gate.<step_name>.timestamp — when decision was made
What Wave Keeps
- Persona system (gates don't need personas — they're human interaction points)
- Contract validation (can still validate before presenting to human)
- Workspace isolation (gate doesn't modify workspace)
What Wave Gains
- Supervised workflows — human stays in control at critical points
- Plan review — navigator creates plan, human approves, craftsman implements
- Quality gates — human sign-off before PR creation
- Revision loops — rejected work loops back with human feedback
Implementation Scope
- Add
type: gate step type to manifest schema
- Gate executor in
internal/pipeline/executor.go — pauses execution
- CLI gate handler — terminal prompt with choices
- TUI gate handler — Bubble Tea modal
- Web UI gate handler — REST endpoint + notification
--auto-approve flag on wave run
Research Sources
Context
Fabro has first-class human gate nodes (
shape=hexagon) that pause execution and present choices via CLI or web UI. This enables plan-approve-implement patterns where humans review plans before code changes proceed. Rejected plans loop back to planning.Wave currently has no human-in-the-loop mechanism. Pipelines run unattended. For Wave's use as a development tool (not just CI), human gates enable supervised workflows where the developer stays in control at critical decision points.
Design Goals — Best of Both Worlds
Combine Fabro's human gates with Wave's TUI/WebUI and persona system.
Gate Step Type
Interaction Channels
[A] Approve / [R] Revise)Freeform Input
Gates can accept freeform text (revision notes, additional instructions):
The freeform text becomes available as an artifact for downstream steps.
Auto-Approve Mode
For CI/automated runs:
wave run --auto-approve impl-issue -- "..."skips all gates, using default choices.Context Population
After a gate decision, the following are set in run context:
gate.<step_name>.choice— selected choice labelgate.<step_name>.text— freeform text (if any)gate.<step_name>.timestamp— when decision was madeWhat Wave Keeps
What Wave Gains
Implementation Scope
type: gatestep type to manifest schemainternal/pipeline/executor.go— pauses execution--auto-approveflag onwave runResearch Sources
--auto-approveflag for CI