AI Toolbox Turnout: Alex Ezell

AI Toolbox Turnout: Alex Ezell

Meet Alex. Survivor of 30 years building web apps. Runs agent vs agent fight club. Cannot abide dead links.

On a normal working day, what’s actually open on your machine? Walk me through your real AI stack: which models, which agents, which tools?

I like the native apps primarily so it’s Claude Code and Codex (which is ChatGPT now I guess?). I like to have them spar against each other all day, writing and reviewing each other’s code.

I also have Zed windows open to those same repos among others but I don’t use AI tooling in Zed. It’s sort of just a porthole for me to peer into a project.

When I’m using Sprites, I use Herdr as my tmux replacement so I can easily keep track of what’s happening in all of the Sprites.

Where’s your line between letting an agent run wild and grabbing the wheel yourself? What have you learned to never hand off, and what do you now delegate without a second thought? Has that line moved in the last six months, and which way?

I have a high risk tolerance in general so I let the things run free. There’s a bit of intuition around doing some early planning and investigation. But, a lot of my work is “do more of what’s already there” so pointing it at existing implementations gets me a long way toward the goal.

I find that’s where the AIs have gotten much better in the last six months. They do more work to build context with surrounding code and the system as a whole so adding a LiveView or processing some new data into an existing LiveView is very easy.

The thing I still never hand off at all, what I don’t even grant agents access to, is databases. I just don’t want my AI making database queries on its own. Even if the access is read-only, I’ve been in enough Postgres incidents to draw that line. Sure, I’ll let it write code that does queries but that’s the first thing I review when it’s done. I guess that’s where my risk threshold lives.

When did you last spin up a Sprite, and what for? What did you do before Sprites?

I spun up a Sprite to do a bunch of link checking. More specifically, I asked Claude to write a script to do that from a Sprite.

I play around in the indieweb/smallweb world and lots of folks use gif buttons to link to other sites. If you remember the webring days, that’s what I’m talking about. I wanted to easily check a site’s button links to see which are dead. That work eventually turned into deadbuttons.online which anyone can use.

Before Sprites, I would have run all of this locally from my computer. But, I don’t really have checkpoints on my computer so when I made a big refactor that went completely wrong, as I did on the Sprite, I couldn’t just go back to the previous checkpoint. In this case, the Sprite checkpoint saved me.

What’s accreted on your setup that you’d be gutted to lose? The CLAUDE.md, the skills, the hooks, the conventions, the muscle memory. What took you a while to get right?

A few of my Sprites have agents on them with very specific memories of how to diagnose issues in our environments using some specific tools they have through Connectors. That knowledge and tooling took a while to all come together for the Sprite to easily know what to reach for and when.

I’ve been looking into ways to sort of “multihome” that memory so it’s not trapped.

What are you building on the side with this stuff, the thing that has nothing to do with Fly? What does it do and how did you build it?

I mentioned Deadbuttons above. I started Precider on Sprites. Precider helps folks find the right preworkout. The site itself is a straightforward Elixir/Phoenix web app.

The real beauty of AI and Sprites was having an agent do all the research for me. I started with asking the agent to list all the pre-workout companies it could find. Then, I took that list of URLs and had the agent find all the pre-workout products with their names and prices. The agent created a small database of these which I knocked into a quick little CLI script so I could review them quickly, rejecting those which were wrong.

Once that was done, I did try to have the agent gather all the data about the ingredients and their amounts. Filtering and sorting all these products by the amount of a specific ingredient is what Precider does that didn’t really exist before. That had mixed results and in the end took a lot of manual work from me but I still used the agent to feed me the product and give me a quick way to enter the data.

Once all of that data was collected, I asked the agent to create a SQLite file of it. I stood up the first version of the site on the Sprite for testing and iteration. Once it was in a good place, I used fly launch to stand it up on a Fly Machine.

What’s the part of your workflow a colleague thinks is unhinged, or overkill, or a waste of time, but you’d defend to the death?

I think I’m fairly bog standard and probably behind the times with most of this stuff.

I would argue that the native apps have something special about them that makes the results better in some way I can’t quite put my finger on. I have no data for that. Just vibes.

What did you think these tools were useless at a while ago that you now trust them with? And the reverse: what did you overtrust and have to walk back?

Letting an agent build a GenServer a while ago was a nightmare. It just never got the lifecycle of the messages right. That has changed in the last few months. I don’t know if it’s just more exposure to that pattern or better training but in the rare cases I’m writing a GenServer, it typically starts from scratch with the agent.

On the other hand, I often let agents go a bit astray with how they manage CSS classes and componentizing the HTML for a LiveView. It always looks fine but structurally it can be quite messy and repetitive where it shouldn’t be.

What can you flat-out do now that you just couldn’t before? Not the same thing faster, a genuinely new capability.

Write Go code for CLIs. As a person who has spent almost 30 years building web apps, the idea of writing a CLI or even a native OS app was pretty far outside of my wheelhouse (things like Electron notwithstanding). But, I do it a lot now and it’s because the agent takes care of the boilerplate and the structural pieces that would have taken me too long to learn to make the ROI make sense.