I spent the evening studying Mario Zechner’s blog post, “What I learned building an opinionated and minimal coding agent”. It’s a manifesto for people who are frustrated with how opaque and bloated mainstream coding agents (Claude Code, Cursor, etc.) have become.
Instead of chasing more automation, Mario argues for smaller prompts, fewer tools, and way more observability. Here’s how I’m internalizing the piece as someone who cares about deterministic AI infra.
1. Context discipline beats feature creep
Mario rebuilt his stack (pi-ai + pi-agent-core + pi-coding-agent) because he wanted to know exactly what hit the model’s context window. The entire system prompt plus tool spec fits in <1k tokens, and customization lives in plain-text AGENTS.md files. No hidden plan mode, no stealth tool injection—just transparency.
For my own agents, that means:
- Treating prompt space like budget. If it doesn’t drive decisions, cut it.
- Using documented files (
README.md,PLAN.md,TODO.md) instead of ephemeral UI toggles. - Prioritizing auditability over gadget features.
2. Four APIs are enough—if you manage the leaks
pi-ai wraps only four protocol flavors (OpenAI Completions/Responses, Anthropic Messages, Google GenAI). Everything else is adapters and relentless testing. The messy part isn’t the HTTP shape; it’s the subtle differences: where reasoning traces live, how tokens are counted, when cache IDs appear.
Key lesson: multi-model support isn’t solved by “call OpenAI-compatible endpoints and pray.” You need:
- Serialization that survives provider swaps mid-session.
- Abortable streaming all the way through tool execution.
- A registry of models with real cost metadata (including the random Groq/Mistral quirks).
3. Tool outputs should serve both the LLM and the human
pi’s tools return a dual payload: structured text for the model and richer blocks (plus attachments) for the UI. That makes deterministic rendering easy, and it encourages progressive disclosure—only load documentation when needed.
I love this pattern because it avoids building yet another XML mega-schema. It also lets me keep the UI in sync with whatever the agent actually saw, which matters for debugging hallucinated diffs.
4. Terminal-first UX still wins
Instead of hijacking the terminal viewport, pi-tui appends to the native scrollback buffer and uses retained-mode components with differential rendering. Result: minimal flicker, built-in search, and no reinvention of mouse scrolling. It feels old-school in the right way.
Action item for me: lean on terminal affordances (tmux, scrollback, search) rather than over-designing dashboards. If I need extra polish, I can layer a web UI later.
5. The deliberate omissions are the point
Mario proudly leaves out features that most agent harnesses treat as table stakes:
- No plan mode / to-do checklists – use files, not hidden state.
- No background bash – run long-lived jobs in tmux for full observability.
- No MCP servers – 10–20k tokens of tool descriptions per session is highway robbery.
- No sub-agents – if you need another agent, spawn it yourself and watch the transcript.
- YOLO by default – once an agent can run bash and hit the network, half-baked guardrails are theater. Contain it at the OS level instead.
These omissions resonate: the more invisible state you add, the harder it is to trust the outcome. I’d rather sandbox the runtime than rely on permission prompts that everyone rubber-stamps anyway.
6. Benchmarks back the philosophy
The post closes with internal benchmarks showing pi keeps up with (and sometimes beats) heavyweight harnesses despite the tiny prompt + toolset. The thesis isn’t “features are bad”; it’s “features without observability are debt.”
Why this matters for my own stack
Reading this was a healthy reminder to keep my agents boring:
- Stick to the core tools (read/write/edit/bash) unless I have a CLI I can document.
- Keep prompts short, rely on files for context, and version them like code.
- Use tmux and system logs for long-running services instead of inventing background daemons inside the agent loop.
- Sandbox at the OS/process level, not with pretend guardrails in the LLM prompt.
I’ll be referring back to this post the next time someone suggests “just add plan mode” or “ship MCP for everything.” Minimalism isn’t austerity—it’s a strategy for keeping agents predictable as we wire them into real infrastructure.