Steps — actions, sleeps, approvals, waiting for events
Steps are the body of a workflow. Click + Add step in the editor — the Step Palette opens with every action that's registered for the 'workflow' surface in the Action Manifest, plus the built-in workflow primitives.
Actions:
Anything in the Action Manifest with surfaces: ['workflow'] is callable. Examples — account.addNote, contact.update, email.send, opportunity.advance. Each action has a typed input schema; the editor auto-generates form fields for that schema, with expression placeholders (${trigger.doc.id}, ${steps.step1.result}, etc.) for data references.
Built-in workflow steps:
• workflow.sleep — pause for N seconds or until a specific ISO datetime. Durable — backed by Cloud Tasks, so a 30-day sleep survives restarts.
• workflow.waitForApproval — pause until a designated assignee (or "org-admins") reviews an inbox card and clicks Approve / Reject. The inbox card surfaces in the assignee's normal notifications.
• workflow.waitForEvent — pause until a doc somewhere in Firestore matches a condition. Useful for "wait until the opportunity moves to Closed-Won" without re-checking on a schedule.
Visual vs YAML:
The editor has two views — Visual (the click-through canvas) and YAML (the raw workflow definition). Either is editable; they're the same workflow under the hood.