pi-pocket README

The project's README from github.com/TannerMidd/pi-pocket. As one markdown file: README.md.

Pi Pocket

Your Pi coding agent, in your pocket.

A durable, multiplayer, mobile-first web app for Pi agents, built on Pi Durable.
Runs on your own machine or directly on your phone. No cloud VM.

Release Node.js 22.19+ MIT license

Website · Quick start · Features · Remote access

Pi Pocket in the Tokyo Night theme, on a desktop and a phone. On the desktop, the session list beside a conversation where Pi has fixed a sign-in redirect loop, its edits and a passing run of 48 tests folded into a timeline. On the phone, the same session after a teammate, Alex, asks for the push: Lancet Guard waits for approval before git push.

Quick start

Requires Node.js 22.19 or newer. Runs on Linux, macOS, Windows, and Android (Termux); Linux is the most tested. Sign in to a provider with Pi first (pi, then /login), or later from the app's Providers sheet.

git clone https://github.com/TannerMidd/pi-pocket.git
cd pi-pocket
npm install
npm start

The launcher asks how your devices should connect, then prints the address, a sign-in link, and a QR code. Open the link once per browser; the cookie lasts a year. The link is the owner's key, so keep it private. --rotate-token replaces it and signs out every device that used the old link; people you invited stay signed in until you remove them under Menu → People.

While it runs: q quit · r restart server · a change access · o open in browser · s show QR code.

Features

The full tour is in docs/features.md.

Remote access

Choose a mode in the launcher, or pass --access:

Mode Who can connect Notes
local This machine Listens on 127.0.0.1
lan Your local network All addresses, plain http
cloudflare Anyone with the link Free quick tunnel with https, no account needed (Cloudflare offers quick tunnels for testing and development). The address changes each time the launcher starts but stays the same across server restarts.
tailscale Your tailnet Tailscale address only, encrypted by the tailnet

Cloudflare mode needs cloudflared. On Linux the launcher can download the official release into ~/.pi-pocket/bin. To use another tunnel (ngrok, tailscale serve), choose local and point the tunnel at port 8787.

[!WARNING] Anyone with steering rights can make the agent run commands on this machine, as you. That reaches everything you can: your files, Pi Pocket's own settings and sign-in tokens, and its code. A single-session invite limits what someone sees in the app, not what Pi can reach, and Lancet Guard approvals can come from anyone who can steer, including the person who asked. People who can steer every session can also invite others. Invite only people you would trust at your keyboard. View-only users cannot make Pi act.

Android (Termux)

pkg update && pkg upgrade
pkg install nodejs git
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
pi                      # /login, then quit
# copy or clone pi-pocket to the phone, then:
cd pi-pocket && npm install --ignore-scripts && npm start

Open the link in Chrome and choose Add to Home screen. Run termux-wake-lock so Android does not stop Termux.

Lancet Guard needs ONNX Runtime, which may not load on Android. If the guard is on but cannot load, Pi Pocket blocks bash, write, and edit calls (the status line shows "guard failed"). Turn it off in the app (Menu → Extensions), in ~/.pi/lancet-guard.json, or by starting with PI_POCKET_GUARD=off.

Configuration

Option Default Purpose
--access <mode> last choice Skip the access menu
-y Reuse the last access choice
--port 8787 Port to listen on
--cwd current folder Default folder for new sessions
--data ~/.pi-pocket Database, settings, uploads, and push keys
--host Listen on a specific address instead of choosing access
--rotate-token Issue a new owner link and sign out devices that used the old one

Environment variables: PI_POCKET_ACCESS, PI_POCKET_DIR, PI_POCKET_HOST, PI_POCKET_PORT, PI_POCKET_GUARD=off, PI_POCKET_BROWSER (the browser to run, when Chromium or Chrome is not found by itself), and PI_POCKET_BROWSER_ARGS (extra flags for it, such as --no-sandbox where sandboxes are unavailable). Without a terminal (under systemd, for example), the launcher uses --access or the last choice.

Architecture

Path Role
bin/pi-pocket.js Entry point: checks the Node version, starts the launcher
src/launcher/ Access menu, server supervisor, Cloudflare tunnel, keys, QR code
src/server/app.ts The core: the durable harness over pocket.sqlite, the coordinator every commit goes through, connected tabs, access, and the session list
src/server/attribution.ts, workspace.ts, transcripts.ts Who Pi works for; a conversation's folder and its stored history, as people reach them
src/server/room.ts One conversation's shared live view, sent to every tab watching it
src/server/commands.ts What people ask of Pi: messages, forks, models, plan mode, goals, schedules, worktrees
src/server/collab.ts The people's side: chat, activity lines, reactions, pins, notes, take turns
src/server/http.ts, http/ Web files, JSON API, server-sent events, uploads, artifacts, invites, the Browser panel's frames and input
src/server/browser.ts, browser/ The built-in browser: one headless Chromium over the DevTools protocol, a page per conversation
src/server/projection.ts Turns committed conversation state into compact JSON for browsers
src/server/docs.ts Durable documents: sessions, chat, pins, notes, artifacts, subagents, schedules, goals, spend
src/server/schedules.ts, goals.ts, spend.ts, changes.ts, branches.ts, worktrees.ts One feature each, with its durable tasks or git calls
src/server/push.ts, alerts.ts Dependency-free Web Push (RFC 8291 and RFC 8292), and who gets which notification
src/server/extensions/ Live-reloaded extensions: system prompt, artifacts, browser, subagents, schedules, goals, plan mode, Lancet Guard, codemode
web/ The app: Preact and htm as plain ES modules

Browsers render only committed state. Each session's Pi Durable view is coalesced and sent as small updates over server-sent events, so a device that reconnects or joins late sees exactly what everyone else sees. The engineering page explains the design; docs/map.md is a short map of the code.

Development

npm run check   # type-check
npm test        # server tests with a scripted model
npm run format  # ESLint's layout fixes, then Prettier
npm run lint    # check the layout rules

Changes to web/ reload every open browser. Changes to src/server/extensions/ are reinstalled into the running server. Other server changes need Restart server from the menu, and running work resumes afterward. AGENTS.md covers editing Pi Pocket safely from inside itself, and node test/serve.ts runs a throwaway copy, with its own data and a scripted model, to check a change on.

Pi knows where Pi Pocket's own documentation is: docs/index.md starts it, for agents and people who change how Pi works without code (customizing), write extensions (extensions, with tested examples), or change Pi Pocket itself while it runs (self-editing).

Limitations

Credits

Inspired by Mario Zechner's demo of his own Pi app. Pi Pocket is an independent project, not affiliated with Earendil. JetBrains Mono is bundled under the SIL Open Font License.

License

MIT. To report a security problem, see SECURITY.md.

pi-pocket (TannerMidd/pi-pocket)

Searching Database…

What is this?Pi Pocket is a durable, multiplayer, mobile-first web app for running Pi coding-agent sessions from your own machine or your phone, with no cloud VM required.
Do I host this myself or is it a cloud service?It's self-hosted: you run the Node launcher on your machine or phone and expose it via local, LAN, Cloudflare quick tunnel, or Tailscale, instead of connecting to any cloud VM.
How do I get it running?Install Node.js 22.19+, sign in to a provider with Pi first (pi, then /login), then run the launcher; it asks how devices should connect and prints an address, sign-in link, and QR code.
Do I need the Pi coding agent already set up?Yes, Pi Pocket is a front end for Pi: it reuses Pi's own model runtime, sign-ins, skills, and prompt templates, so you pick a model and provider per session rather than configuring a new backend.
What's the biggest catch before relying on this?Only one server process can touch the database at a time, Pi Durable is still experimental and its API can change between releases, and Windows support hasn't been tested yet even though the launcher runs there.
Does it actually work on my phone?Yes, it's built as a home-screen PWA: on Android you open the link in Chrome, choose Add to Home screen, and run termux-wake-lock so Termux keeps running in the background.
How much can someone do once I invite them to a session?Anyone given steering rights can make the agent run commands on your machine as you, reaching your files and Pi Pocket's own settings and tokens; only view-only invites are restricted from making Pi act.
What is PiP?PiP ('Pi in Pocket'), opened with Alt+A, is an assistant overlay that lists, reads, starts, and messages your other sessions, follows their runs, and can watch a GitHub repo or PR and act on webhooks.
What does Codemode do?Enabled by default, Codemode has Pi write short scripts that call its tools instead of calling them one at a time, while every call still passes the same approval checks.
What is Lancet Guard?An optional extension (off by default) that makes risky bash, write, and edit calls wait for someone in the session to approve; it needs ONNX Runtime, which may fail to load on Android.
Why does it ship Omarchy themes?The UI mirrors every Omarchy desktop theme (or live-follows your OS theme) with tiled Hyprland-style windows and a Walker-style launcher, so it visually matches the Omarchy Linux setup it was built alongside.
What are similar projects?herdr-web-ui, 1code, pi-harness, foreman, bivor, learn, Choruz, fleetbase
Creator
TannerMidd
Size
8.3 MB
Stars
422
Age
13d
Commits · 90 Days