LangGraph emits structured callbacks at every node, edge, and tool call; LangSmith's run tree renders them as a navigable graph.
Picture a school field trip where every kid wears a name badge and a class label. If a chaperone takes notes that include both badges, the principal can reconstruct who was with which group at every stop. If the chaperone only writes down names, the principal sees a list of kids and stops but cannot tell which group anyone belonged to. LangGraph asks every step to wear two badges: the node and the edge it travelled. LangSmith knows how to read both badges and draw the route. A generic backend only sees the names and produces a flat list of stops with no group structure.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
The render gap between LangSmith and a generic OTel backend on a LangGraph agent is one of the most-asked observability questions in 2026. The instinct is to attribute the difference to LangSmith being 'smarter'. The reality is more mundane and more useful: LangSmith and LangGraph share an instrumentation ABI that carries graph-topology metadata onto every span; generic OTel does not have a standardized schema for that metadata yet, so the same span stream renders flat there.
Understanding this is the difference between a team that can choose its backend on capability grounds and a team that is locked into LangSmith because rebuilding the metadata pipeline elsewhere is expensive. The card walks through what the callbacks actually carry, why OTel goes flat, and the two patterns that close the gap.
What LangGraph callbacks emit
LangGraph is built on the LangChain callback ABI, an internal Python and TypeScript interface that fires on graph events. Every node entry, every node exit, every conditional edge, and every tool or LLM call inside a node triggers a callback. The payload is rich.
The fields per event
- Node events carry node name, parent run id, edge source, checkpoint id, and the input and output state blobs.
- Tool events carry tool name, arguments, output, latency, and error.
- Edge events carry source node, target node, condition value, and which branch was taken.
- Checkpoint events carry checkpoint id, previous checkpoint id, and a state diff.
LangSmith implements a callback handler that subscribes to all of these and writes them to its run-tree data model as typed fields. The UI then renders the run tree as a graph view with node click-throughs, edge highlighting, and checkpoint resumption indicators.
Why this is not the OTel API
The LangChain callback ABI predates the OTel GenAI working group's focus on agents. It is a framework-internal API, not an open standard. Anyone can subscribe to it, but few non-LangChain tools do, because the surface is unstable and large.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
Real products, models, and research that use this idea.
- LangSmith's LangGraph run-tree view renders checkpointer-driven agents with conditional-edge highlighting that the LangChain team built into the UI directly.
- Arize Phoenix uses OpenInference attribute conventions to render an agent graph from OTel spans, demonstrating that the render is achievable outside LangSmith when the metadata is there.
What an interviewer would ask next. Try answering before peeking at the approach.
QWhat does a checkpointer-driven resume look like in the trace tree?
LangSmith renders the resume as a continuation of the same run id; the previous checkpoint span and the new resume span both link to the checkpoint id.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Blaming the OTel backend for a flat render when the instrumentation never emitted node versus edge attributes; the render is only as structured as the input.
60 second bullets to scan on the way to the call.
What do LangGraph callbacks emit per node, edge, tool call, and checkpoint?
Why do OTel GenAI conventions fall short for graph-agent semantics in 2026?
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.