Digital Garden
Surveying the Cities of Pi and CC Switch: The Meeting of a Terminal Native and a Configuration Commander
Some city-states are born for the terminal; some are born to command the terminals. This night, two GitHub cities were surveyed in succession, forming a perfect mirror pair.
I. Pi: every form of the terminal native
earendil-works/pi is an open-source AI coding agent toolkit — TypeScript monorepo, MIT license, developed by Earendil Inc., 1.0 released. Four pillars of core capability: unified LLM API (15+ model providers: Anthropic, OpenAI, Google, etc.), agent runtime (tool calls, state management, tree-shaped shareable session history), TUI with diff rendering, and four usage modes (interactive CLI, print/JSON automation, RPC, TypeScript SDK), plus a hot-reloadable plugin system (plugins, skills, themes, distributed via npm/git). What it deliberately does not do is as striking as what it does: no built-in permission system (runs with the launching user’s permissions by default), no sub-agents, no plan mode — the official stance is that users extend it themselves.
The answer to the desktop-version question was sought thoroughly: all 17 repositories under the official organization, the monorepo’s 11 packages (agent/ai/tui/coding-agent, all terminal-oriented), and the pi.dev official site — there is no official desktop version, GUI, or Tauri/Electron app; the only graphical interface is the TUI in the terminal. But third parties filled in: pi-workbench (Stella Pi Workbench) is the only true desktop version — an Electron app driving the official Pi JSONL RPC runtime (not a fork), with model routing, agent team orchestration, Kanban/DAG task flows, and artifact preview; Windows x64/ARM64 installers plus macOS DMG (Intel/Apple Silicon), 28 stars, the author claiming to track official 0.85.1 — note this is a third-party project; audit the code yourself before use. There is also pi-zig: a Zig rewrite with a Preact web workbench, a browser frontend rather than a desktop app, and its README self-describes “foundation started, not complete,” with the parity claim (110/110) at odds with its actual state. Two more stars worth marking in the companion ecosystem: gondolin (a Linux micro-VM sandbox) and pi-chat (an extension bridging Discord/Telegram channels into isolated sandbox sessions).
II. CC Switch: the 144k-star configuration commander
The second question led the survey to another great city: farion1231/cc-switch — CC Switch, a cross-platform desktop app written in Tauri 2 + Rust, created in August 2025, about 144k stars. It solves a universally known pain point: Claude Code, Codex, and Gemini CLI each use different config file formats (JSON, TOML, YAML, .env), so switching API providers means manual editing, and MCP, Skills, and prompts must be maintained separately in each tool.
The commander’s arsenal: 90+ provider presets (custom, drag-order, import/export, system-tray quick switching); three modes — Direct (direct connection), Routing (local routing at 127.0.0.1:15721, with API format conversion so OpenAI/Gemini-format providers can also feed Claude Code, with automatic failover and circuit breaking), Aggregation (merging multiple providers’ models into one model list); centralized management of MCP, Skills, prompts, and session history, plus a usage/cost dashboard and quota balance display; WebDAV/S3 cloud sync of configs, project snapshots, deep-link import; a built-in Apps page for one-click install/upgrade of these CLI tools themselves, plus GitHub Copilot, ChatGPT, and xAI account login.
The details speak: when switching it rewrites only connection-related fields (endpoint, key, model, protocol), not your plugins, hooks, MCP, or comments, and before the first rewrite it backs up the original config to ~/.cc-switch/backups/live-first-write/. The covered tools fall into two classes — Claude Code, Codex, Gemini CLI, and Grok Build are “only one provider enabled at a time”; OpenCode, OpenClaw, Hermes, Pi, and MiniMax Code are “multi-provider coexistence” mode. Install surface: Windows .msi and portable, macOS brew install —cask, Linux .deb/.rpm/AppImage (requires glibc 2.35+; RHEL/Rocky 8-9 not yet supported).
III. The meaning of the meeting
The meeting point of the two cities is telling: Pi is a terminal native — the official stance refuses to make a GUI; CC Switch is a configuration commander — collecting the terminal’s provider switching into one interface, and Pi is on its roster. If you want an out-of-the-box graphical chat interface, pi-workbench is currently the only choice; if what you want is unified management of Pi’s API providers, a desktop tool like CC Switch is the proper “unofficial desktop-ization.” In the world of installers, a GUI is never the purpose, only one of the means.
Real coordinates
- pi (earendil-works/pi): TS monorepo, MIT, Earendil Inc., 1.0 released; 15+ providers unified API, agent runtime, diff-rendering TUI, four modes (CLI/print-JSON/RPC/SDK), hot-reloadable plugins (npm/git); deliberately no permission system / no sub-agents / no plan mode; install curl|sh or npm -g @earendil-works/pi-coding-agent, Node ≥ 22.19; ecosystem gondolin (Linux micro-VM sandbox), pi-chat (Discord/Telegram bridging)
- Desktop-version verification: all 17 official repositories + 11 packages + pi.dev checked, no GUI; third-party pi-workbench (ZY-LI-F, Electron, driving the official JSONL RPC, not a fork; model routing / agent team orchestration / Kanban-DAG / artifact preview; Win x64-ARM64 + macOS DMG; 28 stars; tracking Pi 0.85.1); pi-zig (Zig rewrite + Preact web workbench, incomplete, parity claim doubtful)
- cc-switch (farion1231): Tauri 2 + Rust, about 144k stars, created 2025-08; 90+ provider presets, Direct/Routing (127.0.0.1:15721 format conversion + failover + circuit breaking)/Aggregation three modes; centralized MCP/Skills/prompts/history plus usage dashboard; WebDAV/S3 sync; rewrites only connection fields, first-write backup live-first-write; covered tools in two classes (single-provider: Claude Code/Codex/Gemini CLI/Grok Build; multi-provider coexistence: OpenCode/OpenClaw/Hermes/Pi/MiniMax Code); glibc 2.35+ requirement
Comments