BuildNot yet confirmed elsewhere1 publisher3 min readPublished
The retry sends the email twice: what agent framework comparisons leave out
Durable execution restores orchestration state. It cannot untake a payment, a send, or a ticket, and no ranked feature table for AutoGen, CrewAI, LangGraph or Flowise closes that gap.
The Engineer · Build desk

What happened
- A half-finished agent run is restarted and the customer gets a second onboarding email, which is not a bug in any framework.
- Durable execution rebuilds orchestration state, but it does not make an external payment, email or ticket API transactional.
- Three of the four products compared are code-side orchestration frameworks; Flowise is a visual builder and runtime spanning Assistant, Chatflow and Agentflow.
Why it matters
- constraint No selection decision among the four shortens the idempotency work; the same four items sit outside whichever runtime you buy.
- exposure The duplicate lands on the recipient of the mail, payment or ticket, and the framework vendor has no reach into the system that accepted it.
- decision Evaluation should be scored on what a crashed run leaves behind as evidence, which is a different question from the one feature tables answer.
- cost Legible post-crash state is paid for in graph and schema design before launch, by the team that would rather ship the prototype.
The mechanism worth arguing about sits in one line of the pre-ship checklist: derive the idempotency key from the business fact, not from a run ID that changes on retry [4]. A run ID identifies the attempt. The business fact identifies the thing you promised to do exactly once. If the key moves when the process restarts, the external system cannot recognise the second call as the same intent, and durable execution will faithfully rebuild the orchestration state that led up to a send it has no power to cancel [7].
The rest of the checklist follows from that. Persist planned, in-progress, succeeded and failed as explicit status, separate from the model's opinion about what happened [4]. Before retrying, check both local state and the external system, because the external system is the source of truth about whether an email left [4]. Where the action cannot be made idempotent at the boundary, put an outbox, a transaction log, or a compensating process behind it [4].
Not one of those four items is supplied by any of the four products. The comparison the piece builds ends with a residual column that is nearly identical across all four rows, and it is entirely about side effects and state ownership [1]. So framework choice subtracts zero obligations [18]. What it changes is the quality of the evidence you hold while you discharge them: LangGraph's explicit state tells you which node the run died in, while an unbounded AutoGen group chat tells you that a conversation happened [2]. LangGraph buys that legibility with graph and schema design work up front [13]; AutoGen only gives it to you if you imposed termination rules, bounded rounds and message schemas before the run [10].
The Flowise reading needs care in both directions. A Human Input node or a required tool approval pauses an Agentflow execution and writes a checkpoint, and the Agentflow V2 docs say the workflow can resume from it even after an application restart [15]. That makes the flat claim that Flowise only supports in-run state wrong [16], and it is a real difference from `$flow.state`, which is shared inside one execution and destroyed when that execution ends [14]. It is still a documented restart behaviour rather than a guarantee covering every recovery design you might need [16].
CrewAI's failure mode is quieter and worse. Roles, goals, tasks and processes read well to business stakeholders, which has genuine value, but a role description is not a transaction boundary and not a security control [11]. Three agents with different backstories, the same model, the same context and the same evidence are not three independent checks; the reviewer will confirm the writer's mistake [12]. Teams who count that reviewer as a safety gate in front of a payment call have bought a second opinion from the same opinion.
Which is the actual dividing line. Orchestration state lives inside the framework. Business state does not [3]. Every ranked list of these four products measures the first and stays silent about the second, and it is the second one that owes the customer an apology for the duplicate onboarding email [5].
What to watch
- Whether any of the four frameworks documents idempotency guidance at the tool-call boundary rather than leaving it in application code.
- Whether Flowise's checkpoint resume is tested against a tool call that was already dispatched when the application restarted.
- Whether comparison articles start splitting code-side frameworks from visual builder platforms instead of ranking them together.
Clarity's read
What the record supports and how the coverage leans. The claims behind it follow.
Reality
- Evidence42
- Adoption
- Insufficient
- Hype gap+12
- Incentives45
- Confidence44
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
In the author's alternative comparison of what you design first, what you see after a crash and what is still on you, the last column is nearly identical across all four rows and is entirely about side effects and state ownership.
- [2]
The framework does not determine whether you recover correctly, only what evidence you hold while you try: LangGraph's explicit state tells you which node it died in, an unbounded AutoGen group chat tells you a conversation happened.
- [3]
Orchestration state and business state are different things, and only one of them lives inside your framework.
- [4]
Before shipping anything that touches money, mail, tickets or permissions: generate a business idempotency key derived from the business fact rather than a run ID that changes on retry; persist planned, in-progress, succeeded and failed as explicit status separate from the model's opinion; check both local state and the external system before retrying, since the external system is the source of truth about whether an email left; and use an outbox, transaction log or compensating process where the action cannot be made idempotent.
- [5]
An agent run dies halfway through, you restart it, and the customer receives a second onboarding email.
- [6]
AutoGen, CrewAI, LangGraph and Flowise will all allow a duplicate send, because none of them can reach into your mail provider and pull the message back.
- [7]
Durable execution restores orchestration state; it does not make an external payment, email or ticket API transactional.
- [8]
AutoGen, CrewAI and LangGraph are code-side orchestration frameworks; Flowise is a visual builder and runtime platform spanning Assistant, Chatflow and Agentflow, so putting all four in one ranked list is convenient and wrong.
- [9]
Feature overlap is real: CrewAI Flows and Flowise Agentflow both support state and branching, LangGraph can orchestrate multi-agent patterns, and AutoGen ships higher-level agent APIs on top of its core runtime.
- [10]
In AutoGen, agents exchange messages while a runtime handles delivery, lifecycle and execution; a run is nearly impossible to reconstruct afterwards unless termination rules, bounded rounds and message schemas were imposed up front.
- [11]
CrewAI is organised around roles, goals, tasks, crews and processes, which business stakeholders can read, but a convincing role description is not a transaction boundary and not a security control.
- [12]
Three agents with different backstories, the same model, the same context and the same evidence are not three independent checks, and the reviewer will happily confirm the writer's mistake.
- [13]
In LangGraph, nodes read and update explicit state and edges decide where execution goes next; persistence, durable execution and interrupts make pause, inspect, modify and resume part of the architecture, paid for in graph and schema design work.
- [14]
Flowise's $flow.state is a temporary key-value store shared during one execution and destroyed when that execution ends.
- [15]
A Human Input node or a required tool approval pauses an Agentflow execution and saves a checkpoint, and the Agentflow V2 docs state the workflow can resume from that checkpoint even after an application restart.
- [16]
The claim that Flowise only supports in-run state is therefore inaccurate, but a documented restart behaviour is a capability rather than a guarantee for every recovery design you might need.
- [17]
The four products span two product categories, not one: three code-side orchestration frameworks plus one visual builder and runtime platform.
- [18]
Choosing among the four frameworks removes none of the four pre-ship idempotency obligations, since the residual work is nearly identical across all four rows.
- [19]
That gap is missing from almost every best-agent-framework comparison, and according to the author it is the gap that decides whether a system survives contact with production.
Sources
1 independent publisher whose own reporting we read for this story.
- dev.toYour Agent Framework Can't Un-Send That Email
1 article · August 23, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.