{
  "manifest_version": "1",
  "slug": "pi-pocket",
  "title": "Pi Pocket",
  "headline": "Run Pi Pocket on a remote server",
  "description": "Host Pi Pocket, the mobile-first multiplayer web app for Pi agents, on an exe.dev VM: private HTTPS for your phone, models without API keys, durable runs.",
  "category": "ai-agents",
  "tags": [
    "pi pocket",
    "pi",
    "pi durable",
    "earendil",
    "mobile coding agent",
    "multiplayer",
    "pwa",
    "remote coding agent"
  ],
  "url": "https://exe.dev/deploy/pi-pocket",
  "markdown_url": "https://exe-staging.dev/deploy/pi-pocket.md",
  "upstream": {
    "website": "https://tannermidd.github.io/pi-pocket/",
    "source": "https://github.com/TannerMidd/pi-pocket",
    "docs": "https://tannermidd.github.io/pi-pocket/docs/",
    "license": "MIT"
  },
  "example_vm_name": "my-pi-pocket",
  "time": "10 minutes",
  "stack": [
    {
      "name": "Pi Pocket 0.27",
      "detail": "npm package on Node.js 24, managed by systemd",
      "port": 8000,
      "data": "~/.pi-pocket"
    },
    {
      "name": "Pi's settings",
      "detail": "Models through exe.dev's LLM integration, sign-ins, skills",
      "data": "~/.pi/agent"
    },
    {
      "name": "Your projects",
      "detail": "Where new sessions start",
      "data": "~/projects"
    },
    {
      "name": "Nightly backups",
      "detail": "Pi Pocket's database and settings, and Pi's; 14 kept",
      "data": "~/pi-pocket-backups"
    }
  ],
  "access": [
    {
      "url": "https://my-pi-pocket.exe.xyz/",
      "who": "private",
      "what": "Pi Pocket, behind your exe.dev login and Pi Pocket's own sign-in link"
    },
    {
      "url": "https://my-pi-pocket.exe.xyz/",
      "who": "shared",
      "what": "People you share the VM with and invite from the app"
    }
  ],
  "delivers": [
    "Pi Pocket at `https://\u003cvm\u003e.exe.xyz/`, behind exe.dev's login, restarted by systemd after a crash or reboot.",
    "Claude and GPT models through exe.dev's LLM integration. No API key on the VM.",
    "The owner's sign-in link, read from Pi Pocket's settings rather than its log.",
    "Nightly backups of Pi Pocket's and Pi's settings, and one checked to hold the database."
  ],
  "deployable": true,
  "deploy": {
    "new_vm_url": "https://exe-staging.dev/new?prompt=Set%20up%20Pi%20Pocket%20on%20this%20VM%20by%20following%20the%20exe.dev%20recipe%20at%20https%3A%2F%2Fexe-staging.dev%2Fdeploy%2Fpi-pocket.md%20from%20top%20to%20bottom.%0A%0AThe%20recipe%27s%20example%20VM%20name%20is%20my-pi-pocket.%20This%20VM%27s%20name%20is%20the%20output%20of%20%60hostname%60%3A%20use%20it%20wherever%20the%20recipe%20writes%20my-pi-pocket.%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-%20Pi%20Pocket%20at%20%60https%3A%2F%2F%3Cvm%3E.exe.xyz%2F%60%2C%20behind%20exe.dev%27s%20login%2C%20restarted%20by%20systemd%20after%20a%20crash%20or%20reboot.%0A-%20Claude%20and%20GPT%20models%20through%20exe.dev%27s%20LLM%20integration.%20No%20API%20key%20on%20the%20VM.%0A-%20The%20owner%27s%20sign-in%20link%2C%20read%20from%20Pi%20Pocket%27s%20settings%20rather%20than%20its%20log.%0A-%20Nightly%20backups%20of%20Pi%20Pocket%27s%20and%20Pi%27s%20settings%2C%20and%20one%20checked%20to%20hold%20the%20database.%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%20whoever%20can%0Asteer%20a%20session%20can%20run%20commands%20with%20sudo.%20On%20an%20existing%20VM%2C%20ask%0Abefore%20replacing%20~%2F.pi%2Fagent%2Fmodels.json%20or%20anything%20that%20listens%20on%0Aport%208000.%20Don%27t%20start%20an%20interactive%20pi%20or%20a%20Pi%20Pocket%20session.%0AVerify%20that%20pi-pocket.service%20and%20pi-pocket-backup.timer%20are%20enabled%2C%0Athat%20%2Fapi%2Fproviders%20lists%20anthropic%20and%20openai%20as%20configured%2C%20the%20pi%0AOK%20reply%2C%20and%20a%20backup%20that%20holds%20.pi-pocket%2Fpocket.sqlite.%0AFinish%20with%20the%20owner%27s%20sign-in%20link%20from%20%22Sign%20in%22%20%28it%27s%20a%20key%3A%20send%20it%0Aonly%20to%20the%20owner%2C%20here%29%2C%20and%20tell%20them%20to%20sign%20in%20to%20exe.dev%20when%20asked%2C%0Athen%20pick%20a%20model%20from%20the%20model%20chip%20in%20their%20first%20session.%0A%0AFinish%20with%20the%20URLs%20I%20should%20open.%0A",
    "terminal": "curl -fsSL https://exe-staging.dev/deploy/pi-pocket/prompt.txt | ssh exe.dev new --prompt=/dev/stdin",
    "prompt": "Set up Pi Pocket on this VM by following the exe.dev recipe at https://exe-staging.dev/deploy/pi-pocket.md from top to bottom.\n\nThe recipe's example VM name is my-pi-pocket. This VM's name is the output of `hostname`: use it wherever the recipe writes my-pi-pocket. 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- Pi Pocket at `https://\u003cvm\u003e.exe.xyz/`, behind exe.dev's login, restarted by systemd after a crash or reboot.\n- Claude and GPT models through exe.dev's LLM integration. No API key on the VM.\n- The owner's sign-in link, read from Pi Pocket's settings rather than its log.\n- Nightly backups of Pi Pocket's and Pi's settings, and one checked to hold the database.\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 whoever can\nsteer a session can run commands with sudo. On an existing VM, ask\nbefore replacing ~/.pi/agent/models.json or anything that listens on\nport 8000. Don't start an interactive pi or a Pi Pocket session.\nVerify that pi-pocket.service and pi-pocket-backup.timer are enabled,\nthat /api/providers lists anthropic and openai as configured, the pi\nOK reply, and a backup that holds .pi-pocket/pocket.sqlite.\nFinish with the owner's sign-in link from \"Sign in\" (it's a key: send it\nonly to the owner, here), and tell them to sign in to exe.dev when asked,\nthen pick a model from the model chip in their first session.\n\nFinish with the URLs I should open.\n",
    "prompt_url": "https://exe-staging.dev/deploy/pi-pocket/prompt.txt"
  },
  "updated": "2026-10-31",
  "verified": "2026-10-31",
  "related": [
    "pi-durable",
    "pi",
    "opencode",
    "t3code",
    "claude-code",
    "openclaw"
  ]
}
