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: ```shell conductor server start latestor 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) |
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](http://localhost:1234) — the UI reloads automatically on file changes.
See the [full build guide](https://github.com/conductor-oss/conductor/blob/HEAD/docs/devguide/running/source.md) for details.
keepLastN intentionally removes older loop iterations.
We welcome contributions from everyone!
See the Conductor OSS Roadmap. Want to participate? Reach out.
Conductor is licensed under the Apache 2.0 License.
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|