The Pragmatic Engineer
The Pragmatic Engineer

Building Pi, and what makes self-modifying software so fascinating

Brought to You By: • Statsig — ⁠ The unified platform for flags, analytics, experiments, and more. • Sonar – The makers of SonarQube, the industry standard for automated code review • WorkOS – Everything you need to make your app enterprise ready. — Mario Zechner is the creator of Pi, a minimalist,

Featured Speakers

Armin Ronacher GuestMario Zechner Guest

Topics Discussed

Episode Summary

Executive Summary: Mario Zechner and Armin Ronacher argue that AI coding agents are powerful but destabilizing: they accelerate output, amplify complexity, and erode software quality unless humans keep strong review and design discipline. The episode centers on Pi, a minimalist self-modifiable agent built to stay stable and extensible, plus the case for CLIs over MCP, the need for friction and bottlenecks, and concerns that hype is outpacing maintainable engineering.

Main Topics: Pi’s origin as a minimalist self-modifiable coding agent: Mario explains building Pi after frustration with existing harnesses: he wanted a stable, transparent, extensible agent with a tiny core that can modify itself through hook points and custom tools. Why agents increase complexity and reduce quality: Both speakers argue agents produce more code than humans can review, add failure states, and tend to worsen codebases unless engineers deliberately refactor and enforce guardrails. Human judgment, pain, and friction as quality controls: They contrast human engineers—who feel pain, learn from mistakes, and say no—with agents, which do not learn in the same way and need deliberate friction to prevent runaway complexity. MCP versus CLI and the role of code execution: They discuss why MCP is useful in some enterprise contexts but often too complex and non-composable for agent workflows, while CLIs and direct code execution better support piping, composition, and control. Open source under agentic pressure: They describe how autonomous PRs/issues are flooding repositories, forcing maintainers to create bottlenecks and filters; they worry about maintaining trust, intent, and responsibility in open source. Self-modifying software as a broader pattern: The conversation expands Pi’s design into a larger thesis: future software may increasingly adapt itself to user needs and workflows, with agents modifying their own tooling and interfaces. Hype, prediction limits, and slowing down: Both reject the ‘dark factory’ narrative and argue the industry should slow down, use agents for painful repetitive work, and focus human effort on architecture, product direction, and quality.

Key Arguments: Pi succeeded because it minimized hidden behavior and kept deterministic parts stable, unlike larger agent tools that changed prompts and workflows behind users’ backs. Agents can generate useful code, but they also generate more bugs, more review load, and more complexity than humans can safely absorb without stronger process controls. Humans feel pain when a codebase becomes unwieldy; that pain drives refactoring, simplification, and better architecture, whereas agents keep adding complexity. There is no equivalent to human learning or restraint in agents; memory prompts are not the same as experience or battle scars. Friction is not always bad—sometimes it is a deliberate safeguard that prevents dangerous changes and forces reflection before shipping. MCP has value, especially for consumer apps and enterprises, but it often acts like a verbose wrapper around code execution and is hard to compose compared with CLIs and pipes. Open source may not fundamentally change in quality, but the volume of low-quality or disposable AI-generated contributions will force maintainers to build stronger bottlenecks and filters. The most effective future use of agents is probably to offload annoying, repetitive work so humans can focus on hard decisions, not to replace review and responsibility. Self-modifiable tools are useful because the right harness depends on the task; a game, a web app, and an issue-processing workflow should not use the same agent setup. The current industry trajectory risks optimizing for throughput and token volume rather than maintainability, reliability, and user value.

Data Points: Engineering teams interviewed: 30+ - Armin discussed findings from interviewing more than 30 engineering teams about how they use AI agents. Pi core tools: 4 - Mario described Pi’s basic capabilities as read, write, edit, and bash. Context window mentioned: ~200,000 tokens - Used to illustrate how a 600-line codebase can still exceed what an agent can effectively ingest once complexity grows. Codebase growth vs. human review capacity: 10x faster code generation - Armin argued agents can produce far more code than humans can review at the same pace. Human review output reference: 1.5k lines/day - Armin contrasted typical human output with agent-generated volume to show review bottlenecks. OpenClaw/GitHub issue scale: tens of thousands of issues - Mario referenced the overload faced by OpenClaw from agent-generated issues and PRs. OpenClaw filtering rule: 1 screen of text - Human contributors are asked to summarize issues in a short, screen-length description before being accepted. Human onboarding / trust horizon: 6 months to 1 year - Armin compared human code trust-building to the lack of learning in agents. Time to agent adoption click: 2 to 3 weeks - Mario said agents often only make sense after a few weeks of real use and learning. Alternative timeline reference: End of 2024 to October 2025 - Mario said coding agents became practically useful after tool calling and later agentic search matured in this period.

Pivotal Quotes: "If I have a 600 lines of code bis, and my agent can, at best, be effective up to a context window size. Around 200,000 tokens. How much of the code can the agent see?" — Armin Ronacher: Armin explains why complexity defeats agent effectiveness as codebases and context windows mismatch. "I want my hammer to be stable. I don't want my hammer to break a different spot every day." — Mario Zechner: Mario describes why he built Pi after Claude Code began changing hidden behavior and breaking workflows. "The agent really does not care." — Armin Ronacher: Used to contrast human engineers’ future-oriented restraint with agent-generated code that ignores long-term maintainability.

Implications: Listeners should expect more AI-assisted coding, but also more review burden, complexity, and maintenance pain. The winners will be teams that keep humans in the loop, preserve friction where it matters, and use agents for specific, bounded tasks rather than unchecked automation.

🔓 Sign Up for Unlimited Episode Search

About The Pragmatic Engineer

View all episodes from The Pragmatic Engineer