badlogic/pi-mono: The Minimalist Coding Agent Built Because Everything Else Was Too Much
Mario Zechner got tired of flickering UIs, hidden context, and feature bloat. So he built a tiny, extensible terminal agent that celebrates writing code to extend itself. It is opinionated, flicker-free, and deliberately small.
- Mario Zechner built pi-mono as a deliberately minimal terminal coding agent with only four core tools and a system prompt under 1000 tokens.
- Pi uses a custom differential rendering TUI that eliminates flickering and delivers a calm, stable interface during long sessions.
- Extensibility happens through plain TypeScript files in the .pi directory that the agent can write and hot-reload itself.
- A robust abstraction layer normalizes quirks across many LLM providers so the agent behaves consistently when switching models.
It's Not Much, But It's Mine
Mario Zechner has shipped serious open source before. He created libGDX, the Java game development framework that powered countless mobile and desktop games for over a decade. When he looked at the AI coding agent landscape in late 2025, he saw spaceships: massive, complex tools with 80 percent unused functionality.
He decided to build the opposite.
“My philosophy in all of this was: if I don't need it, it won't be built. And I don't need a lot of things.”
This is not false modesty. Pi ships with just four core tools: read, write, edit, and bash. The system prompt stays under 1000 tokens. There are no built-in sub-agents, no plan mode, no todo lists, no background tasks. If you want those, you write a TypeScript extension and the agent hot-reloads it.
The .pi directory becomes the agent's own dotfiles: prompts, extensions, git hooks, skills. Everything is visible. Everything is yours.
“It's not much, but it's mine.”
The Terminal That Doesn't Flicker
The first thing you notice when you run pi is how calm the interface feels. Most terminal agents repaint the entire screen constantly. The result is visual noise that wears on you during long sessions.
Zechner, a veteran of the DOS era, refused to accept that. He built packages/tui, a retained-mode terminal UI library that uses differential rendering. Only the parts that change are redrawn.
The result feels closer to a high-quality native application than a typical CLI tool. You can even run Doom in it, according to users.
Four Tools and a Dream
At its heart, the coding agent is almost absurdly simple. Four tools. A short system prompt. The rest is up to you and the model.
This constraint forces better workflows. Instead of relying on hidden sub-agents or opaque planning features, you use files like PLAN.md, TODO.md, or simply open another terminal. Many users run Pi inside tmux alongside other instances.
The extension system lives in .pi/extensions. These are plain TypeScript files. The agent can write new ones, hot-reload them, and persist state across sessions. This is extensibility through code instead of plugins.
Normalizing the LLM Tower of Babel
The real engineering depth hides in packages/ai. This package provides a single unified interface across OpenAI, Anthropic, Google Gemini, Vertex, Amazon Bedrock, Mistral, GitHub Copilot, Azure, and more.
It is not a thin wrapper. The team wrote dozens of targeted tests for provider quirks: thinking token signatures, tool call ID normalization, streaming edge cases, context handoff between models, and cache retention behavior.
This layer is why you can switch models mid-session and why the agent behaves consistently regardless of which backend you choose.
Comparison: Minimalism vs. The Feature Factories
| Feature | Pi | Claude Code | OpenCode | Aider |
|---|---|---|---|---|
| Core Tools | 4 (read, write, edit, bash) | Many built-in | Multiple agents + LSP | Strong Git focus |
| Extensibility | Self-written TypeScript + hot reload | Limited | Plugins | Custom commands |
| TUI Quality | Differential, flicker-free | Basic | Good | CLI output |
| Context Control | Explicit and observable | Hidden in large prompts | Configurable | Good |
| Sub-agents | None (use multiple sessions) | Yes | Yes | Limited |
| Language | TypeScript monorepo | Closed | Go/TS | Python |
| Philosophy | If I don't need it, it won't be built | Comprehensive | Feature-rich | Git-native pair programmer |
Self-Improving Infrastructure
Pi treats the agent as something that should improve its own codebase. Sessions form trees that you can branch and merge. Compaction keeps context under control without losing important history. Extensions can be written by the agent itself.
Armin Ronacher, creator of Flask and uvloop, adopted Pi for OpenClaw and became one of its strongest advocates.
“Pi’s entire idea is that if you want the agent to do something that it doesn’t do yet, you don’t go and download an extension or a skill or something like this. You ask the agent to extend itself. It celebrates the idea of code writing and running code.”
The Veteran’s Taste
What sets Pi apart is not any single feature. It is the accumulation of taste from someone who has maintained large open-source projects for decades.
You see it in the obsessive testing of provider quirks, the care taken with the TUI, the decision to keep the core small, and the automation around community management (OSS Weekend mode that closes new issues on Pi Day).
The project grew to over 23,000 stars in months because developers recognized quality and principle when they saw it.