<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: pi</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/pi.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2026-05-24T18:46:53+00:00</updated><author><name>Simon Willison</name></author><entry><title>Quoting Armin Ronacher</title><link href="https://simonwillison.net/2026/May/24/armin-ronacher/#atom-tag" rel="alternate"/><published>2026-05-24T18:46:53+00:00</published><updated>2026-05-24T18:46:53+00:00</updated><id>https://simonwillison.net/2026/May/24/armin-ronacher/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://lucumr.pocoo.org/2026/5/24/pi-oss/"&gt;&lt;p&gt;The most frustrating failure mode right now is that people submit issues that are not in their own voice. They contain an observed problem somewhere, but it has been thrown into a clanker and the clanker reworded it and made a huge mess of it. Typically, it was prompted so badly that the conclusions produced are more often than not inaccurate but always full of confidence. The result is complete guesswork on root causes, fake-minimal repros, suggested implementation strategies, analogies to adjacent but often the wrong code, and long lists of error classes that might or might not matter. [...]&lt;/p&gt;
&lt;p&gt;So at least personally, I increasingly want issue reports to be condensed to what the human actually observed:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I ran this command.&lt;/li&gt;
&lt;li&gt;I expected this to happen.&lt;/li&gt;
&lt;li&gt;This happened instead.&lt;/li&gt;
&lt;li&gt;Here is the exact error or log.&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://lucumr.pocoo.org/2026/5/24/pi-oss/"&gt;Armin Ronacher&lt;/a&gt;, on slop issues filed against &lt;a href="https://pi.dev/"&gt;Pi&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/armin-ronacher"&gt;armin-ronacher&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/slop"&gt;slop&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-ethics"&gt;ai-ethics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github-issues"&gt;github-issues&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pi"&gt;pi&lt;/a&gt;&lt;/p&gt;



</summary><category term="armin-ronacher"/><category term="open-source"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="slop"/><category term="ai-ethics"/><category term="github-issues"/><category term="coding-agents"/><category term="pi"/></entry><entry><title>Thoughts on slowing the fuck down</title><link href="https://simonwillison.net/2026/Mar/25/thoughts-on-slowing-the-fuck-down/#atom-tag" rel="alternate"/><published>2026-03-25T21:47:17+00:00</published><updated>2026-03-25T21:47:17+00:00</updated><id>https://simonwillison.net/2026/Mar/25/thoughts-on-slowing-the-fuck-down/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://news.ycombinator.com/item?id=47517539"&gt;Thoughts on slowing the fuck down&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Mario Zechner created the &lt;a href="https://github.com/badlogic/pi-mono"&gt;Pi agent framework&lt;/a&gt; used by OpenClaw, giving considerable credibility to his opinions on current trends in agentic engineering. He's not impressed:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We have basically given up all discipline and agency for a sort of addiction, where your highest goal is to produce the largest amount of code in the shortest amount of time. Consequences be damned.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agents and humans both make mistakes, but agent mistakes accumulate much faster:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A human is a bottleneck. A human cannot shit out 20,000 lines of code in a few hours. Even if the human creates such booboos at high frequency, there's only so many booboos the human can introduce in a codebase per day. [...]&lt;/p&gt;
&lt;p&gt;With an orchestrated army of agents, there is no bottleneck, no human pain. These tiny little harmless booboos suddenly compound at a rate that's unsustainable. You have removed yourself from the loop, so you don't even know that all the innocent booboos have formed a monster of a codebase. You only feel the pain when it's too late. [...]&lt;/p&gt;
&lt;p&gt;You have zero fucking idea what's going on because you delegated all your agency to your agents. You let them run free, and they are merchants of complexity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think Mario is exactly right about this. Agents let us move &lt;em&gt;so much faster&lt;/em&gt;, but this speed also means that changes which we would normally have considered over the course of weeks are landing in a matter of hours.&lt;/p&gt;
&lt;p&gt;It's so easy to let the codebase evolve outside of our abilities to reason clearly about it. &lt;a href="https://simonwillison.net/tags/cognitive-debt/"&gt;Cognitive debt&lt;/a&gt; is real.&lt;/p&gt;
&lt;p&gt;Mario recommends slowing down:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Give yourself time to think about what you're actually building and why. Give yourself an opportunity to say, fuck no, we don't need this. Set yourself limits on how much code you let the clanker generate per day, in line with your ability to actually review the code.&lt;/p&gt;
&lt;p&gt;Anything that defines the gestalt of your system, that is architecture, API, and so on, write it by hand. [...]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm not convinced writing by hand is the best way to address this, but it's absolutely the case that we need the discipline to find a new balance of speed v.s. mental thoroughness now that typing out the code is no longer anywhere close to being the bottleneck on writing software.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cognitive-debt"&gt;cognitive-debt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agentic-engineering"&gt;agentic-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pi"&gt;pi&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="coding-agents"/><category term="cognitive-debt"/><category term="agentic-engineering"/><category term="pi"/></entry><entry><title>Shopify/liquid: Performance: 53% faster parse+render, 61% fewer allocations</title><link href="https://simonwillison.net/2026/Mar/13/liquid/#atom-tag" rel="alternate"/><published>2026-03-13T03:44:34+00:00</published><updated>2026-03-13T03:44:34+00:00</updated><id>https://simonwillison.net/2026/Mar/13/liquid/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Shopify/liquid/pull/2056"&gt;Shopify/liquid: Performance: 53% faster parse+render, 61% fewer allocations&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
PR from Shopify CEO Tobias Lütke against Liquid, Shopify's open source Ruby template engine that was somewhat inspired by Django when Tobi first created it &lt;a href="https://simonwillison.net/2005/Nov/6/liquid/"&gt;back in 2005&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tobi found dozens of new performance micro-optimizations using a variant of &lt;a href="https://github.com/karpathy/autoresearch"&gt;autoresearch&lt;/a&gt;, Andrej Karpathy's new system for having a coding agent run hundreds of semi-autonomous experiments to find new effective techniques for training &lt;a href="https://github.com/karpathy/nanochat"&gt;nanochat&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tobi's implementation started two days ago with this &lt;a href="https://github.com/Shopify/liquid/blob/2543fdc1a101f555db208fb0deeb2e3bf1ae9e36/auto/autoresearch.md"&gt;autoresearch.md&lt;/a&gt; prompt file and an &lt;a href="https://github.com/Shopify/liquid/blob/2543fdc1a101f555db208fb0deeb2e3bf1ae9e36/auto/autoresearch.sh"&gt;autoresearch.sh&lt;/a&gt; script for the agent to run to execute the test suite and report on benchmark scores.&lt;/p&gt;
&lt;p&gt;The PR now lists &lt;a href="https://github.com/Shopify/liquid/pull/2056/commits"&gt;93 commits&lt;/a&gt; from around 120 automated experiments. The PR description lists what worked in detail - some examples:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Replaced StringScanner tokenizer with &lt;code&gt;String#byteindex&lt;/code&gt;.&lt;/strong&gt; Single-byte &lt;code&gt;byteindex&lt;/code&gt; searching is ~40% faster than regex-based &lt;code&gt;skip_until&lt;/code&gt;. This alone reduced parse time by ~12%.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pure-byte &lt;code&gt;parse_tag_token&lt;/code&gt;.&lt;/strong&gt; Eliminated the costly &lt;code&gt;StringScanner#string=&lt;/code&gt; reset that was called for every &lt;code&gt;{% %}&lt;/code&gt; token (878 times). Manual byte scanning for tag name + markup extraction is faster than resetting and re-scanning via StringScanner. [...]&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cached small integer &lt;code&gt;to_s&lt;/code&gt;.&lt;/strong&gt; Pre-computed frozen strings for 0-999 avoid 267 &lt;code&gt;Integer#to_s&lt;/code&gt; allocations per render.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;This all added up to a 53% improvement on benchmarks - truly impressive for a codebase that's been tweaked by hundreds of contributors over 20 years.&lt;/p&gt;
&lt;p&gt;I think this illustrates a number of interesting ideas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Having a robust test suite - in this case 974 unit tests - is a &lt;em&gt;massive unlock&lt;/em&gt; for working with coding agents. This kind of research effort would not be possible without first having a tried and tested suite of tests.&lt;/li&gt;
&lt;li&gt;The autoresearch pattern - where an agent brainstorms a multitude of potential improvements and then experiments with them one at a time - is really effective.&lt;/li&gt;
&lt;li&gt;If you provide an agent with a benchmarking script "make it faster" becomes an actionable goal.&lt;/li&gt;
&lt;li&gt;CEOs can code again! Tobi has always been more hands-on than most, but this is a much more significant contribution than anyone would expect from the leader of a company with 7,500+ employees. I've seen this pattern play out a lot over the past few months: coding agents make it feasible for people in high-interruption roles to productively work with code again.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here's Tobi's &lt;a href="https://github.com/tobi"&gt;GitHub contribution graph&lt;/a&gt; for the past year, showing a significant uptick following that &lt;a href="https://simonwillison.net/tags/november-2025-inflection/"&gt;November 2025 inflection point&lt;/a&gt; when coding agents got really good.&lt;/p&gt;
&lt;p&gt;&lt;img alt="1,658 contributions in the last year - scattered lightly through Jun, Aug, Sep, Oct and Nov and then picking up significantly in Dec, Jan, and Feb." src="https://static.simonwillison.net/static/2026/tobi-contribs.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;He used &lt;a href="https://github.com/badlogic/pi-mono"&gt;Pi&lt;/a&gt; as the coding agent and released a new &lt;a href="https://github.com/davebcn87/pi-autoresearch"&gt;pi-autoresearch&lt;/a&gt; plugin in collaboration with David Cortés, which maintains state in an &lt;code&gt;autoresearch.jsonl&lt;/code&gt; file &lt;a href="https://github.com/Shopify/liquid/blob/3182b7c1b3758b0f5fe2d0fcc71a48bbcb11c946/autoresearch.jsonl"&gt;like this one&lt;/a&gt;.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://x.com/tobi/status/2032212531846971413"&gt;@tobi&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rails"&gt;rails&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agentic-engineering"&gt;agentic-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/november-2025-inflection"&gt;november-2025-inflection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tobias-lutke"&gt;tobias-lutke&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/autoresearch"&gt;autoresearch&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pi"&gt;pi&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="performance"/><category term="rails"/><category term="ruby"/><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="coding-agents"/><category term="agentic-engineering"/><category term="november-2025-inflection"/><category term="tobias-lutke"/><category term="autoresearch"/><category term="pi"/></entry></feed>