A failed multi agent run wastes a long expensive trajectory while a single agent loses one loop; checkpoints resume from the last good node and unlock pause and resume.
Imagine baking a cake. If you mess up while still mixing the batter, you tip it out and start over; you have only lost some flour and eggs. Now imagine a five course dinner where every course depends on the one before. If you burn the dessert at the end, you do not want to restart from soup. You want a saved point at each finished course so you can pick up where things went wrong. LangGraph checkpoints are the saved points between dinner courses. A single agent is the cake. A multi agent run is the five course dinner, and the saved points pay back much faster because each course took serious time and money to make.
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.
LangGraph's checkpoint primitive is one of the framework's most important features for multi agent production deployments, and one of the easiest to under value in single agent prototypes. The disproportionate payoff comes from two structural properties of multi agent workflows: longer trajectories with higher per failure cost, and a frequent need for pause and resume that single agent loops rarely have.
This answer walks through both properties, explains how checkpointing turns LangGraph into a durable execution engine, and ends with the operational trap of turning checkpoints on for every workflow regardless of shape.
What checkpointing actually does in LangGraph
A LangGraph checkpointer is a pluggable storage layer that persists the graph state after every node executes. The state is the typed dictionary that flows through the graph; the checkpoint captures its full value plus metadata (which node just ran, what edges remain, the thread id that identifies this particular run).
The runtime contract
When a node returns, the runtime writes a checkpoint to the configured store. If the next node crashes (or the process crashes, or the user pauses), the next time you invoke the graph with the same thread id, the runtime loads the most recent checkpoint and resumes from there. The nodes already executed are not rerun.
Backing store choices
Three first class options:
- MemorySaver: in process dictionary. Fastest, but loses everything on process exit. Right for tests.
- SqliteSaver: local SQLite file. Durable across restarts; fine for single node deployments. Sufficient for many production cases.
- PostgresSaver: real database, with concurrent reads and writes and proper transactions. The default for production multi tenant deployments where many tasks can be paused simultaneously.
Custom backends are easy to add. Some teams ship Redis backed checkpointers for low latency pause and resume on short trajectories.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
from langgraph.graph import StateGraph
from langgraph.checkpoint.postgres import PostgresSaver
from typing import TypedDict
class AgentState(TypedDict):
plan: str
worker_outputs: list[str]
critique: str
def planner(state: AgentState) -> AgentState:
state["plan"] = "Step 1, Step 2, Step 3"
return state
def worker(state: AgentState) -> AgentState:
state["worker_outputs"].append("work done")
return state
def critic(state: AgentState) -> AgentState:
state["critique"] = "looks fine"
return state
graph = StateGraph(AgentState)
graph.add_node("planner", planner)
graph.add_node("worker", worker)
graph.add_node("critic", critic)
graph.add_edge("planner", "worker")
graph.add_edge("worker", "critic")
graph.set_entry_point("planner")
checkpointer = PostgresSaver.from_conn_string("postgresql://...")
app = graph.compile(checkpointer=checkpointer)
config = {"configurable": {"thread_id": "task-42"}}
# Run; if critic crashes, rerun the same call and resume from after worker
app.invoke({"plan": "", "worker_outputs": [], "critique": ""}, config=config)| Property | Single agent loop | Multi agent trajectory |
|---|---|---|
| Work lost on a mid run crash | One loop, around 5 to 10K tokens | Whole trajectory so far, often 100K plus tokens |
| Need for pause and resume | Rare | Common (approvals, human review, escalations) |
| Checkpoint payback per failure | Small relative to operational cost | Large; pays back on the first failure |
| Recommended default | Off unless explicit need | On for any topology with three plus nodes |
Real products, models, and research that use this idea.
- LangGraph documentation in 2025 and 2026 ships checkpointers for memory, SQLite, and Postgres as first class primitives, with explicit guidance on which to use per deployment shape.
- Production teams running LangGraph multi agent systems in 2026 commonly back checkpoints with Postgres for the human in the loop approval pattern, where thousands of tasks can be paused awaiting human action.
What an interviewer would ask next. Try answering before peeking at the approach.
QHow would you implement an approval gate using LangGraph checkpoints?
Add a node that calls interrupt() before the destructive action; the runtime serialises state and returns control to the application. The application persists the thread id, presents the state to a human, and on approval calls app.invoke() with the same thread id and a resume command, which picks up at the interrupted node.
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.
Treating checkpoints as a nice to have for any workflow, and missing that the payback is governed by trajectory length and per node cost; a single agent loop rarely earns the operational complexity.
60 second bullets to scan on the way to the call.
What a LangGraph checkpoint captures and when it is written
Why the cost of a failure scales with trajectory length in multi agent designs
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.