Steps and Evaluators
When a step or evaluator throws, we retry it automatically with exponential backoff. After all retries are exhausted, the error propagates to the workflow and the execution fails. Default retry behavior:| Setting | Default |
|---|---|
initialInterval | 10s |
backoffCoefficient | 2.0 |
maximumAttempts | 3 |
nonRetryableErrorTypes | ['ValidationError', 'FatalError'] |
options.activityOptions property — see Step Options.
Workflows
Errors in the workflowfn itself are not retried. If the workflow function throws — or if a step throws after exhausting retries — the workflow execution fails.
You can catch step errors with try/catch and handle them however you want:
workflow.ts
Error metadata
When a root workflow fails, Output can attach trace metadata to the Temporal error returned by the runtime. The CLI and API expose this metadata on failed workflow results alongside the error message when it is available. If you inspect raw errors directly, remember that workflow failures are native Temporal errors such asApplicationFailure or ChildWorkflowFailure. The metadata is stored in a Temporal failure’s details, which may be on a nested error in the .cause chain rather than on the top-level error object. Walk the .cause chain and look for details containing trace.
FatalError and ValidationError
Sometimes retrying won’t help — the API key is invalid, the resource doesn’t exist, or the data is fundamentally wrong. For these cases, throwFatalError or ValidationError to fail immediately without retries.
| Error | Use when |
|---|---|
FatalError | The failure is not recoverable. Retrying would not help (e.g. invalid API key, resource not found, business rule violation). |
ValidationError | The data is invalid. Use for custom validation checks alongside the framework’s built-in schema validation. |
@outputai/core:
steps.ts
Schema Validation
The framework validates inputs and outputs automatically using your Zod schemas. When validation fails, it throws aValidationError with a message that tells you exactly what went wrong.
Steps and evaluators: Input is validated against inputSchema before fn runs. The return value is validated against outputSchema after fn returns. If either fails, the step fails immediately (no retries).
Workflows: Input is validated against inputSchema before the workflow starts. Output is validated against outputSchema after the workflow returns. If either fails, the execution fails.
The error message includes context like "Step lookupContact input validation failed: ..." so you can trace exactly where and why validation failed.