A workflow engine and CLI that interprets Arazzo Specification (v1.1.0) documents and executes the workflows they describe, resolving step dependencies into a DAG and running independent steps in parallel.
- Source descriptions: OpenAPI 3.x only (
operationId/operationPath); no AsyncAPI. successCriteria/ actioncriteria:simpleandjsonpathcondition types.- HTTP steps only (no nested workflow invocation via
workflowId, no async send/receive).
npm install
npm run buildloom run <arazzo-file> [options]| Option | Description |
|---|---|
-w, --workflow <id> |
Workflow to run (required if the document defines more than one) |
-i, --input <key=value> |
A workflow input; repeatable; values are parsed as JSON when possible |
--input-file <path> |
A JSON file of workflow inputs (--input flags take precedence) |
--dry-run |
Resolve and print the execution plan without making any network calls |
-c, --concurrency <n> |
Max steps to run in parallel (default: unbounded) |
-r, --retries <n> |
Attempts per step before giving up (default: 3) |
--base-url <url> |
Override the base URL for all operations |
--timeout <ms> |
Per-request timeout in milliseconds |
--json |
Print machine-readable JSON instead of formatted console output |
node dist/cli.js run examples/pet-store.arazzo.yaml --input petName=Rex --dry-run
node dist/cli.js run examples/pet-store.arazzo.yaml --input petName=RexThe examples/ folder includes a trimmed pet-store Arazzo document, its OpenAPI source, and a tiny mock server (node examples/mock-server.mjs) to run the example against.
npm install
npm run typecheck
npm testRebuild on every change with:
npm run dev # tsup --watchTo try the CLI against your local changes, run the built output directly:
node dist/cli.js run examples/pet-store.arazzo.yaml --input petName=Rex --dry-runOr link the package so the loom command resolves to your local checkout (useful for testing against a document in another directory):
npm link
loom run examples/pet-store.arazzo.yaml --input petName=Rex --dry-runTo exercise a full (non-dry-run) workflow end-to-end, start the bundled mock server in one terminal and point the CLI at it in another:
node examples/mock-server.mjs
node dist/cli.js run examples/pet-store.arazzo.yaml --input petName=Rex --base-url http://localhost:4010