What's the difference between a LangChain agent and a LangGraph agent?
A LangChain agent built with create_agent, the framework’s standard way to build one since LangChain 1.0 shipped in October 2025, already runs on LangGraph underneath: LangChain’s own release notes say it “uses LangGraph under the hood to run this loop.” The older AgentExecutor class a LangChain agent used to run on is gone from the main package, moved into a separate langchain-classic package kept for backwards compatibility. So the real choice isn’t between two different runtimes anymore, it’s between two levels of control: create_agent gives you a prebuilt loop with middleware for common needs like human approval or summarization, and dropping to LangGraph’s own StateGraph gives you the nodes, edges, and state object directly.
That second option is what the OpenAI Agents SDK draws a similar line against: a thin, model-first loop against a graph you build. LangChain’s own agent no longer sits fully on the model-first side of that line, since it’s a thin layer over the same graph.