Pi Pocket: a local, mobile-first web app for driving a Pi coding agent
A durable, multiplayer, mobile-first web app for Pi agents, built on Pi Durable
At a glance
- What is it?
- Pi Pocket is a self-hosted web app that puts a Pi coding agent on your own machine or your phone, with durable session state, multiplayer sessions, approval gates for risky tool calls, and a live editable extension system. It fits a team that wants to watch and steer an agent from a phone, and it does not fit a user who needs the agent to run somewhere other than their own hardware.
- Who is it for?
- Pi Pocket fits a developer or small team that wants one Pi coding agent reachable from a phone, with session state that survives a server restart and with approval in the loop for risky shell, write and edit calls. It does not fit a setup that needs a hosted agent, since the whole model is a server on your own machine, and the mobile experience is a client of that server rather than a device-local agent.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
An agent you open on your phone, served from your own machine
Pi Pocket is described as a durable, multiplayer, mobile-first web app for Pi agents, built on Pi Durable. The deployment model is the first fact to understand: it runs on your own machine or directly on your phone, and there is no cloud VM. That is a different proposition from a hosted coding agent, and it shapes every other decision in the project, from the sign in flow to the browser panel that talks to a Chromium instance running on the server. The audience is developers who already work with Pi and want to keep an eye on a long run from a phone, and teams where more than one person needs to watch the same session. The repository is TypeScript, MIT licensed, and the README states that Linux is the most tested platform while the project runs on Linux, macOS, Windows and Android under Termux.
Durability means a restart does not lose the run
The durability claim is the technical centre of the project. The README states that every model call, tool call and subagent is stored as it happens, that restarting the server mid-run lets the work continue, and that a tool call cut off by the restart reruns only if that is safe. The safety qualifier is the interesting part, because a naive replay of an interrupted side effect, a write or a push, is exactly the kind of thing you do not want twice. The build sits on the Pi Durable library, and the package manifest shows the surrounding runtime as a set of Earendil Works packages: pi-ai, pi-coding-agent, pi-durable, pi-codemode, pi-mcp and chord, each pinned at version 1.1.0, with preact and marked on the front end. In other words the app owns the session record rather than delegating it to a chat transcript, which is what makes the multiplayer and the restart behaviour possible in the first place.
Multiplayer sessions and the side chat Pi cannot see
A session is not a private conversation with the agent. The multiplayer feature list includes presence so you can see who else is in the session, a side chat that Pi does not see, @mentions, pins, reactions, shared notes, and taking turns. The side chat is the detail that makes the rest workable: two people can discuss what to do next without the agent acting on the discussion. The steering model follows the same logic. You can redirect Pi while it works, queue follow-up requests so they are not lost mid-run, or stop it outright, and there are roles with steer or view-only access, per person and per session spend limits, and one-time invite links or QR codes. Two features then build on that: plan mode, where Pi reads and proposes a plan and nothing changes until someone approves it, and Agent Teams, which is off by default and starts linked sessions that work beside the one that started them and message in both directions.
The launcher prints an address, a link and a QR code
Getting started needs Node.js 22.19 or newer, and the README asks you to sign in to a provider with Pi first, either with the pi command and its login flow or later from the app's Providers sheet. Then the project is cloned and started:
git clone https://github.com/TannerMidd/pi-pocket.git
cd pi-pocket
npm install
npm startThe launcher then asks how your devices should connect and prints an address, a sign-in link and a QR code. You open the link once per browser, and the cookie lasts a year. The README is blunt about the security consequence: the link is the owner's key, so keep it private. A rotate-token flag replaces the key and signs out every device that used the old link, while people you invited stay signed in until you remove them under the menu. While the server runs, a small set of keys is available: q quits, r restarts the server, a changes access, o opens the app in a browser and s shows the QR code again. The remote access section of the README lists several connection modes, and the same modes can be selected with an access flag.
Lancet Guard holds risky calls until a human says yes
The approval mechanism is the part that makes remote operation tolerable. Lancet Guard is off by default and is enabled from the Extensions menu, and with the specpi-lancet-guard Pi package installed and running, risky bash, write and edit calls wait for someone in the session to approve them. The screenshot in the README describes exactly this: a teammate asks for a push and the agent waits for approval rather than pushing. The same idea appears elsewhere in the feature list, in the built-in browser that opens, reads, clicks through and screenshots pages in a real Chromium on the server, in the Changes review that shows every uncommitted change with word-level diffs in split or unified form, and in the Files tile that puts the session folder beside the conversation. Codemode is on by default and changes the shape of the work rather than the permission model: Pi writes short scripts that call its tools, and every call still goes through the same checks.
Extensions are files that reload in place
The project has no build step for its own front end, which is unusual for a web app of this size. Edit the web app or an extension and it reloads in place. Extensions live in a directory in your home folder, and you can add your own: tools and checks for Pi, and pages, rail buttons, routes and slash commands for the app itself. The extension gallery lets you find drop-ins and themes written by other people, read their source or ask Pi to review it, and install them, with each file checked against the index, an extension that starts off, and an update that shows its diff before you accept it. Themes include Pocket, the app's own look, and Lantern, a calm dark theme meant for long reading, and a theme can be duplicated and changed with Pi, with each save showing at once. The theme system also follows Omarchy palettes, including following the desktop's live colours, and the launcher is a Walker-style one on Ctrl or Cmd plus K with live colour previews.
Node 22.19, MIT, and a release line three weeks old
The manifest states the constraints. The package is private, which is normal for an application rather than a library, the module type is ES, the licence is MIT, the engine requirement is Node 22.19 or newer, and the single command is pi-pocket. The scripts show how the project is developed and checked:
"start": "node bin/pi-pocket.js",
"dev": "node bin/pi-pocket.js --cwd .",
"check": "tsc --noEmit -p . && node test/types-file.ts && node docs-site/check-reference.mjs",
"test": "node --test test/*.test.ts",Tests run on the Node built-in test runner over the test files, and the check script combines a type check with a types file test and a documentation reference check, so a stale doc reference fails the same command. The release history shows how fast this is moving: v0.18.0 on 2026-10-19, which added Claude subscription billing as a built-in extension, v0.17.0 earlier that day, and v0.16.0 on 2026-10-18 with direct extension actions and version metadata. The last push was on 2026-10-20. The repository also carries Nix files and a flake, which is the expected shape for a self-hosted tool that its users run on their own machines, and the README documents the full tour in the features document inside the docs directory.
Editorial conclusion
Pi Pocket fits a developer or small team that wants one Pi coding agent reachable from a phone, with session state that survives a server restart and with approval in the loop for risky shell, write and edit calls. It does not fit a setup that needs a hosted agent, since the whole model is a server on your own machine, and the mobile experience is a client of that server rather than a device-local agent. Verify first that your Node version is 22.19 or newer and that you sign in to a provider with Pi before starting, then decide whether the owner link and its year-long cookie are acceptable for the machines on your network, because rotating it signs out every device that used it.
Frequently asked questions
How do I install and start Pi Pocket?
It needs Node.js 22.19 or newer and a signed in Pi provider. The README shows git clone, cd pi-pocket, npm install and npm start, after which the launcher asks how devices should connect and prints an address, a sign-in link and a QR code.
What happens to a running agent session if the server restarts?
The README states that every model call, tool call and subagent is stored as it happens, that restarting the server mid-run lets the work continue, and that a tool call cut off by the restart reruns only if it is safe.
How do I stop an agent from pushing code without my approval?
Lancet Guard, off by default and enabled from the Extensions menu, makes risky bash, write and edit calls wait for someone in the session to approve them, when the specpi-lancet-guard Pi package is installed and running. Plan mode is the other route, since nothing changes until a plan is approved.
How do people sign in to Pi Pocket, and how is the link secured?
The launcher prints a sign-in link and a QR code, and the link is opened once per browser with a cookie that lasts a year. The README states that the link is the owner's key and should be kept private, and that the rotate-token flag replaces it and signs out every device that used the old link.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/tannermidd-pi-pocket)Was this useful?