What's the difference between a LangGraph agent and an AWS Strands agent?
A LangGraph agent still runs inside a graph you defined, where nodes are functions you wrote and edges decide what runs next, even in “agent” mode where a node lets the model pick its own tool; a default Strands agent has no graph at all, since AWS’s own docs call its single-agent loop “model-driven.” You hand a Strands agent a prompt, a list of tools, and an objective, and its loop, call the model, check whether it wants a tool, run the tool, call the model again, decides the whole path itself with nothing pre-wired. Strands does offer Graphs as an opt-in pattern for wiring several agents into a deterministic, pre-defined workflow; the model-driven loop is only the default for a single agent.
AWS frames the single-agent tradeoff directly: this is more resilient because the model can reason around a failure, an API call that errors, a request nobody anticipated, instead of following a path nobody coded for that case. The same freedom is a risk with no separate name: a loop with nothing pre-wired also has no built-in stopping point unless something adds one, a limit a hand-drawn LangGraph edge doesn’t share.