TannerMidd/pi-pocket

★ 137⑂ 6

A durable, multiplayer, mobile-first web app for Pi agents, built on Pi Durable

About TannerMidd/pi-pocket

TannerMidd/pi-pocket is an open-source project on GitHub, mainly written in TypeScript. A durable, multiplayer, mobile-first web app for Pi agents, built on Pi Durable It currently holds 137 stars and 6 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).

Project Overview

AI Homed tracks it on the Today's Trending board, currently at rank #82 with 0 new stars today.

GitHub Repository Details

Repository TannerMidd/pi-pocket · default branch - · size 0 KB · watchers 0 · source: GitHub REST API and repository README

README

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

https://github.com/TannerMidd/pi-pocket/blob/HEAD/Pi Pocket in the Tokyo Night theme, on a desktop and a phone. On the desktop, the sidebar lists sessions by day while Pi fixes a sign-in redirect loop in tiled windows: a diff, 48 passing tests, and a teammate asking for the branch. On the phone, the same session 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 | 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, 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.

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.

GitHub Stars & Activity

137Stars
6Forks
0Open issues
TypeScriptLanguage

GitHub Popularity

GitHub stars137
Forks6
Open issues0
Primary languageTypeScript
License-
Stars gained today0
Created-
Last pushed-

Trending History

Daily boardrank #82 · ▲ 0 stars

Related AI Projects

1

deepseek-ai / deepseek-harness

TypeScript★ 244,544⑂ 0
→
2

n8n-io / n8n

TypeScript★ 206,762⑂ 0
→
3

firecrawl / firecrawl

TypeScript★ 189,134⑂ 0
→
4

thedotmack / claude-mem

TypeScript★ 97,052⑂ 8,555▲ 536 stars
→
5

ruvnet / ruflo

TypeScript★ 73,998⑂ 8,799▲ 87 stars
→
6

heygen-com / hyperframes

TypeScript★ 57,834⑂ 5,158▲ 582 stars
→
7

ChromeDevTools / chrome-devtools-mcp

TypeScript★ 53,035⑂ 5,704▲ 45 stars
→
8

wonderwhy-er / DesktopCommanderMCP

TypeScript★ 9,940⑂ 1,247▲ 13 stars
→

More AI Rankings