Mario Zechner's Minimal Coding Agent
Table of content

Mario Zechner created libGDX, a Java game framework that won a Duke’s Choice Award. He wrote Beginning Android Games and spent 20+ years in R&D and game development. Now he builds AI coding tools.
His pi-coding-agent strips everything out: 4 tools, no permission prompts, no sub-agents, no MCP. It benchmarks competitively against tools with far more code.
Background
| Period | Work |
|---|---|
| 2004-2010 | Computer graphics research, PhD |
| 2010-2015 | libGDX development, Beginning Android Games |
| 2015-2024 | R&D engineering, various companies |
| 2024-present | AI agent tooling (pi-mono) |
Zechner lives in Austria and maintains an active blog documenting his experiments with AI coding tools.
Why he built it
Zechner got frustrated with existing agents injecting context “behind your back that isn’t even surfaced in the UI.” He wanted:
- Exact control over what enters the model’s context
- Full observability into every agent interaction
- Clean session format for post-processing and sharing
Most coding agents fail on all three. They hide system prompts, spawn invisible sub-agents, store sessions in opaque formats.
Four tools
Pi uses four tools:
read — Read file contents
write — Write file contents
edit — Edit file sections
bash — Execute shell commands
No specialized file operations. The model uses bash for ls, grep, find. Zechner’s take: frontier models have been “RL-trained up the wazoo” and already know what a coding agent needs. Adding more tools wastes context.
His system prompt is under 1,000 tokens. Claude Code’s is much longer.
YOLO mode
Pi runs without permission prompts:
- No pre-checking bash commands
- No confirmation for file operations
- Full filesystem access
Zechner calls security prompts “security theater.” Once an agent can write and execute code, asking permission for individual operations does nothing. Either you trust the agent or you don’t.
# Install and run
npm install -g @mariozechner/pi-coding-agent
pi
What pi excludes
| Feature | Why |
|---|---|
| Built-in to-dos | “To-do lists generally confuse models more than they help” |
| Plan mode | Use PLAN.md files instead |
| MCP servers | Token overhead. Playwright MCP uses 7-9% of context before you start |
| Sub-agents | “Using a sub-agent mid-session is a sign you didn’t plan ahead” |
| Background bash | Use tmux for better observability |
| Permission system | Security theater |
Same logic for each: keep context clean, maintain observability, avoid hidden state.
Session management
Pi lets you branch and resume conversations at any point:
# View session tree
/sessions
# Resume from a specific point
/resume <session-id>
# Branch from current state
/branch
Sessions export to HTML. The /share command uploads to secret GitHub gists. Boris Cherny’s parallel workflow uses git worktrees for similar isolation.
AGENTS.md and skills
Project instructions load from AGENTS.md files:
# AGENTS.md
## Project Context
This is a TypeScript monorepo using pnpm workspaces.
## Conventions
- Use `pnpm` not `npm`
- Tests live in `__tests__` directories
- Run `pnpm check` before committing
AGENTS.md loads hierarchically: global settings, then project overrides. No complex system prompt engineering needed. Compare this to Jesse Vincent’s Superpowers which uses a similar hierarchical skill system.
Skills are on-demand instruction files:
# Load a skill
/skill typescript-strict
# Skills are just markdown files
~/.pi/skills/typescript-strict.md
Multi-provider support
Pi supports 15+ LLM providers:
- Anthropic, OpenAI, Google, Mistral
- Groq, Cerebras, xAI, OpenRouter
- Amazon Bedrock, Ollama
- OAuth for Copilot, Gemini CLI, Claude
Switch models mid-conversation:
/model claude-sonnet-4
# or Ctrl+P to cycle
Context transfers when you switch. The agent summarizes and continues with the new model.
The TUI
Most terminal UIs flicker. Pi uses retained-mode TUI with differential rendering, so only changed portions redraw. Zechner built @mariozechner/pi-tui to solve this.
The pi-mono toolkit:
| Package | Purpose |
|---|---|
| pi-ai | Multi-provider LLM interface |
| pi-agent-core | Agent runtime with tool calling |
| pi-coding-agent | The CLI |
| pi-tui | Flicker-free terminal UI |
| pi-web-ui | Web components for chat |
| pi-mom | Slack bot |
| pi-pods | vLLM deployment |
VibeTunnel
VibeTunnel turns any browser into a terminal:
vibetunnel start
# Access from phone, tablet, anywhere
# https://your-tunnel.vibetunnel.io
The terminal session persists on your machine while you connect from anywhere.
Takeaways
| Principle | How |
|---|---|
| Minimal toolset | 4 tools handle everything |
| Transparent context | Under 1000 token system prompt |
| External state | Plans and todos in version-controlled files |
| No permission theater | Trust the agent or don’t use it |
| Session branching | Resume and fork at any point |
| Provider agnostic | Switch models mid-conversation |
Links
- Personal Blog
- shittycodingagent.ai
- GitHub: @badlogic
- pi-mono Repository
- VibeTunnel
- Twitter: @badlogicgames
- libGDX
- Pi Coding Agent Blog Post
Next: Thorsten Ball’s Agentic Coding Vision
Get updates
New guides, workflows, and AI patterns. No spam.
Thank you! You're on the list.