Open workflow runtime

Run agent workflows anywhere.

Write orchestration in JavaScript; dispatch Codex, Claude Code, Gemini, Qwen, Kimi, or any local CLI.

workflow.js
running
Input args loaded
Plan plain JS
Dispatch parallel()
Codex agent task
Claude Code agent task
Result schema checked

Why ODW

Keep the plan in code. Keep the agent context clean.

ODW turns dynamic workflow scripts into portable artifacts: easy to inspect, run, pause, resume, and move between agent CLIs.

workflow.js

Portable scripts

The same Claude Code-style workflow can run on Codex, Gemini, Qwen, Kimi, or a custom shell adapter.

parallel()

Parallel by design

Fan out independent subtasks without filling the host agent's conversation with every intermediate step.

odw status

Observable runs

Detached workers persist logs, state, and final results so long-running orchestration can be inspected later.

Runtime shape

A small engine between workflow scripts and real agent CLIs.

The loader wraps Claude-style JavaScript, the scheduler limits concurrency, and adapters shell out to the local agents you already use.

fan-out-reduce.js
export const meta = { name: "fan-out-reduce" }

const drafts = await parallel(
  [1, 2, 3, 4].map((i) => () =>
    agent(`Draft #${i}: ${args.question}`)
  )
)

return await agent(
  "Synthesize the best answer",
  { schema }
)
agent(prompt)

Dispatch real work

Run one coding-agent CLI on a scoped subtask and collect text or schema-validated output.

parallel(thunks)

Fan out safely

Run independent branches concurrently when the next step needs the full batch.

pipeline(items)

Stream stages

Move each item through review, verification, and synthesis without a global barrier.

Start

Install the runtime or hack from source.

Use the single-file installer, install from npm, or clone the repository. ODW drives local agent CLIs; it does not call model APIs directly.

terminal
curl -fsSL https://raw.githubusercontent.com/xz1220/open-dynamic-workflows/main/scripts/install.sh | sh

npm i -g open-dynamic-workflows

odw run examples/deep-research.js --wait