Conductor - Durable Execution for Workflows and Agents
Build agents that adapt. Run graphs that endure.
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.
Get Running in 60 Seconds
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.
Why Conductor is the workflow engine of choice for developers
| 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. |
Ship Durable Adaptive Graphs, Not Framework Code
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 for AI Coding Assistants
Conductor Skills let AI coding assistants (Claude Code, Gemini CLI, and others) create, manage, and deploy Conductor workflows directly from your terminal.
Claude
# Install Skills for Claude Code
/plugin marketplace add conductor-oss/conductor-skills
/plugin install conductor@conductor-skills
Install for all detected agents
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/inst