Quick verdict
Pick by who should drive the loop and what a lost mid-flight run costs you:
- LangGraph models the agent as an explicit graph: nodes, edges, typed state, per-node checkpointing, and first-class
interrupt()for human-in-the-loop. Best for Python teams shipping long-running, resumable, auditable workflows where a corrupted run means money, compliance risk, or a support fire. Honest limit: steeper first prototype, deepest observability sits behind LangSmith, and the TypeScript port trails Python maturity. - Strands Agents models the agent as model + tools + objective, with hooks and MCP, optimized for speed-to-build and AWS inheritance via Bedrock and AgentCore. Best for AWS-committed teams that trust the model to plan and want IAM/VPC/residency controls they already operate. Honest limit: less native per-step durable graph semantics; if every branch must be predefined and crash-resumed from exact state, you will miss LangGraph's checkpoint story.
Cipher's cutover rule: price the failure. If a half-finished run restarting from zero is unacceptable, draw the graph (LangGraph). If iteration speed inside an AWS boundary matters more than explicit topology, take the model-driven loop (Strands). Many serious shops end up with both: Strands or a thin front-door agent for conversational intake, LangGraph for the money and approval paths.
Broader field context: four-way framework comparison. OpenAI-native handoffs vs LangGraph: Agents SDK vs LangGraph. Mastra vs Strands for the TypeScript/AWS fork: Mastra vs Strands.
Last updated: August 2026. Re-check LangGraph and Strands docs for current APIs.
Framework matrix
| LangGraph | Strands Agents | |
|---|---|---|
| Core question | What shape does this computation have? | Can the model plan with these tools and this objective? |
| Mental model | Explicit graph: nodes, edges, typed shared state | Model-driven loop with hooks and MCP |
| Primary language | Python-first (TS port trails) | Python and TypeScript |
| Durable execution | Per-node checkpointing, durability modes, crash-resume | Thin framework; durability usually via AgentCore Runtime or your infra |
| Human-in-the-loop | interrupt() pause and resume from exact state |
Hooks / tool gates; multi-day resume is not the native graph story |
| Cloud gravity | Model-agnostic via LangChain integrations | Strongest on AWS + Bedrock + AgentCore |
| Observability | Deepest via LangSmith (paid beyond free tier) | OpenTelemetry-oriented tracing; AWS-native paths available |
| Best when | High failure cost, cyclic/branching logic, audit trails | Fast AWS-native agents, MCP-first, minimal scaffolding |
Where LangGraph wins
LangGraph's bet is explicitness. You author the control flow; the model fills the nodes. Checkpointing means a crash, deploy, or human approval resumes where the run stopped instead of restarting the whole job. That is why production names cited across third-party comparisons (Klarna, Uber, LinkedIn — treat as directional, verify) cluster on long-running, cannot-lose-state workflows.
The cost is upfront structure and often a LangSmith bill for the observability experience teams expect in production. If your problem is a support triage bot with three handoffs, LangGraph is usually heavier than you need — see the OpenAI Agents SDK comparison linked above.
Where Strands wins
Strands' bet is the opposite posture: the model drives; you add structure where you must (hooks, multi-agent patterns, tool policies). That ships faster and stays thin. On AWS, the real differentiator is inheritance — identity, network, and residency controls you already run — especially when paired with AgentCore rather than treated as a competitor to it.
Token economics are the quiet trade-off. A model-driven loop re-processes prompt and tool history each turn, so convenience shows up as inference cost and a path you cannot fully predict in advance. LangGraph spends engineer time up front and buys steadier, more inspectable runs. Cipher budgets both when we scope regulated builds.
The cutover in practice
| Signal | LangGraph | Strands |
|---|---|---|
| Lost mid-flight run is unacceptable | Default | Only with strong runtime/persistence design |
| Multi-day human approval gates | Native interrupt() |
Build around runtime/memory services |
| AWS-first, Bedrock, existing IAM/VPC | Portable, but you wire controls | Strongest inheritance |
| Need a prototype this week inside AWS | Slower first cut | Default |
| Python team, complex branching | Default | Possible; philosophy fights heavy graphs |
FAQ
Is Strands "worse" than LangGraph for production? No. It is optimized for a different failure profile and cloud story. Production on Strands usually means taking runtime, identity, and observability seriously on AWS — not pretending a thin SDK is a full durable workflow engine.
Can LangGraph run on AWS with Bedrock? Yes. LangGraph is model-agnostic and AgentCore documents framework-agnostic hosting. You keep LangGraph's graph semantics and still place execution inside AWS controls.
Do I have to choose between Strands and AgentCore? No. Strands is the framework; AgentCore is runtime and ops. See Bedrock Agents vs AgentCore and Strands.
What about Mastra? Mastra is the TypeScript batteries-included path. If your constraint is language home rather than graph-vs-loop philosophy, start with Mastra vs Strands.
Who helps AU/SG teams pick and ship either? Cipher Projects designs and builds production agent systems with explicit failure-cost cutovers, eval harnesses, and residency controls under your accounts.
Conclusion
LangGraph vs Strands is a control-spectrum decision: you draw the graph, or the model drives the loop. Price the cost of a lost run, then pick. Add AWS inheritance and language home as tie-breakers, and keep runtime/sandbox as a separate layer — not an afterthought bolted onto whichever README you liked first.
Related: four-way framework comparison · Mastra vs Strands · OpenAI Agents SDK vs LangGraph · AgentCore vs Daytona vs E2B
