conductor-oss/ conductor
View on GitHubConductor is an event driven agentic workflow engine providing durable and highly resilient execution engine for applications and AI Agents
Conductor is an event driven agentic workflow engine providing durable and highly resilient execution engine for applications and AI Agents
Conductor is an open-source durable execution platform for microservices, AI agents, and adaptive workflow graphs. It turns runtime choices—loops, branching, fan-out, tool calls, approvals, retries, and cancellation—into durable, inspectable execution. It originated at Netflix and is actively maintained by Orkes and the community.
Prerequisites: Node.js v16+ and Java 21+ must be installed.
npm install -g @conductor-oss/conductor-cli
conductor server start
Open http://localhost:8080 — your server is running with the built-in ui-next UI.
Upgrading from a previous version? The CLI caches the server JAR at
~/.conductor-cli/. If you have an older version cached, force a fresh download:conductor server start latest # or delete the cache manually rm ~/.conductor-cli/conductor-server-latest.jar && conductor server start
Run your first workflow:
# Create a workflow that calls an API and parses the response — no workers needed
curl -s https://raw.githubusercontent.com/conductor-oss/conductor/main/docs/quickstart/workflow.json -o workflow.json
conductor workflow create workflow.json
Note: Running this command twice will return an error on the second call — the workflow already exists. This is expected behavior. Use
conductor workflow updateto modify an existing workflow.
conductor workflow start -w hello_workflow --sync
See the Quickstart guide for the full walkthrough, including writing workers and replaying workflows.
Docker Image for Conductor (includes the ui-next UI):
# UI at http://localhost:5000 | API at http://localhost:8080
docker run -p 5000:5000 -p 8080:8080 conductoross/conductor:next
All CLI commands have equivalent cURL/API calls. See the Quickstart for details.
| | | |---|---| | Durable execution | Every step is persisted. Survives crashes, restarts, and network failures with configurable retries and timeouts. | | Explicit orchestration | Keep orchestration as a versioned, inspectable graph while workers and built-in tasks perform business logic and side effects. | | AI agent orchestration | Native LLM tasks, MCP tool calling, human approval, and vector workflows for RAG. | | Durable adaptive graphs | Govern runtime-selected paths, bounded fan-out, tool calls, approvals, retries, cancellation, and recovery. | | Dynamic at runtime | Dynamic forks, tasks, and sub-workflows can be resolved at runtime. Validate generated workflow definitions before starting them. | | Execution recovery | Inspect an execution, then restart, rerun, retry, pause, resume, or terminate it according to the workflow's policy. | | Operate at your scale | Scale servers and workers independently, then use task domains, rate limits, concurrency limits, and metrics for control. | | Polyglot workers | Workers in Java, Python, Go, JavaScript, C#, Ruby, or Rust. Workers poll, execute, and report — run them anywhere. | | Self-hosted, no lock-in | Apache 2.0. 5 persistence backends, 6 message brokers. Runs anywhere Docker or a JVM runs. |
Conductor workers are plain code — any language, any library, any I/O. The orchestration layer is declarative and machine-readable, so developers can keep their preferred SDK or framework while operators retain durable state, policy boundaries, replay, versioning, and auditability.
Start with the governed adaptive graph: plan → validate approved capabilities → bounded fan-out or human approval → evaluate → continue or finish.
An autonomous think-act agent in Conductor: discover tools via MCP, reason with an LLM, call the chosen tool, repeat until done.
{
"name": "autonomous_agent",
"description": "Agent that loops until the task is complete",
"version": 1,
"tasks": [
{
"name": "discover_tools",
"taskReferenceName": "discover",
"type": "LIST_MCP_TOOLS",
"inputParameters": {
"mcpServer": "${workflow.input.mcpServerUrl}"
}
},
{
"name": "agent_loop",
"taskReferenceName": "loop",
"type": "DO_WHILE",
"loopCondition": "$.think['done'] != true && $.loop['iteration'] < 10",
"loopOver": [
{
"name": "think",
"taskReferenceName": "think",
"type": "LLM_CHAT_COMPLETE",
"inputParameters": {
"llmProvider": "openai",
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"message": "You are an autonomous agent. Available tools: ${discover.output.tools}. Previous results: ${loop.output.results}. Respond with JSON: {\"action\": \"tool_name\", \"arguments\": {}, \"done\": false} or {\"answer\": \"final answer\", \"done\": true}."
},
{ "role": "user", "message": "${workflow.input.task}" }
],
"jsonOutput": true
}
},
{
"name": "act",
"taskReferenceName": "act",
"type": "SWITCH",
"evaluatorType": "value-param",
"expression": "route",
"inputParameters": {
"route": "${think.output.result.done}"
},
"decisionCases": {
"false": [
{
"name": "execute_tool",
"taskReferenceName": "tool_call",
"type": "CALL_MCP_TOOL",
"inputParameters": {
"mcpServer": "${workflow.input.mcpServerUrl}",
"method": "${think.output.result.action}",
"arguments": "${think.output.result.arguments}"
}
}
],
"true": []
}
}
]
}
]
}
Every step is durably persisted — no framework, no SDK lock-in. Code-first engines force your code to be deterministic so the framework can replay it. Conductor makes the engine deterministic — so your code doesn't have to be.
See Build Your First AI Agent for the framework-first walkthrough, or Durable Adaptive Graphs for the governed production pattern.
Conductor Skills let AI coding assistants (Claude Code, Gemini CLI, and others) create, manage, and deploy Conductor workflows directly from your terminal.
# Install Skills for Claude Code
/plugin marketplace add conductor-oss/conductor-skills
/plugin install conductor@conductor-skills
One command to auto-detect every supported agent on your system and install globally where possible. Re-run anytime — it only installs for newly detected agents.
macOS / Linux
curl -sSL https://conductor-oss.github.io/conductor-skills/install.sh | bash -s -- --all
Windows (PowerShell) / (cmd)
# powershell
irm https://conductor-oss.github.io/conductor-skills/install.ps1 -OutFile install.ps1; .\install.ps1 -All
# cmd
powershell -c "irm https://conductor-oss.github.io/conductor-skills/install.ps1 -OutFile install.ps1; .\install.ps1 -All"
| Language | Repository | Install |
|----------|------------|---------|
| ☕ Java | conductor-oss/java-sdk | Maven Central |
| 🐍 Python | conductor-oss/python-sdk | pip install conductor-python |
| 🟨 JavaScript | conductor-oss/javascript-sdk | npm install @io-orkes/conductor-javascript |
| 🐹 Go | conductor-oss/go-sdk | go get github.com/conductor-sdk/conductor-go |
| 🟣 C# | conductor-oss/csharp-sdk | dotnet add package conductor-csharp |
| 💎 Ruby | conductor-oss/ruby-sdk | (incubating) |
| 🦀 Rust | conductor-oss/rust-sdk | (incubating) |
| Backend | Configuration | |---------|---------------| | Redis + ES7 (default) | config-redis.properties | | Redis + ES8 | config-redis-es8.properties | | Redis + OpenSearch | config-redis-os.properties | | Postgres | config-postgres.properties | | Postgres + ES7 | config-postgres-es7.properties | | MySQL + ES7 | config-mysql.properties |
Requirements: Docker Desktop, Java (JDK) 21+, Node.js 18+ and pnpm (for UI)
git clone https://github.com/conductor-oss/conductor
cd conductor
./gradlew build
# (optional) Build UI (ui-next) and embed it in the server
# ./build_ui_next.sh
# Start local server
cd server
../gradlew bootRun
Run the UI in dev mode (hot-reload at http://localhost:1234):
Requires a running Conductor server on http://localhost:8080. Enable corepack once if you haven't already:
corepack enable
Then start the dev server:
cd ui-next
pnpm install
pnpm dev
Open http://localhost:1234 — the UI reloads automatically on file changes.
See the full build guide for details.
Yes. Conductor OSS is the continuation of the original Netflix Conductor repository after Netflix contributed the project to the open-source foundation.
Yes. Conductor is a fully open-source workflow engine licensed under Apache 2.0. You can self-host on your own infrastructure with 5 persistence backends and 6 message brokers.
Yes. Orkes is the primary maintainer and offers an enterprise SaaS platform for Conductor across all major cloud providers.
Conductor servers and workers scale independently. Use task domains, concurrency limits, persistence configuration, and metrics to match throughput and isolation to your environment.
Yes. Conductor persists workflow and task state, supports recovery after worker and infrastructure failure, and exposes retries, timeouts, pause, resume, and termination controls.
Conductor supports restart, rerun, and retry controls. Execution-history retention depends on configuration, and keepLastN intentionally removes older loop iterations.
Yes. Conductor provides native LLM tasks, MCP tool discovery and calls, human approval, and vector workflows for RAG. See the maintained LLM orchestration guide for provider and capability details.
Conductor keeps orchestration as a versioned, machine-readable graph while workers and built-in tasks perform business logic and side effects. This makes paths, inputs, policy, and task outcomes inspectable without constraining the language used for workers.
JSON keeps the orchestration graph machine-readable and versioned. Workers remain ordinary code, and built-in tasks cover common integration and control-flow behavior. Use validated runtime definitions when a service or LLM needs to select an approved plan at runtime.
Yes. Conductor supports SWITCH (conditional branching), DO_WHILE (loops with configurable iteration cleanup), FORK_JOIN (parallel execution with dynamic fanout), SUB_WORKFLOW (composition), and DYNAMIC tasks resolved at runtime. These are composable — you can nest loops inside branches inside forks. For error handling, every task supports configurable retries, timeouts, and optional/compensating tasks. The declarative model doesn't limit complexity — it makes complexity visible and debuggable.
Workflow definitions are versioned by number. Running executions continue on the version they started with — deploying a new version never breaks in-flight workflows. There's no replay compatibility problem because Conductor doesn't replay your code. The orchestration graph is the source of truth, and each execution is pinned to its definition version. Update orchestration logic without redeploying workers and without worrying about breaking running workflows.
Conductor provides a built-in visual UI for designing, running, and debugging workflows. Every execution is fully observable: you can inspect the input, output, timing, and retry history of every task. For type safety, Conductor validates workflow inputs and task I/O against JSON Schema. Workers are plain code in your language of choice — you get full IDE support, type checking, and debugging for your business logic. The orchestration layer is visible in the UI, not hidden inside a framework.
Yes. Conductor is designed for long-running workflows. Executions are fully persisted — a workflow can pause for months waiting for a human approval, an external signal, or a scheduled timer, and resume exactly where it left off. There's no in-memory state to lose. This is the same mechanism that makes AI agent loops durable: if iteration 12 waits for a human review for three weeks, iteration 13 picks up right where it left off.
You gain flexibility. Because workflows are JSON, LLMs can generate and modify them at runtime — no compile/deploy cycle. Dynamic forks let you fan out to a variable number of parallel tasks determined at runtime. Dynamic sub-workflows let one workflow compose others by name. And because workers are decoupled from orchestration, you can update the workflow graph or swap worker implementations independently. Code-first engines couple these together, so changing orchestration means redeploying and re-versioning your code.
Conductor combines native AI and MCP tasks with durable loops, branches, fan-out, approval, retry, cancellation, and an inspectable execution history. Start with the governed adaptive graph.
100% compatible. Orkes Conductor is built on top of Conductor OSS with full API and workflow compatibility.
We welcome contributions from everyone!
See the Conductor OSS Roadmap. Want to participate? Reach out.
Conductor is licensed under the Apache 2.0 License.
No comments yet. Set the tone — say what you would want to know.