The family computer
My dad bought a computer in 1989. He didn't have a plan for it and never really used it. I think he felt that buying a computer was the proper modern thing to do, and he was able to afford it. It was one of the best things that ever happened to me.
It was a Victor V286C running MS-DOS 3.3. A few years later we installed Windows 3.0 but from the start, all the software had text-based interfaces or 80s style custom graphics. A family friend installed some programs and I started exploring them. I taught myself English because it was necessary to interact with DOS programs. At some point I found QBasic and was hooked. I dabbled with programming for most of my childhood.
I lost my way
In my teens I drifted away from computers. I ditched my earlier plans of going to engineering school, instead focusing mostly on philosophy during my university years. After a decade of non-computer focus I was 24 and started thinking about getting a career. I remembered that I used to love computers when I was a kid, and resolved to work with them again.
My first rodeo
After taking a low-level job at a software company, I started thinking about starting one of my own. That company was founded in 2008 and it really got going in 2010. Among other things, we built software for a number of government agencies. It was great, but it was not what I had hoped for.
We were building a platform of data management tools. But really, we were building bespoke software solutions. All our paid work was in reality big consulting contracts, arranged through enterprise-style sales, largely through my pre-existing networks. It was in many ways the classic situation of a consulting company trying but failing to transition to a product company.
For many reasons, it was not meant to be. I drifted off to other projects. My co-founders transformed the company into a server operations outfit that exists to this day and has its own data center in Sweden.
Astray again
I soon switched course completely and started working on a series of idealistic low-profit ventures. It was me and my new girlfriend, anarchists on an adventure. We lived abroad for ten years, in three different countries, before finally settling down in the countryside to raise our kids. We started a bunch of niche projects, often software-driven but I mostly outsourced the programming work.
In late 2016 there was a hard-to-assign programming task in one of these projects and I jumped at it. Got to break out Ruby again and do some intricate API wrangling. It was a lot of fun and I felt more fulfilled than I had in years. I started trying to get back into programming.
This time, I was determined not to be the 'non-technical co-founder'. I wanted to be the technical co-founder or the solo founder, so I would get to work with code and do as little CEO-style work as possible.
The clankers
Five years into my quest to reinvent myself as a software builder, LLMs came onto the scene. In november 2022, while experimenting with the first version of ChatGPT, I tried asking it to write some code and when it came back with a fully working script, I basically dropped everything else to go as deep as possible into building software with LLM support.
I've been at it ever since. From the beginning, I focused on the AI angle. I was not trying to get the LLMs to fit into any existing workflows. I was trying to figure out what the LLMs were good at, and build new workflows around their strengths. In my personal estimation I have been at the cutting edge of such things ever since.
Meta tools
I was always interested in the meta-aspects of programming. Even during times when I was not coding day-to-day, my idea of a good relaxing time was reading about programming theory and language design and I was always very interested in tooling and automation. So when LLMs came around, I naturally started thinking about building my own tools for working with them.
My first attempt was chat client, a better version of ChatGPT, built in early 2023. The first version, the one I liked the best, was a TUI, a Ruby app which wrapped ncurses and implemented a smooth chat UX. For me it was almost perfect, far superior to the ChatGPT web app. However, the ncurses-wrapping scheme turned out to be a dead end. I then rebuilt the whole thing as a Rails app.
Both versions of this app had some solid improvements over the standard way of implementing LLM chat systems. The best idea of the whole project had to do with context management, a simple but very effective way of sorting through the full context buffer and selecting the parts of it which would be in the context of upcoming calls. To this day I'm proud of this idea and I often think about it and miss it when using my current daily drivers Claude Code, Codex, OpenCode etc.
More harnesses
During 2023, I spent some time building robo-journalism systems and had companies standing in line to use my news article production pipeline, integrated in their sites with CMS plugins. As an extension of this effort, in 2024 I built a more general agent orchestration systems, where the news article production was implemented as a combined effort of a number of more general agents. The original robo-journalism API was a Sinatra app, the 2024 agent system was a Rails app.
In 2025 I built my first proper agent harness with tool use etc. Built it as a Rust app with Ratatui, and the first parts of my long-running personal TUI toolkit was extracted from this app, called Nexus. Nexus was something like an agent-multiplexer, there was a focus on having multiple agent sessions running simultaneously, all instances of the Nexus harness, with advanced features for inspecting the work of agents and subagents, e.g. attaching to a subprocesses spawned by an agent with a built-in terminal system, which I implemented by rolling my own 'terminal emulator as a library' because this was before libghostty.
Racing the labs
Throughout all these experiments, it happened several times that I had some good idea and it worked great in my harness, and then a few months later Claude Code or Codex or both implemented the same thing. Not a big splash, just a line item in some release. This happened again and again. It was a hopeless proposition to keep up with hyperscaling world-eating AI behemoths who could have hundreds or thousands of people working on their harnesses.
I can do my own thing just to learn about the tech, and I keep doing that. But the key difference for me is dog-fooding. I never got to the point of daily-driving Nexus for my personal coding needs, because Claude Code was so much better. Using Nexus felt indefensible because I had real work to do.
(This is different today, because I'm daily-driving Gantry, and I'm not tempted to go back to having Claude Code or Codex doing what I use Gantry for.)
An aside about ideas
While some of my ideas were quickly replicated by the big players, some of my best ideas, in my own estimation, were things that no one else seems to have even tried, to this day. This includes my context buffer management system from 2023 and my terminal emulation approach from 2025. Both are simple ideas and I feel other programmers must have reinvent them at various points.
This says something about how young and open-ended this field is. There are so many possible directions for everything to go, thousands of very different good ways to build with coding agents, countless millions of good ideas that no one has yet stumbled upon.
Just one more
After Nexus, I promised myself to not make another agent harness. I knew I would be tempted, but I said to myself: I have real work to do, I'm trying to build real products and make real clients happy enough to hire me again, so my focus should not be on meta-perspectives and building tools.
But here I am again, building an agent meta-harness... Just one more agent harness, bro. I promise, it will be different this time. Please, just one more harness...