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, self-modifying AI coding agent, that is the foundation upon which OpenClaw (created by Peter Steinberger) is built. Meanwhile, Armin Ronacher is the creator of Flask, and a longtime user of Pi. The pair are also friends.
I sat down with Mario and Armin for the latest episode of the Pragmatic Engineer Podcast for an interesting conversation about AI and their reservations about it – even though both are heavily invested in building AI-powered tools.
Mario explains why he built Pi, and gives his take on why it has become so popular. Armin walks us through how he uses AI tools, including building a game with Pi, and why he always puts human judgment firmly at the heart of his approach.
We cover the risks of over-automation, the limits of agentic workflows, and why strong engineers with informed judgment still matter. We also get into the challenges of working with code written by non-engineers, and whether open source can withstand a tidal wave of agent-generated code.
—
Timestamps
(00:00) Intro
(07:30) How Mario, Armin, and Peter Steinberger met(15:15) How 30 dev teams use AI agents: learnings
(21:50) The importance of judgment
(24:26) Challenges when non-engineers write code
(28:30) Downsides of over-automation
(32:18) Pi
(48:09) OpenClaw + Pi
(50:54) “Clankers”
(57:32) Open source and AI
(1:00:22) Complexity as the enemy
(1:02:50) Building an AI-native startup
(1:11:52) “Slow the F down”
(1:16:40) MCPs vs. CLI
(1:25:03) Predictions and staying up to date
—
The Pragmatic Engineer deepdives relevant for this episode:
• The impact of AI on software engineers in 2026: key trends
• Cycles of disruption in the tech industry
• The AI engineering stack
• The creator of OpenClaw: "I ship code that I don't read"
• What is inference engineering? Deepdive
—
Production and marketing by https://penname.co/. For inquiries about sponsoring the podcast, email podcast@pragmaticengineer.com.
Get full access to The Pragmatic Engineer at newsletter.pragmaticengineer.com/subscribe
976: Pi - The AI Harness That Powers OpenClaw W/ Armin Ronacher & Mario Zechner
Wes and Scott talk with Armin Ronacher and Mario Zechner about PI, a minimalist agent harness powering tools like OpenClaw. They unpack why Bash is “all you need,” the risks of agents, workflow adaptability, and where AI coding agents are actually headed.
Show Notes
00:00 Welcome to Syntax!
03:28 What is Pi, and why does it matter?
OpenClaw
05:54 What do we actually mean by “agents”?
11:04 Prompt injection: how LLMs get tricked
14:19 Is Claude Cowork actually secure?
22:01 How Armin and Mario use agents day to day
26:37 Brought to you by Sentry.io
27:25 Memory and search: teaching agents to remember
33:04 Do coding agents even need memory?
34:36 “Bash is all you need”
37:21 Adding power: how agents learn new tricks
47:02 Tools and models Armin and Mario are using right now
54:15 Sick picks + shameless plugs
Sick Picks
Mario: Cards for Ukraine
Armin: Pro-Ject Audio Turntable
Shameless Plugs
Armin:
Thorsten Ball Newsletter
Simon Willison
Hit us up on Socials!
Syntax: X Instagram Tiktok LinkedIn Threads
Wes: X Instagram Tiktok LinkedIn Threads
Scott: X Instagram Tiktok LinkedIn Threads
Randy: X Instagram YouTube Threads
Python, Go, Rust, TypeScript and AI with Armin Ronacher
Brought to You By:
• Statsig — The unified platform for flags, analytics, experiments, and more. Most teams end up in this situation: ship a feature to 10% of users, wait a week, check three different tools, try to correlate the data, and you’re still unsure if it worked. The problem is that each tool has its own user identification and segmentation logic. Statsig solved this problem by building everything within a unified platform. Check out Statsig.
• Linear – The system for modern product development. In the episode, Armin talks about how he uses an army of “AI interns” at his startup. With Linear, you can easily do the same: Linear’s Cursor integration lets you add Cursor as an agent to your workspace. This agent then works alongside you and your team to make code changes or answer questions. You’ve got to try it out: give Linear a spin and see how it integrates with Cursor.
—
Armin Ronacher is the creator of the Flask framework for Python, was one of the first engineers hired at Sentry, and now the co-founder of a new startup. He has spent his career thinking deeply about how tools shape the way we build software.
In this episode of The Pragmatic Engineer Podcast, he joins me to talk about how programming languages compare, why Rust may not be ideal for early-stage startups, and how AI tools are transforming the way engineers work. Armin shares his view on what continues to make certain languages worth learning, and how agentic coding is driving people to work more, sometimes to their own detriment.
We also discuss:
• Why the Python 2 to 3 migration was more challenging than expected
• How Python, Go, Rust, and TypeScript stack up for different kinds of work
• How AI tools are changing the need for unified codebases
• What Armin learned about error handling from his time at Sentry
• And much more
Jump to interesting parts:
• (06:53) How Python, Go, and Rust stack up and when to use each one
• (30:08) Why Armin has changed his mind about AI tools
• (50:32) How important are language choices from an error-handling perspective?
—
Timestamps
(00:00) Intro
(01:34) Why the Python 2 to 3 migration created so many challenges
(06:53) How Python, Go, and Rust stack up and when to use each one
(08:35) The friction points that make Rust a bad fit for startups
(12:28) How Armin thinks about choosing a language for building a startup
(22:33) How AI is impacting the need for unified code bases
(24:19) The use cases where AI coding tools excel
(30:08) Why Armin has changed his mind about AI tools
(38:04) Why different programming languages still matter but may not in an AI-driven future
(42:13) Why agentic coding is driving people to work more and why that’s not always good
(47:41) Armin’s error-handling takeaways from working at Sentry
(50:32) How important is language choice from an error-handling perspective
(56:02) Why the current SDLC still doesn’t prioritize error handling
(1:04:18) The challenges language designers face
(1:05:40) What Armin learned from working in startups and who thrives in that environment
(1:11:39) Rapid fire round
—
The Pragmatic Engineer deepdives relevant for this episode:
—
Production and marketing by https://penname.co/. For inquiries about sponsoring the podcast, email podcast@pragmaticengineer.com.
Get full access to The Pragmatic Engineer at newsletter.pragmaticengineer.com/subscribe
Supper Club × Messaging Queues and Workers with Armin Ronacher
In this supper club episode of Syntax, Wes and Scott talk with Armin Ronacher about his contributions to open source, queues and messaging in apps, scaling up a queue, and how it all works at Sentry.
Show Notes 00:35 Welcome
01:49 Who is Armin Ronacher?
Armin Ronacher
mitsuhiko (Armin Ronacher)
Armin Ronacher (@mitsuhiko)
Armin Ronacher
Armin Ronacher
Apache Kafka
04:11 What are queues and what are they used for?
08:02 Do you listen or poll for updates in the queue?
12:49 Does this help when a provider goes down?
18:31 How do you architect a queue?
20:20 How does it scale up?
27:05 How does Sentry manage all the data flowing in from events?
Redis Message Broker | Redis Enterprise
Messaging that just works — RabbitMQ
Using RabbitMQ — Celery 5.3.1 documentation
33:45 How do you visualize the data?
37:15 Edge case that Sentry had to fix
40:22 How are you using Rust?
Rust Programming Language
43:32 Why is Python so popular in the AI space?
45:17 What do you think about JavaScript on the server?
48:02 Supper Club questions
50:44 How do you stay motivated with programming?
××× SIIIIICK ××× PIIIICKS ××× Bilderbuch
Bilderbuch on Spotify
Shameless Plugs Rye - An Experimental Package Management Solution for Python
Tweet us your tasty treats Scott’s Instagram
LevelUpTutorials Instagram
Wes’ Instagram
Wes’ Twitter
Wes’ Facebook
Scott’s Twitter
Make sure to include @SyntaxFM in your tweets
Wes Bos on Bluesky
Scott on Bluesky
Syntax on Bluesky
Ten Years of Flask: Conversation With Creator Armin Ronacher
<p>This week on the show we have Armin Ronacher to talk about the first 10 years of Flask. Armin talks about the origins of Flask and the components that make up the framework. He talks about what goes into documenting a framework or API. He also talks about the community working on the ongoing development of Flask.</p>
<p>He also shares his thoughts about Python, and how it contrasts with Rust and TypeScript. Armin talks about what he would do differently if he were to start development of a project like Flask now. </p>
<div class="alert alert-primary" role="alert">
<p><strong>Course Spotlight:</strong> <a href="https://realpython.com/courses/documenting-python-code/">Documenting Python Code: A Complete Guide</a></p>
<p>This course will get you up to speed with how to document your Python code. Documenting your code is an important step to help developers and users fully understand its usage and purpose.</p>
</div>
<p>Topics:</p>
<ul>
<li>00:00:00 – Introduction </li>
<li>00:01:21 – Director of Engineering at Sentry</li>
<li>00:07:27 – How much are you currently involved with Flask?</li>
<li>00:08:32 – Are you still using both Python and Rust currently?</li>
<li>00:11:37 – The origins of Flask </li>
<li>00:19:14 – Initial reactions and focus</li>
<li>00:21:26 – Where has Jinja use shifted?</li>
<li>00:23:23 – Flask usage trends</li>
<li>00:25:44 – The Pallets Projects name</li>
<li>00:29:08 – Flask version numbers</li>
<li>00:34:21 – Video Course Spotlight</li>
<li>00:35:21 – The community working on Flask</li>
<li>00:38:18 – Thoughts on type checking</li>
<li>00:41:40 – Flask’s documentation</li>
<li>00:43:26 – Thoughts on API documentation</li>
<li>00:47:27 – What would you change if you started from scratch?</li>
<li>00:49:58 – Listener question about using Python with WordPress</li>
<li>00:58:15 – Any suggestions of a Python project source code to read? </li>
<li>01:00:13 – Revisit - What would you change if you started from scratch?</li>
<li>01:03:17 – Thoughts on the current path of Python</li>
<li>01:06:20 – What are you excited about in the world of Python?</li>
<li>01:07:44 – What do you want to learn next?</li>
<li>01:11:35 – Thoughts on conferences and speaking</li>
<li>01:16:19 – Thanks and Conclusion </li>
</ul>
<p>Show links:</p>
<ul>
<li><a href="https://lucumr.pocoo.org">Armin Ronacher’s Thoughts and Writings</a></li>
<li><a href="https://sentry.io/welcome/">Sentry</a></li>
<li><a href="https://palletsprojects.com/p/flask/">Flask: A lightweight WSGI web application framework</a></li>
<li><a href="https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world">The Flask Mega-Tutorial: Miguel Grinberg</a></li>
<li><a href="https://palletsprojects.com/p/itsdangerous/">ItsDangerous:It’s dangerous, so better sign this</a> </li>
<li><a href="https://www.pocoo.org">Pocoo</a></li>
<li><a href="https://palletsprojects.com/p/jinja/">Jinja2: Full-featured template engine for Python</a></li>
<li><a href="https://palletsprojects.com/p/werkzeug/">Werkzeug: Comprehensive WSGI web application library</a></li>
<li><a href="https://palletsprojects.com/p/click/">Click: Creating beautiful command line interfaces in a composable way</a></li>
<li><a href="https://palletsprojects.com">The Pallets Projects: A collection of Python web development libraries</a></li>
<li><a href="https://en.wikipedia.org/wiki/EUR-pallet">Euro-pallet: Wikipedia article</a></li>
<li><a href="https://pygments.org">Pygments: Python syntax highlighter</a></li>
<li><a href="https://www.sphinx-doc.org/en/master/">Sphinx: Python Documentation Generator</a></li>
<li><a href="https://realpython.com/python-type-checking/">Python Type Checking: Real Python Guide</a></li>
<li><a href="https://www.typescriptlang.org">Typescript: JavaScript that scales</a> </li>
<li><a href="http://mypy-lang.org">mypy: Optional static type checker for Python</a></li>
<li><a href="https://www.rust-lang.org">Rust: A language empowering everyone to build reliable and efficient software</a></li>
<li><a href="https://webassembly.org">Web Assembly: A binary instruction format for a stack-based virtual machine</a></li>
</ul>
<p>Level up your Python skills with our expert-led courses:</p>
<ul>
<li><a href="https://realpython.com/courses/intermediate-project-ideas/">Grow Your Python Portfolio With 13 Intermediate Project Ideas</a></li>
<li><a href="https://realpython.com/courses/documenting-python-code/">Documenting Code in Python</a></li>
<li><a href="https://realpython.com/courses/structuring-python-application/">Structuring a Python Application</a></li>
</ul> <p><a rel="payment" href="https://realpython.com/join">Support the podcast & join our community of Pythonistas</a></p>
#177: Flask goes 1.0
See the full show notes for this episode on the website at talkpython.fm/177
#160: Lektor: Beautiful websites out of flat files
See the full show notes for this episode on the website at talkpython.fm/160
#13: Flask web framework and much, much more
See the full show notes for this episode on the website at talkpython.fm/13