Content-Type: text/plain

When I was a teenager, I spent a lot of time on IRC. The client I used was mIRC, one of the most popular at the time. Thing is, mIRC was not just an IRC client: it was a platform.

Aside from all the usual chat-related features you'd expect, it also supported self-improvement via mIRC script. This was a dynamic, quirky, whitespace-sensitive, sigil-heavy, organically-grown scripting language that, in retrospect, I spent far too much time mastering. Because it was a relatively small language, I was determined to learn everything I could about it. The infinite sprawl of time afforded to us at that age was great.

I had a good reason though. Back then I used Windows, so I didn't have local access to a decent terminal or quick scripting environment. Thus mIRC became that tool, and while I used it to chat to my Internet Relay buddies, I'd also write aliases for common tasks, create bots (many bots), and custom features to satisfy every whim, with entire GUI interfaces for some of them1.

Fast forward a very long time and I'm now a longtime Linux user, having left both mIRC and Windows behind. Fortunately my drive to customise and build has persisted and grown unbounded. The level of customisation I apply to my machines would look, to some, like the behaviour of a madman.

$ git log --oneline | wc -l
12462

#the new world of agentic software development

Everything has changed. To call it a divisive topic is an understatement, but one way or another, agentic software development is the future whether you like it or not.

Claude Code, OpenCode, Kilocode, Codex, Cursor, Gemini CLI, qwen-code, Windsurf. If you haven't noticed, every 3 minutes a new agent harness is released. Even if you can decide on which one you want to use, it's hard to keep up with the churn of releases as they push out 4 updates an hour, and a guarantee that upgrading at any given point will leave you with something broken.

I just need it to calm down for a bit. I've spent my development career living by the principle that if I use less than some arbitrary percent of features of a piece of software, and if it's feasible to do so2, I will just write my own version. Sometimes it's good to be able to hit the pause button. My version may be simpler, more opinionated, and less configurable, but it's mine. It works exactly how I want, and I'm responsible for it. And that's good.

Back to agent harnesses. The landscape is restructured daily, but the core parts are few: chat I/O, tools, and You're absolutely right! The rest is optional. Everything else I can just create for myself, based on my needs. My ideal is not your ideal.

If that sounds good to you, then you want to use pi: a coding agent by Mario Zechner. It flips the script followed by other coding agents: tiny core, huge extensibility. The bar is high for changes to make it into core, and a lot of its releases end up simply being improvements to the extension system. The idea is that you just use pi to extend and improve itself.

Is there a feature it doesn't have that you want? Use it to write an extension. Its default system prompt is tiny, and some of it is dedicated to telling the model where to find the pi documentation. If the documentation is lacking, you can also tell it to read the pi source code to find out how to do it.

The result is a coding agent that works exactly how you want it to. Your extensions, your agent, your world. There are plenty of published extensions for inspiration, or to use as they come. However, I'd argue that you're better off using them only as inspiration and to get your clanker to customise them for your workflow, because naturally you're highly opinionated and like it your way, right? Same.


  1. I'm pretty sure I had over 10Kloc of mIRC script at one point, not counting everything that I'd deleted. 

  2. Some notable exceptions here.