PI-Desktop
github.com/vastsa/pi-desktop- Category
- AI Agents
- Rank
- No. 2723Tools index
Previous survey · No. 2612 ·
- Pricing
- Open Source
- Type
- APP
- Use case
- Coding
- Interfaces
- Desktop
- GitHub
- 7.2k stars
- Latest release
- v0.21.0-beta.7
- Date
About
A local-first desktop workspace (Electron + Rust host + pi Agent Harness) for running AI coding agents against any local project, with bring-your-own-model support for OpenAI, Anthropic, or OpenAI-compatible/local gateways. It adds a permission layer for reviewing diffs and command output, plus extensibility via Skills, MCP servers, Subagents, and installable plugins.
What it does
A standalone app that gives a coding agent its own home outside any editor or terminal. You open a repository, pick a model, and hand the agent work in one of three modes: act directly, write a plan for approval first, or chase a fixed goal with acceptance criteria. Sessions persist across restarts, can be branched and searched, and can split work across background helpers or full worker sessions you can inspect. The agent loop itself comes from the open pi harness; this project adds the product around it.
Why it's ranked here
The engineering is unusually deliberate for an early preview. Every tool call passes an allow, ask or deny gate. Shell commands run in their own process group, or a kill-on-close job on Windows, so a stopped task takes its children with it. Each extension runs in a separate process that receives a stripped environment without provider keys, and a crashed extension is contained rather than taking down the app. The repository records its design decisions as numbered records and ships dozens of end-to-end test scripts alongside Rust unit tests. Against that, the maintainers still label it Early Preview.
What's good
Model choice is genuinely open: hosted vendors, compatible endpoints, Ollama and LM Studio, with provider, context window, reasoning level and temperature set per model, and a session can switch models mid-stream. Credentials go to the OS keychain, there is no required account or relay, and the app sends no telemetry of its own. It can import existing sessions from Claude Code, Codex, OpenCode and Pi. The extension system reaches past the agent into the desktop itself, with panels, floating widgets, themes, background services and a message bus between extensions.
Tradeoffs
The extension sandbox is weaker than it sounds. The project's own notes say permission checks cover only the host API, not raw Node file or network calls inside an extension process, and that CPU and memory limits are not enforced yet. Declared permissions are still granted automatically at load time. The plugin SDK and devkit are private workspace packages, so building an extension outside a checkout of the repository is not yet supported. Release builds ship no Node or npm, so importing an extension with npm dependencies needs a system npm on the path. The code is LGPL-3.0, not a permissive license.
How to use it well
Pick it if you want one persistent window for agent work across several repositories and several model providers, especially if a local model handles private tasks. Use Plan mode for refactors and risky changes, since extension tools are unavailable there. Install only third-party extensions you would trust to run as ordinary Node code on your machine. It does not replace your editor: it has no IDE integration by design, so keep the editor for hands-on changes and treat this as the place the agent works.
Technical notes+
Two runtimes cooperate. The Electron main process in apps/desktop/electron/main/index.ts wires the renderer, a sidecar agent runtime and a Rust host; crates/host-core/src/main.rs starts a tokio RPC server over a data directory (default ~/.pi-desktop) holding sessions, plugins, scratch and logs, and sweeps orphaned scratch dirs on boot. crates/host-core/src/tools/mod.rs caps bash timeouts between 1s and 6h (60s default), retries transient spawn failures with three short backoff steps (50, 100 and 250 ms), and terminates via killpg or a Windows Job Object. Per docs/adr/0008-plugin-runtime-isolation-target.md, each plugin is forked with utilityProcess.fork, calls pass HOST_API_ALLOWLIST then assertPermission, with timeouts of 30s per command, 110s per tool and 15s per load. The manifest type in packages/plugin-sdk/src/index.ts declares fs scopes and a net domain allowlist where an omitted list means no egress.
Observed
- License
- LGPL-3.0-or-later
- Language
- TypeScript (Electron app, pnpm monorepo) plus a Rust host crate
- Platforms
- macOS, Windows, Linux
- Runtime requirement for source builds
- Node.js 22.19 or newer, pnpm 10 or newer
- Agent kernel
- pi agent harness packages from earendil-works
- Model providers
- OpenAI, Anthropic, OpenAI-compatible APIs, custom gateways, Ollama, LM Studio
- Extension packaging
- Plugins distributed as .piplug packages or via an in-app marketplace; MCP servers supported
- Plugin isolation
- One separate process per plugin; permission gating covers the host API, not raw Node APIs
- Credential storage
- OS keychain; no PI-Desktop telemetry or mandatory account
- Tests
- Rust unit tests via cargo test plus a large set of end-to-end smoke scripts
Read from README.md, package.json, Cargo.toml, LICENSE, SECURITY.md, docs/plugin-development.md, docs/adr/0008-plugin-runtime-isolation-target.md, docs/adr/0002-use-pi-agent-harness.md, apps/desktop/electron/main/index.ts, packages/agent-runtime/src/index.ts, crates/host-core/src/main.rs, crates/host-core/src/tools/mod.rs, packages/plugin-sdk/src/index.ts.
What it can do
Run AI coding agents against local project repositories
Local project files → Agent-generated code changes
Connect to bring-your-own LLM providers (OpenAI, Anthropic, or OpenAI-compatible/local gateways)
API credentials/endpoint → Configured model connection
Review and approve diffs and command output before execution
Proposed code diff or command → Approved or rejected change
Extend agent functionality with Skills
Skill definition → Added agent capability
Connect to MCP servers for extended tool access
MCP server configuration → Additional agent tools
Delegate tasks to Subagents
Task definition → Subagent execution result
Install plugins to extend the workspace
Plugin package → Installed extension
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.