Notes
Field notes
Not a glossary. A running log of the reasoning behind a tool, a framework, or a design choice: why something exists, what it replaced, and when it's worth reaching for again.
5 notes
LangSmith and OpenTelemetry
LangSmith is no longer tied to LangChain or LangGraph: it accepts traces from any OpenTelemetry-compatible framework, Pydantic AI included, sent to its OTLP endpoint.
This corrects a common assumption: choosing an agent framework does not lock a system into a single observability tool, as long as both sides speak OTel.
Worth remembering when weighing framework lock-in as a factor in a migration decision.
observabilityagent-frameworksConditional edges
In LangGraph, a routing function that reads the current state and decides at runtime which node runs next, instead of a fixed transition.
This is the concrete mechanism that lets a graph branch or repeat based on what the agent has discovered so far. Replacing fixed edges with add_conditional_edges is the central change that turns a fixed workflow into an agentic one: the graph stops following one predetermined path and starts choosing its next step from the state accumulated during the run.
It is the same shift Wayfinder's decide step makes explicit, just implemented as a hand-rolled loop instead of a graph library. The reasoning generalizes to any fixed pipeline being redesigned around a real decision point.
langgraphagent-frameworksLangChain 1.0 and the consolidation around LangGraph
As of October 2025, LangChain 1.0 deprecated AgentExecutor. Its new high-level create_agent function calls LangGraph's execution engine underneath.
There is no longer a plain-LangChain, no-graph path for building a real agent. This matters when picking a framework for a production system today: the maintainer already converged on the graph model as the standard, this is not an outside trend being chased.
Any evaluation of LangChain for an agentic redesign is, in practice, an evaluation of LangGraph.
langchain-historyagent-frameworksChains vs. cyclic graphs (DAG vs. cycles)
A LangChain Chain is a directed acyclic graph: a fixed sequence that cannot revisit a node by definition. A graph with cycles can, which is what an agent loop actually needs.
Wrapping a chain in a Python for loop to force iteration is a patch, not a fix. The chain itself has no notion that it is being iterated, and nothing inside it can decide to revisit a step based on what came back from a previous one.
This is the concrete reason LangGraph exists as a separate abstraction from chains: agentic behavior needs a graph that can cycle, not a pipeline that runs once. The distinction generalizes past LangChain specifically. Any framework built around a fixed sequence hits the same ceiling the moment a step needs to run again based on what it just learned.
langchain-historyagent-frameworksAgentExecutor
LangChain's original class for building agents did implement a loop, reason, act, observe, repeat, but as a black box: no pausing, no conditional branching, no easy inspection.
Five patterns broke it in practice: conditional branching, pause and resume, parallel execution, human-in-the-loop review, and durable persistence across a long-running task.
Deprecated as of LangChain 1.0 (October 2025), in maintenance until December 2026, and replaced by create_agent, which calls LangGraph’s execution engine internally.
langchain-historyagent-frameworks
No notes match that search.