by FaqFirebase
A free, open source Electron GUI for the Pi and oh-my-pi coding agents. Chat, edit files, run a terminal, and review diffs in one window. Linux, macOS, and Windows.
# Add to your Claude Code skills
git clone https://github.com/FaqFirebase/pi-desktopLast scanned: 9/10/2026
{
"issues": [
{
"type": "npm-audit",
"message": "@xmldom/xmldom: xmldom: XML fragment injection via invalid EntityReference.nodeName during requireWellFormed serialization",
"severity": "high"
},
{
"type": "npm-audit",
"message": "baseline-browser-mapping: baseline-browser-mapping process termination on invalid input causes denial of service",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "brace-expansion: brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups",
"severity": "high"
},
{
"type": "npm-audit",
"message": "browserslist: Browserslist: Unbounded memory growth (no cache eviction) via distinct query results, leading to eventual OOM",
"severity": "high"
},
{
"type": "npm-audit",
"message": "fast-uri: fast-uri vulnerable to host confusion via literal backslash authority delimiter",
"severity": "high"
},
{
"type": "npm-audit",
"message": "js-yaml: js-yaml: YAML merge-key chains can force quadratic CPU consumption",
"severity": "high"
},
{
"type": "npm-audit",
"message": "nanoid: nanoid: non-secure generators can loop indefinitely with negative size",
"severity": "high"
},
{
"type": "npm-audit",
"message": "postcss: PostCSS: incomplete fix of GHSA-6g55-p6wh-862q — attacker-controlled sourceMappingURL reads arbitrary .map files when `from` is unset",
"severity": "high"
},
{
"type": "npm-audit",
"message": "tar: node-tar: Uncontrolled recursion in mapHas/filesFilter allows uncatchable stack-overflow DoS via crafted long-path tar with member selection",
"severity": "high"
},
{
"type": "npm-audit",
"message": "undici: undici vulnerable to downstream response desynchronization via retry interceptor",
"severity": "high"
}
],
"status": "WARNING",
"scannedAt": "2026-09-10T08:40:41.156Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}pi-desktop is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by FaqFirebase. A free, open source Electron GUI for the Pi and oh-my-pi coding agents. Chat, edit files, run a terminal, and review diffs in one window. Linux, macOS, and Windows. It has 122 GitHub stars.
pi-desktop returned warnings in SkillsLLM's automated security scan. It has no critical vulnerabilities, but review the flagged issues in the Security Report section before adding it to your workflow.
Clone the repository with "git clone https://github.com/FaqFirebase/pi-desktop" and add it to your Claude Code skills directory (see the Installation section above).
pi-desktop is primarily written in TypeScript. It is open-source under FaqFirebase 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-desktop against similar tools.
No comments yet. Be the first to share your thoughts!
Requires a passing catalog security scan. Resolve the flagged issues and resubmit to enable featuring.
⚠️ 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.
A desktop GUI for the Pi and oh-my-pi coding agents. Chat, manage projects, browse files, run commands, and install packages in one window.

Still in alpha, so expect rough edges.
Ctrl/Cmd+F); streaming follows new output only while you're at the bottom, with a jump-to-bottom control@ to insert a path reference for Pi to read) and Up/Down to recall prompts sent in the current sessionCtrl/Cmd+K) for skills, prompt templates, built-in commands, workspaces, sessions, and files; / in the composer for commands~/.pi/agent/models.json for Pi, ~/.omp/agent/models.yml for OMP)The right-side Review rail keeps safety and working-tree state visible while you chat with Pi. Toggle it from the chat toolbar (hidden by default, so it doesn't compete for space with file/image previews).
Changed files use readable status badges:
| Badge | Meaning |
|---|---|
NEW |
Untracked new file |
MOD |
Existing tracked file was modified |
DEL |
Tracked file was deleted |
ADD |
New file staged in git |
STG |
Modified file staged in git |
REN |
File was renamed |
Pi Desktop speaks Pi's RPC protocol directly, so it can run either the standard pi CLI or the compatible omp binary from oh-my-pi. Settings → Agent Configuration → Agent Installation scans for installed engines, lets you select one, and also supports a custom executable or install directory.
Each engine keeps its own sessions: Pi writes to ~/.pi/agent/sessions, OMP to ~/.omp/agent/sessions. The app reads both, so switching engines never hides your history. When sessions from both appear in one list, each row is tagged Pi or OMP, and opening one starts the engine that wrote it.
OMP's protocol-v2 large-frame transport is negotiated automatically, and model-specific thinking efforts, including max, are shown when advertised. Its native read, grep, and glob tools are used for Plan / Read-only mode, and its plugin install/update/remove verbs are mapped behind the existing package actions.
Four base modes control what Pi may do, selectable from the Review rail or Settings → Behavior:
| Mode | Behavior |
|---|---|
| Plan / Read-only | Only read/search/list tools are enabled; edits and shell commands are blocked |
| Ask before edits | Pi asks before file edits and shell commands |
| Ask before commands | Pi asks before shell commands |
| Trusted | All tools enabled |
Custom permission rules refine the modes with allow/deny rules per Pi tool, edited in Settings → Behavior → Permission rules:
allow/deny), a tool name (bash, edit, write, read, … or * for any), and an optional glob pattern matched against the tool's input: the shell command for bash, the file path for file tools. * is the only wildcard.deny * *.env* rule holds even in Trusted. Allow rules skip the confirmation prompt in the ask modes..pi-desktop/permission-rules.json. A workspace file is gated by workspace trust: once you trust the workspace it fully replaces the global list while you work there. Until then (the default for a repo you just opened) only its deny rules apply, layered on top of your global rules, and its allow rules are ignored, so a cloned repo can tighten your permissions but never loosen them. Opening a workspace whose file contains allow rules prompts you to trust it; you can also Trust/Revoke from the This workspace tab. Import/Export moves rule lists as JSON files, and the workspace file can be hand-edited or committed with a repo. The app picks up changes live.Example rules:
{ "action": "allow", "tool": "bash", "match": "npm test*" }
{ "action": "deny", "tool": "bash", "match": "rm -rf *" }
{ "action": "deny", "tool": "*", "match": "*.env*" }
Pi Desktop ships 7 built-in themes (Dark, Light, Nord, Gruvbox, Breeze Dark, Breeze Light, Breeze Claudius) plus System, and you can create your own from Settings → Appearance.
To build one in the app, click Create theme to fork the currently active theme, or Edit theme to keep editing one you already created. Pick 7 seed colors (app background, surface, text, accent, success, warning, error) and a dark or light kind; every other color in the app is derived from those seeds. Changes preview live across the whole window as you edit. Two disclosures cover finer control:
Themes you create are listed alongside the built-ins in the Theme dropdown. Rename one by editing its name in the editor, duplicate one by selecting it and clicking Create theme (which forks whatever is active), and delete one with the Delete button that appears next to the dropdown whenever a custom theme is selected.
To share a theme, use Import and Export to move it as a .json file, or paste an https:// URL into Install from URL to fetch and install one directly (HTTP is rejected, and downloads are size-capped).
A theme file uses the pi-theme/v1 format: JSON with a $schema, a name, a kind ("dark" or "light"), and 7 seeds. That's enough for a complete, valid theme; everything else is derived automatically via CSS color-mix():
{
"$schema": "pi-theme/v1",
"name": "My Theme",
"kind": "dark",
"seeds": {
"app": "#0a0a0a",
"surface": "#171717",
"text": "#f5f5f5",
"accent": "#2563eb",
"success": "#34d399",
"warning": "#facc15",
"error": "#f87171"
}
}
Two optional top-level objects let you pin exact values instead of relying on derivation: overrides (any derived token, e.g. border, scrollbar, accent-hover) and syntax (code-highlighting colors, e.g. keyword, string, comment). Omit both and the theme still renders correctly from the 7 seeds alone.
User theme files live in the app's user-data directory under themes/ (on Linux, ~/.config/pi-desktop/themes/).
There's also a community gallery at pi-desktop-themes: copy any theme's raw URL into Install from URL, or submit your own with a pull request.
Pi, Claude, and Codex each produce an initial plan, share and converge, and Pi presents the agreed consensus plan before anything is built. All members plan read-only; Pi is the only agent that edits files.
The feature is off by default. Enable it in Settings → "Multi-Agent Council Planning"; a confirmation dialog warns that it i