Workflow nodes
Every node kind, its fields, data shapes, and config examples.
Nodes are the vocabulary of plans. Each kind declares what it needs and what it produces; edges are valid only when both sides' interfaces agree. Conceptual overview in Workflows and plans.
Node kinds at a glance
| Kind | Reads | Writes | Use when |
|---|---|---|---|
| Source | Integration | Records / collections | Data enters from your systems |
| Transform | Records | Reshaped records | Shape is almost right |
| Extract | Documents | Fields, labels | Input is unstructured |
| Map | Any shape | Mapped shape | Conversion must be inspectable |
| Skill | Guidance | Assisted behavior | A judgment call recurs |
| Query | State | Lookup results | Branching on what is known |
| Predict | State | Forecast / label | A decision needs likelihoods |
| Destination | Records | External system | Results must live outside |
| Ontology write | Mapped data | Entities / relationships | Structure must persist |
Assertion mapping and assertion materializer nodes serve advanced governance flows; most workspaces never configure them directly.
Interface shapes
| Shape | Meaning | Example |
|---|---|---|
| Record | One structured item | An order with id, total, date |
| Collection | Many records together | Yesterday's orders |
| Document | Semi-structured content | A ticket thread, a PDF invoice |
| Blob | Opaque bytes, carried not inspected | An image attachment |
| Ontology entity / relationship | Instances of defined types | Resolved Customer + Orders |
| Fact set | Grouped facts for prediction inputs | Per-account feature rows |
| Assertions | Checked statements with outcomes | "Total matches invoice: confirmed" |
Source node
Points at an installed source integration. Holds no secrets — those live with the integration.
| Field | Meaning | When to set it |
|---|---|---|
| Source | Which installed integration to read | Always — pick the door first |
| Read mode | Full scope vs what changed since last time | Incremental for schedules, full for first loads |
| Selection | Filters and field subset | Narrow before downstream, not after |
| Checkpointing | Resume where it stopped | On for anything scheduled |
| Batch size | Rows per pull | Raise for bulk loads |
| Retries | Attempts and backoff (fixed / exponential) | Raise for flaky sources |
| Row-count watch | Flag unexpected volume drops | On for feeds that must not silently shrink |
{
"kind": "source",
"dataEndpointName": "crm.orders",
"mode": "incremental",
"flow": {
"checkpoint": { "enabled": true },
"batch": { "size": 1000 },
"retry": { "maxAttempts": 3, "backoff": "exponential" }
},
"anomaly": { "rowCountDropThreshold": 0.5 }
}A second example — one-time full read for seeding:
{
"kind": "source",
"dataEndpointName": "crm.products",
"mode": "full",
"flow": { "batch": { "size": 5000 } }
}Image: source node configuration with mode, selection, and flow controls visible.
Transform node
| Field | Meaning | When to set it |
|---|---|---|
| Function | Named transform (aggregate, join, normalize…) | Always — read its description first |
| Inputs | One stream, or named streams for joins | Named inputs for merges |
| Parameters | Group-by keys, join keys, thresholds | Where "aggregate" becomes "average order value by region" |
| Output | Where the reshaped stream goes | Always |
{
"kind": "transform",
"function": "aggregate",
"input": "orders",
"params": { "groupBy": ["region"], "measures": [{ "field": "total", "op": "avg" }] }
}Prefer small chained transforms over one large one — failures point at the guilty step.
Extract node
| Field | Meaning | When to set it |
|---|---|---|
| Strategy | Language model, parser, or hybrid | Model for prose, parser for rigid formats, hybrid for laid-out text |
| Prompt / rules | What to pull and in what shape | Be explicit about downstream shape |
| Output | Structured fields onward | Always |
Validate on samples before trusting at volume — quality is measured per field, not per document.
Mapping node
Declares shape-to-shape conversion; for ontology work see Ontology mappings.
| Field | Meaning | When to set it |
|---|---|---|
| Inputs | Named upstream streams | Always |
| Entities / relationships | The mapping rules | The inspectable conversion itself |
| Mode | Update-or-insert / snapshot / delta | Upsert for schedules, snapshot for rebuilds |
{
"kind": "ontology-mapping",
"inputs": { "orders": "clean_orders" },
"mode": "upsert",
"entities": [{ "class": "Order", "id": { "template": "ord-{order_id}" } }]
}Skill node
| Field | Meaning | When to set it |
|---|---|---|
| Skills | Installed skills by reference | One or more, each earning its place |
| Mode | Authoring-assist / execution-assist / validation-assist | Match where guidance should bite |
Query node
Reads ontology or workflow state mid-plan without consuming it. No configuration beyond what to read and where it flows — branch on thresholds, lookups, and existence checks.
Predict node
| Field | Meaning | When to set it |
|---|---|---|
| Forecaster | Which predictor, by id or slug | Always — one must be named |
| Subject | What the prediction is about | Name the decision target |
| Horizon | Aim point and window end | Always — a forecast without one has no test date |
| Parameters | Forecaster-specific settings | Per predictor docs |
{
"kind": "predict",
"forecasterSlug": "renewal-risk-v3",
"subjectRef": "account.top20",
"horizon": "next-quarter",
"horizonEndsAt": "2026-12-31T23:59:59Z"
}Full predictor detail in Forecasts.
Destination node
| Field | Meaning | When to set it |
|---|---|---|
| Destination | Installed integration receiving the write | Always |
| Write mode | Append / replace / update-or-insert | Append for history, replace for snapshots under approval |
| Source stream | Which upstream data gets written | Always |
{
"kind": "destination",
"dataEndpointName": "warehouse.forecast_output",
"source": "risk_scores",
"writeMode": "append"
}Gate external writes with node-level approval — see Write policies.
Ontology write node
| Field | Meaning | When to set it |
|---|---|---|
| Definition | Governing ontology model | Always |
| Mode | Update-or-insert / snapshot / delta | Upsert for sync, snapshot for rebuilds |
| Atomicity | Transactional vs per-unit | Transactional for small critical writes, per-unit for resumable bulk |
| Validation | Unknown terms, invalid records, cardinality, datatypes | Quarantine at volume, reject where money moves |
| Conflict policy | Which source wins, in what priority | Wherever two systems disagree |
Choose ontology writes where structure compounds across runs — not as the default outcome of every plan.
Choosing between lookalikes
| Pair | Rule |
|---|---|
| Transform vs mapping | Reshaping data → transform; declared shape contract or ontology landing → mapping |
| Extract vs transform | Unstructured in, fields out → extract; fields in, fields out → transform |
| Destination vs ontology write | People read destinations; predictions read ontology |
| Query vs predict | Known → query; likely → predict |
Validation
| Scope | Severity | Effect |
|---|---|---|
| Graph / node / edge | Error | Blocks dry-run and commit |
| Graph / node / edge | Warning | Asks for a reading first |
| Graph / node / edge | Info | Context only |
When an edge is invalid, select it — the message names the incompatible interfaces.