The project is right there.
Browse the tree and edit in Monaco without leaving the conversation.
A desktop surface for the pi coding agent
Your models. Your subscriptions. Your extensions.
The agent, the code and the result in one window.
pi --mode rpcpi owns the loop, the project context, the skills and the tools. A provider extension can put Claude Code underneath it.
How Claude runs under pi ↗Not another agent loop. A place to work with the one you already chose.
01 / IDE view
Conversation first, like Claude Desktop. Task first, like the Codex app. Or an editor next to the agent. The layout is a preference. The engine is not.
Arrangements, not integrations. The two app-inspired views are crops of the one capture above, rearranged. They are not screenshots of Claude Desktop or Codex, and not presets Phosphor ships.
What ships: one pane, docked left or right, resizable, or fullscreen. Saved per session. How panes work ↗
Headroom Optimization · Claude Opus 5 via pi-claude-cli · Max thinking · 35% context at capture. Open the full IDE capture ↗
Browse the tree and edit in Monaco without leaving the conversation.
Text, tables and tool activity in a readable transcript, not a terminal dump.
Model, thinking level and context usage sit beside the prompt.
02 / Models & accounts
Sign in. Don’t paste keys. Every account login pi can drive is a button in Settings, next to every provider you have installed.
Plus or Pro
pi’s native Codex OAuth. No CLI bridge in the way.
Pro or Max
The Claude Code provider drives your signed-in Claude Code CLI.
Copilot subscription
Sign in through pi. Enterprise Server uses pi’s terminal login.
Kimi For Coding
Sign in with your Kimi For Coding plan through pi.
Plan limits and billing are your provider’s, not ours. Claude subscription sessions run through @saccolabs/pi-claude-cli, not native Anthropic OAuth. Sign-in routes ↗
Not tied to one provider
Search what you have access to. Star what you use. Switch mid-session and the conversation comes with you. Thinking levels appear when the model has them.
API keys and custom or local endpoints work too. The list is whatever your pi install can reach.
Model controls ↗
03 / The gateways
Accounts run out. Tool schemas take space. Long conversations fill the window. All three are facts on screen, not surprises at the end of a turn.
Keep several Claude logins. Send new sessions to one, in order, or round-robin. Open an account to see its usage windows and which sessions are spending it.
A running session keeps its account. Moving it respawns from the saved session, and the next turn re-reads the thread.
Account gateway ↗One proxy tool per server. The agent fetches a tool’s schema when it needs it, instead of carrying every schema in every request.
Direct tools opt out of that, and pay for it. OAuth and tokens live in the adapter, never in Phosphor.
MCP gateway ↗Open the meter: messages, system prompt, tools and MCP schemas, with token, cache and cost counts beside them.
Claude sessions add the account’s usage windows and plan limits. Missing telemetry shows as missing, never as zero.
Read the context meter ↗
Tools from your actual stack
Mount a curated connector, or add any MCP server by URL or command. Inspect it, sign in, reconnect and test it. No model runs, so no tokens are spent.
Some services want more from you. Slack needs your own registered app and its scopes.
Connector setup and permissions ↗04 / Lanes, not loose chats
A lane is a session, its branch, its worktree and its PR on one row. Every live session is its own pi process. None of them manages the others.

A new task gets a worktree and a branch off the remote trunk by default. Pick a prefix, let the first turn name it, or work in the main checkout on purpose.
Home groups lanes by what they need: waiting on you, ready to merge, needs a push, in review, running. The ledger shows spend, tokens and live processes.
Search by title, branch or PR. See checks and review state. Update from trunk, then merge locally when it is ready.
The board is drawn from state you already have. No model runs to organize it. PR badges read gh and never write. The merge is local, not a GitHub merge. Lane behavior ↗Worktree safeguards ↗
05 / The transcript
Text streams in. Thinking gets its own block. Tool calls become steps you can open. An edit shows its diff, not a sentence saying it went fine.

A small input. Several ways in.
Enter steers the running turn. A follow-up waits for it to finish. Two queues, kept apart. Drafts survive session switches and restarts.
@/!!!06 / The rest of the desk
The agent is not the only one allowed to edit a file or run a command. The tools beside the conversation are real tools.

Create, rename, move, copy and import. Multi-select and drag. Monaco tabs, dirty markers, and a conflict bar when an outside change meets unsaved work.
Files and editor details ↗
Real shell tabs with search, clipboard and scrollback, separate from the agent’s bash. “Run in terminal” pastes the command. You press Enter.
Terminal behavior ↗07 / Artifacts
A plan, a diagram or an interactive page should not scroll away into chat history. Artifacts give deliverables a versioned pane of their own.

HTML, Markdown, SVG, Mermaid, code and charts. Diff any two versions. Reopen the session and they are back. The Artifacts page indexes every open session.
Model-authored HTML runs on an opaque origin with no network. That protects the app from the document. It does not sandbox the agent’s tools. Artifact tools and versioning ↗
08 / Built on pi, extended by you
Install pi packages from npm, Git or a local path, global or per project. Tools, skills, prompts and themes all arrive through the same system.
Phosphor
↕ typed IPC
Electron main
↕ JSONL / stdio
pi + extensionsPhosphor talks to pi over RPC and imports none of its code. The bundled extensions run inside each session’s pi process.
The provider drives the official Claude Code CLI and streams it back into pi’s session. pi supplies project instructions, skills and extension tools. Claude keeps its native tools, your subscription and one persistent process.
The Claude provider boundary ↗Skills get their own page. Web access, MCP and subagent packages are one install away.
Read the extension contract ↗Six extensions ship with Phosphor
artifactsVersioned deliverables in their own pane.
context-breakdownEstimates what is filling the context window.
headroomLosslessly shrinks big tool results through a local proxy. Opt-in.
mcp-statusPer-server MCP state, straight from the adapter.
tool-name-guardRepairs a malformed tool name before it bricks the thread.
worktree-pathsRefuses a file tool that wanders into the wrong checkout.
09 / Pick up where you left off
A session is a pi session file, not a format invented for a UI. Phosphor adds the controls to move through it and a layout that remembers how you work.
See the session tree. Jump to a point, bookmark it, fork it or clone it. Export the conversation as HTML.
Resume saved sessions. Panes and drafts stay where you left them. Background sessions keep streaming while you look elsewhere.
Steer, queue follow-ups, stop, compact, auto-retry. Session files are written when a turn ends, not on every token.
10 / Run it on your machine
Install pi, then Phosphor. Sign in, pick a model, open a folder, start a session.
Download a releaseMIT licensed. Provider subscriptions and API usage are separate.
npm install -g @earendil-works/pi-coding-agentcurl -fsSL https://github.com/agustinsacco/Phosphor/releases/latest/download/install.sh | shThe installer verifies the download against the release checksums. Piping to sh is a trust decision, so the script is short and public. Read install.sh ↗
DMG or ZIP. Apple silicon and Intel.
Release assets ↗AppImage or .deb. The script installs the AppImage.
Release assets ↗Per-user .exe installer, x64. Unsigned: SmartScreen asks once.
Release assets ↗pi must be on PATH. Until it is, Phosphor shows a setup screen with the command. Sign in by running pi in the built-in terminal and using /login, or put keys and endpoints in ~/.pi/agent/.
Claude is a separate package. Subscription sessions need the signed-in Claude Code CLI and @saccolabs/pi-claude-cli ≥ 0.7.1. Provider setup ↗
Updates match the install. Packaged apps check at launch and every 30 minutes. AppImage and eligible macOS installs restart to update. Package-managed or read-only installs link to the release. Let the current turn finish first. Update paths ↗
A coding workspace, not a cloud service. No sync, no orchestrator agent. Monaco is an editor, not a language server or a debugger. Product scope ↗
Current behavior is documented under docs/. The layout studies above illustrate it; they do not add features.
Native and package providers. OAuth or API keys. Custom endpoints. Model and thinking controls.
Claude account routing and usage. Estimated context composition. MCP cost per server.
One row per task: session, branch, worktree, PR state. Search, naming, cleanup, lost-work guards.
Streaming text, thinking, tool steps, rich output, file mentions, shell lines, steering and follow-ups.
Explorer transfers, Monaco tabs, dirty-buffer conflicts. A real shell beside the chat.
Versioned previews and diffs, sandboxed HTML, packages, tools, skills, prompts and themes.
Independent concurrent sessions, per-session pane placement, fullscreen, global pages.
pi on PATH, per-platform release assets, update checks that match how you installed.