Error codes

Every WayflowError code the runtime and editor can raise — the message and the actionable hint for each.

Every error and validation warning carries a stable code — a WF_… string you can branch on or search your logs for. Compare it against the exact string:

handle.ts ts
if (error.code === 'WF_LLM_MODEL_NOT_FOUND') {
  // …
}

Each code’s message is technical (the literal text the runtime emits, with {placeholders} filled at runtime); its hint, when present, is the actionable suggestion surfaced to the user. See Debugging & diagnostics for how these appear.

Runtime

CodeMessageHint
WF_RUNTIME_NO_HANDLERNo handler registered for node type "{nodeType}"
WF_RUNTIME_HANDLER_THREW{reason} (the handler’s own thrown message)
WF_RUNTIME_EMPTY_GRAPHGraph has no nodes
WF_RUNTIME_CYCLE_DETECTEDGraph contains a cycle ({path}). Cyclic execution is not supported in v1.
WF_RUNTIME_UNSCHEDULABLE_GRAPHGraph is unschedulable (disconnected or already-failed dependency)
WF_RUNTIME_MULTIPLE_NODES_FAILED{count} nodes failed: {summary}
WF_RUNTIME_MISSING_INPUTInput "{field}" is requiredProvide a value or a default for this input, or make it not required.
WF_AGENT_UNKNOWN_NODE_TYPEUnknown node type "{type}"
WF_RUNTIME_INVALID_REGEXConditional 'matches' has an invalid regex pattern "{pattern}": {reason}Fix the regex pattern in this node’s config.
WF_RUNTIME_MULTI_PORT_MISMATCHHandler for node type "{nodeType}" returned a single value, but the node has {portCount} output ports ({portList}). Multi-port handlers must return an object keyed by port id.
WF_RUNTIME_MAP_MULTIPLE_LISTSThis node runs once per item but received more than one list.Combine the lists into one with a Merge node so this node gets a single list.
WF_RUNTIME_MAP_SUSPENDA node that runs once per item tried to pause for human review, which isn't supported mid-iteration.Move the Human Review node before or after the per-item node.
WF_RUNTIME_HTTP_ERRORHTTP {status}: {detail}
WF_RUNTIME_TOOL_NO_NAMEWorkflow has no nameName the workflow in the editor’s Settings so it can be used as a tool.
WF_RUNTIME_TOOL_NOT_REGISTEREDGraph references tool "{name}" but no handler is registeredRemove this tool from the node’s Tools list.
WF_RUNTIME_CHECKPOINT_STALECan't resume: the graph's structure changed since this checkpoint was created. A checkpoint can only resume against the same nodes, ports, and connections it paused on (editing a node's config is fine; adding, removing, or rewiring nodes is not).
WF_RUNTIME_PAUSE_IN_TOOLA workflow used as a tool tried to pause for human review, which a tool call cannot do.Remove the Human Review node from a workflow that runs as a tool.
WF_RUNTIME_REVIEW_NOT_RESUMABLEThis workflow has a human review step, but the editor isn't set up to handle it.
WF_RUNTIME_RECURSION_LIMITWorkflows-as-tools nested too deeply. A workflow may be calling itself as a tool.

LLM

CodeMessageHint
WF_LLM_MODEL_NOT_FOUNDNo handler registered for model "{model}"Pick an available model in this node’s config.
WF_LLM_OUTPUT_WRONG_TYPEThe model handler returned {type}, but this node has a structured output schema
WF_LLM_OUTPUT_INVALID_JSONThe model returned text that isn't valid JSON: {reason}Increase Max Tokens if the output was cut off, ask for JSON explicitly in the prompt, or try a different model.
WF_LLM_OUTPUT_TRUNCATEDThe model hit its output-token limit before completing the structured responseIncrease Max Tokens in this node’s config.
WF_LLM_OUTPUT_NOT_OBJECTThe model returned JSON that isn't an objectAdjust the prompt to return a JSON object keyed by field name.
WF_LLM_OUTPUT_MISSING_FIELDThe model's output is missing the required field "{field}" (expected: {expectedKeys})Make sure the prompt asks the model to return every field in the output schema.
WF_TEMPLATE_VAR_MISSINGTemplate variable "{name}" has no valueConnect an input to this variable’s port, or set a default value in the node config.
WF_LLM_IMAGE_URL_UNSUPPORTEDThis model doesn't accept image URLs, only uploaded (base64) imagesUpload the image instead of pasting a URL.

Image generation

CodeMessageHint
WF_IMAGE_MODEL_NOT_FOUNDNo handler registered for model "{model}"Pick an available model in this node’s config.
WF_IMAGE_GENERATION_FAILEDImage generation failed: {reason}Check the model name and that the requested size is supported by the backend (some models accept only specific dimensions).
WF_IMAGE_NO_OUTPUTThe image backend returned no imageVerify the selected model supports image generation.

Validation (Issues tab)

CodeMessageHint
WF_VALIDATION_ORPHAN_NODEThis node isn't connected to anythingConnect it to the rest of the workflow, or remove it.
WF_VALIDATION_NO_INPUT_NODEThe workflow has no Input nodeAdd an Input node so the workflow can receive data.
WF_VALIDATION_NO_OUTPUT_NODEThe workflow has no Output nodeAdd an Output node so the run produces a result.
WF_VALIDATION_VAR_UNSETTemplate variable "{name}" has no input — it will be blank in the promptConnect its port, or give it a value under Variable Defaults.
WF_VALIDATION_VAR_INVALID_NAMEVariable "{name}" can't contain spacesUse letters, numbers, and underscores instead — for example, image_1.
WF_VALIDATION_LLM_NO_PROMPTThis LLM node has no promptWrite a prompt or system prompt so the model has something to act on.
WF_VALIDATION_IMAGE_NO_PROMPTThis Image Generation node has no promptWrite a prompt describing the image to generate.
WF_VALIDATION_TOOL_NOT_IN_CATALOGTool "{name}" is not in the editor catalogRemove it from this node’s Tools list.
WF_VALIDATION_OUTPUT_FIELD_MISSINGOutput field "{name}" wasn't produced by the last runConnect an input to this field’s port.
WF_VALIDATION_OUTPUT_TYPE_MISMATCHOutput field "{name}" expected {expected}, got {actual}
WF_VALIDATION_DUPLICATE_UNIQUE_NODEA workflow can have only one {label} nodeKeep only one.