Why opaque checkpoints on the plane?
Framework checkpointers that require direct Postgres make the control plane’s backend choice a lie.
Decision
The plane stores opaque bytes keyed by tenant/thread. Runners serialize; the plane never parses framework internals. An HTTP proxy with CAS/ETag keeps multi-replica writers honest.
Consequences
- Durable multi-turn can sit on whatever state backend the plane already uses (Postgres / MySQL / SQLite / Mongo) — not “Postgres-only because LangGraph said so.”
- Runners need not hold DB credentials in proxy mode.
-
CrewAI / LlamaIndex / AutoGen / LangChain adapters use the same
/internal/checkpointsHTTP contract for message-transcript continuity (setRUNKITE_HTTP_URL). LangGraph keeps its richer saver (direct Postgres or proxy).
Rejected alternatives
- Reuse Agent Protocol thread state as a LangGraph saver — different shape; wrong abstraction.
- Force Postgres everywhere — contradicts multi-backend positioning.
See architecture.md and runner-protocol.