by TannerMidd
A durable, multiplayer, mobile-first web app for Pi agents, built on Pi Durable
# Add to your Claude Code skills
git clone https://github.com/TannerMidd/pi-pocketSee how pi-pocket compares with popular alternatives.
pi-pocket is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by TannerMidd. A durable, multiplayer, mobile-first web app for Pi agents, built on Pi Durable. It has 83 GitHub stars.
pi-pocket's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/TannerMidd/pi-pocket" and add it to your Claude Code skills directory (see the Installation section above).
pi-pocket is primarily written in TypeScript. It is open-source under TannerMidd on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh pi-pocket against similar tools.
No comments yet. Be the first to share your thoughts!
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
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.
Website · Quick start · Features · Remote access
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.
/schedule every weekday 8:00 summarize CI), and /until npm test keeps Pi going until the check passes.localhost included.~/.pi-pocket/extensions/.The full tour is in docs/features.md.
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.
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.
| 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.
| 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 |
Durable harness over pocket.sqlite, connected tabs, access, and the session list |
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 |
Web files, JSON API, server-sent events, uploads, artifacts, invites, the Browser panel's frames and input |
src/server/browser.ts |
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.
npm run check # type-check
npm test # server tests with a scripted model
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.
package.json.