pi-webdesk
v0.1.0
Published
An opinionated web UI for Pi, with isolated task worktrees and code review
Downloads
156
Maintainers
Readme
Pi Webdesk
An opinionated web UI for Pi.
Webdesk is a local-first browser workspace built specifically for Pi. It gives a solo developer a calm, worktree-first place to run several coding tasks, inspect changes, validate them, and explicitly decide what gets committed or merged.
Pi remains the agent runtime and the source of truth for sessions, models, authentication, settings, skills, extensions, prompts, themes, and packages.
Status
The core vertical slice is runnable locally, including through Pi's package manager: an authenticated localhost browser can register repositories, create isolated task worktrees, run supervised Pi runtimes with policy approvals, stream and steer prompts, and reconnect with exact event replay or a Pi-reconstructed canonical snapshot. Tasks provide live bounded Git review, explicit validation, snapshot commit approval, local merge approval, and non-destructive archive/restore. Durable runtime ownership lets a restarted daemon terminate verified orphan process groups before accepting traffic; ambiguous ownership blocks only the affected task, and interrupted prompts are never resumed automatically. The current UI includes formatted conversations, expandable tool and skill-file activity with canonical reload recovery, proposed edit previews, compact session branches, persistent task selection, read-only Pi configuration/resource discovery, and schema-bound Webdesk appearance preferences.
Install in Pi
Install the public preview through Pi's package manager:
Requires Node.js 22.19+, npm, Git 2.38+, and an existing Pi setup. macOS is the primary platform; Linux uses xdg-open when available.
pi install npm:pi-webdeskRestart Pi, or run /reload in an existing interactive session. Then:
/webdesk Start Webdesk in the background and open its browser workspace
/webdesk status Show whether the daemon is running
/webdesk stop Gracefully stop the daemon and its active task runtimesThe npm package includes the compiled browser app and daemon. Pi loads only the launcher extension; loading or reloading it never starts a daemon. /webdesk opens a fresh one-time login link to http://127.0.0.1:4517 (valid for 15 minutes). If the browser cannot open automatically, copy the link from Pi. Repeating /webdesk reuses the running daemon and replaces any unused login link.
The daemon keeps running when Pi or the browser closes. /webdesk stop preserves task worktrees, metadata, and Pi sessions; it stops active execution without replaying interrupted prompts. Use it before updating or removing the package, then restart Pi or /reload to load the updated launcher. Removing the Pi package does not remove ~/.pita or Pi's files. Webdesk opens its workspace; your current terminal conversation is not moved automatically. Existing sessions can be continued through Webdesk's session workflow.
After stopping Webdesk, update it from your terminal:
pi update npm:pi-webdeskThen restart Pi or /reload, and run /webdesk again. Package updates are managed by Pi; Webdesk's resource UI is read-only.
You can also install the current GitHub source with pi install https://github.com/luka-zivkovic/pi-webdesk. This runs npm install --omit=dev and builds the package automatically. If switching from a Git installation to npm, stop Webdesk and run pi remove https://github.com/luka-zivkovic/pi-webdesk before the npm install to avoid duplicate launcher extensions. Your worktrees and sessions are preserved.
Configuration is inherited from the environment that starts Pi:
| Variable | Default | Purpose |
| --- | --- | --- |
| PITA_PORT | 4517 | Loopback HTTP port |
| PITA_STATE_DIR | ~/.pita | Private state directory, worktrees, and background log (daemon.log) |
| PITA_PI_EXECUTABLE | Package's tested Pi runtime | Explicit Pi executable override |
Webdesk keeps its tested Pi runtime dependency alongside the application and uses Pi's existing configuration, authentication, resources, and session formats. Set Pi's own PI_CODING_AGENT_DIR to use a different Pi configuration directory. Binding to other interfaces is not supported.
To install a local development checkout:
pnpm install
pnpm build
pi install "$PWD"The distribution also includes a pi-webdesk executable for npm installations. From a built checkout, run node dist/apps/daemon/src/cli.js --no-browser to serve the UI in the foreground; Ctrl+C stops it. open, status, and stop are also available as CLI commands. Pi package installation does not add this executable to your shell's global PATH.
Existing Pita installations
Webdesk was previously named Pita. /pita remains an alias for /webdesk. The existing ~/.pita data directory and PITA_* environment variables retain their names, so tasks, worktrees, sessions, preferences, and launch configuration continue to work without moving data. Existing browser storage and internal protocol identifiers are also preserved.
Development and verification
pnpm install
pnpm --filter @pita/daemon start # terminal 1
pnpm --filter @pita/web dev # terminal 2The development daemon prints a login link for the Vite origin, http://localhost:5173. PITA_ALLOWED_ORIGIN configures that development origin; PITA_DAEMON_PORT configures Vite's proxy when using a different daemon port.
pnpm test
pnpm typecheck
pnpm build
pnpm test:packageThe package check performs a fresh npm source install, packs and installs production dependencies into an isolated directory, registers the package with an isolated Pi configuration, verifies the launcher and real Pi policy handshake, and checks browser authentication and daemon restart. It makes no model calls. npm pack rebuilds the distribution. Only the root pi-webdesk package is published; internal workspace packages stay private.
For a release, run the checks above plus pnpm test:process, then pack and test the exact archive before publishing it:
npm pack
WEBDESK_PACKAGE_TARBALL="$PWD/pi-webdesk-0.1.0.tgz" pnpm test:package
npm publish ./pi-webdesk-0.1.0.tgz --access public --ignore-scriptsUse the version from package.json in the archive name. WEBDESK_PACKAGE_TARBALL makes the package check install that archive while still verifying a fresh Git-source build.
Locked technology direction
- Browser UI: React, TypeScript, Vite
- Styling and components: Tailwind CSS v4, shadcn/ui on Base UI, Lucide icons
- Local service: Node.js/TypeScript daemon bound to localhost
- Runtime: one supervised Pi runtime per active task
- Repository model: one Git worktree per task
The first implementation milestone is a thin vertical slice: open a repository, create a task worktree, talk to Pi with streamed events, survive a browser reconnect, and inspect the resulting diff.
