Mario Zechner (creator of libGDX) built pi because existing coding agents stuffed too much into the context window and hid what they were doing. His fix: strip everything back to four tools, a system prompt under 1,000 tokens, and full transparency over every model interaction.
The four tools
- read - files and images, with offset/limit for large files
- write - create or completely overwrite
- edit - surgical text replacement, exact match required
- bash - shell commands with optional timeout
No grep tool, no find tool, no sub-agents, no MCP. The argument: frontier models already know how to use rg, find, and gh through bash. Adding specialized tools burns context tokens without adding capability.
Architecture
The monorepo ships seven packages:
- pi-ai - unified LLM API across Anthropic, OpenAI, Google, xAI, Groq, Cerebras, OpenRouter
- pi-agent-core - orchestration loop with tool execution, state management, event streaming
- pi-tui - retained-mode terminal UI with differential rendering (only redraws changed lines)
- pi-coding-agent - the CLI that ties it all together
- pi-web-ui - web components for chat interfaces
- pi-mom - Slack bot integration
- pi-pods - CLI for managing vLLM deployments on GPU pods
Written in TypeScript (95.9% of the codebase). MIT licensed. 31.7k stars as of April 2026.
Design bets worth noting
YOLO mode by default. No permission checks, no filesystem sandbox. Zechner’s position: if an LLM can read files and make network requests, permission dialogs are theater. Recommend containerization instead. Claude Code takes the opposite bet with deny-first permissions and five modes.
No MCP support. Zechner tested Playwright’s MCP server and found it consumed 13.7k tokens just sitting in the system prompt. His alternative: CLI tools with READMEs that the agent consults on demand. Progressive disclosure over upfront loading. Contrast this with the MCP ecosystem that’s building in the other direction.
No built-in planning. Instead of session-local todo modes, pi uses external files (PLAN.md, TODO.md) that persist across sessions and stay visible. Similar to how Claude Code Slash Commands and Claude Code Agent Skills keep things file-based.
Minimal system prompt. Under 1,000 tokens total. The bet: frontier models went through enough RL training to understand coding-agent semantics without verbose instructions. Most competing agents run 5,000-10,000+ token system prompts.
Self-extending agent. Armin Ronacher (Flask creator) praised this pattern: instead of downloading pre-built extensions, you ask the agent to write its own tools. 25+ in-process TypeScript hooks let you reshape the runtime.
Where it sits in the landscape
Pi powers OpenClaw, which hit 145k GitHub stars in a week. The “minimal harness” approach validated itself: Terminus 2, a reference agent offering only raw tmux interaction, ranks competitively on Terminal-Bench 2.0.
The tradeoff is real. Claude Code ships everything built-in (sub-agents, teams, MCP, plan mode, web search, notebooks, 10+ tools). Pi ships almost nothing and expects you to build what you need. Configuration-level control vs. runtime-level control.
People switching from Claude Code to pi report their workflows got more predictable. People staying with Claude Code value the guardrails and batteries-included approach. Both positions make sense depending on whether you want to understand the machine or just use it.
The philosophy underneath
Zechner calls it dictatorial scope management: “if I don’t need it, it won’t be built.” Forks welcome for divergent needs. The codebase stays focused.
This connects to the YAGNI principle in agile: the work you skip matters more than the work you ship. Pi is a live experiment testing how far that idea stretches in agent design.