<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: The Unmeshed Team</title>
    <description>The latest articles on DEV Community by The Unmeshed Team (@unmeshed).</description>
    <link>https://dev.to/unmeshed</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3953781%2F5af20b0f-7da7-4490-9183-a2d28dab3978.png</url>
      <title>DEV Community: The Unmeshed Team</title>
      <link>https://dev.to/unmeshed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/unmeshed"/>
    <language>en</language>
    <item>
      <title>Fast Isn't Free</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Fri, 30 Oct 2026 05:10:38 +0000</pubDate>
      <link>https://dev.to/unmeshed/fast-isnt-free-26g5</link>
      <guid>https://dev.to/unmeshed/fast-isnt-free-26g5</guid>
      <description>&lt;p&gt;A team picks a workflow tool. It runs well in testing, so they ship it.&lt;/p&gt;

&lt;p&gt;A year later, traffic is up. The bill is up even more.&lt;/p&gt;

&lt;p&gt;Nobody planned for that, because nobody asked the right question at the start. Not "how fast is it?" but "what will it cost when we're ten times bigger?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn speed into daily volume
&lt;/h2&gt;

&lt;p&gt;Throughput numbers are usually quoted per second, which makes them hard to feel. A quick conversion helps: multiply transactions per second by 86,400, the number of seconds in a day.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1,000 per second is about 86 million a day&lt;/li&gt;
&lt;li&gt;10,000 per second is about 864 million a day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now compare that with what you really expect. A lot of teams find they need far less than they feared. Others find they need a lot more than they planned for. Either way, you can't judge a tool until you know your own number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch how the cost grows
&lt;/h2&gt;

&lt;p&gt;A tool can be fine at small volume and painful at large volume. Here's an illustration. Spending $20,000 a year for a few thousand transactions per second might be reasonable. If handling a bigger load pushed that to $200,000, the math changes. Those are example figures, not anyone's price list, but the shape is real: what matters is whether cost rises in step with traffic or faster.&lt;/p&gt;

&lt;p&gt;Simple workflows that run at low volume can live happily with a modest setup. Complex, high-volume ones can't. And a setup that's fast but very expensive tends to be dropped once the bill gets attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  When latency is the whole point
&lt;/h2&gt;

&lt;p&gt;Some use cases don't give you time to wait. Payment processing, IoT data pipelines and AI-driven workflows are all situations where slow responses or low throughput cause real problems for users. If yours looks like that, test under load before you commit, not after.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to ask before you choose
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How many transactions per second can one instance sustain, and what did that test look like?&lt;/li&gt;
&lt;li&gt;What happens when you need more? Do you add instances, and how does the price change?&lt;/li&gt;
&lt;li&gt;Does the number come from a workflow like yours, or a simple one-step example?&lt;/li&gt;
&lt;li&gt;What does it cost at your expected volume, and at ten times that?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those four questions tell you more than any single benchmark.&lt;/p&gt;

&lt;p&gt;For reference, Unmeshed reports up to 10,000 transactions per second on a single instance, which works out to nearly a billion a day, and says larger loads are handled by adding instances to the cluster. As with any vendor's numbers, test it against your own workflows. You can try &lt;a href="https://unmeshed.io" rel="noopener noreferrer"&gt;Unmeshed&lt;/a&gt; and see how it behaves with yours.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>backend</category>
      <category>architecture</category>
      <category>performance</category>
    </item>
    <item>
      <title>LLM Orchestration Explained: Routing, Fallbacks, and Production Reliability</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Thu, 29 Oct 2026 05:14:48 +0000</pubDate>
      <link>https://dev.to/unmeshed/llm-orchestration-explained-routing-fallbacks-and-production-reliability-gl1</link>
      <guid>https://dev.to/unmeshed/llm-orchestration-explained-routing-fallbacks-and-production-reliability-gl1</guid>
      <description>&lt;h2&gt;
  
  
  TLDR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;LLM orchestration is the control layer that decides which model does what, in what order, and what happens when something breaks.&lt;/li&gt;
&lt;li&gt;It's really three jobs. The model layer picks the model, the pipeline layer builds prompts and tool calls, and the run layer keeps everything durable, limited, and auditable.&lt;/li&gt;
&lt;li&gt;Teams use more than one model because of cost, speed, skills, and provider outages. They pick between them with routing, cascading, fallback, or parallel ensembles.&lt;/li&gt;
&lt;li&gt;Frameworks, gateways, and workflow engines aren't rivals. They sit at different layers, so you start with whichever one is failing in production.&lt;/li&gt;
&lt;li&gt;Unmeshed is the run layer. It handles retries, fallbacks, routing rules, spend limits, and approvals in one place, and it works alongside the tools you already use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ok so, LLM orchestration. Sounds super fancy, right? It really isn't.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the deal. Most teams start with one model call, and it works great. Then they add a second model, then a third, and suddenly nobody knows which one is doing what, or what happens when one of them breaks.&lt;/p&gt;

&lt;p&gt;That's basically what it's for. It decides who does what, in what order, and what to do when something goes wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We're happy to say it's way less scary than it sounds.&lt;/strong&gt; We'll go through the three jobs people mix up, how routing and fallback work, and where Unmeshed fits. And where it doesn't, because we'll be straight with you about that too.&lt;/p&gt;

&lt;p&gt;Okay, let's get into it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What Is LLM Orchestration?
&lt;/h2&gt;

&lt;p&gt;LLM orchestration is how you coordinate multiple language models, prompts, tools, and data sources into one reliable process. It decides which model handles each step and what context it gets. And it decides what happens when a step fails or costs way too much.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6xtgh0r83cyovtuj2nkd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6xtgh0r83cyovtuj2nkd.png" alt="LLM orchestration architecture diagram showing five key decisions in multi-model orchestration: model selection, context management, failure handling, cost control, and human approval workflows for production AI systems." width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Okay, but what does that actually mean? We figure the easiest way to wrap your head around it is to pretend it's a restaurant kitchen.&lt;/p&gt;

&lt;p&gt;You've got a bunch of cooks. Some are fast, some are fancy, and some only do desserts. Someone has to decide who makes which dish, what to do when the oven dies, and who stops the kitchen from blowing the whole budget on truffles.&lt;/p&gt;

&lt;p&gt;That someone is the head chef. And that's basically what orchestration is.&lt;/p&gt;

&lt;p&gt;In plain terms, it involves five decisions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which model handles each step &lt;strong&gt;(who cooks the dish)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;What the model gets to see and use &lt;strong&gt;(the ingredients and tools)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;What happens when something breaks &lt;strong&gt;(the oven dies)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How much a run is allowed to spend &lt;strong&gt;(the truffle budget)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Who has to approve it before it goes out &lt;strong&gt;(the taste test)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quick note on what it isn't. It's not a single prompt. It's not only a gateway that passes requests along. And it's not &lt;a href="https://unmeshed.io/products/agentic" rel="noopener noreferrer"&gt;agent orchestration&lt;/a&gt;, where the model picks its own next step (we cover that in our guide to &lt;a href="https://unmeshed.io/blog/what-is-agentic-orchestration" rel="noopener noreferrer"&gt;agentic orchestration&lt;/a&gt;). Today we're only talking about the models.&lt;/p&gt;

&lt;p&gt;If you want the bigger picture, our guide to &lt;a href="https://unmeshed.io/blog/what-is-ai-orchestration" rel="noopener noreferrer"&gt;AI orchestration&lt;/a&gt; covers pipelines, agents, and platforms. This one is just the model side of things.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Why Do Production Systems Use More Than One Model?
&lt;/h2&gt;

&lt;p&gt;Production systems use more than one model because no single model is best at everything. One might be great at hard reasoning but too slow and pricey for sorting tickets. And every provider has a bad day eventually.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdrfsq7ybdl8kg60578gl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdrfsq7ybdl8kg60578gl.png" alt="Multi-model LLM orchestration diagram showing why enterprises use multiple AI models for cost optimization, low-latency responses, specialized model capabilities, and provider outage resilience in production AI systems." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Okay, but why though? Can't you just pick the best model and call it a day? Hmm, that's what we thought too. Turns out, not really.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; You wouldn't hire a fancy chef to boil an egg. A quick classification doesn't need your priciest model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed:&lt;/strong&gt; If someone's waiting on the answer, it has to be quick. A nightly report can take its time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; Some models are just better at code, long documents, or using tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drama:&lt;/strong&gt; Providers have outages, rate limits, and deprecations, usually at the worst possible time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's one more sneaky reason. Models get updated, sometimes quietly, and a prompt that worked last month can suddenly act weird.&lt;/p&gt;

&lt;p&gt;With a backup model ready (and a way to compare the two), that turns into a boring switch. Boring is good.&lt;/p&gt;

&lt;p&gt;Cost is usually what gets teams moving on this, and routing is one of the best ways to bring it down. We cover the tricks in our guides to &lt;a href="https://unmeshed.io/blog/llm-cost-optimization-9-techniques-to-reduce-token-usage-in-production" rel="noopener noreferrer"&gt;cost optimization&lt;/a&gt; and &lt;a href="https://unmeshed.io/blog/what-is-token-efficiency" rel="noopener noreferrer"&gt;token efficiency&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. What Are the Three Layers of LLM Orchestration?
&lt;/h2&gt;

&lt;p&gt;LLM orchestration has three layers. The model layer picks which model answers. The pipeline layer builds prompts, retrieval, and tool calls. And the run layer keeps everything durable, limited, and auditable. A model orchestration layer usually only covers the first one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpfbn890n4ifgy9ts73ly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpfbn890n4ifgy9ts73ly.png" alt="LLM orchestration architecture showing three layers: model orchestration with AI gateways, pipeline orchestration with frameworks, and workflow orchestration with durable execution and auditability." width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Back to the kitchen for a sec. These three layers are basically three different people.&lt;/p&gt;

&lt;p&gt;The model layer is the waiter who decides which cook gets the order. The pipeline layer is the recipe, so what goes in and in what order. And the run layer is the kitchen manager who keeps track of everything, fixes stuff when it goes wrong, and writes it all down.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Job&lt;/th&gt;
&lt;th&gt;Typical Tools&lt;/th&gt;
&lt;th&gt;What Breaks Without It&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model&lt;/td&gt;
&lt;td&gt;Pick the right model and handle provider failure&lt;/td&gt;
&lt;td&gt;Gateways and routers&lt;/td&gt;
&lt;td&gt;One outage or price change hits your whole product&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pipeline&lt;/td&gt;
&lt;td&gt;Build prompts, retrieve data, call tools, validate output&lt;/td&gt;
&lt;td&gt;Frameworks such as &lt;a href="https://github.com/langchain-ai/langchain" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt; and LlamaIndex&lt;/td&gt;
&lt;td&gt;Prompts and tool calls turn into tangled glue code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run&lt;/td&gt;
&lt;td&gt;Keep runs durable, limited, approved, and traceable&lt;/td&gt;
&lt;td&gt;Workflow engines&lt;/td&gt;
&lt;td&gt;A crash loses state, and nobody can explain a result&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most guides only talk about one of these and call it a day. So you end up with a waiter and no manager, or a great recipe and nobody watching the stove. Lowkey, that's where most of the pain comes from.&lt;/p&gt;

&lt;p&gt;You don't need all three on day one. Start with whichever one hurts. The mistake is thinking the one you have covers the other two. It doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. How Does Multi-Model Orchestration Work?
&lt;/h2&gt;

&lt;p&gt;Multi-model orchestration works by picking a model for each request. There are four main ways to do it, which are routing, cascading, fallback, and parallel ensembles. Each one trades cost, speed, and quality a bit differently, and most teams end up combining two.&lt;/p&gt;

&lt;p&gt;Here's the easy version of all four. Routing is like a host seating people at the right table. Cascading is trying the cheap option first and only calling the expensive one if the cheap one flops.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fto4mpzan8fqw19874r5r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fto4mpzan8fqw19874r5r.png" alt="Multi-model LLM orchestration comparison showing AI model routing, cascading model selection, fallback strategies, and parallel ensemble methods for optimizing cost, quality, reliability, and performance." width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Fallback is the backup plan for when your first option is down. And a parallel ensemble is asking a few cooks to make the same dish and picking the best one (pricey, ngl).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;How It Works&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Main Risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Routing&lt;/td&gt;
&lt;td&gt;A router picks one model before generation based on the request&lt;/td&gt;
&lt;td&gt;Mixed workloads with clear easy and hard cases&lt;/td&gt;
&lt;td&gt;A weak router sends hard requests to weak models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cascading&lt;/td&gt;
&lt;td&gt;Run a cheaper model first and escalate if the answer scores low&lt;/td&gt;
&lt;td&gt;High volume traffic where most answers are easy&lt;/td&gt;
&lt;td&gt;Extra latency when escalation triggers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fallback&lt;/td&gt;
&lt;td&gt;Switch to another model or provider when a call fails&lt;/td&gt;
&lt;td&gt;Reliability against outages and rate limits&lt;/td&gt;
&lt;td&gt;Repeated side effects if the retry isn't safe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel ensemble&lt;/td&gt;
&lt;td&gt;Call several models and compare or merge the answers&lt;/td&gt;
&lt;td&gt;High stakes decisions&lt;/td&gt;
&lt;td&gt;Cost multiplies with every model you add&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There's actual research on this too. &lt;a href="https://arxiv.org/abs/2410.10347" rel="noopener noreferrer"&gt;A paper on routing and cascading for LLMs&lt;/a&gt; describes routing as picking one model per query, and cascading as running bigger and bigger models until the answer is good enough.&lt;/p&gt;

&lt;p&gt;The authors also came up with cascade routing, which mixes both. And the big finding is that it all depends on how well you can tell if an answer is any good.&lt;/p&gt;

&lt;p&gt;That last part matters. A cascade is only as smart as whatever decides "is this answer ok?" Some teams use a simple rule, some use a validator, and some use another model as the judge, which is kind of a can of worms (our guide to &lt;a href="https://unmeshed.io/blog/llm-as-a-judge-explained" rel="noopener noreferrer"&gt;LLM as a judge&lt;/a&gt; goes into where bias sneaks in).&lt;/p&gt;

&lt;p&gt;One warning about fallback. Switching to another model is easy. Doing it safely is the tricky bit. If a retry sends the same email twice or charges a card twice, well, that's a bad day.&lt;/p&gt;

&lt;p&gt;So limit your retries, and make the steps around the model safe to run twice.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. What Is an LLM Pipeline, and How Is It Different From an LLM Workflow?
&lt;/h2&gt;

&lt;p&gt;An LLM pipeline is a fixed set of steps that turns an input into a model output, like retrieve, prompt, generate, and validate. An LLM workflow wraps those steps with branching, retries, state, and human approval.&lt;/p&gt;

&lt;p&gt;Still the kitchen. A pipeline is one recipe, with the same steps in the same order every time. A workflow is the whole dinner service, which includes what to do when the oven breaks, when to ask the head chef, and what happens when a customer wants a refund.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;LLM Pipeline&lt;/th&gt;
&lt;th&gt;LLM Workflow&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shape&lt;/td&gt;
&lt;td&gt;A fixed sequence of steps&lt;/td&gt;
&lt;td&gt;Steps plus branches, loops, and waits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;State&lt;/td&gt;
&lt;td&gt;Usually lives in memory for one run&lt;/td&gt;
&lt;td&gt;Saved between steps so a run can resume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure handling&lt;/td&gt;
&lt;td&gt;An error stops the run&lt;/td&gt;
&lt;td&gt;Retries, fallbacks, and escalation paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human input&lt;/td&gt;
&lt;td&gt;Rare&lt;/td&gt;
&lt;td&gt;Approval steps that pause the run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical home&lt;/td&gt;
&lt;td&gt;Application code or a framework&lt;/td&gt;
&lt;td&gt;A workflow engine&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Here's an example. A support ticket comes in. The pipeline classifies it, grabs the account history, writes a reply, and checks the tone. Done.&lt;/p&gt;

&lt;p&gt;The workflow decides which model writes the reply, retries if the provider times out, sends any big refund to an actual human, and writes down every step along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Which Do You Need for LLM Orchestration: a Framework, a Gateway, or a Workflow Engine?
&lt;/h2&gt;

&lt;p&gt;You need a framework to build the pipeline, a gateway for routing and provider control, and a workflow engine to run it all durably. Plenty of teams end up needing all three. Start with whichever layer is failing in production.&lt;/p&gt;

&lt;p&gt;Think of it like this. The framework is your recipe book. The gateway is the delivery driver who finds a route to the model. And the workflow engine is the kitchen manager again. All different jobs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool Type&lt;/th&gt;
&lt;th&gt;What It Covers&lt;/th&gt;
&lt;th&gt;Examples&lt;/th&gt;
&lt;th&gt;What It Doesn't Cover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;Prompts, retrieval, tool calls, model interfaces&lt;/td&gt;
&lt;td&gt;LangChain, &lt;a href="https://github.com/run-llama/llama_index" rel="noopener noreferrer"&gt;LlamaIndex&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Durable runs, spend limits, approvals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gateway&lt;/td&gt;
&lt;td&gt;Routing, load balancing, retries, fallbacks across providers&lt;/td&gt;
&lt;td&gt;LiteLLM&lt;/td&gt;
&lt;td&gt;Multi-step business logic and human review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workflow engine&lt;/td&gt;
&lt;td&gt;State, retries, branching, approvals, audit&lt;/td&gt;
&lt;td&gt;Unmeshed&lt;/td&gt;
&lt;td&gt;Prompt design and retrieval tuning&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;LangChain describes itself as a framework for building agents and LLM-powered apps, with a standard interface for models and tools.&lt;/p&gt;

&lt;p&gt;LlamaIndex started out as a data framework for connecting models to your own data. Its README now says the main focus is document parsing and extraction though, so worth knowing that before you pick it for something else.&lt;/p&gt;

&lt;p&gt;On the gateway side, the &lt;a href="https://docs.litellm.ai/docs/routing" rel="noopener noreferrer"&gt;LiteLLM router&lt;/a&gt; handles load balancing, retries, cooldowns, and fallbacks across deployments and providers. We go deeper on that in our guide to the &lt;a href="https://unmeshed.io/blog/llm-gateway-explained-production-ai" rel="noopener noreferrer"&gt;LLM gateway&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;None of these are rivals of a workflow engine. They just sit at different layers, and the best setups use them together. So pick based on what's breaking for you right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. How Does Unmeshed Handle LLM Orchestration?
&lt;/h2&gt;

&lt;p&gt;Unmeshed handles the run layer of LLM orchestration. Your model calls become steps in durable &lt;a href="https://unmeshed.io/products/workflows" rel="noopener noreferrer"&gt;workflows&lt;/a&gt;. So retries, fallback paths, routing rules, approvals, and spend ceilings all live in one place, with a full run history and no lock-in to any one model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faorutqcodccvwor3399v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faorutqcodccvwor3399v.png" alt="LLM orchestration workflow diagram showing model routing rules, durable AI model execution, fallback model selection, human approval workflows, audit logging, and production-ready LLM orchestration for enterprise AI systems." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In kitchen terms, we're the manager. Here's the rundown.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Durable runs and retries:&lt;/strong&gt; Model calls run as steps in workflows with retries and saved state, so a crash picks up where it stopped instead of starting over.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routing rules:&lt;/strong&gt; A &lt;a href="https://unmeshed.io/product/whats-new/decision-engine" rel="noopener noreferrer"&gt;decision engine&lt;/a&gt; uses decision tables with first match or all match rules. You can route by request type, size, or customer tier without a pile of branching code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fallback paths:&lt;/strong&gt; When a model step fails, the workflow just branches to another model or a safe default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spend and tool limits:&lt;/strong&gt; Agents are bound to a fixed set of tools, and each one can have a spend ceiling that throttles it or switches it to a cheaper model. See &lt;a href="https://unmeshed.io/solutions/ai-agent-governance" rel="noopener noreferrer"&gt;AI agent governance&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approvals:&lt;/strong&gt; A human-in-the-loop step pauses a run until a person decides.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visibility:&lt;/strong&gt; Every run keeps a full history of steps, inputs, and outputs. For the agent side of things, see agent orchestration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's model-agnostic too, so you're not stuck with one provider, and it's MCP native. There are SDKs for Java, Go, Python, and TypeScript. Oh, and it comes from the creators of Netflix Conductor, in case that helps.&lt;/p&gt;

&lt;p&gt;Now, the honest part. We're not a prompt framework, and we're not a gateway. If you love LangChain for building and LiteLLM for reaching providers, keep them! We just run them for you.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Your Models Are Not The Hard Part.&lt;/strong&gt;&lt;br&gt;
Unmeshed runs model calls as workflow steps with retries, fallback paths, and spend limits, so a provider outage doesn't take your product down.&lt;br&gt;
&lt;a href="https://unmeshed.io/signup?utm_source=blog&amp;amp;utm_medium=organic&amp;amp;utm_campaign=llm_orchestration_explained&amp;amp;utm_content=accent_cta" rel="noopener noreferrer"&gt;&lt;strong&gt;Build A Fallback&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  8. What Breaks When You Skip LLM Orchestration?
&lt;/h2&gt;

&lt;p&gt;Without LLM orchestration, one provider outage takes your product down. Retries repeat work, spending drifts with nothing to stop it, and nobody can say why a model answered the way it did. These aren't model problems. They're everything around the model.&lt;/p&gt;

&lt;p&gt;Picture the kitchen with no manager. Orders get lost. Someone burns the sauce twice. Nobody knows what anything cost. Yeah, it's that.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A provider returns errors:&lt;/strong&gt; No fallback means your feature goes down right along with them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A retry repeats a side effect:&lt;/strong&gt; The customer gets two emails, or two refunds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spend runs away:&lt;/strong&gt; A loop or a huge context bill shows up at the end of the month instead of the moment it starts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A model updates quietly:&lt;/strong&gt; Output changes, and you've got no record of which model ran which request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An auditor asks why:&lt;/strong&gt; And you can't show the inputs, the model, or who approved it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of this comes down to keeping state and records. A &lt;a href="https://unmeshed.io/blog/what-is-durable-execution" rel="noopener noreferrer"&gt;durable execution&lt;/a&gt; layer keeps state across failures, and &lt;a href="https://unmeshed.io/blog/what-is-llm-observability-and-why-your-production-ai-needs-it" rel="noopener noreferrer"&gt;LLM observability&lt;/a&gt; shows you what happened inside each call. Once people depend on the feature, you want both.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. How Do You Decide What to Build First?
&lt;/h2&gt;

&lt;p&gt;Build first whatever is failing in production today. Add fallback if outages hurt. Add routing if cost does. Add a pipeline framework if prompts are tangled, and a workflow engine once retries, approvals, or audit trails turn into manual work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's the quick cheat sheet.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Outages or rate limits hurt. Add a gateway with fallback.&lt;/li&gt;
&lt;li&gt;The bill is too high. Add routing or a cascade, and check answer quality before and after.&lt;/li&gt;
&lt;li&gt;Prompts and tool calls are tangled. Move them into a framework.&lt;/li&gt;
&lt;li&gt;Retries, approvals, or audit trails are manual. Add a workflow engine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good path is one model and a fallback to start. Add routing once cost starts to sting, then a workflow layer when the process around the model gets bigger. And only fix things you've actually seen break, not things you're just nervous about.&lt;/p&gt;

&lt;h2&gt;
  
  
  In a Nutshell
&lt;/h2&gt;

&lt;p&gt;Orchestration is really three jobs wearing one name. Choose the model, build the pipeline, and run it durably. Then fix whichever layer is failing first. That order keeps you from buying a tool for a problem you don't have yet.&lt;/p&gt;

&lt;p&gt;So yeah, that's the whole thing. If outages are what keep you up, start with a gateway and fallback. If the bill is scary, start with routing. If you're drowning in retries and approvals, look at a workflow engine.&lt;/p&gt;

&lt;p&gt;Not sure which one is you? Check your last outage or your last wild bill. It's usually right there.&lt;/p&gt;

&lt;p&gt;And the goal, like always, is that a model failing is boring. Not a fire.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>devops</category>
      <category>architecture</category>
    </item>
    <item>
      <title>API Authentication Without the Middleware Layer</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Wed, 28 Oct 2026 05:26:22 +0000</pubDate>
      <link>https://dev.to/unmeshed/api-authentication-without-the-middleware-layer-574f</link>
      <guid>https://dev.to/unmeshed/api-authentication-without-the-middleware-layer-574f</guid>
      <description>&lt;p&gt;Think about walking into an office building. Before you reach the elevator, someone at the front desk asks who you are, checks your name on a list, and hands you a badge. Only then can you go up.&lt;/p&gt;

&lt;p&gt;Every request from a phone or a browser gets the same treatment. Something has to ask "who is this?" before the request gets anywhere near your data.&lt;/p&gt;

&lt;p&gt;Many teams build a small service just to be that front desk. It works, but now there's one more service to build, run and keep up to date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What that layer is really doing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When an API is open to end-user devices, a mobile app, a browser, an IoT sensor, the identity of the caller matters. Authentication has three jobs there:&lt;/p&gt;

&lt;p&gt;Check that the call is legitimate&lt;br&gt;
Keep sensitive data away from anyone who shouldn't see it&lt;br&gt;
Tell the rest of the system who is asking, so later steps can act on it&lt;/p&gt;

&lt;p&gt;The third one gets forgotten. A purchase request is not just "someone bought something." It's "this customer bought this," and that decides which discount applies and whose payment gets charged.&lt;/p&gt;

&lt;p&gt;In a Backend-for-Frontend setup, a middleware layer usually handles all three. The catch is that it becomes its own service with its own deployments, its own bugs, and its own place where every authentication change has to land.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Moving authentication into the execution layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The other option is to do the check where the API call is already handled. In Unmeshed, each endpoint you expose can be tied to an authentication connection, such as Auth0, Okta or plain API keys, and you can set up more than one. Each endpoint gets its own security level, so a public status call and a payment call don't have to follow the same rule.&lt;/p&gt;

&lt;p&gt;Once the caller is verified, their identity goes into the workflow with the request. Nothing sits between the client and the workflow translating who they are.&lt;/p&gt;

&lt;p&gt;An e-commerce example shows why that's handy. A customer taps "buy" in a mobile app or a browser. The workflow already knows who they are, so it can apply their personal discount, check inventory and secure the payment, without a separate service having to hand that identity over first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before you drop a middleware layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One thing is worth checking first. If your BFF only does authentication, removing it is simple. If it also reshapes responses or combines data from several services, that work still needs a home. A workflow can take it on, but plan for it instead of assuming it disappears.&lt;/p&gt;

&lt;p&gt;A few questions help decide whether the approach fits:&lt;/p&gt;

&lt;p&gt;Can each endpoint have its own authentication rule?&lt;br&gt;
Can you use more than one provider at the same time?&lt;br&gt;
Is the caller's identity available to every step in the workflow?&lt;br&gt;
Are credentials stored in one place instead of being copied between services?&lt;/p&gt;

&lt;p&gt;The fewer separate services involved in checking who's calling, the fewer places a mistake can hide. If you're maintaining a layer that exists mostly for authentication, Unmeshed is worth a look, because it handles that check in the same place the API call runs.&lt;/p&gt;

</description>
      <category>security</category>
      <category>api</category>
      <category>backend</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Your Workflow Asked Too Early (How to Add a Wait Step)</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Tue, 27 Oct 2026 05:12:47 +0000</pubDate>
      <link>https://dev.to/unmeshed/your-workflow-asked-too-early-how-to-add-a-wait-step-18a7</link>
      <guid>https://dev.to/unmeshed/your-workflow-asked-too-early-how-to-add-a-wait-step-18a7</guid>
      <description>&lt;p&gt;Someone signs up for your app. One second later, the workflow asks for their promotions and gets nothing back.&lt;/p&gt;

&lt;p&gt;Nothing is broken. The workflow just asked too early. The new account was still being set up behind the scenes, so the promotions couldn't find it yet. Ask again three seconds later and they show up.&lt;/p&gt;

&lt;p&gt;A wait step is how you fix that. It tells the workflow to pause for a moment, then carry on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just sleep?
&lt;/h2&gt;

&lt;p&gt;A three-second pause is easy anywhere. The harder cases are the long ones. A review period that lasts two days. A report that can only run after the quarter closes. A trading window that opens next Monday.&lt;/p&gt;

&lt;p&gt;You don't want a process sitting in memory for two days, or an engineer setting a reminder to trigger the next step. You want the workflow to pause, keep its place, and pick up on its own when the time comes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three reasons to wait
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Let a system catch up.&lt;/strong&gt; Indexing, replication, a downstream job that needs a moment. The pause removes a whole class of ""it worked on the second try"" bugs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wait for a date.&lt;/strong&gt; The first of January for annual processes, the end of a financial quarter for reporting, the start of a trading window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Respect a required delay.&lt;/strong&gt; Approval flows with a mandatory review period, settlements with a clearing time, compliance steps that mandate a waiting window.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In all three, time is part of the business logic, not a technical detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works in Unmeshed
&lt;/h2&gt;

&lt;p&gt;The wait step is a built-in task. You drag it between two steps and give it a small piece of JavaScript that decides how long to wait. The code returns a field called &lt;code&gt;waitUntil&lt;/code&gt;, which is a timestamp in epoch milliseconds. Until that moment, the workflow stays paused. After it, the next step runs.&lt;/p&gt;

&lt;p&gt;For the signup example, the wait is the step's own start time plus three seconds. For a fixed date, you return that date's timestamp instead. The same step covers both, because it only cares about the moment to resume.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get for it
&lt;/h2&gt;

&lt;p&gt;The wait lives inside the workflow, so you don't need an outside scheduler or a cron job to trigger the next step, and nobody has to rerun anything by hand. It also stays visible. You can open a run and see that it's waiting, and until when, instead of wondering whether it's stuck.&lt;/p&gt;

&lt;p&gt;Real processes rarely happen all at once. If yours include a pause, whether it's a few seconds or a few months, model it as a step. &lt;a href="https://unmeshed.io" rel="noopener noreferrer"&gt;Unmeshed&lt;/a&gt; lets you handle time the same way you handle API calls."&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>backend</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Where's My Package? Three API Calls to Find Out</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Mon, 26 Oct 2026 05:14:12 +0000</pubDate>
      <link>https://dev.to/unmeshed/chaining-rest-api-calls-without-glue-code-53bb</link>
      <guid>https://dev.to/unmeshed/chaining-rest-api-calls-without-glue-code-53bb</guid>
      <description>&lt;p&gt;A customer writes in: where's my package?&lt;/p&gt;

&lt;p&gt;To answer, you start with their account. The account leads to their orders. One of those orders has an ID, and only with that ID can you ask the shipping service where the package is.&lt;/p&gt;

&lt;p&gt;Three questions, asked in order, each one waiting on the answer before it. That's an API chain. None of it can run side by side, and if one answer comes back empty, the next question has nothing to go on.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a chain actually needs
&lt;/h2&gt;

&lt;p&gt;In API terms, that's three services: users, orders and shipping, each called with something the last one returned.&lt;/p&gt;

&lt;p&gt;The hard part isn't making the calls. It's moving data between them. Somebody has to pick the right field out of one response, hand it to the next request, and decide what happens if the field isn't there. In most codebases that's hand-written glue, repeated for every new chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passing data from step to step
&lt;/h2&gt;

&lt;p&gt;In Unmeshed, each call is a step in a workflow, and a later step can reference the output of an earlier one using double curly brackets. So the order step can read a value from the user step's response, and the shipping step can read the order ID from the order step. You build the three calls as HTTP GET tasks, wire the references, and the platform runs them in order.&lt;/p&gt;

&lt;p&gt;You never write the code that passes the values along. You also get a visual trace of the run, so you can open each step and see exactly what went in and what came back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three ways chains go wrong
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A field is missing or shaped differently.&lt;/strong&gt; The next call depends on it, so it fails or runs with an empty value. This is why every service in the chain should return JSON with consistent, predictable fields.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A step fails halfway.&lt;/strong&gt; The earlier calls already happened. You need to know where it stopped, and you want to rerun from there, not from the beginning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment details are baked in.&lt;/strong&gt; Hard-coded URLs make a flow that works in testing and breaks in production. Keep the configuration separate from the logic so the same flow runs in more than one environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Keeping it reviewable
&lt;/h2&gt;

&lt;p&gt;A flow that lives only in a visual editor is hard to review and hard to roll back. Unmeshed lets you export process definitions as JSON, so a chain can be versioned, reviewed and deployed with the rest of your code.&lt;/p&gt;

&lt;p&gt;Chained calls are one of the most common integration patterns, and they're also the one most likely to turn into a pile of glue code nobody wants to touch. If you have a chain like this, try building it in &lt;a href="https://unmeshed.io" rel="noopener noreferrer"&gt;Unmeshed&lt;/a&gt; and compare it with what you maintain today.&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>webdev</category>
      <category>automation</category>
    </item>
    <item>
      <title>6 CrewAI Alternatives for Multi-Agent Systems (and When to Stay on CrewAI)</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Fri, 23 Oct 2026 06:56:47 +0000</pubDate>
      <link>https://dev.to/unmeshed/6-crewai-alternatives-for-multi-agent-systems-and-when-to-stay-on-crewai-2ak2</link>
      <guid>https://dev.to/unmeshed/6-crewai-alternatives-for-multi-agent-systems-and-when-to-stay-on-crewai-2ak2</guid>
      <description>&lt;h2&gt;
  
  
  TLDR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Teams leave CrewAI over specific limits. The &lt;a href="https://crewai.com/pricing" rel="noopener noreferrer"&gt;free hosted plan&lt;/a&gt; stops at 50 executions a month; SSO and a dedicated VPC need custom Enterprise, and the role model doesn't fit every problem.&lt;/li&gt;
&lt;li&gt;"CrewAI can't branch" is outdated, because Flows now has routing, saved state, and human feedback.&lt;/li&gt;
&lt;li&gt;The six alternatives are LangGraph, Microsoft Agent Framework, Google ADK, AG2, the OpenAI Agents &lt;a href="https://openai.github.io/openai-agents-python/" rel="noopener noreferrer"&gt;SDK&lt;/a&gt;, and Unmeshed. Each has one honest tradeoff.&lt;/li&gt;
&lt;li&gt;Frameworks shape how agents think. A runtime like Unmeshed handles durability, approvals, spend limits, and audit, and it can run your existing crews.&lt;/li&gt;
&lt;li&gt;Stay on CrewAI if your agents map to roles, your volume fits your plan, and Flows covers your routing. Otherwise, move in stages by wrapping crews as workflow steps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best &lt;a href="https://unmeshed.io/compare/crew-ai" rel="noopener noreferrer"&gt;CrewAI alternatives&lt;/a&gt; for multi-agent systems are LangGraph, Microsoft Agent Framework, Google ADK, AG2, the OpenAI Agents SDK, and Unmeshed, and the right one depends on why you're leaving CrewAI.&lt;/p&gt;

&lt;p&gt;Most lists skip that part, and several still repeat complaints that no longer hold. &lt;a href="https://docs.crewai.com/en/concepts/flows" rel="noopener noreferrer"&gt;CrewAI Flows&lt;/a&gt; now supports conditional routing, persisted state, and human feedback, so "it can't branch" is out of date.&lt;/p&gt;

&lt;p&gt;The real limits are narrower. The free hosted plan stops at 50 executions a month, SSO and your own VPC sit behind a custom Enterprise deal, and the role-based crew model doesn't fit every problem.&lt;/p&gt;

&lt;p&gt;This guide sorts six CrewAI competitors by the limit you actually hit, says what each one fixes, and tells you when staying on CrewAI is the better call.&lt;/p&gt;

&lt;p&gt;One note on bias. Unmeshed is our product, and it's on the list. We'll say what it does well and what it doesn't do, and you can judge the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Why Do Teams Look for CrewAI Alternatives?
&lt;/h2&gt;

&lt;p&gt;Teams look for CrewAI alternatives when they hit a specific limit, usually the 50 execution free plan, governance locked behind Enterprise, a crew model that fights their workflow, or a missing durability layer. Outdated complaints about branching no longer apply.&lt;/p&gt;

&lt;p&gt;Here are the four limits we see most, and what is true about each.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The free plan is small:&lt;/strong&gt; The hosted free tier includes 50 workflow executions a month and 2 automations, according to &lt;a href="https://crewai.com/pricing" rel="noopener noreferrer"&gt;CrewAI's pricing page&lt;/a&gt;. Fine for a prototype, tight for anything with real traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise controls cost a conversation:&lt;/strong&gt; SSO through Entra or Okta, role-based access, and a dedicated VPC are listed on the custom Enterprise plan, which also comes with a 45-day onboarding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The crew model doesn't fit everything:&lt;/strong&gt; Role-based agents with goals and backstories suit some problems. They add friction when you want an explicit graph, a fixed pipeline, or one agent with many tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production needs more than a &lt;a href="https://github.com/microsoft/agent-framework" rel="noopener noreferrer"&gt;framework&lt;/a&gt;:&lt;/strong&gt; Retries across crashes, approvals, spend limits, and audit trails live in a layer around the agents, not in the agents themselves.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What is not a limit anymore is branching. Flows has &lt;a class="mentioned-user" href="https://dev.to/router"&gt;@router&lt;/a&gt; for conditional paths, @persist for saved state, and @human_feedback for approvals. If a review told you CrewAI can't branch, check the date on it.&lt;/p&gt;

&lt;p&gt;If you want CrewAI's own pricing side by side, our CrewAI alternative comparison page covers it. Cost is also a design question for agents, which we cover in &lt;a href="https://unmeshed.io/blog/what-is-token-efficiency" rel="noopener noreferrer"&gt;token efficiency&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. What Should You Look for in a CrewAI Alternative?
&lt;/h2&gt;

&lt;p&gt;Judge a CrewAI alternative on five things, which are how it coordinates agents, whether it survives a crash, how it handles human approval, what it costs to run, and who maintains it. A multi-agent framework comparison that skips these will mislead you.&lt;/p&gt;

&lt;p&gt;Gartner expects &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027" rel="noopener noreferrer"&gt;over 40% of agentic AI projects&lt;/a&gt; to be canceled by the end of 2027, citing cost, unclear value, and weak risk controls. Those are the same five areas.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;What to Ask&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coordination model&lt;/td&gt;
&lt;td&gt;Roles, graphs, handoffs, or conversations? Does it match how your problem is shaped?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Durability&lt;/td&gt;
&lt;td&gt;If the process dies at step six, does it resume at step six?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human in the loop&lt;/td&gt;
&lt;td&gt;Can a person approve or edit a step and the run waits?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost and licensing&lt;/td&gt;
&lt;td&gt;Is it open source, hosted, or both? What happens past the free limit?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintenance&lt;/td&gt;
&lt;td&gt;Who ships fixes, and how often do releases break your code?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If any of these terms are new, our guide to &lt;a href="https://unmeshed.io/blog/what-is-ai-orchestration" rel="noopener noreferrer"&gt;AI orchestration&lt;/a&gt; covers the basics. For the broader stack that agents run on, see &lt;a href="https://unmeshed.io/blog/what-is-ai-agent-infrastructure" rel="noopener noreferrer"&gt;agent infrastructure&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. What Are the 6 Best CrewAI Alternatives for Multi-Agent Systems?
&lt;/h2&gt;

&lt;p&gt;The six best CrewAI alternatives are LangGraph, Microsoft Agent Framework, Google ADK, AG2, the OpenAI Agents SDK, and Unmeshed. The first five are frameworks that shape how agents reason. Unmeshed is a runtime that runs agents, including CrewAI crews, as governed steps.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What It Fixes&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LangGraph&lt;/td&gt;
&lt;td&gt;Explicit graphs with durable state&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft Agent Framework&lt;/td&gt;
&lt;td&gt;Graph &lt;a href="https://unmeshed.io/products/workflows" rel="noopener noreferrer"&gt;workflows&lt;/a&gt; with checkpointing, Python and .NET&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google ADK&lt;/td&gt;
&lt;td&gt;Graph workflows with agent-to-agent delegation&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AG2&lt;/td&gt;
&lt;td&gt;Conversation based multi agent patterns&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI Agents SDK&lt;/td&gt;
&lt;td&gt;A small set of primitives with built-in tracing&lt;/td&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmeshed&lt;/td&gt;
&lt;td&gt;Durability, approvals, spend limits, and audit around any agent&lt;/td&gt;
&lt;td&gt;Platform, free tier&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1. LangGraph
&lt;/h3&gt;

&lt;p&gt;LangGraph fixes the crew model's lack of an explicit graph. It is a low-level &lt;a href="https://github.com/langchain-ai/langgraph" rel="noopener noreferrer"&gt;orchestration framework&lt;/a&gt; for stateful agents, where you define nodes and edges yourself and the framework saves state at each step so a run can resume.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo9169wux84xcv3veesd6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo9169wux84xcv3veesd6.png" alt="LangGraph agent orchestration framework homepage showing stateful AI agents, graph-based workflows, durable execution, agent memory, human-in-the-loop workflows, and CrewAI alternative capabilities." width="799" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Durable execution, so a run can resume after a failure&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://unmeshed.io/product/whats-new/human-in-the-loop" rel="noopener noreferrer"&gt;Human-in-the-loop&lt;/a&gt; support, plus short- and long-term memory&lt;/li&gt;
&lt;li&gt;MIT-licensed, with LangSmith available for debugging and deployment&lt;/li&gt;
&lt;li&gt;A JavaScript version, LangGraph.js, for TypeScript teams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real tradeoff:&lt;/strong&gt; You write more code than you would in CrewAI, and the LangChain ecosystem pulls you toward its other tools.&lt;/p&gt;

&lt;p&gt;We compare it further in our guide to &lt;a href="https://unmeshed.io/blog/langgraph-alternatives" rel="noopener noreferrer"&gt;LangGraph alternatives&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Microsoft Agent Framework
&lt;/h3&gt;

&lt;p&gt;Microsoft Agent Framework fits teams on Azure or .NET that want graph workflows with checkpointing in one supported toolkit. The open-source framework supports Python and .NET and ships migration guides from AutoGen and Semantic Kernel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5z8cyio9xajsr18pyyea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5z8cyio9xajsr18pyyea.png" alt="Microsoft Agent Framework documentation page showing open-source AI agent orchestration framework, agent workflows, checkpointing, human-in-the-loop support, OpenTelemetry observability, and a CrewAI alternative for enterprise multi-agent systems." width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Graph workflows with sequential, concurrent, handoff, and group collaboration patterns&lt;/li&gt;
&lt;li&gt;Checkpointing, streaming, and time travel for debugging&lt;/li&gt;
&lt;li&gt;Human in the loop and OpenTelemetry support&lt;/li&gt;
&lt;li&gt;MIT licensed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real tradeoff:&lt;/strong&gt; It reached general availability in April 2026, so its production record is shorter than older frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Google ADK
&lt;/h3&gt;

&lt;p&gt;Google ADK fits teams that want a graph runtime and agent to agent delegation in one open source toolkit. Version 2.0 of the &lt;a href="https://github.com/google/adk-python" rel="noopener noreferrer"&gt;Agent Development Kit&lt;/a&gt; adds a workflow runtime with routing, fan out and fan in, loops, retries, and nested workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1itargihbb5rdi1ikhcu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1itargihbb5rdi1ikhcu.png" alt="Google Agent Development Kit ADK homepage showcasing AI agent development, agent orchestration, multi-agent workflows, workflow runtime, agent delegation, and CrewAI alternative capabilities for enterprise AI systems." width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Task API for delegating work between agents&lt;/li&gt;
&lt;li&gt;State, human-in-the-loop, and dynamic nodes inside workflows&lt;/li&gt;
&lt;li&gt;Apache 2.0 licensed, Python 3.10 or later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real tradeoff:&lt;/strong&gt; Version 2.0 includes breaking changes from 1.x, so budget time if you build on older examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. AG2
&lt;/h3&gt;

&lt;p&gt;AG2, formerly AutoGen, fits teams that think of multi-agent systems as conversations between agents. The &lt;a href="https://github.com/ag2ai/ag2" rel="noopener noreferrer"&gt;Apache 2.0 project&lt;/a&gt; is maintained by volunteers from several organizations, and version 1.0 is a newly rebuilt, protocol driven framework.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F45l7pvlqain2b8p2py12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F45l7pvlqain2b8p2py12.png" alt="AG2 multi-agent intelligence platform homepage from the creators of AutoGen, featuring conversational AI agents, agent coordination, multi-agent orchestration, enterprise agent systems, and CrewAI alternative capabilities." width="799" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agents, tools, and a human-in-the-loop hook&lt;/li&gt;
&lt;li&gt;Networks with typed channels for conversation, consulting, discussion, and workflow patterns&lt;/li&gt;
&lt;li&gt;The earlier version lives on as AG2 Classic, still maintained&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real tradeoff:&lt;/strong&gt; Version 1.0 is not a drop-in upgrade from AG2 Classic, and volunteer maintenance means you should check release activity before committing.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. OpenAI Agents SDK
&lt;/h3&gt;

&lt;p&gt;The OpenAI Agents SDK fits teams that want the smallest possible set of building blocks. The SDK is the production upgrade of Swarm and centers on agents, handoffs or agents as tools, and guardrails, with tracing built in from the start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj0tkiaudy6vf4s9tp28n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj0tkiaudy6vf4s9tp28n.png" alt="OpenAI Agents SDK documentation showing AI agent orchestration, agent handoffs, guardrails, sessions, tracing, multi-agent systems, and CrewAI alternative capabilities for production AI applications." width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in tracing and sessions for conversation memory&lt;/li&gt;
&lt;li&gt;Human in the loop and MCP support&lt;/li&gt;
&lt;li&gt;Works with non-OpenAI models through adapters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real tradeoff:&lt;/strong&gt; OpenAI models are the default path. Surviving a process crash is something you add around the SDK rather than get from it.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Unmeshed
&lt;/h3&gt;

&lt;p&gt;Unmeshed fixes what frameworks leave open, which is running agents reliably in production. The &lt;a href="https://unmeshed.io/products/agentic" rel="noopener noreferrer"&gt;agent orchestration&lt;/a&gt; platform runs agents as steps in durable workflows, with retries, approvals, spend limits, and a full run history, and it can run CrewAI crews too.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuevv53ymdj8as4o5tpkc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuevv53ymdj8as4o5tpkc.png" alt="Unmeshed agent orchestration platform showing durable execution, AI agent governance, workflow orchestration, human approvals, audit logging, spend controls, and CrewAI runtime alternative for production AI systems." width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agents are bound to a fixed tool set that the runtime enforces, and each agent can have a spend ceiling that throttles it or switches it to a cheaper model. See &lt;a href="https://unmeshed.io/solutions/ai-agent-governance" rel="noopener noreferrer"&gt;AI agent governance&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Human-in-the-loop approvals pause a run until a person decides.&lt;/li&gt;
&lt;li&gt;Built on workflows by the creators of Netflix Conductor, with SDKs for Java, Go, Python, and TypeScript.&lt;/li&gt;
&lt;li&gt;Model-agnostic and MCP native. The free tier includes 2,000 workflow executions a month.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real tradeoff:&lt;/strong&gt; Unmeshed is not a reasoning framework and doesn't replace CrewAI's role model. If you like how your crews think, keep them and run them inside Unmeshed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Keep Your Crews.Add the Runtime
&lt;/h3&gt;

&lt;p&gt;Call your existing CrewAI crew from an Unmeshed worker and get durable state, retries, approvals, and an audit trail without a rewrite.&lt;br&gt;
&lt;a href="https://unmeshed.io/signup?utm_source=blog&amp;amp;utm_medium=organic&amp;amp;utm_campaign=crewai_alternatives&amp;amp;utm_content=accent_cta" rel="noopener noreferrer"&gt;&lt;strong&gt;Add The Runtime&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  4. CrewAI vs Alternatives: How Do the Six Compare?
&lt;/h2&gt;

&lt;p&gt;In a CrewAI vs alternatives comparison, the main differences are coordination model and durability. CrewAI uses roles and Flows; LangGraph, Microsoft, and ADK use graphs, AG2 uses conversations, and only Unmeshed treats durability as a separate runtime layer.&lt;/p&gt;

&lt;p&gt;This multi-agent framework comparison keeps cells short on purpose. Check each project's docs before you commit, because all of them move fast.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Coordination&lt;/th&gt;
&lt;th&gt;Durability&lt;/th&gt;
&lt;th&gt;Human in Loop&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CrewAI&lt;/td&gt;
&lt;td&gt;Roles, crews, Flows&lt;/td&gt;
&lt;td&gt;Persisted Flow state, SQLite by default&lt;/td&gt;
&lt;td&gt;Yes, in Flows&lt;/td&gt;
&lt;td&gt;Role-based agent teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LangGraph&lt;/td&gt;
&lt;td&gt;Explicit graph&lt;/td&gt;
&lt;td&gt;Durable execution&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Custom stateful agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft Agent Framework&lt;/td&gt;
&lt;td&gt;Graph workflows&lt;/td&gt;
&lt;td&gt;Checkpointing&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Azure and .NET teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google ADK&lt;/td&gt;
&lt;td&gt;Graph workflows, Task API&lt;/td&gt;
&lt;td&gt;Workflow state&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Google Cloud teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AG2&lt;/td&gt;
&lt;td&gt;Conversations, networks&lt;/td&gt;
&lt;td&gt;Knowledge store&lt;/td&gt;
&lt;td&gt;Yes, via hook&lt;/td&gt;
&lt;td&gt;Conversational agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI Agents SDK&lt;/td&gt;
&lt;td&gt;Handoffs, agents as tools&lt;/td&gt;
&lt;td&gt;Sessions&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Small, simple systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unmeshed&lt;/td&gt;
&lt;td&gt;Workflow with agent steps&lt;/td&gt;
&lt;td&gt;Durable execution&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Governed production runs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If your real question is how multi-agent systems coordinate in general, read our guide to &lt;a href="https://unmeshed.io/blog/what-is-agentic-orchestration" rel="noopener noreferrer"&gt;agentic orchestration&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Are There Open Source CrewAI Alternatives?
&lt;/h2&gt;

&lt;p&gt;Yes, most CrewAI alternatives are open source. LangGraph and Microsoft Agent Framework use the MIT license, Google ADK and AG2 use Apache 2.0, and the OpenAI Agents SDK is an open-source Python package. Unmeshed is a platform with a free tier.&lt;/p&gt;

&lt;p&gt;Not all CrewAI alternatives are equal on this front, so read the license for the version you plan to use. Open source means you can read the code and run it yourself. It doesn't mean it's free to operate. You still pay for hosting, models, and the engineers who keep it running.&lt;/p&gt;

&lt;p&gt;When you search for agent framework alternatives, check three things beyond the license. See who maintains the project, how often releases break your code, and whether the project is a library or a full runtime. A library gives you building blocks. A runtime gives you something that keeps running.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. How Do CrewAI Alternatives Handle Durability and Governance?
&lt;/h2&gt;

&lt;p&gt;CrewAI alternatives handle durability and governance differently. LangGraph and ADK keep state inside the framework, the OpenAI Agents SDK adds sessions, and a workflow engine like Unmeshed runs retries, approvals, spend ceilings, and audit as one layer.&lt;/p&gt;

&lt;p&gt;Frameworks answer the question of how an agent thinks. Governance answers a different question, which is what the agent is allowed to do and who can see it. Teams often find out the difference after the first incident.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;In a Framework&lt;/th&gt;
&lt;th&gt;In a Runtime Like Unmeshed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Resume after a crash&lt;/td&gt;
&lt;td&gt;Available in some, usually with setup&lt;/td&gt;
&lt;td&gt;Built in through &lt;a href="https://unmeshed.io/blog/what-is-durable-execution" rel="noopener noreferrer"&gt;durable execution&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Limit which tools an agent can use&lt;/td&gt;
&lt;td&gt;Convention in your code&lt;/td&gt;
&lt;td&gt;Enforced by the runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cap spend per agent&lt;/td&gt;
&lt;td&gt;You build it&lt;/td&gt;
&lt;td&gt;Per-agent ceilings with throttle or cheaper model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approvals&lt;/td&gt;
&lt;td&gt;Supported in most&lt;/td&gt;
&lt;td&gt;Routed to a person, with the run paused&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit trail&lt;/td&gt;
&lt;td&gt;Tracing, often a separate tool&lt;/td&gt;
&lt;td&gt;Full run history by default&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For the concept behind the first row, see durable execution. For measuring whether agents do the job well, see &lt;a href="https://unmeshed.io/blog/what-are-ai-agent-evals" rel="noopener noreferrer"&gt;agent evals&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. When Should You Stay on CrewAI?
&lt;/h2&gt;

&lt;p&gt;Stay on CrewAI when your problem is a team of role-based agents, you're within the free plan limits or already on Enterprise, and Flows covers your branching. Switching costs time, and none of the six beats it on that fit.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your agents map cleanly to roles, goals, and tasks&lt;/li&gt;
&lt;li&gt;Your volume fits the plan you have&lt;/li&gt;
&lt;li&gt;Flows handles your routing and saved state&lt;/li&gt;
&lt;li&gt;Your team already knows it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before you shop for CrewAI alternatives, check whether you need one. If you tick all four, the answer is probably to keep it. If your only gap is production controls around it, add a runtime instead of replacing the framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. How Do You Move Off CrewAI Without Rewriting Everything?
&lt;/h2&gt;

&lt;p&gt;You can move off CrewAI in stages by wrapping existing crews as steps, then replacing the coordination layer one workflow at a time. Keep the agent logic you've tested and change only what runs and governs it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick one crew and run it as a step inside a workflow. Nothing about the crew changes.&lt;/li&gt;
&lt;li&gt;Add retries, an approval step, and tracing around it. Our guide to &lt;a href="https://unmeshed.io/blog/workflow-orchestration-tools-2026" rel="noopener noreferrer"&gt;workflow orchestration&lt;/a&gt; covers the options.&lt;/li&gt;
&lt;li&gt;Move the next crew. Replace the framework only where it truly blocks you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This order keeps risk low, and it makes the case for or against the other CrewAI alternatives with real data from your own workload. You learn what the new layer does before you commit to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Pick the alternative that fixes your actual limit. If CrewAI's graph is the problem, look at LangGraph, Microsoft Agent Framework, or Google ADK. Of all the CrewAI alternatives here, the best fit is the one that matches your problem, not the one with the most stars. If conversation style fits, try AG2. If you want few moving parts, try the OpenAI Agents SDK.&lt;/p&gt;

&lt;p&gt;If your crews work but production feels risky, you may not need a new framework. You may need a runtime around the one you have. That's the gap Unmeshed fills.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Your AI Agent Does Not Need Root Access: A Guide to Agentic Orchestration</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Thu, 22 Oct 2026 05:23:16 +0000</pubDate>
      <link>https://dev.to/unmeshed/your-ai-agent-does-not-need-root-access-a-guide-to-agentic-orchestration-1dk3</link>
      <guid>https://dev.to/unmeshed/your-ai-agent-does-not-need-root-access-a-guide-to-agentic-orchestration-1dk3</guid>
      <description>&lt;h2&gt;
  
  
  TLDR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Agentic orchestration coordinates AI agents that choose their own next steps. It decides who acts, what they see, which tools they get, and when a person approves.&lt;/li&gt;
&lt;li&gt;Traditional orchestration runs a fixed path, while agentic orchestration bounds a path the model picks as it runs. It needs more control, not less.&lt;/li&gt;
&lt;li&gt;The five core patterns are sequential, parallel, routing, orchestrator and workers, and evaluator loops. Start with the simplest one that works.&lt;/li&gt;
&lt;li&gt;Give each step the least autonomy that does the job. Go from a fixed rule to a model call to an agent only when the simpler option fails.&lt;/li&gt;
&lt;li&gt;Production needs five controls around the agent: spend ceilings, scoped tools, approval gates, step limits, and tracing. Unmeshed covers these inside durable workflows, but it isn't an agent reasoning framework.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agentic orchestration is the coordination layer that manages AI agents that choose their own next steps, deciding which agent acts, what context it gets, which tools it may use, and when a person must approve. It is orchestration for systems where the path is not fixed in advance.&lt;/p&gt;

&lt;p&gt;Most explanations stop at that definition and a diagram of agents passing messages. The harder question is how much freedom each step should get. Gartner expects &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027" rel="noopener noreferrer"&gt;over 40% of agentic AI projects&lt;/a&gt; to be canceled by the end of 2027, citing cost, unclear value, and weak risk controls.&lt;/p&gt;

&lt;p&gt;This guide covers what agentic orchestration is, how it differs from traditional orchestration, the core patterns, and the controls that keep agents inside safe limits. We'll also say where Unmeshed fits and where it doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What Is Agentic Orchestration?
&lt;/h2&gt;

&lt;p&gt;Agentic orchestration is the coordination layer that manages AI agents that choose their own next steps, deciding which agent acts, what context it gets, which tools it may use, and when a person must approve.&lt;/p&gt;

&lt;p&gt;The key word is choose. In a fixed workflow, a developer decides every step before the run starts. In an agentic system, a model decides some of them while the run is happening. Someone has to set the limits on that choice, and that someone is the orchestrator.&lt;/p&gt;

&lt;p&gt;It helps to say what it is not. It isn't one big agent doing everything. It isn't a prompt chain with a fancier name. And it isn't an agent framework on its own, because a framework shapes how one agent reasons while orchestration governs how agents run together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fexsd58jkcrql1u6wn2z9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fexsd58jkcrql1u6wn2z9.jpg" alt="Five decisions the orchestrator owns — from choosing which agent acts and what context it can access to managing tool calls, retries, and human approvals. A simple look at how orchestration keeps AI workflows controlled and reliable." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The orchestrator owns five decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which agent or tool acts next&lt;/li&gt;
&lt;li&gt;What context each agent sees&lt;/li&gt;
&lt;li&gt;Which tools each agent may call&lt;/li&gt;
&lt;li&gt;When the run stops, retries, or escalates&lt;/li&gt;
&lt;li&gt;When a person has to approve&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. How Is Agentic Orchestration Different From Traditional Orchestration?
&lt;/h2&gt;

&lt;p&gt;Traditional orchestration runs steps along a path you define in advance. Agentic orchestration coordinates steps where an AI model decides the path as it runs, so the orchestrator has to bound that freedom with limits, approvals, and logging.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff6e08bijdhyral8x76qn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff6e08bijdhyral8x76qn.jpg" alt="Traditional workflows follow predefined steps, while agentic workflows let AI decide what to do next at runtime. The key is having an orchestrator that sets the boundaries, controls tool access, and keeps the process on track." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Traditional orchestration is what workflow engines and API orchestrators do. Our guide to AI orchestration covers the wider term, including pipelines and model routing. This post covers the narrower case where the path itself is not fixed.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Traditional&lt;/th&gt;
&lt;th&gt;Agentic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who decides the path&lt;/td&gt;
&lt;td&gt;The developer, in advance&lt;/td&gt;
&lt;td&gt;The model, at runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Predictability&lt;/td&gt;
&lt;td&gt;Same input follows the same path&lt;/td&gt;
&lt;td&gt;Same input can take different paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical failure&lt;/td&gt;
&lt;td&gt;A step errors out&lt;/td&gt;
&lt;td&gt;An agent loops, picks the wrong tool, or compounds an early mistake&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost shape&lt;/td&gt;
&lt;td&gt;Fixed per run&lt;/td&gt;
&lt;td&gt;Varies with the steps the model chooses to take&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What the orchestrator adds&lt;/td&gt;
&lt;td&gt;Retries and scheduling&lt;/td&gt;
&lt;td&gt;Limits, approvals, tool scoping, and tracing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last row is the point. An agentic system doesn't need less orchestration. It needs more.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. What Are Agentic Workflows, and How Do They Differ From Agents?
&lt;/h2&gt;

&lt;p&gt;Agentic workflows are multi-step processes where AI models decide some of the steps inside a defined structure. An AI agent is a system that directs its own process and tool use. The workflow sets the boundary, and the agent acts inside it.&lt;/p&gt;

&lt;p&gt;Anthropic draws the same line in its &lt;a href="https://www.anthropic.com/research/building-effective-agents" rel="noopener noreferrer"&gt;guide to building effective agents&lt;/a&gt;. Workflows orchestrate models and tools through predefined code paths, while agents let the model direct its own process and tool usage.&lt;/p&gt;

&lt;p&gt;A workflow&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The path is set in code&lt;/li&gt;
&lt;li&gt;The model fills in content or makes bounded choices&lt;/li&gt;
&lt;li&gt;It's easy to test, audit, and explain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An agent&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The model picks the next action in a loop&lt;/li&gt;
&lt;li&gt;It uses tools and feedback from each step to decide what to do&lt;/li&gt;
&lt;li&gt;It's harder to predict and costs more per run&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most production systems mix both. A workflow handles intake, validation, and approvals, and an agent handles the one step that needs judgment. If you're choosing a framework for that agent step, our guide to agent frameworks compares six.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. What Are the Core Agentic Orchestration Patterns?
&lt;/h2&gt;

&lt;p&gt;The core agentic orchestration patterns are sequential, parallel, routing, orchestrator and workers, and evaluator loops. Each trades predictability against flexibility, and most production systems combine two or three of them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flbaqf78g6x6e0t2ym0px.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flbaqf78g6x6e0t2ym0px.jpg" alt="Five core patterns for building agentic workflows, from sequential execution and parallel agents to routing, orchestrator-worker setups, and evaluator loops. Each pattern has its trade-offs, so start with the simplest approach that gets the job done." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anthropic and Google Cloud describe overlapping sets. This table pulls the common ones together.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;How It Works&lt;/th&gt;
&lt;th&gt;Main Risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sequential&lt;/td&gt;
&lt;td&gt;Agents run in a fixed order, and each one feeds the next&lt;/td&gt;
&lt;td&gt;One weak step weakens every step after it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parallel&lt;/td&gt;
&lt;td&gt;Agents work at the same time, and the results are merged&lt;/td&gt;
&lt;td&gt;Conflicting outputs and higher token use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routing&lt;/td&gt;
&lt;td&gt;A classifier sends each request to the best-fit agent&lt;/td&gt;
&lt;td&gt;Requests sent to the wrong agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Orchestrator and workers&lt;/td&gt;
&lt;td&gt;A lead agent splits the task and delegates the pieces&lt;/td&gt;
&lt;td&gt;Runaway delegation and cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Evaluator loop&lt;/td&gt;
&lt;td&gt;One agent drafts, another critiques, and the cycle repeats&lt;/td&gt;
&lt;td&gt;Loops that never converge&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Google Cloud warns that a loop can run indefinitely if its exit condition is wrong. That's why every loop needs a maximum number of iterations.&lt;/p&gt;

&lt;p&gt;Start with the simplest pattern that works. Sequential and parallel patterns run on fixed logic with no model choosing the route, so they cost less and behave more predictably. Reach for orchestrator and workers only when you truly can't know the steps in advance.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. How Does Autonomous Agent Coordination Work?
&lt;/h2&gt;

&lt;p&gt;Autonomous agent coordination is how multiple agents hand off work, share state, and avoid conflicting actions without a person directing each step. It depends on explicit handoff rules, one source of shared state, and hard stop conditions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handoffs: Define what one agent passes to the next and in what shape. Loose, free-text handoffs are where context gets lost.&lt;/li&gt;
&lt;li&gt;Shared state: Keep one record of the run that every agent reads and writes, instead of each agent carrying its own copy.&lt;/li&gt;
&lt;li&gt;Context scoping: Give each agent only the context its task needs. Google Cloud calls managing this flow context engineering.&lt;/li&gt;
&lt;li&gt;Conflict control: If two agents can change the same record, decide which one wins before they ever run.&lt;/li&gt;
&lt;li&gt;Stop conditions: Set step limits, timeouts, and a spend cap, so a stuck agent ends the run instead of draining it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shared state and stop conditions are infrastructure problems, not prompt problems. They're why agent infrastructure has become its own topic, and why runs need durable execution to survive a crash halfway through.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. How Much Autonomy Should Each Step Get?
&lt;/h2&gt;

&lt;p&gt;Give each step the least autonomy that still does the job. Use a fixed rule when the answer is known, a single model call when the input is messy, and an agent loop only when the steps can't be predicted in advance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0fnojup0ccq6upg252oe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0fnojup0ccq6upg252oe.jpg" alt="Not every workflow step needs the same level of autonomy. Use fixed rules when the answer is clear, a model call for bounded decisions, and agentic steps when judgment is needed. Give an agent more freedom only when the task actually requires it." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Think of autonomy as a dial, not a switch. Each notch adds flexibility, and it also adds cost, variance, and review work.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Use It When&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Cost and Review&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fixed rule&lt;/td&gt;
&lt;td&gt;The answer is known&lt;/td&gt;
&lt;td&gt;Is this request a duplicate?&lt;/td&gt;
&lt;td&gt;Lowest, nothing to review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single model call&lt;/td&gt;
&lt;td&gt;The input is messy, but the output is bounded&lt;/td&gt;
&lt;td&gt;Classify a support email&lt;/td&gt;
&lt;td&gt;Low, spot check the output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workflow with an agent step&lt;/td&gt;
&lt;td&gt;One step needs judgment, and the rest is fixed&lt;/td&gt;
&lt;td&gt;An agent researches a customer, then a rule decides what happens&lt;/td&gt;
&lt;td&gt;Moderate, review flagged runs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fully autonomous agent&lt;/td&gt;
&lt;td&gt;The steps can't be predicted at all&lt;/td&gt;
&lt;td&gt;Open-ended research or coding&lt;/td&gt;
&lt;td&gt;Highest, needs strong limits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027" rel="noopener noreferrer"&gt;Gartner's guidance&lt;/a&gt; maps to the same dial. It recommends agents where decisions are needed, automation for routine workflows, and assistants for simple retrieval.&lt;/p&gt;

&lt;p&gt;Most teams start too far to the right. The cheaper path is to begin with a rule, promote a step to a model call when the input gets messy, and promote it to an agent only when the simpler version fails.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. What Controls Does Agentic AI Orchestration Need in Production?
&lt;/h2&gt;

&lt;p&gt;Agentic AI orchestration needs five production controls, which are spend ceilings, scoped tool access, approval gates, step limits, and full tracing. They stop an agent's freedom from turning into cost overruns or actions nobody reviewed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqd4geofgvzdpu0fr18zg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqd4geofgvzdpu0fr18zg.jpg" alt="AI agents need clear boundaries to operate reliably in production. Spend ceilings control costs, scoped tools limit access, approval gates pause risky actions, step limits prevent runaway loops, and tracing keeps every call visible. Autonomy works best when it comes with the right controls." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gartner expects over 40% of agentic AI projects to be canceled by the end of 2027 because of escalating costs, unclear business value, or inadequate risk controls. Each control below answers one of those reasons.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spend ceilings: Cap what each agent can spend, and throttle it or switch it to a cheaper model near the cap. Cost grows with every extra step a model takes, so see our guide to token efficiency for where the money goes.&lt;/li&gt;
&lt;li&gt;Scoped tool access: Bind each agent to a fixed list of tools, enforced by the runtime and not by a line in a prompt.&lt;/li&gt;
&lt;li&gt;Approval gates: Pause the run before any action that is expensive to reverse, such as a payment or a deletion. A human-in-the-loop step does this and resumes the run once a person approves.&lt;/li&gt;
&lt;li&gt;Step limits: End the run after a maximum number of steps or minutes, so a loop can't run forever.&lt;/li&gt;
&lt;li&gt;Full tracing: Log every model call, tool call, and cost. LLM observability shows what happened, and agent evals show whether the result was any good.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these controls live inside the agent. They sit around it, which is why AI agent governance is a workflow concern and not a prompt concern.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. What Should You Look For in an Agent Orchestration Platform?
&lt;/h2&gt;

&lt;p&gt;An agent orchestration platform should add durable state, retries, approvals, tool scoping, spend tracking, and an audit trail around whichever agent framework you use. It runs the agents. It does not replace their reasoning.&lt;/p&gt;

&lt;p&gt;The market mixes three different things under one label. Frameworks shape how an agent reasons. Cloud suites bundle models and agent builders for one vendor's stack. Workflow engines run durable, governed processes around any of them. Know which one you're buying.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;What To Ask&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Durability&lt;/td&gt;
&lt;td&gt;Does a run survive a crash or a redeploy and resume where it stopped?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool scoping&lt;/td&gt;
&lt;td&gt;Does the runtime stop an agent from calling a tool it wasn't given?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spend controls&lt;/td&gt;
&lt;td&gt;Can you set a ceiling per agent and see cost per run?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human approval&lt;/td&gt;
&lt;td&gt;Can a run pause for sign-off and resume on its own?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observability&lt;/td&gt;
&lt;td&gt;Can you inspect every model call, tool call, and retry?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Framework neutrality&lt;/td&gt;
&lt;td&gt;Can you keep the agent framework your team already uses?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost shape&lt;/td&gt;
&lt;td&gt;Does pricing grow with actions or stay predictable?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Watch for agent washing as well. Gartner estimates that only about 130 of the thousands of agentic AI vendors are real, because many rebrand chatbots and RPA without real agentic capability. Ask any vendor to show you the run history of a failed agent step.&lt;/p&gt;

&lt;p&gt;For the engine layer, see our roundup of workflow orchestration tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. When Should You Avoid Agentic Orchestration?
&lt;/h2&gt;

&lt;p&gt;Avoid agentic orchestration when the steps are known in advance, when one model call solves the task, or when an error is costly and can't be reviewed. Gartner says many use cases sold as agentic don't need an agentic setup.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Gartner analyst Anushree Verma put it plainly: "Many use cases positioned as agentic today don't require agentic implementations."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Google Cloud's guide makes the same point. Tasks like summarizing a document, translating text, or classifying customer feedback usually don't need an agentic workflow.&lt;/p&gt;

&lt;p&gt;Skip it when&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The steps are known in advance&lt;/li&gt;
&lt;li&gt;A single model call solves the task&lt;/li&gt;
&lt;li&gt;A wrong action is expensive, and no one can review it first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use it when&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The steps can't be predicted ahead of time&lt;/li&gt;
&lt;li&gt;The task needs tools and outside data across several steps&lt;/li&gt;
&lt;li&gt;You can check the outcome and cap the spend&lt;/li&gt;
&lt;li&gt;Risky actions can pause for a person to approve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skipping it is a fine answer. A fixed workflow with one model step costs less, breaks less, and is easier to explain.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. How Does Unmeshed Handle Agentic Orchestration?
&lt;/h2&gt;

&lt;p&gt;Unmeshed handles agentic orchestration by running agent steps inside durable, governed workflows. Each agent is bound to a fixed set of tools, tracked against a spend ceiling, and logged, while rules and approvals handle the decisions a model shouldn't make.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuabbp5jv95lqtyvcnb7n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuabbp5jv95lqtyvcnb7n.jpg" alt="AI agents decide what to do next, but the workflow defines the boundaries they operate within. With Unmeshed, that means durable state, approved tool access, spend limits, human approval gates, and logged calls — helping teams build agentic workflows with more control and reliability." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What it covers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workflows with durable execution, so agent state survives crashes and redeploys&lt;/li&gt;
&lt;li&gt;Agent orchestration steps that run on the same engine as your fixed steps&lt;/li&gt;
&lt;li&gt;Tool binding enforced by the runtime, so an agent can't call a tool it wasn't given&lt;/li&gt;
&lt;li&gt;Per-agent spend ceilings that throttle the agent or move it to a cheaper model near the cap&lt;/li&gt;
&lt;li&gt;A built-in decision engine for rules a model shouldn't decide on every run&lt;/li&gt;
&lt;li&gt;Approval steps that pause a run and resume it once a person signs off&lt;/li&gt;
&lt;li&gt;MCP native tools, model agnostic, and a full run history of every model call, tool call, and cost&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What it doesn't do&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It isn't an agent reasoning framework. Keep LangChain, CrewAI, or your own loop inside a worker, and Unmeshed makes each step durable, retried, and audited.&lt;/li&gt;
&lt;li&gt;It doesn't train models, and it isn't an LLM gateway for routing across providers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical difference&lt;/p&gt;

&lt;p&gt;Teams usually stitch this together from a workflow engine, an approval tool, and a cost tracker. Unmeshed puts durable state, approvals, rules, spend tracking, and run history in one system, built by the creators of Netflix Conductor.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Let The Agent Reason. Let The Workflow Set The Limits.&lt;br&gt;
Bind your agent to approved tools, cap its spend, and send risky actions to a person. See all three in one governed flow.&lt;br&gt;
&lt;a href="https://alen4j5.in01.unmeshed.com/home" rel="noopener noreferrer"&gt;Set The Guardrails&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  In a Nutshell
&lt;/h2&gt;

&lt;p&gt;Agentic orchestration isn't a choice between using agents and skipping them. It's a choice about how much freedom each step gets and what limits surround it.&lt;/p&gt;

&lt;p&gt;Start with a rule. Add a model call where the input is messy. Add an agent only where the steps can't be predicted. Then put spend ceilings, scoped tools, approval gates, step limits, and tracing around it.&lt;/p&gt;

&lt;p&gt;Gartner's cancellation forecast comes down to cost and missing controls as much as missing value. The projects most at risk are the ones with no limits around the agent.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
    </item>
    <item>
      <title>Stop Making Your APIs Wait in Line</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Wed, 21 Oct 2026 05:40:13 +0000</pubDate>
      <link>https://dev.to/unmeshed/stop-making-your-apis-wait-in-line-3m48</link>
      <guid>https://dev.to/unmeshed/stop-making-your-apis-wait-in-line-3m48</guid>
      <description>&lt;p&gt;Most slow pages aren't slow because of one bad API. They're slow because the calls were put in a line, and everyone waits for their turn.&lt;/p&gt;

&lt;p&gt;Take a product page that needs customer reviews, recently purchased items, and a "you may also like" list. Three endpoints, the same SKU ID, the same API key, and one clean response at the end. Nothing about that needs to be a queue.&lt;/p&gt;

&lt;h2&gt;
  
  
  The easy version is slow
&lt;/h2&gt;

&lt;p&gt;The obvious way to build this is one call after another. Call reviews, wait. Call recent purchases, wait. Call recommendations, wait. Merge the results. It's simple, and it works.&lt;/p&gt;

&lt;p&gt;The trouble is the waiting. Imagine the three calls take 200, 300 and 250 milliseconds. In a line, the page waits 750 milliseconds. Nothing is wrong with any single call, but the total keeps growing with every service you add.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run them together
&lt;/h2&gt;

&lt;p&gt;None of those calls needs the answer from another. Reviews don't depend on recommendations. So they can all start at once, and the page waits only for the slowest one. With the same numbers, that's about 300 milliseconds instead of 750.&lt;/p&gt;

&lt;p&gt;One rule decides whether this works: the calls have to be independent. If the second call needs data from the first, it has to wait. When they don't depend on each other, running them in parallel is free speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the rest of the job looks like
&lt;/h2&gt;

&lt;p&gt;Speed is only part of it. A good aggregation also needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The same SKU ID passed into all three calls, without copying it three times by hand&lt;/li&gt;
&lt;li&gt;The API key kept out of your code, in a secrets store&lt;/li&gt;
&lt;li&gt;A final step that merges the three responses into one shape, such as reviews, recent and youMayAlsoLike&lt;/li&gt;
&lt;li&gt;A decision about failure: if one call fails, do you return an error, or return the other two?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is easy to forget. Decide it up front, not after the first outage.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we build it in Unmeshed
&lt;/h2&gt;

&lt;p&gt;In Unmeshed, each call is an HTTP step. The SKU ID comes from the flow's input, and the key comes from a stored secret, so nothing sensitive lives in the flow itself. A small JavaScript step takes the three outputs and puts them into the final response.&lt;/p&gt;

&lt;p&gt;At first the three steps run one after another. To switch to parallel, you add a Parallel step and drag the three calls into it. No backend changes are needed, because the services don't know or care how they're being called. After that, a visual timeline shows where the time goes, so you can see which call is the slowest one holding everything back.&lt;/p&gt;

&lt;p&gt;If you're gluing several APIs together by hand today, try &lt;a href="https://unmeshed.io" rel="noopener noreferrer"&gt;Unmeshed&lt;/a&gt; on a flow like this one. It's a small example, but the pattern of defining the calls, merging the output, and running independent work in parallel carries over to much bigger ones.&lt;/p&gt;

</description>
      <category>api</category>
      <category>performance</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Register a Python Function, Run It From a Workflow, and Rerun Failed Runs</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Fri, 16 Oct 2026 06:45:24 +0000</pubDate>
      <link>https://dev.to/unmeshed/register-a-python-function-run-it-from-a-workflow-and-rerun-failed-runs-16no</link>
      <guid>https://dev.to/unmeshed/register-a-python-function-run-it-from-a-workflow-and-rerun-failed-runs-16no</guid>
      <description>&lt;p&gt;Picture the last place you ordered food at a counter. The cashier hands you a buzzer, and now you've got a choice. You can stand there staring at the kitchen like it owes you money, or you can take the buzzer to a table and scroll your phone until it goes off.&lt;/p&gt;

&lt;p&gt;Either way the order slip does the same thing. It says what you want, and the right cook in the back picks it up because that's the dish they make. Nobody walks into the kitchen hunting for a person. The name on the slip does the routing.&lt;/p&gt;

&lt;p&gt;That's how running a workflow from Python works with the Unmeshed SDK. Your function is the cook and the step name is the dish on the slip. You get the same two choices as the buzzer, wait for the result or come back later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install the SDK and connect&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Install the package from PyPI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;unmeshed-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then build a client. You need an API client ID and auth token from your Unmeshed instance, plus the URL and port where it runs. This example points at a local instance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;unmeshed.sdk.configs.client_config&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ClientConfig&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;unmeshed.sdk.unmeshed_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;UnmeshedClient&lt;/span&gt;

&lt;span class="n"&gt;client_config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClientConfig&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_client_id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-client-id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_auth_token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-auth-token&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_base_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_port&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_initial_delay_millis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_step_timeout_millis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3600000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_work_request_batch_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_response_submit_batch_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_max_threads_count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_poll_interval_millis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;UnmeshedClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client_config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first four settings say who you are and where to connect. The rest tune how the worker polls for work and how many threads it uses. Two of them matter later in this post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write the function and register it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A worker is a plain Python function. It takes a dict and returns a dict. Sync and async functions both work.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;unmeshed.sdk.apis.workers.worker&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Worker&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sample_function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello, world! sample_function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_received&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;input_dict&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_worker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nc"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;execution_method&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sample_function&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sample_function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;default&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_in_progress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The name is the slip. When a process reaches a step called &lt;code&gt;sample_function&lt;/code&gt;, the SDK calls your function with that step's input and sends the result back. Registering says which cook works which station, and &lt;code&gt;client.start()&lt;/code&gt; opens the kitchen. From then on the worker listens for tasks.&lt;/p&gt;

&lt;p&gt;If registration fails with a 403, check the client's Allowed Workers Policy in the platform. It's a permission on the credentials and needs no code change.&lt;/p&gt;

&lt;p&gt;There's also a decorator version, &lt;code&gt;@worker_function&lt;/code&gt;, that takes the same name, namespace and &lt;code&gt;max_in_progress&lt;/code&gt;. Use whichever reads better in your codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add a step with the same name&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The function won't run until a process has a step to call it. Here's a minimal process definition with one WORKER step. Import it, or build the same thing in the visual editor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"namespace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"test_process"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"API_ORCHESTRATION"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"steps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sample_function"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"WORKER"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ref"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"say_hello"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"test1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{ context.input.test1 }}"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The step's name has to match the name you registered. That's the whole link between the two. The &lt;code&gt;ref&lt;/code&gt; is the step's own ID inside the process, and the input line passes the request's &lt;code&gt;test1&lt;/code&gt; value into your function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run it and choose how to wait&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keep your worker running. In a second script, build the client the same way as in step one and run the process.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;unmeshed.sdk.common.process_request_data&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ProcessRequestData&lt;/span&gt;

&lt;span class="c1"&gt;# Stand at the counter and wait.
&lt;/span&gt;&lt;span class="n"&gt;sync_request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ProcessRequestData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;default&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test_process&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;requestId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;req001&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;correlationId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;corr001&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;100.0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;process_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_process_sync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sync_request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;process_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# Take the buzzer and carry on.
&lt;/span&gt;&lt;span class="n"&gt;async_request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ProcessRequestData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;default&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test_process&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;requestId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;req002&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;correlationId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;corr001&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;100.0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;async_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_process_async&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;async_request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;async_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;run_process_sync&lt;/code&gt; waits for the process to finish and hands back the result. &lt;code&gt;run_process_async&lt;/code&gt; starts it and returns right away, which suits long jobs. The request ID identifies this request and the correlation ID ties related runs together, so give each run its own request ID.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When an order goes wrong&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every run gets a process ID, and that's your handle for everything that follows. Fetch a run to see what happened. Steps are left out by default, so ask for them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_process_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;process_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;processId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;include_steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it failed and you've fixed the cause, send the plate back to the kitchen.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;rerun_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rerun&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;process_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;process_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;processId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rerun_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A rerun runs the process again, so any step that sends an email or moves money can do it again. Check that your steps are safe to repeat first.&lt;/p&gt;

&lt;p&gt;To stop or recover a batch, pass a list of process IDs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Cancel running orders.
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bulk_terminate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;process_ids&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;process_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;processId&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;details&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Put failed or terminated orders back on the line.
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bulk_resume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;process_ids&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;process_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;processId&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;details&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There's also &lt;code&gt;bulk_reviewed&lt;/code&gt; for marking failed or terminated runs as reviewed. And &lt;code&gt;search_process_executions&lt;/code&gt; finds runs by name, status or correlation ID before you act on them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The gotcha with max_in_progress&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the one that surprises people. The docs give a simple formula. Available tasks equal max in progress minus tasks currently in progress. A task counts as in progress from the moment the worker polls it until it submits the final result.&lt;/p&gt;

&lt;p&gt;Now look at the numbers in this post. The worker allows 100 in progress, but the thread pool has 10 threads. A synchronous function runs up to ten at a time, and the rest wait in a memory queue. An async function that blocks on something slow causes the same pileup. A cook can hold a hundred tickets and still only have ten burners.&lt;/p&gt;

&lt;p&gt;You have two ways out. Raise the thread pool or write async code that doesn't block. If your tasks finish quickly you may not need either, because a higher &lt;code&gt;max_in_progress&lt;/code&gt; can be enough. You can also run more than one worker instance. A single poll request covers all registered workers, so a low poll interval is generally safe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where this fits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unmeshed also has a built in Python step that runs a script inside the process itself. The SDK worker is for code that lives in your own application and runs wherever you start it.&lt;/p&gt;

&lt;p&gt;That's the whole loop. Name a function, register it, add a step with the same name, run the process, and read the trail when something breaks.&lt;/p&gt;

&lt;p&gt;If you've tuned a worker pool like this before, what bit you first? The thread pool or a call that quietly blocked?&lt;/p&gt;

</description>
      <category>python</category>
      <category>tutorial</category>
      <category>automation</category>
      <category>devops</category>
    </item>
    <item>
      <title>Reliable API Workflows: Retries, Secrets, Traces</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Thu, 15 Oct 2026 05:44:07 +0000</pubDate>
      <link>https://dev.to/unmeshed/reliable-api-workflows-retries-secrets-traces-4ich</link>
      <guid>https://dev.to/unmeshed/reliable-api-workflows-retries-secrets-traces-4ich</guid>
      <description>&lt;p&gt;Calling an API takes about five lines of code. It works on your laptop, you feel good, and you ship it.&lt;/p&gt;

&lt;p&gt;Then production shows up. The other service goes down for a minute. Someone asks where the API key is stored. A partner emails to say you're sending too many requests. And at 2 AM something fails, and nobody can tell which call did it.&lt;/p&gt;

&lt;p&gt;None of that was in the five lines.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same work, again and again
&lt;/h2&gt;

&lt;p&gt;Retries, secrets, rate limits, routing, logging. Every new integration needs all of it, so teams write it again each time. The versions never quite match, because each one was written by a different person on a different deadline. After a while, nobody is sure how any of them behave.&lt;/p&gt;

&lt;p&gt;It gets worse when calls are chained. Picture a flow that pulls market data, validates a trade, executes it, and hands off to settlement. Every stage is a separate service, and when one fails halfway, the earlier steps have already happened. You can't just run the whole thing again. You need to know exactly where it stopped.&lt;/p&gt;

&lt;p&gt;A commodity trading firm in one of our case studies faced this while keeping a real-time dashboard, trade validation and high-value transaction tracking stable. Stitching APIs together by hand, writing custom retry logic and hunting through logs was taking too much of the team's time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when the flow is defined once
&lt;/h2&gt;

&lt;p&gt;The fix is to stop burying this logic in code. You describe the flow as steps, and each step makes one call. A later step can use the output of an earlier one, so data moves along without extra glue. A retry becomes a setting on the step, with a delay you pick, not a loop someone has to write and maintain.&lt;/p&gt;

&lt;p&gt;The second half is the record. When every run is saved step by step, you can see who started it, what went in, what each call returned, and where it broke. You can replay it, too, instead of guessing. That means the operations team can debug without waiting for the developer who built the integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five questions to ask before you choose a tool
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Can you see a full trace of every run, with inputs and outputs?&lt;/li&gt;
&lt;li&gt;Can you replay a failed run without rebuilding it by hand?&lt;/li&gt;
&lt;li&gt;Are secrets and logins handled in one place, not copied into every service?&lt;/li&gt;
&lt;li&gt;Can you set rate limits and routing rules without writing your own middleware?&lt;/li&gt;
&lt;li&gt;Can the flow be exported, reviewed and versioned like normal code?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last one matters more than it seems. If a flow lives only in a visual editor, it's hard to review and hard to roll back. Exporting it as JSON lets it go through the same CI/CD process as everything else you ship.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://unmeshed.io" rel="noopener noreferrer"&gt;Unmeshed&lt;/a&gt; handles API orchestration this way. It works with REST and SOAP endpoints, supports Okta, API secrets and custom headers, and uses role-based access so developers, operators and approvers each get the permissions that fit their job.&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>devops</category>
      <category>automation</category>
    </item>
    <item>
      <title>What Is AI Orchestration? 4 Types That Solve Very Different Problems</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Wed, 14 Oct 2026 06:26:50 +0000</pubDate>
      <link>https://dev.to/unmeshed/what-is-ai-orchestration-4-types-that-solve-very-different-problems-30o4</link>
      <guid>https://dev.to/unmeshed/what-is-ai-orchestration-4-types-that-solve-very-different-problems-30o4</guid>
      <description>&lt;h2&gt;
  
  
  TLDR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AI orchestration means four different jobs sharing one name: pipeline, model and LLM, multi-agent, and AI workflow coordination.&lt;/li&gt;
&lt;li&gt;The definition is one sentence about coordinating models, agents, pipelines, and business logic with context and a record.&lt;/li&gt;
&lt;li&gt;Gartner expects 40% of enterprise apps to include task-specific agents by the end of 2026, and one third of agentic implementations to combine different skills by 2027. That makes coordination unavoidable.&lt;/li&gt;
&lt;li&gt;Every type follows the same loop. The last two steps, recovering from failure and logging, are the ones teams skip until production.&lt;/li&gt;
&lt;li&gt;Unmeshed covers AI workflow coordination only. It doesn't cover training pipelines, model routing, or agent reasoning.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI orchestration is one of those terms everyone uses, and few people define it the same way. Search it, and you'll find pages about training pipelines, LLM routing, agent teams, and business workflows. All four call themselves AI orchestration.&lt;/p&gt;

&lt;p&gt;That gap matters more this year than it did last year. Gartner expects 40% of enterprise applications to include task-specific AI agents by the end of 2026, up from less than 5% in 2025. More agents mean more things to coordinate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fytrstcoidte8x5nlgdyv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fytrstcoidte8x5nlgdyv.png" alt="AI orchestration growth chart showing enterprise applications using task-specific AI agents increasing from under 5% in 2025 to 40% by the end of 2026, highlighting the need for AI orchestration, multi-agent coordination, and enterprise AI workflow management." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AI orchestration
&lt;/h2&gt;

&lt;p&gt;So this guide defines AI orchestration once, then separates the four jobs hiding under the name. You'll see how each one works, what an AI orchestration platform needs to include, and how to pick the one that matches your problem.&lt;/p&gt;

&lt;p&gt;We'll also say plainly where Unmeshed fits. It covers one of the four well, and it doesn't pretend to cover the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What Is AI Orchestration?
&lt;/h2&gt;

&lt;p&gt;AI orchestration is the coordination of models, agents, data pipelines, and business logic so that AI steps run in the right order, with the right context, and with a record of what happened.&lt;/p&gt;

&lt;p&gt;That definition is broad on purpose, because the term is. Four different groups of engineers use it for four different jobs, and the next sections pull them apart.&lt;/p&gt;

&lt;p&gt;It helps to say what orchestration is not. A model is not orchestration. A single prompt chain isn't either. And an agent framework handles how one agent reasons, which is only one piece of the coordination problem.&lt;/p&gt;

&lt;p&gt;Orchestration decides the things around the model call:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What gets called, and in what order&lt;/li&gt;
&lt;li&gt;What context each step receives&lt;/li&gt;
&lt;li&gt;What happens when a step fails halfway&lt;/li&gt;
&lt;li&gt;Who has to approve what before the run continues&lt;/li&gt;
&lt;li&gt;What gets recorded so you can explain the result later&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Why Does AI Orchestration Matter Now?
&lt;/h2&gt;

&lt;p&gt;AI orchestration matters because organizations are moving beyond standalone AI chatbots to multi-agent systems that need to coordinate complex, end-to-end business workflows.&lt;/p&gt;

&lt;p&gt;In August 2025, Gartner predicted that 40% of enterprise applications will include task-specific AI agents by the end of 2026. In the same release, it expects one third of agentic AI implementations to combine agents with different skills by 2027.&lt;/p&gt;

&lt;p&gt;That second number is the real driver. Once agents have different skills, someone has to decide which one acts, what it sees, and what happens when it's wrong.&lt;/p&gt;

&lt;p&gt;Without that layer, teams run into the same problems in the same order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent sprawl: Every team ships its own agent with its own retry logic and its own idea of state.&lt;/li&gt;
&lt;li&gt;Duplicate spend: Two agents call the same model for the same answer, and nobody sees it.&lt;/li&gt;
&lt;li&gt;No shared state: A step fails, and the run starts over from zero.&lt;/li&gt;
&lt;li&gt;No approval path: A risky action goes through because nothing paused it.&lt;/li&gt;
&lt;li&gt;No audit trail: Someone asks why the system did that, and nobody can say.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. What Are the Four Types of AI Orchestration?
&lt;/h2&gt;

&lt;p&gt;AI orchestration coordinates multiple AI models, data pipelines, and autonomous agents so they can work together as a unified system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw8a7r4dz25tknqwn5cvz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw8a7r4dz25tknqwn5cvz.png" alt="AI orchestration architecture diagram showing four orchestration categories including AI pipeline orchestration, model and LLM orchestration, multi-agent orchestration, and AI workflow orchestration." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In enterprise and multi-agent architectures, AI orchestration typically follows four primary patterns:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;What Gets Coordinated&lt;/th&gt;
&lt;th&gt;Typical Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI pipeline orchestration&lt;/td&gt;
&lt;td&gt;Training, evaluation, and deployment jobs&lt;/td&gt;
&lt;td&gt;Airflow, Kubeflow, Dagster, Prefect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model and LLM orchestration&lt;/td&gt;
&lt;td&gt;Calls, routing, and chaining across models&lt;/td&gt;
&lt;td&gt;LLM gateways, chaining libraries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-agent orchestration&lt;/td&gt;
&lt;td&gt;Which agent acts next, with what context&lt;/td&gt;
&lt;td&gt;Microsoft Agent Framework, CrewAI, LangGraph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI workflow coordination&lt;/td&gt;
&lt;td&gt;AI steps inside business processes, next to APIs, rules, and people&lt;/td&gt;
&lt;td&gt;Workflow engines such as Unmeshed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. How Does AI Pipeline Orchestration Work?
&lt;/h2&gt;

&lt;p&gt;AI pipeline orchestration coordinates data flows, tools, machine learning models, and APIs to run together as a single automated workflow.&lt;/p&gt;

&lt;p&gt;Apache Airflow describes itself as an open-source platform for developing, scheduling, and monitoring workflows, including machine learning and model training. Kubeflow Pipelines is built for ML workflows that run as containers on Kubernetes, where each component execution maps to one container.&lt;/p&gt;

&lt;p&gt;This type needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scheduling, backfills, and reruns of only the failed tasks&lt;/li&gt;
&lt;li&gt;Tracking for artifacts and metadata between steps&lt;/li&gt;
&lt;li&gt;Compute and container management at training scale&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You probably mean this one if your team trains or tunes models and the work is batch, scheduled, and owned by data scientists.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. What Is Model and LLM Orchestration?
&lt;/h2&gt;

&lt;p&gt;Model and LLM orchestration is the control layer that manages and routes interactions between large language models, external data sources, APIs, and tools.&lt;/p&gt;

&lt;p&gt;This type coordinates calls across models. It routes a request to a cheaper model, falls back when a provider goes down, chains prompts together, and caches repeat answers.&lt;/p&gt;

&lt;p&gt;Most teams handle it in an LLM gateway, a single layer that every model call passes through.&lt;/p&gt;

&lt;p&gt;This type needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Routing and fallback rules across providers&lt;/li&gt;
&lt;li&gt;Cost and rate limit controls&lt;/li&gt;
&lt;li&gt;Logging of every prompt and response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You probably mean this one if your main worry is which model gets which request, and what it costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. How Does Multi-Agent Orchestration Work?
&lt;/h2&gt;

&lt;p&gt;Multi-agent orchestration coordinates multiple specialized AI agents so they can work together as a single, goal-driven system.&lt;/p&gt;

&lt;p&gt;It decides which agent acts next and what it sees when it does. Microsoft Agent Framework, for example, supports sequential, concurrent, handoff, and group collaboration patterns in one SDK.&lt;/p&gt;

&lt;p&gt;If you're weighing options, our guide to agent frameworks compares six of them.&lt;/p&gt;

&lt;p&gt;This type needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear handoff rules between agents&lt;/li&gt;
&lt;li&gt;Shared context that doesn't get lost between steps&lt;/li&gt;
&lt;li&gt;Limits on loops and spend, so one agent can't run away&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You probably mean this one if you're building a team of agents that split a task between them.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. What Is AI Workflow Coordination?
&lt;/h2&gt;

&lt;p&gt;AI workflow coordination, also called AI workflow orchestration, connects AI models, data sources, software tools, and human reviews into a structured, repeatable end-to-end workflow.&lt;/p&gt;

&lt;p&gt;It puts AI steps inside a business process, next to APIs, rules, and people. An AI step extracts data from a document, a rules step decides the clear cases, a person approves the exceptions, and the whole run is logged.&lt;/p&gt;

&lt;p&gt;The model is one step among many, and rarely the hardest one. The hard part is everything around it.&lt;/p&gt;

&lt;p&gt;This type needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Durable state, so a run survives crashes and long waits&lt;/li&gt;
&lt;li&gt;Human approval steps that pause and resume cleanly&lt;/li&gt;
&lt;li&gt;A rules layer for decisions that shouldn't be left to a model&lt;/li&gt;
&lt;li&gt;An audit trail for every input, output, and decision&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You probably mean this one if AI is one step in a process your business already runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. How Does Orchestrating AI Systems Work Step by Step?
&lt;/h2&gt;

&lt;p&gt;AI orchestration coordinates AI models, tools, data, and agents to turn an individual AI capability into an end-to-end automated workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftmaqzkjfolywhz3jvntv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftmaqzkjfolywhz3jvntv.png" alt="AI orchestration workflow diagram illustrating trigger, context gathering, model execution, decisioning, human approval, durable execution, observability, and workflow recovery in enterprise AI orchestration platforms." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whatever the type, orchestrating AI systems follows the same basic loop. The tools change, but the steps don't.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trigger:&lt;/strong&gt; A webhook, a schedule, a queue message, or a person starts the run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gather context:&lt;/strong&gt; The workflow pulls the data each step needs, so no step guesses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call the model or tool:&lt;/strong&gt; An LLM, an agent, or an API does the work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide what happens next:&lt;/strong&gt; A rule or a model output picks the next step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route to a person when needed:&lt;/strong&gt; Low confidence or high stakes pauses the run for approval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recover from failure:&lt;/strong&gt; Retries, timeouts, and saved state let the run resume instead of restart. This is what durable execution means in practice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log everything:&lt;/strong&gt; Every input, output, and decision stays searchable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The last two steps are the ones teams skip in a prototype and regret in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. What Are the Core Components of an AI Orchestration Platform?
&lt;/h2&gt;

&lt;p&gt;AI orchestration platforms provide seven core capabilities for running reliable AI workflows: workflow execution, model and tool connectivity, state and memory, rules and decisioning, human approval, observability, and governance. Each capability addresses a specific requirement for running AI systems in production.&lt;/p&gt;

&lt;p&gt;A good platform covers seven things. The table shows what each one does and what goes wrong when it's missing.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;th&gt;What Breaks Without It&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Workflow engine&lt;/td&gt;
&lt;td&gt;Runs steps in order, with branching and parallel work&lt;/td&gt;
&lt;td&gt;Logic ends up scattered across scripts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model and tool connectors&lt;/td&gt;
&lt;td&gt;Calls LLMs, APIs, databases, and SaaS tools&lt;/td&gt;
&lt;td&gt;Every integration becomes custom glue code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;State and memory&lt;/td&gt;
&lt;td&gt;Keeps context across steps and across crashes&lt;/td&gt;
&lt;td&gt;A failure restarts the whole run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rules and decisioning&lt;/td&gt;
&lt;td&gt;Handles decisions that must be exact and repeatable&lt;/td&gt;
&lt;td&gt;A model makes calls it shouldn't&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human approval&lt;/td&gt;
&lt;td&gt;Pauses a run for sign-off, then resumes it&lt;/td&gt;
&lt;td&gt;Risky actions go through unchecked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observability&lt;/td&gt;
&lt;td&gt;Records every run, step, and payload&lt;/td&gt;
&lt;td&gt;Failures can't be debugged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Governance&lt;/td&gt;
&lt;td&gt;Enforces access, policy, and audit rules&lt;/td&gt;
&lt;td&gt;Nobody can prove what the system did&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Together, these form the orchestration layer of your agent infrastructure.&lt;/p&gt;

&lt;p&gt;Two of the seven get skipped most often. Observability tells you what happened, and LLM observability covers that in depth. Agent evals tell you whether the result was any good.&lt;/p&gt;

&lt;p&gt;Governance ties both to policy, which is the argument behind governed AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. How Is AI Orchestration Different From Workflow Orchestration and Agent Frameworks?
&lt;/h2&gt;

&lt;p&gt;AI orchestration is the control layer that manages AI models, workflows, tools, and enterprise policies across an AI system. Workflow orchestration manages deterministic, step-by-step processes, while agent frameworks manage the reasoning and state of individual AI agents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fofc1h6ebb5s1uhpmepmk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fofc1h6ebb5s1uhpmepmk.png" alt="Enterprise AI architecture diagram showing agent frameworks, LLM gateways, workflow orchestration engines, and AI orchestration platforms working together to power production AI systems." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The terms overlap, and that's where most mix-ups start. Each approach has a main job and a point where it stops.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Main Job&lt;/th&gt;
&lt;th&gt;Where It Stops&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI orchestration&lt;/td&gt;
&lt;td&gt;Coordinates models, agents, pipelines, and processes as a whole&lt;/td&gt;
&lt;td&gt;It's an umbrella, so it needs a concrete tool underneath&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workflow orchestration&lt;/td&gt;
&lt;td&gt;Runs durable, scheduled, multi-step processes&lt;/td&gt;
&lt;td&gt;Knows nothing about models unless you connect them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API orchestration&lt;/td&gt;
&lt;td&gt;Chains and fans out calls across services&lt;/td&gt;
&lt;td&gt;Covers the calls, not the reasoning or approvals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent frameworks&lt;/td&gt;
&lt;td&gt;Handles agent reasoning and handoffs&lt;/td&gt;
&lt;td&gt;Usually lacks built-in durability, approvals, and audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In practice, production setups combine them. A workflow engine runs the process, an agent framework handles the reasoning, and a gateway handles model access.&lt;/p&gt;

&lt;p&gt;For a closer look at the engine layer, see our roundup of workflow orchestration tools. For the service layer, start with API orchestration.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. When Do You Need an Orchestration Layer, and When Don't You?
&lt;/h2&gt;

&lt;p&gt;An orchestration layer is needed when multiple autonomous systems, APIs, or AI agents must work together to complete an end-to-end process. It is usually unnecessary for a single, isolated task or tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzguqur1ijq5u6uxg0030.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzguqur1ijq5u6uxg0030.png" alt="AI orchestration decision framework showing when enterprise teams need workflow orchestration, approvals, audit trails, multi-system coordination, and governed AI workflows versus simple single-prompt AI applications." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  You need one when
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A single run touches more than one model, agent, or system&lt;/li&gt;
&lt;li&gt;A step can fail partway and cost real money to repeat&lt;/li&gt;
&lt;li&gt;A person has to approve something before the run continues&lt;/li&gt;
&lt;li&gt;You need to prove later what the system did and why&lt;/li&gt;
&lt;li&gt;A run lasts longer than one request, such as hours or days&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  You don't need one when
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It's one prompt, one model, and one response&lt;/li&gt;
&lt;li&gt;Nothing the model does has side effects&lt;/li&gt;
&lt;li&gt;There's no approval or audit requirement&lt;/li&gt;
&lt;li&gt;It's a prototype only you will use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're in the second list, skip the layer. Adding it too early costs more than it saves.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. How Do You Choose an AI Orchestration Platform?
&lt;/h2&gt;

&lt;p&gt;Choosing an AI orchestration platform depends on your team's technical skills, workflow complexity, integration requirements, and governance needs.&lt;/p&gt;

&lt;p&gt;Start by naming which of the four types you actually have. That one decision removes most of the options.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Training and deploying models: Pick a pipeline tool.&lt;/li&gt;
&lt;li&gt;Routing across models: Pick a gateway.&lt;/li&gt;
&lt;li&gt;Teams of agents: Pick an agent framework.&lt;/li&gt;
&lt;li&gt;AI inside business processes: Pick a workflow engine that handles state, approvals, and audit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then compare candidates on the criteria below.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;What To Ask&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Durability&lt;/td&gt;
&lt;td&gt;Does a run survive a crash or a redeploy, and resume where it stopped?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Languages&lt;/td&gt;
&lt;td&gt;Can your team write steps in the language it already uses?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Governance&lt;/td&gt;
&lt;td&gt;Are approvals, access control, and audit logs built in or bolted on?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrations&lt;/td&gt;
&lt;td&gt;Does it connect to the APIs, databases, and models you run today?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost shape&lt;/td&gt;
&lt;td&gt;Does pricing grow with actions or runs, or stay predictable?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observability&lt;/td&gt;
&lt;td&gt;Can you inspect and replay any run without extra tooling?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  13. How Does Unmeshed Handle AI Orchestration?
&lt;/h2&gt;

&lt;p&gt;Unmeshed covers AI workflow coordination, the fourth type. It does not cover the other three, and you should know that before you compare tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7opfk5jmg9xctolls0p2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7opfk5jmg9xctolls0p2.png" alt="AI workflow orchestration diagram showing AI data extraction, business rules engine decisioning, human-in-the-loop approval workflow, audit logging, governed AI, and enterprise AI orchestration for production business processes." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What it covers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Workflows with durable execution, so state survives crashes and redeploys&lt;/li&gt;
&lt;li&gt;Agentic AI steps that run on the same engine as your other steps&lt;/li&gt;
&lt;li&gt;Human-in-the-loop approvals that pause a run and resume it automatically&lt;/li&gt;
&lt;li&gt;A built-in decision engine for rules that must be exact&lt;/li&gt;
&lt;li&gt;Hosted functions in Python, JS/TS, or Go, plus integrations with over 100 apps&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What it doesn't do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It doesn't run ML training or serving pipelines&lt;/li&gt;
&lt;li&gt;It isn't an LLM gateway for routing across model providers&lt;/li&gt;
&lt;li&gt;It isn't an agent reasoning framework, so it sits underneath one instead of replacing it&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The practical difference
&lt;/h3&gt;

&lt;p&gt;Most teams assemble this layer from three tools: a workflow engine, an approval tool, and a logging stack. Unmeshed puts durable state, approvals, rules, and a full run history in one system, built by the creators of Netflix Conductor.&lt;/p&gt;

&lt;p&gt;That also makes governance easier. Every step is inspectable, and the same engine backs AI agent governance and its enterprise security controls.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  AI Drafts. Rules Decide. A Person Approves.
&lt;/h2&gt;

&lt;p&gt;One workflow, no stitching three tools together. See an AI step, a rules check, and a human sign off run as a single flow.&lt;br&gt;
&lt;a href="https://unmeshed.io/signup?utm_source=blog&amp;amp;utm_medium=organic&amp;amp;utm_campaign=what_is_ai_orchestration&amp;amp;utm_content=accent_cta" rel="noopener noreferrer"&gt;&lt;strong&gt;Wire It Up&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  In a Nutshell
&lt;/h2&gt;

&lt;p&gt;The phrase covers four jobs, and buying for the wrong one is the most common mistake. Name your type first, then pick the tool that matches it.&lt;/p&gt;

&lt;p&gt;If you're building pipelines or routing models, a pipeline tool or a gateway fits. If you're building agent teams, start with a framework. If AI is one step in a process your business already runs, you need durable state, approvals, and an audit trail around it, and that's the layer a workflow engine provides.&lt;/p&gt;

&lt;p&gt;Most real systems end up using more than one of the four. That's fine, as long as you know which job each tool does.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>architecture</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>AutoSys Migration, One Job at a Time</title>
      <dc:creator>The Unmeshed Team</dc:creator>
      <pubDate>Tue, 13 Oct 2026 05:58:23 +0000</pubDate>
      <link>https://dev.to/unmeshed/autosys-migration-one-job-at-a-time-3k41</link>
      <guid>https://dev.to/unmeshed/autosys-migration-one-job-at-a-time-3k41</guid>
      <description>&lt;p&gt;Nobody enjoys a scheduler migration. The old system has been running for years, nobody remembers why half the jobs exist, and everyone is a little scared to touch the ones that work.&lt;/p&gt;

&lt;p&gt;That fear is fair. AutoSys, originally from CA Technologies and now owned by Broadcom, has run critical work in banks, telecoms and insurance companies for a long time. But it was designed before APIs, containers and cloud setups became normal. Writing and maintaining JIL scripts takes practice, so new team members are slow to get comfortable. And plugging AutoSys into a modern stack, with real-time APIs or event-driven workflows, usually means workarounds.&lt;/p&gt;

&lt;p&gt;So the question isn't really "should we move?" It's "how do we move without breaking things?" The answer most teams land on is the same: go slowly, and go one job at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  A calmer way to migrate
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;List your jobs first.&lt;/strong&gt; Before you build anything, write down what each job runs, when it runs, and what it depends on. Sort them by how many other jobs rely on them. Jobs that stand alone are your easy wins. Jobs with long chains behind them need more care.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start small.&lt;/strong&gt; Pick one low-risk job with a clear result, like a nightly report, and rebuild it in the new system first. If something goes wrong, nobody's morning is ruined, and you learn how the new setup behaves before the stakes get higher.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run old and new side by side.&lt;/strong&gt; Let both versions run for a while and compare what they produce. This is where you catch the surprises, like a job that depends on something nobody mentioned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Move dependent jobs together.&lt;/strong&gt; If job B waits for job A, move them as a pair. Splitting a chain across two schedulers is how you end up with jobs that fire at the wrong time and nobody can say why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Switch off the old job last.&lt;/strong&gt; Only retire the AutoSys version after the new one has matched it cleanly for a good stretch of runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part nobody writes down
&lt;/h2&gt;

&lt;p&gt;The job definitions are the easy part. They're written down, so you can read them. What's harder is everything around them: a script that quietly retries when it fails, a downstream team that expects a file to land before 6 AM, an alert that goes to one person's inbox and nobody else's.&lt;/p&gt;

&lt;p&gt;Those habits don't show up in any export. The best way to find them is to talk to the people who get paged when a job breaks, not just the people who built it. Ask them what they check first on a bad morning. Their answers usually point straight at the behavior you need to carry over.&lt;/p&gt;

&lt;h2&gt;
  
  
  How long does it take?
&lt;/h2&gt;

&lt;p&gt;It depends on how many jobs you have and how tangled their dependencies are. Unmeshed suggests a phased approach like this one and says most organizations complete the move in about 6 to 12 weeks. Treat that as a rough guide, not a promise.&lt;/p&gt;

&lt;p&gt;If you're weighing a move, &lt;a href="https://unmeshed.io" rel="noopener noreferrer"&gt;Unmeshed&lt;/a&gt; runs scheduled jobs with Bash and Python steps and keeps every run visible from start to finish, so you can see what each job did while you compare old and new.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>automation</category>
      <category>backend</category>
      <category>webpack</category>
    </item>
  </channel>
</rss>
