buttons drawer create NAME
buttons drawer list
buttons drawer NAME add BUTTON [BUTTON ...] append button step(s)
buttons drawer NAME add drawer/OTHER append a sub-drawer step
buttons drawer NAME add for_each:BUTTON append a per-item loop wrapping BUTTON
buttons drawer NAME add wait:DURATION append a time-based pause (e.g. wait:30s)
buttons drawer NAME connect A to B auto-match output → args by name+type
buttons drawer NAME connect A.output.x to B.args.y explicit field path
buttons drawer NAME set STEP.args.FIELD=value literal or ${ref} into a step arg
buttons drawer NAME set STEP.over=EXPR for_each: the array to iterate
buttons drawer NAME set STEP.as=NAME for_each: loop variable name
buttons drawer NAME set STEP.parallelism=N for_each: max concurrent iterations (0/1 = serial)
buttons drawer NAME set STEP.from=EXPR aggregate: input array
buttons drawer NAME set STEP.pluck=EXPR aggregate: per-item expression
buttons drawer NAME set STEP.steps.N.args.F=value reach a nested step's arg
buttons drawer NAME press [key=value ...] run it; unfilled required inputs go here
buttons drawer NAME logs [--failed] [--limit N] past runs for this drawer
buttons drawer NAME remove delete the drawer
buttons drawer NAME summary (topology + validation + recent runs)
buttons drawer schema print JSON Schema for drawer.json