Earendil’s Pi Durable Checkpoints Agent Runs So Crashes Do Not Erase Progress
On October 1, 2026, Earendil shipped MIT-licensed Pi 1.0 alongside experimental Pi Durable—a TypeScript harness with SQLite/JSONL storage, task checkpoints, forkable conversations, and crash resume—aimed at long-running agents beyond a single terminal session.
On October 1, 2026, Earendil and the Pi community marked Pi 1.0 as a stable MIT-licensed coding-agent harness and, in the same ship, released experimental Pi Durable—a separate TypeScript package for building long-running, multi-surface agents that survive process death by checkpointing every task into pluggable storage. Pi the coding agent remains the terminal-first daily driver; Pi Durable does not replace it. Earendil’s posts cast Durable as the substrate for Slack bots, triage tools, and other agentic apps that must outlive a laptop sleep, a container redeploy, or an OOM kill while still sharing Pi’s minimalism and malleability.
Harness means storage plus concurrent conversations
Earendil’s definition is concrete: a harness is storage plus the machinery to run one or more LLM conversations in parallel, with tools and execution environments. Pi Durable opens over memory, SQLite, or JSONL backends and ships a conformance suite so teams can implement Postgres or key-value adapters. SQLite and JSONL paths avoid Node-only APIs where possible, targeting Bun or Cloudflare Durable Objects with thin adapters. One process owns a storage instance; other clients attach to it. In-memory working sets stay bounded by active transcripts and live tasks—compaction summarizes older messages before context overflows—so tens of thousands of historical messages need not all reside in RAM.
Conversations carry their own agent config: model, thinking level, extensions, tools, instructions, and working directory. Forking at any transcript entry lets a Slack channel and a thread run concurrently without blocking each other. Extensions bundle system-prompt sections, tools, hooks, and custom tasks; conversations store extension names, not code, so hot registry reloads pick up new implementations on the next call while in-flight tools finish on the code they started with.
Checkpoints, safe replay, and multiplayer steering
Every model request, tool call, and compaction runs as a durable task that stores a checkpoint before advancing. After a crash, a new process opens the same storage, resumes unfinished tasks, retries cut-off model requests (marking partial answers aborted), and either safely reruns tools labeled replay: "safe" or tells the model the call was interrupted. Submissions take a requestId for exactly-once semantics when clients retry. Compaction itself is a background task: summaries start before the hard limit, and the conversation only waits when the next request would not fit. Documents hold application state—todos, tickets, sandbox metadata—in the same atomic commits as transcript entries so UI state cannot diverge from history.
Multiplayer is first-class. Any number of clients can attach to a conversation view (transcript, streaming answer, running tools, queue, usage), join late from the current snapshot, and steer with whenBusy: "steer" so follow-ups insert after current tool calls. Ownership trees decide what Esc aborts: task-owned work dies with the turn; background conversation-owned tasks can outlive it.
Extensions, tools, and ownership trees
Builders compose behavior through extensions rather than forking the core loop. Tools declare whether replay after a crash is safe; deploy-style side effects omit replay so the model is told about interruption instead of double-charging a card. Hooks can require Slack approval before sensitive tools, memoizing the decision so a restart does not re-ask. Custom tasks support multi-phase workflows with failFast waiting and abort handlers that refund or clean up. Ownership links tasks and child conversations so aborting a parent tears down owned work bottom-up—the same pattern used for durable subagents implemented in a few lines of TypeScript.
How builders install it today
Pi 1.0 installs via pi.dev scripts; Pi Durable installs as @earendil-works/pi-durable with @earendil-works/pi-ai and @earendil-works/chord. Both are MIT-licensed with code at github.com/earendil-works/pi. Earendil flags Durable’s API as experimental and subject to change, points agents at packages/durable plus thirty-plus examples, and demos a vacation-planner TUI that survives mid-search restarts. Pi 1.0 itself adds Codemode (MCP and non-LLM models such as Jev), deferred tool loading, cache warming, mid-conversation system messages, and full-screen TUI defaults—hardening the coding agent while Durable explores crash-resilient application shapes.
For Writeble’s opensource desk, Pi Durable is the early-October harness story that treats durability as storage-backed tasks and forks—not as a heavier workflow engine bolted onto a chat loop.
- #Open Source
- #Agent Harness
- #Pi
- #Earendil
- #TypeScript
Author
Raj M
Contributor
AI Systems Architect is a seasoned technology leader with over 15 years of experience in the IT industry working with Fortune 500 companies. With a solid foundation in multi-agent systems, open-source LLM infrastructure, and enterprise deployment, he excels at building scalable production-grade AI platforms.