Recall vs pod snapshotting
A container checkpoint freezes the process and writes its memory to disk; restore brings the same process back. Recall writes what the agent knows and where it is; a new process, on a new image if you like, starts from that. We ran both on the same crashed coding agent.
Recall and Container checkpoint (CRIU)
| Recall | Container checkpoint (CRIU) | |
|---|---|---|
| Storage ownership | Your own database: polign_db in your S3, GCS or Azure bucket, or PostgreSQL, MongoDB or Qdrant you already run. No vendor control plane. | A tar archive of the container's memory pages and file state, written by the kubelet to /var/lib/kubelet/checkpoints on the node, or by Podman to a file you name. |
| Typed records | Yes. Each fact is a subject, a predicate from a registry (or coined on first use) and a typed value; text is extracted into those by a model you name. | No. The checkpoint is bytes of process memory; nothing in it is addressable as a fact or a step. |
| Corrections and supersession | By rule at read time: a single-valued predicate's newer statement replaces the older one; a text statement can name what it makes untrue. Reads carry what was replaced. | No. |
| Resume after restart | Yes. Working state, turns, outputs, pointers and in-flight tool calls per agent id, fenced by a lease; a new process resumes from a briefing. | Yes, if the same image, architecture and runtime are available, open TCP connections were checkpointed with --tcp-established, and nothing uncheckpointable was open (GPUs need a CRIU plugin). Restore brings back the old process exactly, old code and old model included. |
| Shared across agents | Yes. One database, keys per namespace through recall serve, Kubernetes workload identity, packages for LangGraph, OpenAI Agents SDK, Pydantic AI, LiveKit, Vapi and MCP hosts. | No. One checkpoint is one container. |
| Audit and history | Append-only records with time and source; history, as_of reads, diff, and audit bundles replayable offline. | No history of what the agent knew; a checkpoint is a point in time and contains every secret the process held, so it must be kept root-only. |
| Self-hosted path | pip install polign-recall runs a local database; recall serve or the Helm chart for a shared one. Apache-2.0. | Kubernetes ContainerCheckpoint feature gate (beta since 1.30, still beta), a CRI runtime with CRIU (CRI-O, or containerd with its own support), kubelet checkpoint API; restore is outside the kubelet and done with crictl or by converting the archive to an image. Podman 4.x with CRIU 3.16 or later does both. |
| Pricing | Free to self-host, no limits. Paid: design partner seat (60 days free, then $12k for 12 months) or a Production Agreement at $24k a year, flat. | Free. The cost is engineering: 3 setup changes in our run (runc instead of crun, --tcp-established, container-managed DNS), and 15 MB per checkpoint against 134 KB of records. |
When to pick the other tool
Pick a container checkpoint when the process holds state that cannot be written down: a model loaded in GPU memory you want to migrate as is, a debugging session you need forensically intact, a binary you cannot change. That is what the Kubernetes feature exists for, and the KEP calls it forensic. For an agent that talks to a model over an API, the process state is the conversation and the plan, and those can be records. On the measured run a CRIU checkpoint restored the agent and it finished, but it came back as the old image on the old model, redid 8 model calls, and its 15 MB checkpoint held the API key; the Recall resume came back as the upgraded image on the newer model with 134 KB of records and redid nothing.
Where to go next
- Resume without snapshots, with the replay of both runs
- Resume an agent after a crash or pod restart
- Kubernetes Agent Sandbox
Sources, read on November 3, 2026: kubelet checkpoint API, feature gates, KEP-2008, CRIU limits, TCP connections, podman container checkpoint; CRIU 4.3.
Recall is typed, durable memory and state for AI agents. It stores corrections, decisions and task state as append-only records in your own object store (S3 or GCS), so an agent can be corrected without retraining and resumed after a crash, restart or pod replacement without snapshotting the process.
Try it
One pip install brings the client, the recall binary and the database. The snippet on
this page runs as written.