A local-first desktop app for AI coding agents.
Bring your own models. Keep your code, your keys, and your conversations on your machine.
Download · Getting started · Highlights · Screenshots · How it works · Development · 简体中文
PI-Desktop puts an AI coding agent in a native desktop app. Point it at a project, describe what you want — explore and understand code, build a feature, review changes, fix a failing test — and watch it work, with every file edit and shell command surfaced for your approval.
There is no account, no subscription, and no cloud in the middle: you connect the model provider you already use, and everything else — sessions, settings, API keys — stays local.
- Any model, your keys. Anthropic, OpenAI, or anything that speaks an OpenAI-compatible API — hosted relays as well as local gateways like Ollama or LM Studio. Model IDs are free-form (no hardcoded allowlist), with per-model context window, output limit, temperature, and thinking-mode controls.
- Agent, Plan, and Goal modes. Agent mode reads, edits, and runs commands to get things done. Plan has the same agent inspect the project and submit an immutable implementation checkpoint for approval. Goal lets the agent agree on an outcome and acceptance criteria, then continue autonomously after approval.
- You approve every change. File writes and shell commands ask first, with session-scoped grants and a configurable default policy. Unanswered prompts deny by default.
- A real workbench. Review the agent's edits as message-scoped diffs with guarded rollback, inspect command output in the transcript, preview a local app in a browser, and browse project files — all in a side panel, without leaving the conversation.
- Projects and sessions. Sessions are grouped by project in a multi-project sidebar, with pinning, archiving, sorting, branching, notifications, and throwaway scratch sessions.
- Local-first and private. Transcripts live on disk as plain JSONL with a SQLite index — easy to back up, grep, or delete. API keys go into the OS keychain. Logs stay local; there is no telemetry.
- Extensions beyond plugins. Manage standalone MCP servers, Skills, and Subagents from the Extensions page, with global or project-scoped activation. Plugins can add commands, panels, agent tools, skills, themes, MCP servers, resident services, and a message bus; the local/official marketplace and
.piplugpackage workflow are available today. - A fast daily workflow. Use slash commands and
@file references, paste files into session scratch, stage the next turn while an answer streams, search plugins globally with Option/Alt+Space, and create manual or recurring task prompts. - Comfortable to live in. English and 简体中文, light/dark/system and plugin themes, command palette, onboarding checklist, local notifications, context checkpoints, and update notifications for packaged builds.
Plugin APIs and panels are permission-gated and run out-of-process. Plugin code is still user-trusted code rather than a complete OS sandbox, so review permissions and only install plugins you trust.
Grab the latest build from the Releases page.
| Platform | Package | Status |
|---|---|---|
| macOS (Apple Silicon) | .dmg / .zip |
✅ Published with each release |
| Windows (x64) | NSIS installer | ✅ Published with each release; in-app auto-update |
| Linux (x64) | .AppImage / .deb |
✅ Published with each release; AppImage auto-updates in-app |
macOS note: builds are not yet code-signed or notarized. If macOS refuses to open the app, right-click it and choose Open, or clear the quarantine flag:
xattr -cr /Applications/PI-Desktop.app
Packaged builds check GitHub Releases for new versions and show an in-app update banner.
- Add a model provider. Open Settings → Model configuration → Add provider: pick the API style, paste the base URL and your API key, then choose or type a model ID. The key is stored in your OS keychain and never shown again.
- Open a project. Add a project folder from the sidebar — sessions, tools, and permissions are scoped to it.
- Describe the task. Start in Agent mode to make changes, switch to Plan for an approval checkpoint, or use Goal when you want to approve an outcome rather than prescribe the steps. Review work in the Review diff panel before you commit anything.
- Extend the workspace when needed. Open Extensions to add an MCP server, a Skill, a Subagent, or a plugin. Use Settings → Import to bring in local sessions from Claude Code, OpenCode, Codex, or Pi.
PI-Desktop keeps renderer privileges narrow and separates the agent loop from the desktop UI:
- Electron shell — a sandboxed React renderer plus the main/preload bridge for desktop-only services such as panels, browser preview, updates, and supervision.
- Rust host core — owns SQLite, transcript persistence, secrets, permissions, and workspace access over stdio JSON-RPC.
- pi agent sidecar — a Node process running the pi agent engine (
pi-ai+pi-agent-core) for the actual agent loop.
The full picture lives in the architecture spec.
PI-Desktop is an early preview under active development. The current 0.5.x line ships the app shell, streaming agent runtime, Agent/Plan/Goal contracts, workspace tools with permissions, the workbench, projects and sessions, imports, extensions (plugins/MCP/Skills/Subagents), context checkpoints, notifications, and cross-platform packaging with update checks.
Still in progress: signed and notarized macOS builds, native Windows/Linux qualification, a stronger plugin sandbox and publisher-signature path, and full UI-driven E2E coverage. See the milestones and the project board.
Prerequisites: Node.js >=22.19, pnpm >=10 (the repository uses pnpm 11), and a stable Rust toolchain.
# build the Rust host core
cargo build -p host-core
# install JS dependencies and build packages + app
pnpm install
pnpm build:js
# run in dev mode
pnpm dev
# protocol e2e smoke test
PI_DESKTOP_TEST_API_KEY=... pnpm test:e2e
# Plan host acceptance (includes the real 60-second default timeout)
PI_DESKTOP_E2E_LONG_TIMEOUT=1 pnpm test:e2e:plan
# rendered English / Simplified Chinese Plan acceptance through Electron CDP
pnpm test:e2e:plan-ui
# focused desktop probes
pnpm test:e2e:boot
pnpm test:e2e:supervision
pnpm test:e2e:subagentsCI runs JS build / typecheck / lint / unit tests plus cargo test for
code-related pull requests and pushes to main; documentation-only changes are
skipped. Releases are cut by tag:
node scripts/release.mjs 0.2.0 --tag # bump versions + commit + tag v0.2.0
git push origin main v0.2.0 # Release workflow builds & publishes- Plugin development: zero to one
- Screens — every surface, captured from the running app
- Spec index — start here
- Product scope
- Baseline decisions
- Architecture
- UI information architecture
- E2E test plan
- Plugin system
- ADRs · Milestones · Agent guide
PI-Desktop is built with and informed by these open-source projects:
- Agent runtime: pi-mono, whose
pi-aiandpi-agent-corepackages provide the agent loop and provider abstractions. - Desktop and UI foundation: Electron, React, Vite, Tailwind CSS, Lucide, Shiki, Mermaid, KaTeX, TypeBox, and i18next.
- Behavioral and visual references: OpenAI Codex informs parts of the shell and context-management UX. OpenCode DCP was studied as a behavioral reference for context compaction; it is not a PI-Desktop dependency, and no code is copied from it.
- Bundled fonts: Geist,
Inter,
Noto Sans SC (Source Han Sans lineage),
and LXGW WenKai, which includes work
from Klee. Their SIL Open Font
License texts are included under
apps/desktop/src/assets/fonts/licenses/.
- Linux.Do — A community for sharing and discussing technology.
Licensed under the GNU Lesser General Public License v3.0 or later.



