{"id":98525,"date":"2026-05-14T09:00:00","date_gmt":"2026-05-14T16:00:00","guid":{"rendered":"https:\/\/opensource.microsoft.com\/blog\/?p=98525"},"modified":"2026-05-13T13:57:15","modified_gmt":"2026-05-13T20:57:15","slug":"conductor-deterministic-orchestration-for-multi-agent-ai-workflows","status":"publish","type":"post","link":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/","title":{"rendered":"Conductor: Deterministic orchestration for multi-agent AI workflows"},"content":{"rendered":"\n<p>Multi-agent AI systems are becoming the default approach for complex tasks:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Code review pipelines.<\/li>\n\n\n\n<li>Research-then-synthesize workflows.<\/li>\n\n\n\n<li>Plan-then-implement loops.<\/li>\n<\/ul>\n\n\n\n<p>These aren&#8217;t single-prompt problems. They need multiple specialized agents coordinating in sequence, in parallel, and sometimes in cycles.<\/p>\n\n\n\n<p>Most frameworks approach this by making the orchestrator itself an LLM\u2014an agent that dynamically plans which agents to call, in what order, and with what inputs. That works when the task is exploratory. But for workflows with known structure (and in practice, many of the most useful workflows do have known structure), dynamic orchestration adds cost, latency, and unpredictability that can work against you.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/microsoft\/conductor\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Conductor<\/strong><\/a> is an open-source CLI (MIT license, Microsoft org) that takes a different approach: you define your multi-agent workflows in YAML, and the routing between agents is deterministic. Jinja2 templates and expression evaluation handle conditions and branching. The orchestration layer consumes zero tokens. The structure is fixed at definition time\u2014and that&#8217;s the point.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/github.com\/microsoft\/conductor\" target=\"_blank\" rel=\"noreferrer noopener\">Dig into Conductor today<\/a><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"the-problem-with-multi-agent-workflows-today\">The problem with multi-agent workflows today<\/h2>\n\n\n\n<p>We kept building multi-agent workflows\u2014code review pipelines, design document generation, research assistants\u2014and writing the same glue code every time: Python scripts stitching prompt chains, ad hoc retries, manual state between steps, no good way to version-control the workflow itself.<\/p>\n\n\n\n<p>We looked at other tools, such as Microsoft Agent Framework (MAF), Microsoft&#8217;s primary SDK for building agents in code, which covers many of the same primitives. <a href=\"https:\/\/github.com\/microsoft\/conductor\" target=\"_blank\" rel=\"noreferrer noopener\">Conductor<\/a> is a different surface for similar patterns: a YAML-first CLI for teams who want to compose agents and tools without writing SDK code. Declared, diffable, and as readable as a CI\/CD pipeline.<\/p>\n\n\n\n<p>We also wanted to separate concerns that keep getting mashed together in multi-agent systems:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Orchestration should be deterministic and inspectable. Not an LLM making routing decisions.<\/li>\n\n\n\n<li>Execution should support multiple providers and models, so you can put a cheap model on triage and a capable one on reasoning.<\/li>\n\n\n\n<li>Context flow between agents should be explicit. No implicit conversation bleeding.<\/li>\n\n\n\n<li>Human oversight should be a built-in workflow step, not something you bolt on later.<\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/github.com\/microsoft\/conductor\" target=\"_blank\" rel=\"noreferrer noopener\">Conductor is the result<\/a>: YAML workflows, isolated agents, and a routing graph you can see before anything runs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"key-capabilities-of-conductor\">Key capabilities of Conductor<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"yaml-defined-workflows\">YAML-defined workflows<\/h3>\n\n\n\n<p>Every Conductor workflow is a YAML file that declares agents, their prompts, models, inputs, outputs, and routing logic. Workflows are version-controlled, diffable, and reviewable, the same way you&#8217;d treat infrastructure-as-code or CI\/CD pipelines.<\/p>\n\n\n\n<p><code>workflow:\u00a0<br>\u00a0 name: design-review\u00a0<br>\u00a0\u00a0entry_point: architect\u00a0<br>\u00a0<br>agents:\u00a0<br>\u00a0 - name: architect\u00a0<br>\u00a0\u00a0\u00a0 model: claude-opus-4.6-1m\u00a0<br>\u00a0\u00a0\u00a0 prompt: |\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0 Create a design document for: {{\u00a0workflow.input.purpose\u00a0}}\u00a0<br>\u00a0\u00a0\u00a0 output:\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0file_path: { type: string }\u00a0<br>\u00a0\u00a0\u00a0 routes:\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0 - to: reviewer\u00a0<br>\u00a0<br>\u00a0 - name: reviewer\u00a0<br>\u00a0\u00a0\u00a0 model: claude-opus-4.7\u00a0<br>\u00a0\u00a0\u00a0 prompt: |\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0 Review the design at {{\u00a0architect.output.file_path\u00a0}}\u00a0<br>\u00a0\u00a0\u00a0 output:\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0 score: { type: number }\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0 approved: { type:\u00a0boolean\u00a0}\u00a0<br>\u00a0\u00a0\u00a0 routes:\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0 - to: $end\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 when: \"{{\u00a0output.approved\u00a0}}\"\u00a0<br>\u00a0\u00a0\u00a0\u00a0\u00a0 - to: architect\u00a0<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"deterministic-routing-zero-token-overhead\">Deterministic routing, zero token overhead<\/h2>\n\n\n\n<p>Routing between agents uses Jinja2 templates and expression evaluation. First matching condition wins. A workflow can loop hundreds of times through an evaluator-optimizer cycle without the routing layer consuming any tokens. This is what separates Conductor from dynamic orchestration: the workflow topology is declared, not discovered at runtime.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mix-providers-and-models-per-agent\">Mix providers and models per agent<\/h2>\n\n\n\n<p><a href=\"https:\/\/github.com\/microsoft\/conductor\" target=\"_blank\" rel=\"noreferrer noopener\">Conductor<\/a> supports GitHub Copilot and Anthropic Claude as providers, with per-agent model overrides. You can mix them in a single workflow: run claude-haiku-4.5 for classification, gpt-5.2 for research with MCP tool access, and claude-opus-4.6-1m for complex reasoning. Each agent gets its own session with no shared conversation state.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"parallel-execution\">Parallel execution<\/h3>\n\n\n\n<p>Static parallel groups run multiple agents concurrently with configurable failure modes (fail_fast, continue_on_error, all_or_nothing). Dynamic for each groups process variable-length arrays in parallel with batched concurrency. Results are aggregated and available to downstream agents through template expressions.<\/p>\n\n\n\n<p><code>parallel: <br>  - name: researchers <br> agents: [academic, web, technical]<br>failure_mode: continue_on_error <br> routes:<br> -to:synthesizer <\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"script-steps\">Script steps<\/h3>\n\n\n\n<p>Not every step needs an LLM. Script steps run shell commands directly, capturing stdout, stderr, and exit codes into the workflow context. A code review workflow can run pytest between the &#8220;implement&#8221; and &#8220;review&#8221; steps. Routes can branch on exit codes. No model invocation, no token cost.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"human-gates\">Human gates<\/h3>\n\n\n\n<p>Human gate steps pause execution, present options in a Rich terminal UI or the web dashboard, and route based on the response. Approval workflows, review checkpoints, interactive decision points: they&#8217;re part of the workflow graph, defined the same way as any other step.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"web-dashboard\">Web dashboard<\/h3>\n\n\n\n<p>Conductor includes a web dashboard that visualizes execution in real time. An interactive DAG shows the workflow topology with animated edges for execution flow. Each node is clickable, showing the agent&#8217;s prompt, model, token usage, cost, activity stream, and output. Human gates work directly in the browser. Background mode (&#8211;web-bg) starts the dashboard, prints the URL, and returns control to the terminal.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"context-control\">Context control<\/h3>\n\n\n\n<p>Three context modes control what each agent sees: accumulate (all prior outputs), last_only (just the previous step), and explicit (only named dependencies). The default is accumulated, but for larger workflows, explicit mode cuts token consumption significantly. Being deliberate about what each agent sees turned out to matter more than we expected.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"plugins-and-workflow-registries\">Plugins and workflow registries<\/h3>\n\n\n\n<p>Plugins follow the <a href=\"https:\/\/agentskills.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Agent Skills<\/a> open standard, bundling reusable skills and MCP server configurations that agents can use. Reference them from Git repos or local paths. Workflow registries let teams share and version workflows: configure a registry once, then run workflows by short name.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"safety-limits\">Safety limits<\/h3>\n\n\n\n<p>Max iteration limits and wall-clock timeouts prevent runaway execution. Dry-run mode previews the execution plan without calling any models. <code>conductor validate<\/code> catches schema errors, missing references, and unreachable agents before anything runs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"works-with-your-existing-tools\">Works with your existing tools<\/h2>\n\n\n\n<p><a href=\"https:\/\/github.com\/microsoft\/conductor\" target=\"_blank\" rel=\"noreferrer noopener\">Conductor<\/a> doesn&#8217;t replace your editor, CI system, or agent framework. It&#8217;s a CLI that reads YAML, calls models, and produces structured output. It plugs into what you already have:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MCP servers give agents tool access: web search, documentation lookup, code analysis, anything with a <a href=\"https:\/\/modelcontextprotocol.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Model Context Protocol<\/a> server.<\/li>\n\n\n\n<li>Shell commands run directly as workflow steps, so your scripts, linters, test suites, and build tools participate without modification.<\/li>\n\n\n\n<li>Structured output with JSON schemas means downstream tools and scripts can consume results programmatically.<\/li>\n\n\n\n<li>A Claude skill ships in the repository. Point your coding agent at it and it can build workflows for you.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-we-learned\">What we learned<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-determinism-is-a-feature\">1. Determinism is a feature<\/h3>\n\n\n\n<p>The most common pushback is &#8220;what about dynamic orchestration?&#8221; Fair question. If your task needs to restructure itself based on what it discovers, let the LLM decide what comes next. But the workflows we keep reaching for (review loops, research pipelines, plan-then-implement) have known structure. We&#8217;d rather have predictability, cost control, and auditability than replanning flexibility. Conditional routing and loop-back patterns cover more ground than you&#8217;d expect.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-agent-isolation-pays-for-itself\">2. Agent isolation pays for itself<\/h3>\n\n\n\n<p>Each agent gets its own session, system prompt, model, provider, and temperature. No shared conversation bleeding. This seems like overhead until you&#8217;re debugging a workflow where step 4 is mysteriously influenced by step 2&#8217;s output. Explicit context flow makes multi-agent systems tractable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-events-over-logs\">3. Events over logs<\/h3>\n\n\n\n<p>The engine uses a pub\/sub event system for all output. The terminal renderer, web dashboard, and any future consumers subscribe independently. More work upfront than printing to stdout, but it decoupled the execution engine from the presentation layer in a way that keeps paying off. Adding the web dashboard required zero changes to the workflow engine.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"4-yaml-is-the-right-level-of-abstraction\">4. YAML is the right level of abstraction<\/h2>\n\n\n\n<p>We considered Python APIs, JSON schemas, and visual builders. YAML hit the sweet spot: readable, structured, diffable in pull requests, and familiar to anyone who&#8217;s written a GitHub Actions workflow or a Kubernetes manifest.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"open-source-and-ready-to-use\">Open source and ready to use<\/h2>\n\n\n\n<p>MIT-licensed, developed in the open from day one.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pytest test suite covering the engine, CLI, config validation, providers, and integration scenarios.<\/li>\n\n\n\n<li>Ruff for linting and formatting, ty for type checking, both enforced in CI.<\/li>\n\n\n\n<li>Runs on macOS, Linux, and Windows.<\/li>\n\n\n\n<li>One-line installers (curl | sh and irm | iex) with SHA-256 checksum verification.<\/li>\n\n\n\n<li>Self-update via conductor update.<\/li>\n<\/ul>\n\n\n\n<p>Contributions welcome: provider integrations, workflow examples, plugins, docs, bug reports.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-to-start-using-conductor-today\">How to start using Conductor today<\/h2>\n\n\n\n<p><strong>Install:<\/strong><\/p>\n\n\n\n<p><em># macOS \/ Linux<\/em><br>curl -sSfL https:\/\/aka.ms\/conductor\/install.sh | sh<br> <br><em># Windows (PowerShell)<\/em><br>irm https:\/\/aka.ms\/conductor\/install.ps1 | iex<\/p>\n\n\n\n<p><strong>Run your first workflow:<\/strong><\/p>\n\n\n\n<p>conductor run workflow.yaml &#8211;input question=&#8221;What is Python?&#8221;<\/p>\n\n\n\n<p><strong>Visualize it:<\/strong><\/p>\n\n\n\n<p>conductor run workflow.yaml &#8211;web &#8211;input topic=&#8221;AI in healthcare&#8221;<\/p>\n\n\n\n<p>Conductor requires Python 3.12+ and works with GitHub Copilot or Anthropic Claude. The <a href=\"https:\/\/github.com\/microsoft\/conductor\" target=\"_blank\" rel=\"noreferrer noopener\">repository<\/a> has documentation, example workflows, and a getting-started guide.<\/p>\n\n\n\n<p>Multi-agent workflows are becoming infrastructure: repeatable, versioned, shared across teams. We chose deterministic orchestration because for the workflows we build most often, known structure is the whole point.<\/p>\n\n\n<div class=\"wp-block-msxcm-cta-block\" data-moray data-bi-an=\"CTA Block\">\n\t<div class=\"card d-block mx-ng mx-md-0\">\n\t\t<div class=\"row no-gutters material-color-brand-light bg-fabric-white\">\n\n\t\t\t\t\t\t\t<div class=\"col-md-4\">\n\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-WorkAnywhere-3-1024x768.jpg\" class=\"card-img img-object-cover\" alt=\"Close up of female developer hands typing on a laptop keyboard\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-WorkAnywhere-3-1024x768.jpg 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-WorkAnywhere-3-388x291.jpg 388w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-WorkAnywhere-3-768x576.jpg 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-WorkAnywhere-3-1536x1152.jpg 1536w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-WorkAnywhere-3-2048x1536.jpg 2048w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-WorkAnywhere-3-450x338.jpg 450w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-WorkAnywhere-3-650x488.jpg 650w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"d-flex col-md\">\n\t\t\t\t<div class=\"card-body align-self-center p-4 p-md-5\">\n\t\t\t\t\t\n\t\t\t\t\t<h2>Start using Conductor<\/h2>\n\n\t\t\t\t\t<div class=\"mb-3\">\n\t\t\t\t\t\t<p>If you&#8217;re stitching together agent pipelines with glue code, give Conductor a look.<\/p>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"link-group\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/github.com\/microsoft\/conductor\" class=\"btn btn-link text-decoration-none p-0\" target=\"_blank\">\n\t\t\t\t\t\t\t\t<span>Explore more<\/span>\n\t\t\t\t\t\t\t\t<span class=\"glyph-append glyph-append-chevron-right glyph-append-xsmall\"><\/span>\n\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<p><em>Conductor is open source under the MIT license at <\/em><a href=\"https:\/\/github.com\/microsoft\/conductor\" target=\"_blank\" rel=\"noreferrer noopener\"><em>github.com\/microsoft\/conductor<\/em><\/a><em>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Conductor is an open-source CLI (MIT license, Microsoft org) that takes a different approach: you define your multi-agent workflows in YAML, and the routing between agents is deterministic. Jinja2 templates and expression evaluation handle conditions and branching. The orchestration layer consumes zero tokens. The structure is fixed at definition time\u2014and that&#8217;s the point.<\/p>\n","protected":false},"author":6277,"featured_media":98327,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"msxcm_post_with_no_image":false,"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[136],"content-type":[346],"topic":[2238,2240,2244,2252],"programming-languages":[2264],"coauthors":[2639],"class_list":["post-98525","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-github","content-type-news","topic-ai-machine-learning","topic-application-development","topic-devops","topic-tools","programming-languages-python","review-flag-1593580362-584","review-flag-1593580428-734","review-flag-1593580419-521","review-flag-1593580771-946","review-flag-1-1593580432-963","review-flag-2-1593580437-411","review-flag-3-1593580442-169","review-flag-4-1593580448-609","review-flag-5-1593580453-725","review-flag-6-1593580457-852","review-flag-7-1593580463-151"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Conductor: Deterministic orchestration for multi-agent AI workflows | Microsoft Open Source Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Conductor: Deterministic orchestration for multi-agent AI workflows | Microsoft Open Source Blog\" \/>\n<meta property=\"og:description\" content=\"Conductor is an open-source CLI (MIT license, Microsoft org) that takes a different approach: you define your multi-agent workflows in YAML, and the routing between agents is deterministic. Jinja2 templates and expression evaluation handle conditions and branching. The orchestration layer consumes zero tokens. The structure is fixed at definition time\u2014and that&#039;s the point.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Open Source Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-14T16:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-RemoteHome-1-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1920\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jason Robert\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:site\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jason Robert\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/\"},\"author\":[{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/author\\\/jason-robert\\\/\",\"@type\":\"Person\",\"@name\":\"Jason Robert\"}],\"headline\":\"Conductor: Deterministic orchestration for multi-agent AI workflows\",\"datePublished\":\"2026-05-14T16:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/\"},\"wordCount\":1374,\"publisher\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/CLO25b-Developer-RemoteHome-1-scaled.jpg\",\"keywords\":[\"GitHub\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/\",\"name\":\"Conductor: Deterministic orchestration for multi-agent AI workflows | Microsoft Open Source Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/CLO25b-Developer-RemoteHome-1-scaled.jpg\",\"datePublished\":\"2026-05-14T16:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/#primaryimage\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/CLO25b-Developer-RemoteHome-1-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/CLO25b-Developer-RemoteHome-1-scaled.jpg\",\"width\":2560,\"height\":1920,\"caption\":\"Developer working from home wearing headphones\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/2026\\\/05\\\/14\\\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Conductor: Deterministic orchestration for multi-agent AI workflows\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/\",\"name\":\"Microsoft Open Source Blog\",\"description\":\"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability\",\"publisher\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#organization\",\"name\":\"Microsoft Open Source Blog\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/Microsoft-Logo.png\",\"contentUrl\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Open Source Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/opensource.microsoft.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/OpenAtMicrosoft\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Conductor: Deterministic orchestration for multi-agent AI workflows | Microsoft Open Source Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/","og_locale":"en_US","og_type":"article","og_title":"Conductor: Deterministic orchestration for multi-agent AI workflows | Microsoft Open Source Blog","og_description":"Conductor is an open-source CLI (MIT license, Microsoft org) that takes a different approach: you define your multi-agent workflows in YAML, and the routing between agents is deterministic. Jinja2 templates and expression evaluation handle conditions and branching. The orchestration layer consumes zero tokens. The structure is fixed at definition time\u2014and that's the point.","og_url":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/","og_site_name":"Microsoft Open Source Blog","article_published_time":"2026-05-14T16:00:00+00:00","og_image":[{"width":2560,"height":1920,"url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-RemoteHome-1-scaled.jpg","type":"image\/jpeg"}],"author":"Jason Robert","twitter_card":"summary_large_image","twitter_creator":"@OpenAtMicrosoft","twitter_site":"@OpenAtMicrosoft","twitter_misc":{"Written by":"Jason Robert","Est. reading time":"6 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/#article","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/"},"author":[{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/jason-robert\/","@type":"Person","@name":"Jason Robert"}],"headline":"Conductor: Deterministic orchestration for multi-agent AI workflows","datePublished":"2026-05-14T16:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/"},"wordCount":1374,"publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-RemoteHome-1-scaled.jpg","keywords":["GitHub"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/","url":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/","name":"Conductor: Deterministic orchestration for multi-agent AI workflows | Microsoft Open Source Blog","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/#primaryimage"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-RemoteHome-1-scaled.jpg","datePublished":"2026-05-14T16:00:00+00:00","breadcrumb":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/#primaryimage","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-RemoteHome-1-scaled.jpg","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2026\/03\/CLO25b-Developer-RemoteHome-1-scaled.jpg","width":2560,"height":1920,"caption":"Developer working from home wearing headphones"},{"@type":"BreadcrumbList","@id":"https:\/\/opensource.microsoft.com\/blog\/2026\/05\/14\/conductor-deterministic-orchestration-for-multi-agent-ai-workflows\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/opensource.microsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Conductor: Deterministic orchestration for multi-agent AI workflows"}]},{"@type":"WebSite","@id":"https:\/\/opensource.microsoft.com\/blog\/#website","url":"https:\/\/opensource.microsoft.com\/blog\/","name":"Microsoft Open Source Blog","description":"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability","publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/opensource.microsoft.com\/blog\/#organization","name":"Microsoft Open Source Blog","url":"https:\/\/opensource.microsoft.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Open Source Blog"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/OpenAtMicrosoft"]}]}},"msxcm_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Open Source Blog","distributor_original_site_url":"https:\/\/opensource.microsoft.com\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/98525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/users\/6277"}],"replies":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=98525"}],"version-history":[{"count":7,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/98525\/revisions"}],"predecessor-version":[{"id":98539,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/98525\/revisions\/98539"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media\/98327"}],"wp:attachment":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=98525"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/post_tag?post=98525"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/content-type?post=98525"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/topic?post=98525"},{"taxonomy":"programming-languages","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/programming-languages?post=98525"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/coauthors?post=98525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}