{
  "manifest_version": "1",
  "slug": "pi-durable",
  "title": "Pi Durable",
  "headline": "Host a Pi Durable agent",
  "description": "Run an agent built on Pi Durable on an exe.dev VM: a private web chat, SQLite storage, models without API keys, and work that survives a crash.",
  "category": "ai-agents",
  "tags": [
    "pi durable",
    "pi",
    "earendil",
    "durable agents",
    "long-running agents",
    "agent harness",
    "typescript",
    "sqlite"
  ],
  "url": "https://exe.dev/deploy/pi-durable",
  "markdown_url": "https://exe.dev/deploy/pi-durable.md",
  "upstream": {
    "website": "https://earendil.com/posts/pi-durable/",
    "source": "https://github.com/earendil-works/pi",
    "docs": "https://github.com/earendil-works/pi/blob/main/packages/durable/README.md",
    "license": "MIT"
  },
  "example_vm_name": "my-pi-durable",
  "time": "10 minutes",
  "stack": [
    {
      "name": "Your agent",
      "detail": "Pi Durable 1.3 on Node.js 24, managed by systemd",
      "port": 8000,
      "data": "~/pi-durable/data/agent.sqlite"
    },
    {
      "name": "Extensions",
      "detail": "Your tools, loaded the moment you save them",
      "data": "~/pi-durable/extensions"
    },
    {
      "name": "Workspace",
      "detail": "Where the agent reads, writes, and runs commands",
      "data": "~/pi-durable/workspace"
    },
    {
      "name": "GPT-6.1 Sol",
      "detail": "OpenAI, through exe.dev's LLM integration"
    },
    {
      "name": "Nightly backups",
      "detail": "Database, code, and workspace; 14 kept",
      "data": "~/pi-durable/backups"
    }
  ],
  "access": [
    {
      "url": "https://my-pi-durable.exe.xyz/",
      "who": "private",
      "what": "The chat, for you and anyone you share the VM with"
    }
  ],
  "delivers": [
    "A Pi Durable agent with Pi's coding tools, its conversation in SQLite, running under systemd.",
    "A private web chat at `https://\u003cvm\u003e.exe.xyz/` that streams replies and tool output.",
    "OpenAI's GPT-6.1 Sol through exe.dev's LLM integration. No API key on the VM.",
    "A task that still finished after the agent was killed halfway through.",
    "Extensions in `~/pi-durable/extensions` that load on save, starting with an email tool.",
    "Nightly backups, and one checked to hold the conversation."
  ],
  "deploy": {
    "new_vm_url": "https://exe.dev/new?prompt=Set%20up%20Pi%20Durable%20on%20this%20VM%20by%20following%20the%20exe.dev%20recipe%20at%20https%3A%2F%2Fexe.dev%2Fdeploy%2Fpi-durable.md%20from%20top%20to%20bottom.%0A%0AThe%20recipe%27s%20example%20VM%20name%20is%20my-pi-durable.%20This%20VM%27s%20name%20is%20the%20output%20of%20%60hostname%60%3A%20use%20it%20wherever%20the%20recipe%20writes%20my-pi-durable.%20Skip%20the%20step%20that%20creates%20the%20VM%3B%20you%20are%20on%20it.%0A%0AYou%20are%20done%20when%20all%20of%20these%20are%20true.%20Check%20each%20one%20yourself%3A%0A-%20A%20Pi%20Durable%20agent%20with%20Pi%27s%20coding%20tools%2C%20its%20conversation%20in%20SQLite%2C%20running%20under%20systemd.%0A-%20A%20private%20web%20chat%20at%20%60https%3A%2F%2F%3Cvm%3E.exe.xyz%2F%60%20that%20streams%20replies%20and%20tool%20output.%0A-%20OpenAI%27s%20GPT-6.1%20Sol%20through%20exe.dev%27s%20LLM%20integration.%20No%20API%20key%20on%20the%20VM.%0A-%20A%20task%20that%20still%20finished%20after%20the%20agent%20was%20killed%20halfway%20through.%0A-%20Extensions%20in%20%60~%2Fpi-durable%2Fextensions%60%20that%20load%20on%20save%2C%20starting%20with%20an%20email%20tool.%0A-%20Nightly%20backups%2C%20and%20one%20checked%20to%20hold%20the%20conversation.%0A%0ARead%20the%20whole%20recipe%2C%20including%20the%20closed%20details.%20Follow%20%22Install%20by%0Ahand%22%20first%2C%20skipping%20VM%20creation%3B%20the%20walkthrough%20is%20for%20the%20owner%0Aafterwards.%20Do%20not%20run%20the%20later%20Restore%20or%20Update%20instructions.%0AKeep%20the%20VM%20private%3A%20never%20run%20share%20set-public%2C%20because%20the%20agent%20runs%0Acommands%20with%20sudo.%20On%20an%20existing%20VM%2C%20ask%20before%20replacing%20~%2Fpi-durable%0Aor%20anything%20that%20listens%20on%20port%208000.%0AVerify%20the%20pong%20reply%2C%20the%20crash%20test%20%28the%20same%20id%20and%20%22status%22%3A%22done%22%0Aafter%20the%20kill%29%2C%20that%20pi-durable.service%20and%20pi-durable-backup.timer%20are%0Aenabled%2C%20and%20a%20backup%20with%20entries%20in%20it.%20Do%20not%20send%20a%20test%20email.%0AFinish%20with%20https%3A%2F%2F%3Cvm%3E.exe.xyz%2F%2C%20using%20this%20VM%27s%20name%2C%20and%20suggest%0Athe%20owner%20try%20%22Pull%20the%20plug%22.%0A%0AFinish%20with%20the%20URLs%20I%20should%20open.%0A",
    "terminal": "curl -fsSL https://exe.dev/deploy/pi-durable/prompt.txt | ssh exe.dev new --prompt=/dev/stdin",
    "prompt": "Set up Pi Durable on this VM by following the exe.dev recipe at https://exe.dev/deploy/pi-durable.md from top to bottom.\n\nThe recipe's example VM name is my-pi-durable. This VM's name is the output of `hostname`: use it wherever the recipe writes my-pi-durable. Skip the step that creates the VM; you are on it.\n\nYou are done when all of these are true. Check each one yourself:\n- A Pi Durable agent with Pi's coding tools, its conversation in SQLite, running under systemd.\n- A private web chat at `https://\u003cvm\u003e.exe.xyz/` that streams replies and tool output.\n- OpenAI's GPT-6.1 Sol through exe.dev's LLM integration. No API key on the VM.\n- A task that still finished after the agent was killed halfway through.\n- Extensions in `~/pi-durable/extensions` that load on save, starting with an email tool.\n- Nightly backups, and one checked to hold the conversation.\n\nRead the whole recipe, including the closed details. Follow \"Install by\nhand\" first, skipping VM creation; the walkthrough is for the owner\nafterwards. Do not run the later Restore or Update instructions.\nKeep the VM private: never run share set-public, because the agent runs\ncommands with sudo. On an existing VM, ask before replacing ~/pi-durable\nor anything that listens on port 8000.\nVerify the pong reply, the crash test (the same id and \"status\":\"done\"\nafter the kill), that pi-durable.service and pi-durable-backup.timer are\nenabled, and a backup with entries in it. Do not send a test email.\nFinish with https://\u003cvm\u003e.exe.xyz/, using this VM's name, and suggest\nthe owner try \"Pull the plug\".\n\nFinish with the URLs I should open.\n",
    "prompt_url": "https://exe.dev/deploy/pi-durable/prompt.txt"
  },
  "updated": "2026-10-16",
  "related": [
    "openclaw",
    "claude-code",
    "celld",
    "n8n",
    "code-server",
    "uptime-kuma"
  ]
}
