Primitives
Primitives are built into Hyphen. They don't need to be registered — use them directly as step types in any workflow.
flowchart LR
subgraph "Workflow"
M["Matcher"] --> L["Loop"]
L --> A["PbotApproval"]
A --> F["PbotForm"]
F --> T["Custom Table"]
end
| Primitive | Type Value | What It Does |
|---|---|---|
| Matcher | matcher |
Compare two datasets — exact keys, numeric tolerance, date windows, fuzzy text. Outputs matched pairs and exceptions from both sides |
| Loop | loop |
Two modes: foreach processes items in parallel with configurable concurrency; react runs an AI agent with tools, guardrails, and stuck detection |
| Approval | PbotApproval |
Pause execution for human review. The reviewer sees context, makes a decision, and execution resumes |
| Form | PbotForm |
Pause execution to collect external input via a form. Supports TTL and reminder intervals |
| Custom Table | custom-table |
Multi-tenant data storage — read, write, update, and upsert operations with full audit logging |
All primitives produce output that flows into context via @ path resolution, making their results available to subsequent steps.